@ecan-bi/indicator-library 1.1.33 → 1.1.35

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-7adb97fb.mjs","sources":["../node_modules/@ant-design/icons-svg/es/asn/AppstoreAddOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/AppstoreAddOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CloseOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CodeOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CodeOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CopyOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/CopyOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DeleteOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DeleteOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/DoubleRightOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/DoubleRightOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/InfoCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/InfoCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/MenuOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/MenuOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/MinusCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/MinusCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PlusCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PlusCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/PlusOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/PlusOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/QuestionCircleOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/QuestionCircleOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ReloadOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/ReloadOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/SettingOutlined.js","../node_modules/@ant-design/icons-vue/es/icons/SettingOutlined.js","../src/directives/focus.ts","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomSortModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomSortModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomGroupModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/CustomGroupModal.vue","../node_modules/nanoid/index.prod.js","../node_modules/dayjs/plugin/quarterOfYear.js","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/Condition.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/Condition.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/ConditionList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/ConditionList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/TruncationList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/TruncationList.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/FilterModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/filter-modal/FilterModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/config-name/ConfigName.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/config-name/ConfigName.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/sort-by-cpnt/SortByCpnt.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/sort-by-cpnt/SortByCpnt.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/dim-by-count/DimByCount.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/dim-by-count/DimByCount.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/FormulaCalculation.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/FormulaCalculation.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/CalculationModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/calculation-modal/CalculationModal.vue","../src/indicator/indicator-library/data-config/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/VariableItem.vue","../src/indicator/indicator-library/data-config/variable-group/variable-utils.ts","../src/indicator/indicator-library/data-config/variable-group/VariableGroup.vue","../src/indicator/indicator-library/data-config/variable-group/VariableGroup.vue","../src/indicator/indicator-library/data-config/variable-group/VariableModal.vue","../src/indicator/indicator-library/data-config/variable-group/VariableModal.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/DataConfigCard.vue","../src/indicator/indicator-library/data-config/data-config-group/data-config-card/DataConfigCard.vue","../src/indicator/indicator-library/data-config/data-config-group/data.ts","../src/indicator/indicator-library/data-config/data-config-group/DataConfigGroup.vue","../src/indicator/indicator-library/data-config/data-config-group/DataConfigGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/data.ts","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/data.tsx","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input/Input.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input/Input.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input-number/InputNumber.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/input-number/InputNumber.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/radio-group/RadioGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/select/Select.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/select/Select.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/switch/Switch.vue","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/vue-pick-colors/dist/index.esm.js","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-pick/ColorPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-pick/ColorPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-group-pick/ColorGroupPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/color-group-pick/ColorGroupPick.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/form-group/FormGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/form-group/FormGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/textarea/Textarea.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/textarea/Textarea.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/slider/Slider.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/slider/Slider.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/PropsToForm.vue","../src/indicator/indicator-library/data-config/style-config-group/props-to-form/PropsToForm.vue","../src/indicator/editor/Editor.vue","../src/indicator/editor/Editor.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/Condition.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/Condition.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionList.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionList.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionWrap.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionWrap.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionsTable.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/components/ConditionsTable.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/TableColumnConfig.vue","../src/indicator/indicator-library/data-config/style-config-group/table-column-config/TableColumnConfig.vue","../src/indicator/indicator-library/data-config/style-config-group/indicator-container/IndicatorContainer.vue","../src/indicator/indicator-library/data-config/style-config-group/indicator-container/IndicatorContainer.vue","../src/indicator/indicator-library/data-config/style-config-group/StyleConfigGroup.vue","../src/indicator/indicator-library/data-config/style-config-group/StyleConfigGroup.vue","../src/indicator/indicator-library/data-config/control-group/ControlCard.vue","../src/indicator/indicator-library/data-config/control-group/ControlCard.vue","../src/indicator/indicator-library/data-config/control-group/ControlList.vue","../src/indicator/indicator-library/data-config/control-group/ControlList.vue","../src/indicator/indicator-library/data-config/control-group/ControlGroup.vue","../src/indicator/indicator-library/data-config/control-group/ControlGroup.vue","../src/indicator/indicator-library/data-config/drill-group/DrillGroup.vue","../src/indicator/indicator-library/data-config/drill-group/DrillGroup.vue","../src/indicator/table-graph/TableGraph.vue","../src/indicator/table-graph/TableGraph.vue","../src/indicator/indicator-library/data-config/DataConfig.vue","../src/indicator/indicator-library/data-config/DataConfig.vue"],"sourcesContent":["// This icon file is generated automatically.\nvar AppstoreAddOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zm52 132H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200zM424 712H296V584c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v128H104c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h128v128c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V776h128c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"appstore-add\", \"theme\": \"outlined\" };\nexport default AppstoreAddOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport AppstoreAddOutlinedSvg from \"@ant-design/icons-svg/es/asn/AppstoreAddOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar AppstoreAddOutlined = function AppstoreAddOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": AppstoreAddOutlinedSvg\n }), null);\n};\n\nAppstoreAddOutlined.displayName = 'AppstoreAddOutlined';\nAppstoreAddOutlined.inheritAttrs = false;\nexport default AppstoreAddOutlined;","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CloseOutlined = function CloseOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CloseOutlinedSvg\n }), null);\n};\n\nCloseOutlined.displayName = 'CloseOutlined';\nCloseOutlined.inheritAttrs = false;\nexport default CloseOutlined;","// This icon file is generated automatically.\nvar CodeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z\" } }] }, \"name\": \"code\", \"theme\": \"outlined\" };\nexport default CodeOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CodeOutlinedSvg from \"@ant-design/icons-svg/es/asn/CodeOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CodeOutlined = function CodeOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CodeOutlinedSvg\n }), null);\n};\n\nCodeOutlined.displayName = 'CodeOutlined';\nCodeOutlined.inheritAttrs = false;\nexport default CodeOutlined;","// This icon file is generated automatically.\nvar CopyOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z\" } }] }, \"name\": \"copy\", \"theme\": \"outlined\" };\nexport default CopyOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport CopyOutlinedSvg from \"@ant-design/icons-svg/es/asn/CopyOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CopyOutlined = function CopyOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": CopyOutlinedSvg\n }), null);\n};\n\nCopyOutlined.displayName = 'CopyOutlined';\nCopyOutlined.inheritAttrs = false;\nexport default CopyOutlined;","// This icon file is generated automatically.\nvar DeleteOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z\" } }] }, \"name\": \"delete\", \"theme\": \"outlined\" };\nexport default DeleteOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DeleteOutlinedSvg from \"@ant-design/icons-svg/es/asn/DeleteOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DeleteOutlined = function DeleteOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DeleteOutlinedSvg\n }), null);\n};\n\nDeleteOutlined.displayName = 'DeleteOutlined';\nDeleteOutlined.inheritAttrs = false;\nexport default DeleteOutlined;","// This icon file is generated automatically.\nvar DoubleRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z\" } }] }, \"name\": \"double-right\", \"theme\": \"outlined\" };\nexport default DoubleRightOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport DoubleRightOutlinedSvg from \"@ant-design/icons-svg/es/asn/DoubleRightOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DoubleRightOutlined = function DoubleRightOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": DoubleRightOutlinedSvg\n }), null);\n};\n\nDoubleRightOutlined.displayName = 'DoubleRightOutlined';\nDoubleRightOutlined.inheritAttrs = false;\nexport default DoubleRightOutlined;","// This icon file is generated automatically.\nvar InfoCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"info-circle\", \"theme\": \"outlined\" };\nexport default InfoCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport InfoCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/InfoCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar InfoCircleOutlined = function InfoCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": InfoCircleOutlinedSvg\n }), null);\n};\n\nInfoCircleOutlined.displayName = 'InfoCircleOutlined';\nInfoCircleOutlined.inheritAttrs = false;\nexport default InfoCircleOutlined;","// This icon file is generated automatically.\nvar MenuOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M904 160H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0 624H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8zm0-312H120c-4.4 0-8 3.6-8 8v64c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-64c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"menu\", \"theme\": \"outlined\" };\nexport default MenuOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport MenuOutlinedSvg from \"@ant-design/icons-svg/es/asn/MenuOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar MenuOutlined = function MenuOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": MenuOutlinedSvg\n }), null);\n};\n\nMenuOutlined.displayName = 'MenuOutlined';\nMenuOutlined.inheritAttrs = false;\nexport default MenuOutlined;","// This icon file is generated automatically.\nvar MinusCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"minus-circle\", \"theme\": \"outlined\" };\nexport default MinusCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport MinusCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/MinusCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar MinusCircleOutlined = function MinusCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": MinusCircleOutlinedSvg\n }), null);\n};\n\nMinusCircleOutlined.displayName = 'MinusCircleOutlined';\nMinusCircleOutlined.inheritAttrs = false;\nexport default MinusCircleOutlined;","// This icon file is generated automatically.\nvar PlusCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"plus-circle\", \"theme\": \"outlined\" };\nexport default PlusCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PlusCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/PlusCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PlusCircleOutlined = function PlusCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PlusCircleOutlinedSvg\n }), null);\n};\n\nPlusCircleOutlined.displayName = 'PlusCircleOutlined';\nPlusCircleOutlined.inheritAttrs = false;\nexport default PlusCircleOutlined;","// This icon file is generated automatically.\nvar PlusOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z\" } }] }, \"name\": \"plus\", \"theme\": \"outlined\" };\nexport default PlusOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport PlusOutlinedSvg from \"@ant-design/icons-svg/es/asn/PlusOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar PlusOutlined = function PlusOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": PlusOutlinedSvg\n }), null);\n};\n\nPlusOutlined.displayName = 'PlusOutlined';\nPlusOutlined.inheritAttrs = false;\nexport default PlusOutlined;","// This icon file is generated automatically.\nvar QuestionCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z\" } }] }, \"name\": \"question-circle\", \"theme\": \"outlined\" };\nexport default QuestionCircleOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport QuestionCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/QuestionCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar QuestionCircleOutlined = function QuestionCircleOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": QuestionCircleOutlinedSvg\n }), null);\n};\n\nQuestionCircleOutlined.displayName = 'QuestionCircleOutlined';\nQuestionCircleOutlined.inheritAttrs = false;\nexport default QuestionCircleOutlined;","// This icon file is generated automatically.\nvar ReloadOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z\" } }] }, \"name\": \"reload\", \"theme\": \"outlined\" };\nexport default ReloadOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport ReloadOutlinedSvg from \"@ant-design/icons-svg/es/asn/ReloadOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ReloadOutlined = function ReloadOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": ReloadOutlinedSvg\n }), null);\n};\n\nReloadOutlined.displayName = 'ReloadOutlined';\nReloadOutlined.inheritAttrs = false;\nexport default ReloadOutlined;","// This icon file is generated automatically.\nvar SettingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z\" } }] }, \"name\": \"setting\", \"theme\": \"outlined\" };\nexport default SettingOutlined;\n","import { createVNode as _createVNode } from \"vue\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport SettingOutlinedSvg from \"@ant-design/icons-svg/es/asn/SettingOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar SettingOutlined = function SettingOutlined(props, context) {\n var p = _objectSpread({}, props, context.attrs);\n\n return _createVNode(AntdIcon, _objectSpread({}, p, {\n \"icon\": SettingOutlinedSvg\n }), null);\n};\n\nSettingOutlined.displayName = 'SettingOutlined';\nSettingOutlined.inheritAttrs = false;\nexport default SettingOutlined;","export default {\n mounted (el: HTMLElement) {\n // 自动聚焦\n el.focus()\n }\n}\n","<template>\n <a-modal\n title=\"排序配置\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n @cancel=\"onCancel\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane key=\"1\" tab=\"组合排序\">\n <div class=\"button-wrapper\">\n <a-button primary @click=\"onAddSort\">\n 新增\n </a-button>\n </div>\n <div class=\"list-wrapper\">\n <div\n class=\"sort-row\"\n v-for=\"(item, index) in combSortList\"\n :key=\"index\"\n >\n <a-select\n v-model:value=\"item.columnName\"\n style=\"width: 200px;\"\n placeholder=\"维度/指标\"\n :options=\"getSortOptions(item)\"\n :fieldNames=\"{\n label: 'label',\n value: 'name'\n }\"\n @change=\"onColumnChange\"\n >\n <template #option=\"{ label, name }\">\n <span :style=\"{ color: name === 'component-value' ? '#1890ff' : '' }\">{{ label }}</span>\n </template>\n </a-select>\n <a-select\n v-if=\"item.columnName === 'component-value'\"\n v-model:value=\"item.componentId\"\n style=\"margin-left: 10px;min-width: 200px;\"\n placeholder=\"选择组件\"\n :options=\"usedComponentList\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n >\n </a-select>\n <a-select\n v-model:value=\"item.order\"\n style=\"margin-left: 10px;width: 100px;\"\n placeholder=\"升/降序\"\n >\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </a-select>\n <delete-outlined style=\"color: red;margin-left: 10px;\" @click=\"handleDeleteSort(index)\" />\n </div>\n </div>\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"自定义排序\" force-render>\n <div class=\"button-wrapper\">\n <a-button danger @click=\"onDeleteConfig\">\n 删除配置\n </a-button>\n </div>\n <draggable\n v-model=\"customSortList\"\n class=\"custom-sort-list\"\n item-key=\"id\"\n :put=\"false\"\n @change=\"onChange\"\n >\n <template #item=\"{element}\">\n <div class=\"sort-item\">\n {{ element }}\n </div>\n </template>\n </draggable>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject, PropType } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Select as ASelect,\n SelectOption as ASelectOption\n} from 'ant-design-vue'\nimport Draggable from 'vuedraggable'\nimport { REQUEST, INDICATOR_TOKEN, INDICATOR_URL, GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { DeleteOutlined } from '@ant-design/icons-vue'\nexport default defineComponent({\n name: 'CustomSortModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 组合排序用到的选项\n sortList: {\n type: Array as PropType<{ [key: string]: any }[]>,\n default: () => ([])\n }\n },\n components: {\n Draggable,\n AModal,\n AButton,\n ASelect,\n ASelectOption,\n DeleteOutlined\n },\n setup (props, { expose }) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const request = inject(REQUEST) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as Function\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const customSortList = ref([])\n const activeKey = ref('1')\n const combSortList = ref([])\n\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent: any) => usedComponent.keyName)\n })\n\n const getSortOptions = (item: { [key: string]: any }) => {\n const list = props.sortList.filter(v => !unref(combSortList).find(c => c.columnName === v.name) || item.columnName === v.name)\n const result = []\n list.forEach((item) => {\n // if (names.includes(item.name)) {\n // // 处理多个一样的指标或维度\n // item.name = `${item.name}_ecanrepeat_${index}`\n // } else {\n // names.push(item.name)\n // }\n if (!result.find((v: any) => v.name === item.name)) {\n result.push(item)\n }\n })\n return [\n {\n label: '组件值',\n name: 'component-value'\n },\n ...result\n ]\n }\n\n const handleCustomSortList = async () => {\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n customSortList.value = data?.slice(0, 200)\n }\n } catch (e) {\n console.error(e)\n }\n }\n const updateCustomSortList = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n const { label, name } = props.item\n if (unref(activeKey) === '2') {\n // 自定义排序\n item.sort = {\n label,\n columnName: name,\n type: 'CUSTOM',\n customOrderColumns: unref(customSortList)\n }\n } else if (unref(activeKey) === '1') {\n // 组合排序\n if (unref(combSortList)?.length) {\n item.sort = cloneDeep(unref(combSortList))\n } else {\n delete item.sort\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n // 数据是否改变\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const visible = ref(false)\n const showModal = (data: { [key: string]: any }) => {\n const { sort } = data\n // 设置排序列表\n if (sort) {\n if (Array.isArray(sort)) {\n // 设置tab\n activeKey.value = sort[0]?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = cloneDeep(sort)\n } else {\n combSortList.value = []\n }\n } else {\n // 设置tab\n activeKey.value = sort?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = [cloneDeep(sort)]\n } else {\n combSortList.value = []\n }\n }\n } else {\n combSortList.value = []\n }\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n if (unref(activeKey) === '2') {\n // 改变才更新\n if (isDataChange) updateCustomSortList()\n isDataChange = false\n } else {\n updateCustomSortList()\n }\n // 隐藏弹窗\n hideModal()\n }\n expose({\n showModal\n })\n // 弹窗数据初始化\n watch(visible, (visible) => {\n if (visible) {\n const customOrderColumns = props.item?.sort?.customOrderColumns\n if (customOrderColumns == null) {\n handleCustomSortList()\n } else {\n customSortList.value = customOrderColumns\n }\n } else {\n // 关闭时清空数据\n customSortList.value = []\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n\n const onDeleteConfig = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n // const { label, name } = props.item\n // // 自定义排序\n // item.sort = {\n // label,\n // columnName: name\n // }\n delete item.sort\n updateGraphicConfig({\n [props.type]: list\n })\n hideModal()\n }\n\n const onAddSort = () => {\n unref(combSortList).push({\n label: '',\n columnName: null,\n componentId: null,\n type: 'COMBINATION',\n order: null\n })\n }\n\n const handleDeleteSort = (index: number) => {\n combSortList.value.splice(index, 1)\n }\n\n const onColumnChange = (columnName: string) => {\n const target = unref(combSortList).find(v => v.columnName === columnName)\n if (target) {\n if (columnName === 'component-value') {\n target.label = ''\n } else {\n target.componentId = ''\n }\n const option = props.sortList.find(v => v.name === columnName)\n if (option) {\n target.label = option.label\n if (option.defaultCode) {\n target.defaultCode = option.defaultCode\n } else {\n delete target.defaultCode\n }\n }\n }\n }\n\n return {\n visible,\n customSortList,\n activeKey,\n combSortList,\n usedComponentList,\n getSortOptions,\n onChange,\n onDeleteConfig,\n onCancel,\n onAddSort,\n handleDeleteSort,\n onColumnChange\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.button-wrapper {\n width: 100%;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 10px;\n}\n\n.custom-sort-list {\n width: 100%;\n overflow: auto;\n height: calc(70vh - 124px);\n list-style: none;\n padding-bottom: 60px;\n padding-right: 10px;\n}\n\n.sort-item {\n border: 1px dashed #aaa;\n margin-bottom: 5px;\n padding: 5px;\n font-size: 14px;\n}\n\n.sort-row {\n margin-bottom: 10px;\n}\n</style>\n","<template>\n <a-modal\n title=\"排序配置\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n @cancel=\"onCancel\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane key=\"1\" tab=\"组合排序\">\n <div class=\"button-wrapper\">\n <a-button primary @click=\"onAddSort\">\n 新增\n </a-button>\n </div>\n <div class=\"list-wrapper\">\n <div\n class=\"sort-row\"\n v-for=\"(item, index) in combSortList\"\n :key=\"index\"\n >\n <a-select\n v-model:value=\"item.columnName\"\n style=\"width: 200px;\"\n placeholder=\"维度/指标\"\n :options=\"getSortOptions(item)\"\n :fieldNames=\"{\n label: 'label',\n value: 'name'\n }\"\n @change=\"onColumnChange\"\n >\n <template #option=\"{ label, name }\">\n <span :style=\"{ color: name === 'component-value' ? '#1890ff' : '' }\">{{ label }}</span>\n </template>\n </a-select>\n <a-select\n v-if=\"item.columnName === 'component-value'\"\n v-model:value=\"item.componentId\"\n style=\"margin-left: 10px;min-width: 200px;\"\n placeholder=\"选择组件\"\n :options=\"usedComponentList\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n >\n </a-select>\n <a-select\n v-model:value=\"item.order\"\n style=\"margin-left: 10px;width: 100px;\"\n placeholder=\"升/降序\"\n >\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </a-select>\n <delete-outlined style=\"color: red;margin-left: 10px;\" @click=\"handleDeleteSort(index)\" />\n </div>\n </div>\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"自定义排序\" force-render>\n <div class=\"button-wrapper\">\n <a-button danger @click=\"onDeleteConfig\">\n 删除配置\n </a-button>\n </div>\n <draggable\n v-model=\"customSortList\"\n class=\"custom-sort-list\"\n item-key=\"id\"\n :put=\"false\"\n @change=\"onChange\"\n >\n <template #item=\"{element}\">\n <div class=\"sort-item\">\n {{ element }}\n </div>\n </template>\n </draggable>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject, PropType } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Select as ASelect,\n SelectOption as ASelectOption\n} from 'ant-design-vue'\nimport Draggable from 'vuedraggable'\nimport { REQUEST, INDICATOR_TOKEN, INDICATOR_URL, GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { DeleteOutlined } from '@ant-design/icons-vue'\nexport default defineComponent({\n name: 'CustomSortModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 组合排序用到的选项\n sortList: {\n type: Array as PropType<{ [key: string]: any }[]>,\n default: () => ([])\n }\n },\n components: {\n Draggable,\n AModal,\n AButton,\n ASelect,\n ASelectOption,\n DeleteOutlined\n },\n setup (props, { expose }) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const request = inject(REQUEST) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as Function\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const customSortList = ref([])\n const activeKey = ref('1')\n const combSortList = ref([])\n\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent: any) => usedComponent.keyName)\n })\n\n const getSortOptions = (item: { [key: string]: any }) => {\n const list = props.sortList.filter(v => !unref(combSortList).find(c => c.columnName === v.name) || item.columnName === v.name)\n const result = []\n list.forEach((item) => {\n // if (names.includes(item.name)) {\n // // 处理多个一样的指标或维度\n // item.name = `${item.name}_ecanrepeat_${index}`\n // } else {\n // names.push(item.name)\n // }\n if (!result.find((v: any) => v.name === item.name)) {\n result.push(item)\n }\n })\n return [\n {\n label: '组件值',\n name: 'component-value'\n },\n ...result\n ]\n }\n\n const handleCustomSortList = async () => {\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n customSortList.value = data?.slice(0, 200)\n }\n } catch (e) {\n console.error(e)\n }\n }\n const updateCustomSortList = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n const { label, name } = props.item\n if (unref(activeKey) === '2') {\n // 自定义排序\n item.sort = {\n label,\n columnName: name,\n type: 'CUSTOM',\n customOrderColumns: unref(customSortList)\n }\n } else if (unref(activeKey) === '1') {\n // 组合排序\n if (unref(combSortList)?.length) {\n item.sort = cloneDeep(unref(combSortList))\n } else {\n delete item.sort\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n // 数据是否改变\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const visible = ref(false)\n const showModal = (data: { [key: string]: any }) => {\n const { sort } = data\n // 设置排序列表\n if (sort) {\n if (Array.isArray(sort)) {\n // 设置tab\n activeKey.value = sort[0]?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = cloneDeep(sort)\n } else {\n combSortList.value = []\n }\n } else {\n // 设置tab\n activeKey.value = sort?.type === 'CUSTOM' ? '2' : '1'\n if (unref(activeKey) === '1') {\n combSortList.value = [cloneDeep(sort)]\n } else {\n combSortList.value = []\n }\n }\n } else {\n combSortList.value = []\n }\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n if (unref(activeKey) === '2') {\n // 改变才更新\n if (isDataChange) updateCustomSortList()\n isDataChange = false\n } else {\n updateCustomSortList()\n }\n // 隐藏弹窗\n hideModal()\n }\n expose({\n showModal\n })\n // 弹窗数据初始化\n watch(visible, (visible) => {\n if (visible) {\n const customOrderColumns = props.item?.sort?.customOrderColumns\n if (customOrderColumns == null) {\n handleCustomSortList()\n } else {\n customSortList.value = customOrderColumns\n }\n } else {\n // 关闭时清空数据\n customSortList.value = []\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n\n const onDeleteConfig = () => {\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const item = list[props.index]\n // const { label, name } = props.item\n // // 自定义排序\n // item.sort = {\n // label,\n // columnName: name\n // }\n delete item.sort\n updateGraphicConfig({\n [props.type]: list\n })\n hideModal()\n }\n\n const onAddSort = () => {\n unref(combSortList).push({\n label: '',\n columnName: null,\n componentId: null,\n type: 'COMBINATION',\n order: null\n })\n }\n\n const handleDeleteSort = (index: number) => {\n combSortList.value.splice(index, 1)\n }\n\n const onColumnChange = (columnName: string) => {\n const target = unref(combSortList).find(v => v.columnName === columnName)\n if (target) {\n if (columnName === 'component-value') {\n target.label = ''\n } else {\n target.componentId = ''\n }\n const option = props.sortList.find(v => v.name === columnName)\n if (option) {\n target.label = option.label\n if (option.defaultCode) {\n target.defaultCode = option.defaultCode\n } else {\n delete target.defaultCode\n }\n }\n }\n }\n\n return {\n visible,\n customSortList,\n activeKey,\n combSortList,\n usedComponentList,\n getSortOptions,\n onChange,\n onDeleteConfig,\n onCancel,\n onAddSort,\n handleDeleteSort,\n onColumnChange\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.button-wrapper {\n width: 100%;\n display: flex;\n justify-content: flex-start;\n margin-bottom: 10px;\n}\n\n.custom-sort-list {\n width: 100%;\n overflow: auto;\n height: calc(70vh - 124px);\n list-style: none;\n padding-bottom: 60px;\n padding-right: 10px;\n}\n\n.sort-item {\n border: 1px dashed #aaa;\n margin-bottom: 5px;\n padding: 5px;\n font-size: 14px;\n}\n\n.sort-row {\n margin-bottom: 10px;\n}\n</style>\n","<template>\n <a-modal\n :title=\"title\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <div class=\"custom-group-header\">\n <div class=\"move-and-create\">\n <div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n <a-select\n v-model:value=\"selectGroupIndex\"\n class=\"select-group\"\n placeholder=\"请选择移入分组\"\n >\n <a-select-option\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n {{ customGroup.title }}\n </a-select-option>\n </a-select>\n <a-button @click=\"onMoveInGroup\">移入分组</a-button>\n </div>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <div style=\"display: flex;align-items: center;\">\n <div class=\"create-group\">\n 创建分组:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createGroupTitle\"\n placeholder=\"请输入创建分组名\"\n @pressEnter=\"onAddGroup\"\n />\n </div>\n <div class=\"create-group\" style=\"margin-left: 40px;\">\n 新建值:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createValueTitle\"\n placeholder=\"请输入名称\"\n @pressEnter=\"onAddValue\"\n />\n </div>\n </div>\n </div>\n <div class=\"custom-group-content\">\n <a-collapse\n v-model:activeKey=\"activeKey\"\n ghost\n >\n <a-collapse-panel\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n <template #header>\n <div\n @click.prevent.stop=\"onEditTitle(index)\"\n v-if=\"!customGroupEditTitleList[index]\"\n >\n {{ customGroup.title }}\n </div>\n <a-input\n class=\"edit-title-input\"\n :value=\"customGroup.title\"\n size=\"small\"\n v-focus\n v-else\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n </template>\n <template #extra>\n <div class=\"extra\">\n <template v-if=\"index === 0 && useOtherGroup\">\n <a-tag\n class=\"tag\"\n color=\"blue\"\n >\n 其他组\n </a-tag>\n </template>\n <template v-if=\"index !== 0\">\n <a-tag\n class=\"tag\"\n color=\"green\"\n >\n 自定义组\n </a-tag>\n <close-outlined @click.prevent.stop=\"onDeleteGroup(index)\" />\n </template>\n </div>\n </template>\n <div class=\"custom-group-list\">\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n >\n <span class=\"text\">{{ item.label }}</span>\n </a-checkable-tag>\n </div>\n </a-collapse-panel>\n </a-collapse>\n </div>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport { CloseOutlined } from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\n Select as ASelect,\n SelectOption as ASelectOption,\n Button as AButton,\n Input as AInput,\n Checkbox as ACheckbox,\n Collapse as ACollapse,\n CollapsePanel as ACollapsePanel,\n Tag as ATag,\n CheckableTag as ACheckableTag,\n message\n} from 'ant-design-vue'\nimport focus from '@/directives/focus'\nexport default defineComponent({\n name: 'CustomGroupModal',\n directives: {\n focus\n },\n components: {\n CloseOutlined,\n AModal,\n ASelect,\n ASelectOption,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const request = inject(REQUEST) as any\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n let isDataChange = false\n const title = computed(() => `自定义分组-${props.item.label}`)\n const createGroupTitle = ref<string | null>(null)\n const createValueTitle = ref<string | null>(null)\n const activeKey = ref([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const customGroupTitleSet = computed(() => {\n const customGroupTitleList = unref(customGroupList).map(\n (item) => item.title\n )\n return new Set(customGroupTitleList)\n })\n const customGroupEditTitleList = ref<boolean[]>([])\n watch(\n () => unref(customGroupList).length,\n (length: number) => {\n customGroupEditTitleList.value = new Array(length).fill(false)\n }\n )\n const selectCount = computed(() => {\n let count = 0\n unref(customGroupList).forEach((customGroup) => {\n customGroup.data?.forEach((item) => {\n if (item.checked) {\n count++\n }\n })\n })\n return count\n })\n const onAddGroup = () => {\n const title = unref(createGroupTitle)\n if (!title) {\n message.error('创建分组名不能空')\n return\n }\n if (!unref(customGroupTitleSet).has(title)) {\n unref(customGroupList).push({\n title,\n data: []\n })\n isDataChange = true\n createGroupTitle.value = ''\n } else {\n message.error('分组名已存在,请重新命名')\n }\n }\n const onAddValue = () => {\n const title = unref(createValueTitle)\n if (!title) {\n message.error('值名称不能空')\n return\n }\n let isAllow = true\n if (unref(customGroupList)?.length) {\n for (const group of unref(customGroupList)) {\n if (group?.data?.length) {\n for (const item of group.data) {\n if (item.label === title) {\n isAllow = false\n break\n }\n }\n }\n if (!isAllow) {\n break\n }\n }\n }\n if (isAllow) {\n unref(customGroupList)[0].data.push({\n label: title,\n checked: false\n })\n isDataChange = true\n createValueTitle.value = ''\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onDeleteGroup = (index: number) => {\n unref(customGroupList).splice(index, 1)\n isDataChange = true\n }\n const selectGroupIndex = ref<number | null>(null)\n const onMoveInGroup = () => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const index = unref(selectGroupIndex)\n if (index == null) {\n message.error('请选择移入分组')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList: { label: string; checked: boolean }[] = []\n const len = unref(customGroupList).length\n for (let i = 0; i < len; i++) {\n const customGroup = unref(customGroupList)[i]\n unref(customGroupList)[i].data = customGroup.data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n isDataChange = true\n }\n const onEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = true\n }\n const onFinishEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = false\n }\n const onTitleChange = (event: Event, index: number) => {\n const value = (event.target as any).value\n if (unref(customGroupTitleSet).has(value)) {\n message.error('组名不能相同,请修改')\n }\n unref(customGroupList)[index].title = value\n isDataChange = true\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const useOtherGroup = ref(false)\n const updateCustomGroup = () => {\n const customGroups = unref(customGroupList)\n let otherGroupName = ''\n if (unref(useOtherGroup)) {\n otherGroupName = customGroups[0]?.title\n }\n const len = customGroups?.length\n const groupInfoMap: { [key: string]: any } = {}\n for (let i = 1; i < len; i++) {\n const customGroup = customGroups[i] || {}\n const { title, data } = customGroup as any\n groupInfoMap[title] = data?.map((item) => item.label) || []\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const item = list[props.index]\n // 更新其他组名称\n item.customGroup = {\n groupInfoMap,\n otherGroupName\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const visible = ref(false)\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n // 隐藏弹窗\n hideModal()\n // 更新数据\n if (isDataChange) updateCustomGroup()\n isDataChange = false\n }\n const onUseOtherGroup = () => {\n isDataChange = true\n }\n const allLabelSet = new Set()\n const handleInitData = async () => {\n const customGroup = props.item.customGroup || {}\n const otherGroupName = customGroup.otherGroupName\n const groupInfoMap = customGroup.groupInfoMap\n if (otherGroupName === '' || otherGroupName == null) {\n useOtherGroup.value = false\n }\n unref(customGroupList)[0] = {\n title: otherGroupName || '未分组',\n data: []\n }\n let i = 1\n for (const key in groupInfoMap) {\n if (Object.prototype.hasOwnProperty.call(groupInfoMap, key)) {\n const values = groupInfoMap[key] as string[]\n const data = values.map((item) => {\n allLabelSet.add(item)\n return {\n label: item,\n checked: false\n }\n })\n // 其他项\n unref(customGroupList)[i] = {\n title: key as string,\n data\n }\n i++\n }\n }\n await handleCustomGroupList() // 处理 customGroupList\n }\n const handleCustomGroupList = async () => {\n try {\n const res = await request.post(\n `${INDICATOR_URL}/diagram/groupvalue`,\n {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n const { success, data = [] } = res.data\n if (success) {\n // 截取200\n const rows: { label: string; checked: boolean }[] = []\n data?.slice(0, 200)?.forEach((item: string) => {\n if (!allLabelSet.has(item)) {\n rows.push({\n label: item,\n checked: false\n })\n }\n })\n unref(customGroupList)[0].data = rows\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n watch(\n visible,\n (visible) => {\n if (visible) {\n handleInitData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n },\n {\n flush: 'post'\n }\n )\n\n expose({\n showModal\n })\n return {\n visible,\n title,\n activeKey,\n customGroupList,\n onCancel,\n useOtherGroup,\n selectCount,\n createGroupTitle,\n createValueTitle,\n onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n selectGroupIndex,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n customGroupEditTitleList\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.move-and-create {\n display: flex;\n justify-content: space-between;\n margin-bottom: 15px;\n}\n\n.create-group {\n display: flex;\n align-items: center;\n font-size: 15px;\n}\n\n.create-group-name {\n width: 140px;\n margin-left: 10px;\n}\n\n.custom-group-content {\n overflow-y: auto;\n}\n\n.tag {\n margin-right: 10px;\n}\n\n.edit-title-input {\n width: 150px;\n}\n\n.extra {\n width: 90px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n}\n\n.custom-group {\n margin: 5px;\n padding: 3px 5px;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-right: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\n}\n\n.select-group {\n margin-right: 15px;\n width: 140px;\n}\n\n.cancel-button {\n margin-right: 20px;\n}\n\n.footer {\n display: flex;\n}\n</style>\n\n<style lang=\"less\">\n.custom-group-content {\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 0;\n }\n}\n</style>\n","<template>\n <a-modal\n :title=\"title\"\n :visible=\"visible\"\n destroy-on-close\n width=\"50%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <div class=\"custom-group-header\">\n <div class=\"move-and-create\">\n <div>\n <span class=\"select-tip\">\n 已选<span class=\"select-count\">{{ selectCount }}</span\n >个\n </span>\n <a-select\n v-model:value=\"selectGroupIndex\"\n class=\"select-group\"\n placeholder=\"请选择移入分组\"\n >\n <a-select-option\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n {{ customGroup.title }}\n </a-select-option>\n </a-select>\n <a-button @click=\"onMoveInGroup\">移入分组</a-button>\n </div>\n <a-checkbox\n v-model:checked=\"useOtherGroup\"\n @change=\"onUseOtherGroup\"\n >\n 将未分组设为其他分组\n </a-checkbox>\n </div>\n <div style=\"display: flex;align-items: center;\">\n <div class=\"create-group\">\n 创建分组:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createGroupTitle\"\n placeholder=\"请输入创建分组名\"\n @pressEnter=\"onAddGroup\"\n />\n </div>\n <div class=\"create-group\" style=\"margin-left: 40px;\">\n 新建值:\n <a-input\n class=\"create-group-name\"\n v-model:value=\"createValueTitle\"\n placeholder=\"请输入名称\"\n @pressEnter=\"onAddValue\"\n />\n </div>\n </div>\n </div>\n <div class=\"custom-group-content\">\n <a-collapse\n v-model:activeKey=\"activeKey\"\n ghost\n >\n <a-collapse-panel\n v-for=\"(customGroup, index) in customGroupList\"\n :key=\"index\"\n >\n <template #header>\n <div\n @click.prevent.stop=\"onEditTitle(index)\"\n v-if=\"!customGroupEditTitleList[index]\"\n >\n {{ customGroup.title }}\n </div>\n <a-input\n class=\"edit-title-input\"\n :value=\"customGroup.title\"\n size=\"small\"\n v-focus\n v-else\n @change=\"onTitleChange($event, index)\"\n @blur=\"onFinishEditTitle(index)\"\n @pressEnter=\"onFinishEditTitle(index)\"\n />\n </template>\n <template #extra>\n <div class=\"extra\">\n <template v-if=\"index === 0 && useOtherGroup\">\n <a-tag\n class=\"tag\"\n color=\"blue\"\n >\n 其他组\n </a-tag>\n </template>\n <template v-if=\"index !== 0\">\n <a-tag\n class=\"tag\"\n color=\"green\"\n >\n 自定义组\n </a-tag>\n <close-outlined @click.prevent.stop=\"onDeleteGroup(index)\" />\n </template>\n </div>\n </template>\n <div class=\"custom-group-list\">\n <a-checkable-tag\n color=\"red\"\n v-model:checked=\"item.checked\"\n class=\"custom-group\"\n v-for=\"(item, i) in customGroup.data\"\n :key=\"i\"\n >\n <span class=\"text\">{{ item.label }}</span>\n </a-checkable-tag>\n </div>\n </a-collapse-panel>\n </a-collapse>\n </div>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, watch, inject } from 'vue'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport { CloseOutlined } from '@ant-design/icons-vue'\nimport {\n Modal as AModal,\n Select as ASelect,\n SelectOption as ASelectOption,\n Button as AButton,\n Input as AInput,\n Checkbox as ACheckbox,\n Collapse as ACollapse,\n CollapsePanel as ACollapsePanel,\n Tag as ATag,\n CheckableTag as ACheckableTag,\n message\n} from 'ant-design-vue'\nimport focus from '@/directives/focus'\nexport default defineComponent({\n name: 'CustomGroupModal',\n directives: {\n focus\n },\n components: {\n CloseOutlined,\n AModal,\n ASelect,\n ASelectOption,\n AButton,\n AInput,\n ACheckbox,\n ACollapse,\n ACollapsePanel,\n ATag,\n ACheckableTag\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const request = inject(REQUEST) as any\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n let isDataChange = false\n const title = computed(() => `自定义分组-${props.item.label}`)\n const createGroupTitle = ref<string | null>(null)\n const createValueTitle = ref<string | null>(null)\n const activeKey = ref([])\n interface CustomGroup {\n title: string\n data: {\n label: string\n checked: boolean\n }[]\n }\n const customGroupList = ref<CustomGroup[]>([])\n const customGroupTitleSet = computed(() => {\n const customGroupTitleList = unref(customGroupList).map(\n (item) => item.title\n )\n return new Set(customGroupTitleList)\n })\n const customGroupEditTitleList = ref<boolean[]>([])\n watch(\n () => unref(customGroupList).length,\n (length: number) => {\n customGroupEditTitleList.value = new Array(length).fill(false)\n }\n )\n const selectCount = computed(() => {\n let count = 0\n unref(customGroupList).forEach((customGroup) => {\n customGroup.data?.forEach((item) => {\n if (item.checked) {\n count++\n }\n })\n })\n return count\n })\n const onAddGroup = () => {\n const title = unref(createGroupTitle)\n if (!title) {\n message.error('创建分组名不能空')\n return\n }\n if (!unref(customGroupTitleSet).has(title)) {\n unref(customGroupList).push({\n title,\n data: []\n })\n isDataChange = true\n createGroupTitle.value = ''\n } else {\n message.error('分组名已存在,请重新命名')\n }\n }\n const onAddValue = () => {\n const title = unref(createValueTitle)\n if (!title) {\n message.error('值名称不能空')\n return\n }\n let isAllow = true\n if (unref(customGroupList)?.length) {\n for (const group of unref(customGroupList)) {\n if (group?.data?.length) {\n for (const item of group.data) {\n if (item.label === title) {\n isAllow = false\n break\n }\n }\n }\n if (!isAllow) {\n break\n }\n }\n }\n if (isAllow) {\n unref(customGroupList)[0].data.push({\n label: title,\n checked: false\n })\n isDataChange = true\n createValueTitle.value = ''\n } else {\n message.error('名称已存在,请重新命名')\n }\n }\n const onDeleteGroup = (index: number) => {\n unref(customGroupList).splice(index, 1)\n isDataChange = true\n }\n const selectGroupIndex = ref<number | null>(null)\n const onMoveInGroup = () => {\n if (unref(selectCount) === 0) {\n message.error('当前移入分组已选个数为0')\n return\n }\n const index = unref(selectGroupIndex)\n if (index == null) {\n message.error('请选择移入分组')\n return\n }\n if (!unref(customGroupList)[index]) {\n message.error('移入分组不存在,请重新选择')\n return\n }\n const selectList: { label: string; checked: boolean }[] = []\n const len = unref(customGroupList).length\n for (let i = 0; i < len; i++) {\n const customGroup = unref(customGroupList)[i]\n unref(customGroupList)[i].data = customGroup.data.filter((item) => {\n if (item.checked) {\n selectList.push({\n ...item,\n checked: false\n })\n }\n return !item.checked\n })\n }\n unref(customGroupList)[index].data = [\n ...selectList,\n ...unref(customGroupList)[index].data\n ]\n isDataChange = true\n }\n const onEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = true\n }\n const onFinishEditTitle = (index: number) => {\n unref(customGroupEditTitleList)[index] = false\n }\n const onTitleChange = (event: Event, index: number) => {\n const value = (event.target as any).value\n if (unref(customGroupTitleSet).has(value)) {\n message.error('组名不能相同,请修改')\n }\n unref(customGroupList)[index].title = value\n isDataChange = true\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const source = computed(() => unref(graphicConfig).source)\n const dataViewId = computed(() => unref(graphicConfig).dataViewId)\n const useOtherGroup = ref(false)\n const updateCustomGroup = () => {\n const customGroups = unref(customGroupList)\n let otherGroupName = ''\n if (unref(useOtherGroup)) {\n otherGroupName = customGroups[0]?.title\n }\n const len = customGroups?.length\n const groupInfoMap: { [key: string]: any } = {}\n for (let i = 1; i < len; i++) {\n const customGroup = customGroups[i] || {}\n const { title, data } = customGroup as any\n groupInfoMap[title] = data?.map((item) => item.label) || []\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const item = list[props.index]\n // 更新其他组名称\n item.customGroup = {\n groupInfoMap,\n otherGroupName\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const visible = ref(false)\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n // 隐藏弹窗\n hideModal()\n // 更新数据\n if (isDataChange) updateCustomGroup()\n isDataChange = false\n }\n const onUseOtherGroup = () => {\n isDataChange = true\n }\n const allLabelSet = new Set()\n const handleInitData = async () => {\n const customGroup = props.item.customGroup || {}\n const otherGroupName = customGroup.otherGroupName\n const groupInfoMap = customGroup.groupInfoMap\n if (otherGroupName === '' || otherGroupName == null) {\n useOtherGroup.value = false\n }\n unref(customGroupList)[0] = {\n title: otherGroupName || '未分组',\n data: []\n }\n let i = 1\n for (const key in groupInfoMap) {\n if (Object.prototype.hasOwnProperty.call(groupInfoMap, key)) {\n const values = groupInfoMap[key] as string[]\n const data = values.map((item) => {\n allLabelSet.add(item)\n return {\n label: item,\n checked: false\n }\n })\n // 其他项\n unref(customGroupList)[i] = {\n title: key as string,\n data\n }\n i++\n }\n }\n await handleCustomGroupList() // 处理 customGroupList\n }\n const handleCustomGroupList = async () => {\n try {\n const res = await request.post(\n `${INDICATOR_URL}/diagram/groupvalue`,\n {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: props.item.name,\n hrpIndexTypeGuid: props.item.typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(graphicConfig).edvDataSetId || ''\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n const { success, data = [] } = res.data\n if (success) {\n // 截取200\n const rows: { label: string; checked: boolean }[] = []\n data?.slice(0, 200)?.forEach((item: string) => {\n if (!allLabelSet.has(item)) {\n rows.push({\n label: item,\n checked: false\n })\n }\n })\n unref(customGroupList)[0].data = rows\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n watch(\n visible,\n (visible) => {\n if (visible) {\n handleInitData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n },\n {\n flush: 'post'\n }\n )\n\n expose({\n showModal\n })\n return {\n visible,\n title,\n activeKey,\n customGroupList,\n onCancel,\n useOtherGroup,\n selectCount,\n createGroupTitle,\n createValueTitle,\n onAddGroup,\n onDeleteGroup,\n onMoveInGroup,\n selectGroupIndex,\n onEditTitle,\n onTitleChange,\n onFinishEditTitle,\n onUseOtherGroup,\n onAddValue,\n customGroupEditTitleList\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.move-and-create {\n display: flex;\n justify-content: space-between;\n margin-bottom: 15px;\n}\n\n.create-group {\n display: flex;\n align-items: center;\n font-size: 15px;\n}\n\n.create-group-name {\n width: 140px;\n margin-left: 10px;\n}\n\n.custom-group-content {\n overflow-y: auto;\n}\n\n.tag {\n margin-right: 10px;\n}\n\n.edit-title-input {\n width: 150px;\n}\n\n.extra {\n width: 90px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n}\n\n.custom-group {\n margin: 5px;\n padding: 3px 5px;\n}\n\n.text {\n font-size: 14px;\n}\n\n.select-tip {\n margin-right: 10px;\n font-size: 15px;\n}\n\n.select-count {\n color: red;\n margin: 0 3px;\n}\n\n.select-group {\n margin-right: 15px;\n width: 140px;\n}\n\n.cancel-button {\n margin-right: 20px;\n}\n\n.footer {\n display: flex;\n}\n</style>\n\n<style lang=\"less\">\n.custom-group-content {\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 0;\n }\n}\n</style>\n","import { urlAlphabet } from './url-alphabet/index.js'\nif (false) {\n if (\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative' &&\n typeof crypto === 'undefined'\n ) {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you don’t need unpredictable IDs use `nanoid/non-secure`. ' +\n 'For secure IDs, import `react-native-get-random-values` ' +\n 'before Nano ID.'\n )\n }\n if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {\n throw new Error(\n 'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +\n ' before importing Nano ID to fix IE 11 support'\n )\n }\n if (typeof crypto === 'undefined') {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, size, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * size) / alphabet.length)\n return () => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n while (size--) {\n let byte = bytes[size] & 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte < 63) {\n id += '_'\n } else {\n id += '-'\n }\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","<template>\n <div class=\"condition\">\n <a-select\n class=\"field-name\"\n :value=\"condition.fieldName\"\n @change=\"onFieldChange\"\n >\n <template v-for=\"(option, _index) in fieldOptions\" :key=\"_index\">\n <a-select-option :value=\"option.value\">\n <span :title=\"option.label\">{{ option.label }}</span>\n </a-select-option>\n </template>\n </a-select>\n <div class=\"rule\">\n <!-- <a-dropdown class=\"dropdown\" v-if=\"isDateType\" :trigger=\"['click']\">\n <template #overlay>\n <a-menu @click=\"handleMenuClick\">\n <a-sub-menu\n v-for=\"item in ruleOptions\"\n :key=\"item.value\">\n <template #title>\n <span :style=\"condition.rule === item.value ? 'color: #1890FF;' : ''\">{{ item.label }}</span>\n </template>\n <a-sub-menu\n v-for=\"mr in menuRule\"\n :key=\"mr.value\"\n :disabled=\"mr.value === 'component' && !controlList?.length\">\n <template #title>\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value ? 'color: #1890FF;' : ''\">\n {{ mr.label }}\n </span>\n </template>\n <a-menu-item\n v-for=\"fl in formatList\"\n :key=\"fl.value\">\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value && condition.dateFormat === fl.value ? 'color: #1890FF;' : ''\">\n {{ fl.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n </a-sub-menu>\n </a-menu>\n </template>\n <a-button>\n {{ dateBtnLabel }}\n <DownOutlined :style=\"downIconStyle\"/>\n </a-button>\n </a-dropdown> -->\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.rule\"\n :options=\"ruleOptions\"\n @change=\"onRuleChange\"\n >\n </a-select>\n </div>\n <div class=\"data-type\" v-show=\"isShowCustomDataType\">\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.dataType\"\n @change=\"onDataTypeChange\"\n >\n <template v-for=\"(option, _index) in dataTypeList\" :key=\"_index\">\n <a-select-option :value=\"option.value\">{{ option.label }}</a-select-option>\n </template>\n </a-select>\n </div>\n <div class=\"field-value\" v-if=\"isDateType\" style=\"display: flex;align-items: center;\">\n <template v-if=\"!condition.dataType\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n v-model:value=\"condition.fieldValue\"\n :format=\"condition.dateFormat\"\n />\n </template>\n <a-select\n show-search\n v-else\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 130px)',\n marginRight: '10px'\n }\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <template v-if=\"condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <template v-if=\"isDateType\">\n <a-select\n class=\"field-value\"\n show-search\n style=\"margin: 0;width: 130px;\"\n placeholder=\"日期格式化\"\n v-model:value=\"condition.dateFormat\"\n :filter-option=\"filterOption\"\n :options=\"formatList\"\n >\n </a-select>\n </template>\n </div>\n <a-select\n class=\"field-value\"\n v-else-if=\"['IN', 'NOT_IN'].includes(condition.rule || '')\"\n :value=\"fieldValues\"\n mode=\"multiple\"\n :options=\"valueOptions\"\n @change=\"onFieldValueSelectChange\"\n >\n </a-select>\n <a-select\n class=\"field-value\"\n show-search\n v-else-if=\"isShowCustomDataType && condition.dataType === 'component'\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <a-input\n v-else\n class=\"field-value\"\n v-model:value=\"condition.fieldValue\"\n />\n <template v-if=\"!isDateType && condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <appstore-add-outlined\n v-if=\"isDateType\"\n class=\"calendar-icon\"\n :style=\"{\n color: isUseCurrentTime || isConfigFlag ? '#1890ff' : ''\n }\"\n @click=\"popoverVisible = true;\"\n />\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\n <template #content>\n <div class=\"popover-content-wrap\">\n <div class=\"use-current-time\" v-if=\"condition.dataType !== 'component'\">\n <a-checkbox v-model:checked=\"isUseCurrentTime\">使用当前时间</a-checkbox>\n </div>\n <a-tabs :defaultActiveKey=\"condition.activeKey\" @change=\"changeTabInitDate\">\n <a-tab-pane v-for=\"(tabItem, tabIndex) in tabDateList\" :key=\"tabIndex\" :tab=\"tabItem.label\">\n <div class=\"tabFilterRadio\">\n <a-radio-group v-model:value=\"tabItem.radioValue\" @change=\"changeRadioValue($event,tabItem)\">\n <div v-if=\"showTime\">相对当前时间:{{tabItem.value}}</div>\n <div v-else>相对当前时间:{{getFieldValue(tabIndex)}}</div>\n <a-radio :style=\"dateRadioStyle\" value=\"1\">\n <a-input-number v-model:value=\"tabItem.beforeNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'-','1')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.beforeLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"2\">\n <a-input-number v-model:value=\"tabItem.afterNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'+','2')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.afterLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"3\" v-if=\"tabItem.beforeText\">\n {{tabItem.beforeText}}\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"4\" v-if=\"tabItem.afterText\">\n {{tabItem.afterText}}\n </a-radio>\n </a-radio-group>\n <div style=\"position: absolute;bottom: 10px;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okDatePickConfig(tabItem,tabIndex)\">确定</a-button>\n </div>\n </div>\n </a-tab-pane>\n <!-- 自定义 -->\n <a-tab-pane tab=\"自定义\" :key=\"5\">\n <div style=\"display: flex;\">\n <a-select\n v-model:value=\"customTabData.expression\"\n allowClear\n style=\"width: 120px;margin-right: 10px;\"\n >\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.unit\" style=\"margin-right: 10px;\">\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"QUARTER\">季度</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"WEEK\">周</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.around\">\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n </div>\n <div style=\"position: absolute;bottom: 10px;left: 0;text-align: center;width: 100%;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okCustomConfig\">确定</a-button>\n </div>\n </a-tab-pane>\n </a-tabs>\n </div>\n </template>\n </a-popover>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, ref, watch, onMounted } from 'vue'\nimport { CloseOutlined, AppstoreAddOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n Select as ASelect,\n SelectOption as ASelectOption,\n Input as AInput,\n DatePicker as ADatePicker,\n Button as AButton,\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Popover as APopover,\n Tabs as ATabs,\n TabPane as ATabPane,\n RadioGroup as ARadioGroup,\n Radio as ARadio,\n InputNumber as AInputNumber\n} from 'ant-design-vue'\nimport 'ant-design-vue/es/popover/style'\nimport 'ant-design-vue/es/dropdown/style'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport { nanoid } from 'nanoid'\nimport dayjs, { Dayjs } from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport { cloneDeep } from 'lodash-es'\ndayjs.extend(quarterOfYear)\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\n APopover,\n ATabs,\n ATabPane,\n ARadioGroup,\n ARadio,\n AInputNumber,\n ASelectOption,\n MenuOutlined\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const dataViewColumns = inject(DATA_VIEW_COLUMNS) as any\n const renderComponents = inject(RENDER_USED_COMPONENTS) as any\n const isUseCurrentTime = ref(false)\n const currentTime = dayjs()\n const controlList = computed(() => {\n const result = []\n unref(renderComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`,\n id\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`,\n id\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`,\n id\n })\n }\n })\n return result\n })\n const keyNameOptions = computed(() => {\n return [\n {\n label: '父页面',\n value: 'PARENT',\n id: 'PARENT',\n keyName: 'PARENT'\n },\n ...unref(controlList)\n ]\n })\n const dataViewId = computed(() => unref(graphicConfig)?.dataViewId)\n const source = computed(() => unref(graphicConfig)?.source)\n // const isDataViewMode = computed(() => unref(source) === 'SQL_VIEW')\n const showTime = ref(false)\n const dateRadioStyle = {\n display: 'block',\n height: '34px',\n lineHeight: '34px',\n marginTop: '3px'\n }\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n const customTabData = ref({\n expression: 'rangeValue',\n unit: 'YEAR',\n around: 'before'\n })\n const tabDateList = ref([\n { key: 0, value: '', label: '年', type: 'years', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '年前', afterLabel: '年后', beforeText: '年初', afterText: '年末' },\n { key: 1, value: '', label: '季度', type: 'quarters', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个季度前', afterLabel: '个季度后', beforeText: '季度初', afterText: '季度末' },\n { key: 2, value: '', label: '月', type: 'months', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个月前', afterLabel: '个月后', beforeText: '月初', afterText: '月末' },\n { key: 3, value: '', label: '周', type: 'weeks', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '周前', afterLabel: '周后', beforeText: '', afterText: '' },\n { key: 4, value: '', label: '天', type: 'days', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '天前', afterLabel: '天后', beforeText: '今天', afterText: '' }\n ])\n const compareList = [\n { label: '年份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '季的季度', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '月的月份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '周的周', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '天的日期', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' }\n ]\n const menuRule = [\n { label: '时间值', value: 'time' },\n { label: '过滤组件值', value: 'component' }\n ]\n const dataTypeList = [\n { label: '自定义值', value: '' },\n { label: '组件值', value: 'component' }\n ]\n // const { getDataList } = inject(DATA_LIST, {\n // getDataList: () => ([] as { key:string } [])\n // })\n interface Condition {\n fieldName: undefined | string\n fieldType: undefined | string\n rule: undefined | string\n id: undefined | string\n fieldValue: undefined | string | Dayjs\n label: string\n targetSource: string\n typeGuid: string\n indexCode: string\n indexCodeNum: string\n dateFormat?: string\n dataType?: string\n activeKey?: number\n radioValue?: string\n calcWays?: any\n dateCalcTypes?: any\n componentId?: string\n useCurrentTime?: boolean\n keyValue?: string\n modelKey?: string\n prop?: string\n edvDataSetId?: string\n }\n const condition = ref<Condition>({\n fieldName: props.data?.fieldName,\n fieldType: props.data?.fieldType,\n rule: props.data?.rule,\n id: props.data?.id,\n fieldValue: getDefaultFieldValue(),\n label: props.data?.label,\n // 暂时传空\n targetSource: '',\n typeGuid: props.data?.typeGuid,\n indexCode: props.data?.indexCode,\n indexCodeNum: props.data?.indexCodeNum,\n dataType: props.data?.dataType || '',\n componentId: props.data?.componentId || '',\n useCurrentTime: !!props.data?.useCurrentTime,\n keyValue: props.data?.keyValue,\n modelKey: props.data?.modelKey,\n prop: props.data?.prop\n })\n\n function getDefaultFieldValue () {\n const { fieldType = '', dataType = '', fieldValue = '' } = props.data\n if (fieldType === 'DATE' && !dataType) {\n return fieldValue ? dayjs(fieldValue) : fieldValue\n } else if (dataType === 'component') {\n const target = unref(controlList).find(v => v.keyName === fieldValue)\n if (target) {\n return target.value\n } else {\n return fieldValue\n }\n } else {\n return fieldValue\n }\n }\n const dataSetfieldOptions = ref([])\n\n const popoverVisible = ref(false)\n const isDateType = computed(() => condition.value.fieldType === 'DATE')\n const fieldOptions = computed(() => {\n const type = props.type\n const { source } = unref(graphicConfig)\n let result = []\n const dims = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const otherList = ['controlList', 'sqlConditions', 'variableList', 'variableConditions']\n if (source === 'EDV_DATA_SET') {\n // 获取当前使用数据集列表数据\n // const dataSetList = JSON.parse(sessionStorage.getItem('dataSetList'))\n // if (Array.isArray(dataSetList.dataViewColumns)) {\n // result = dataSetList.dataViewColumns.map(v => {\n // return {\n // datato: dataSetList.datato,\n // dataSetParams: dataSetList.dataSetParams,\n // ...v\n // }\n // })\n // }\n result = dataSetfieldOptions.value\n\n // eslint-disable-next-line vue/no-async-in-computed-properties\n // aw request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n // headers: {\n // Authentication: indicatorToken,\n // operateContext: 'ygt'\n // }\n // }).then((res: any) => {\n // if (res.data.success) {\n // console.log(res.data)\n // // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n // setTimeout(() => {\n // result = res.data.data.column.map((v:any) => {\n // return {\n // ...v,\n // genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n // edvDataSetId: res.data.data.id,\n // name: v.columnName,\n // label: v.columnName\n\n // }\n // })\n // })\n\n // console.log(result)\n // }\n // }).catch((err) => {\n // console.error(err)\n // })\n } else if (dims.includes(type)) {\n let options = [] as { key:string } []\n for (const key in unref(graphicConfig)) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), key) && !otherList.includes(key)) {\n const value = unref(graphicConfig)[key]\n if (Array.isArray(value)) {\n if (dims.includes(key)) {\n options = options.concat(value.filter(v => v.show))\n } else {\n options = options.concat(value)\n }\n }\n }\n }\n result = options\n } else if (['leftAxisList', 'rightAxisList', 'indicators'].includes(type)) {\n // return unref(getDataList())\n result = unref(dataViewColumns)\n }\n return result.map((v: any) => {\n return {\n ...v,\n label: v.label || v.title,\n value: v.name\n }\n })\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any}, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n watch(condition, (condition) => {\n const result = cloneDeep(condition)\n if (condition.fieldType === 'DATE' && condition.dataType !== 'component' && condition.fieldValue) {\n result.fieldValue = (condition.fieldValue as Dayjs).format(condition.dateFormat)\n }\n updateCondition(result, props.index, props.path)\n }, {\n deep: true\n })\n\n watch(isUseCurrentTime, (value: boolean) => {\n condition.value.fieldValue = ''\n condition.value.useCurrentTime = value\n })\n\n const onFieldChange = (value: string) => {\n const option = unref(fieldOptions).find(v => v.value === value) || {}\n const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n condition.value = {\n id,\n fieldName: name,\n fieldType: genericType,\n label,\n // 重置规则\n rule: '',\n fieldValue: genericType === 'DATE' ? null : undefined,\n targetSource: '',\n typeGuid,\n indexCode,\n edvDataSetId,\n indexCodeNum,\n dataType: '',\n useCurrentTime: false,\n keyValue: unref(condition)?.keyValue || nanoid(),\n modelKey: '',\n prop: ''\n }\n }\n const onChangeComponent = (value: string) => {\n const option = unref(controlList).find(v => v.value === value) || {}\n unref(condition).componentId = option.id || ''\n }\n const ruleOptions = computed(() => {\n const type = unref(condition).fieldType\n\n if (type === 'TEXT') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'NUMBER') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'DATE') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n }\n })\n const dateBtnLabel = computed(() => {\n let result = ''\n const obj = unref(ruleOptions).find(item => item.value === unref(condition).rule)\n if (obj) {\n result = obj.label\n }\n return result\n })\n const downIconStyle = computed(() => {\n let style: any = {\n fontSize: '12px'\n }\n if (!unref(dateBtnLabel)) {\n style = {\n ...style,\n position: 'absolute',\n right: '11px',\n top: '9px'\n }\n }\n return style\n })\n const valueOptions = ref< { [key:string]: any } []>([])\n const handleValueOptions = async () => {\n if (unref(valueOptions).length > 0) return\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: unref(condition).fieldName,\n hrpIndexTypeGuid: unref(condition).typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(condition).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n valueOptions.value = data?.slice(0, 200)?.map((item: string) => ({ label: item, value: item }))\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onRuleChange = (value: string) => {\n unref(condition).rule = value\n unref(condition).fieldValue = unref(condition).fieldType === 'DATE' ? null : undefined\n if (['IN', 'NOT_IN'].includes(value)) {\n handleValueOptions()\n }\n }\n const onDataTypeChange = (value: string) => {\n unref(condition).dataType = value\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n const fieldValues = ref<string []>()\n const onFieldValueSelectChange = (values: string []) => {\n fieldValues.value = values\n unref(condition).fieldValue = values?.join(',') || ''\n }\n\n const handleMenuClick = (data: any) => {\n const { keyPath } = data\n unref(condition).rule = keyPath[0]\n unref(condition).dataType = keyPath[1]\n unref(condition).dateFormat = keyPath[2]\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n\n onMounted(async () => {\n condition.value.dataType = props.data?.dataType || ''\n condition.value.componentId = props.data?.componentId || ''\n condition.value.keyValue = props.data?.keyValue\n condition.value.modelKey = props.data?.modelKey\n condition.value.prop = props.data?.prop\n if (unref(condition).fieldType === 'DATE') {\n const { activeKey, dateCalcTypes = [] } = props.data || {}\n unref(condition).dateFormat = props.data?.dateFormat\n unref(condition).activeKey = activeKey\n unref(condition).calcWays = props.data?.calcWays || []\n unref(condition).dateCalcTypes = dateCalcTypes\n if (unref(condition).useCurrentTime && unref(condition).dataType !== 'component') {\n // 使用当前时间\n isUseCurrentTime.value = true\n }\n if (activeKey === 5) {\n // 范围差值\n const calcWay = unref(condition).calcWays[0]\n if (calcWay) {\n const vals = calcWay.split('-')\n unref(customTabData).expression = vals[0]\n unref(customTabData).around = vals[1]\n }\n unref(customTabData).unit = dateCalcTypes[0] || 'YEAR'\n } else {\n unref(condition).radioValue = props.data?.radioValue || ''\n const tabItem = unref(tabDateList).find(item => item.key === props.data?.activeKey)\n if (tabItem) {\n setTabItemData(tabItem, props.data)\n }\n }\n } else {\n fieldValues.value = props.data?.fieldValue?.split(',') || []\n }\n const { fieldType, fieldName, rule } = condition.value\n if (fieldType !== 'DATE' && fieldName && rule && ['IN', 'NOT_IN'].includes(rule)) {\n handleValueOptions()\n }\n const { source } = unref(graphicConfig)\n if (source === 'EDV_DATA_SET') {\n await request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }).then((res: any) => {\n if (res.data.success) {\n // console.log(res.data)\n // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n dataSetfieldOptions.value = res.data.data.column.map((v:any) => {\n return {\n ...v,\n genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n edvDataSetId: res.data.data.id,\n name: v.columnName,\n label: v.columnName\n\n }\n })\n }\n }).catch((err) => {\n console.error(err)\n })\n }\n })\n\n // 时间相对配置Tab切换\n const changeTabInitDate = (activeKey: any) => {\n if (unref(condition).activeKey === activeKey) {\n unref(tabDateList)[activeKey].radioValue = unref(condition).radioValue\n if (unref(tabDateList)[unref(condition).activeKey]) {\n unref(tabDateList)[unref(condition).activeKey].radioValue = unref(condition).radioValue\n if (unref(condition).radioValue === '1') {\n unref(tabDateList)[activeKey].beforeNum = unref(condition).calcWays[0]\n } else if (unref(condition).radioValue === '2') {\n unref(tabDateList)[activeKey].afterNum = unref(condition).calcWays[0]\n }\n }\n return\n }\n unref(tabDateList).forEach(row => {\n row.beforeNum = 0\n row.afterNum = 0\n row.radioValue = '1'\n row.value = ''\n })\n }\n\n // 时间相对配置选中值改变\n const changeRadioValue = (e: any, tabItem: any) => {\n showTime.value = true\n const value = e.target.value\n const type = tabItem.type\n const format = unref(condition).dateFormat\n const beforeNum = Math.abs(tabItem.beforeNum)\n const afterNum = tabItem.afterNum\n tabItem.value = getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n const getFieldValue = (tabIndex: number) => {\n const activeKey = unref(condition).activeKey\n if (tabIndex !== activeKey) {\n return\n }\n let type = ''\n if (activeKey === 0) {\n type = 'years'\n } else if (activeKey === 1) {\n type = 'quarters'\n } else if (activeKey === 2) {\n type = 'months'\n } else if (activeKey === 3) {\n type = 'weeks'\n } else if (activeKey === 4) {\n type = 'days'\n }\n const format = unref(condition).dateFormat\n const value = unref(condition).radioValue\n let beforeNum = 0\n let afterNum = 0\n if (value === '1') {\n beforeNum = Math.abs(unref(condition).calcWays[0])\n } else if (value === '2') {\n afterNum = unref(condition).calcWays[0]\n }\n return getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n // 时间相对配置中的比较失焦\n const blurCompare = (e: any, tabItem: any, flag: any, key: any) => {\n showTime.value = true\n if (tabItem.radioValue === key) {\n const value = e.target.value\n if (flag === '+') {\n tabItem.value = dayjs().add(value, tabItem.type).format(unref(condition).dateFormat)\n } else {\n tabItem.value = dayjs().subtract(value, tabItem.type).format(unref(condition).dateFormat)\n }\n }\n }\n\n const isConfigFlag = computed(() => {\n let result = false\n const { calcWays = [] } = unref(condition)\n const value = calcWays[0]\n if (value && parseFloat(value) !== 0) {\n result = true\n }\n return result\n })\n\n // 保存时间相对配置\n const okDatePickConfig = (tabItem: any, tabIndex: any) => {\n // if (unref(condition).fieldType !== 'DATE' || unref(condition).dataType !== 'component') {\n // condition.value.fieldValue = dayjs(tabItem.value, unref(condition).dateFormat)\n // }\n if (!unref(condition).calcWays) {\n unref(condition).calcWays = []\n }\n // condition.value.absoluteBool = true\n unref(condition).activeKey = tabIndex\n unref(condition).radioValue = tabItem.radioValue\n if (tabItem.radioValue === '1') {\n unref(condition).calcWays[0] = '-' + tabItem.beforeNum\n } else if (tabItem.radioValue === '2') {\n unref(condition).calcWays[0] = tabItem.afterNum\n } else if (tabItem.radioValue === '3') {\n if (tabIndex === 4) {\n unref(condition).calcWays[0] = '0'// 今天\n } else {\n unref(condition).calcWays[0] = 'BEGIN'\n }\n } else if (tabItem.radioValue === '4') {\n unref(condition).calcWays[0] = 'END'\n }\n if (tabIndex === 0) {\n unref(condition).dateCalcTypes = ['YEAR']\n } else if (tabIndex === 1) {\n unref(condition).dateCalcTypes = ['QUARTER']\n } else if (tabIndex === 2) {\n unref(condition).dateCalcTypes = ['MONTH']\n } else if (tabIndex === 3) {\n unref(condition).dateCalcTypes = ['WEEK']\n } else if (tabIndex === 4) {\n unref(condition).dateCalcTypes = ['DAY']\n }\n popoverVisible.value = false\n }\n\n const okCustomConfig = () => {\n unref(condition).activeKey = 5\n unref(condition).dateCalcTypes = [unref(customTabData).unit]\n unref(condition).calcWays[0] = `${unref(customTabData).expression}-${unref(customTabData).around}`\n popoverVisible.value = false\n }\n\n function setTabItemData (tabItem: any, source: any) {\n const { radioValue = '', calcWays = [] } = source\n tabItem.radioValue = radioValue\n if (calcWays?.length) {\n if (radioValue === '1') {\n tabItem.beforeNum = Math.abs(calcWays[0])\n } else if (radioValue === '2') {\n tabItem.afterNum = calcWays[0]\n }\n }\n }\n\n // 相对时间设置\n function getDateValue (value: any, type: any, format: any, beforeNum: any, afterNum: any) {\n if (value === '1') {\n return dayjs().subtract(beforeNum, type).format(format)\n } else if (value === '2') {\n return dayjs().add(afterNum, type).format(format)\n } else if (value === '3') {\n if (type === 'years') {\n return dayjs().startOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().startOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().startOf('month').format(format)\n } else if (type === 'days') {\n return dayjs().format(format)\n }\n } else if (value === '4') {\n if (type === 'years') {\n return dayjs().endOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().endOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().endOf('month').format(format)\n }\n }\n return ''\n }\n\n const filterOption = (input: string, option: any) => {\n return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n\n const isShowCustomDataType = computed(() => unref(isDateType) || !['IN', 'NOT_IN'].includes(unref(condition).rule))\n\n const clickConditionMenu = ({ key }) => {\n addCondition(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n return {\n fieldOptions,\n ruleOptions,\n onFieldChange,\n condition,\n valueOptions,\n onRuleChange,\n onDataTypeChange,\n onFieldValueSelectChange,\n fieldValues,\n onDelete,\n isDateType,\n formatList,\n tabDateList,\n compareList,\n menuRule,\n dateBtnLabel,\n downIconStyle,\n popoverVisible,\n dateRadioStyle,\n showTime,\n controlList,\n keyNameOptions,\n dataTypeList,\n customTabData,\n isUseCurrentTime,\n currentTime,\n isShowCustomDataType,\n handleMenuClick,\n changeTabInitDate,\n changeRadioValue,\n getFieldValue,\n blurCompare,\n okDatePickConfig,\n onChangeComponent,\n filterOption,\n okCustomConfig,\n clickConditionMenu,\n dataSetfieldOptions,\n isConfigFlag\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 20%;\n margin-right: 10px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 10px;\n}\n\n.rule {\n width: 14%;\n}\n\n.delete-icon,\n.more-icon,\n.calendar-icon {\n margin-right: 10px;\n}\n\n.calendar-icon:hover {\n border-color: #1890ff;\n}\n\n.dropdown {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n padding-left: 11px;\n padding-right: 11px;\n}\n\n.popover-content-wrap {\n width: 400px;\n height: 300px;\n padding: 0 12px;\n .ant-tabs{\n height: 100%;\n .tabFilterRadio{\n display: flex;\n justify-content: center;\n height: 100%;\n }\n }\n}\n</style>\n<style lang=\"less\">\n.ant-dropdown-menu-title-content {\n white-space: nowrap;\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select\n class=\"field-name\"\n :value=\"condition.fieldName\"\n @change=\"onFieldChange\"\n >\n <template v-for=\"(option, _index) in fieldOptions\" :key=\"_index\">\n <a-select-option :value=\"option.value\">\n <span :title=\"option.label\">{{ option.label }}</span>\n </a-select-option>\n </template>\n </a-select>\n <div class=\"rule\">\n <!-- <a-dropdown class=\"dropdown\" v-if=\"isDateType\" :trigger=\"['click']\">\n <template #overlay>\n <a-menu @click=\"handleMenuClick\">\n <a-sub-menu\n v-for=\"item in ruleOptions\"\n :key=\"item.value\">\n <template #title>\n <span :style=\"condition.rule === item.value ? 'color: #1890FF;' : ''\">{{ item.label }}</span>\n </template>\n <a-sub-menu\n v-for=\"mr in menuRule\"\n :key=\"mr.value\"\n :disabled=\"mr.value === 'component' && !controlList?.length\">\n <template #title>\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value ? 'color: #1890FF;' : ''\">\n {{ mr.label }}\n </span>\n </template>\n <a-menu-item\n v-for=\"fl in formatList\"\n :key=\"fl.value\">\n <span :style=\"condition.rule === item.value && condition.dataType === mr.value && condition.dateFormat === fl.value ? 'color: #1890FF;' : ''\">\n {{ fl.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n </a-sub-menu>\n </a-menu>\n </template>\n <a-button>\n {{ dateBtnLabel }}\n <DownOutlined :style=\"downIconStyle\"/>\n </a-button>\n </a-dropdown> -->\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.rule\"\n :options=\"ruleOptions\"\n @change=\"onRuleChange\"\n >\n </a-select>\n </div>\n <div class=\"data-type\" v-show=\"isShowCustomDataType\">\n <a-select\n style=\"width: 100%;\"\n :value=\"condition.dataType\"\n @change=\"onDataTypeChange\"\n >\n <template v-for=\"(option, _index) in dataTypeList\" :key=\"_index\">\n <a-select-option :value=\"option.value\">{{ option.label }}</a-select-option>\n </template>\n </a-select>\n </div>\n <div class=\"field-value\" v-if=\"isDateType\" style=\"display: flex;align-items: center;\">\n <template v-if=\"!condition.dataType\">\n <a-date-picker\n v-if=\"isUseCurrentTime\"\n disabled\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n :value=\"currentTime\"\n :format=\"condition.dateFormat\"\n />\n <a-date-picker\n v-else\n style=\"width: calc(100% - 130px);margin-right: 10px;\"\n v-model:value=\"condition.fieldValue\"\n :format=\"condition.dateFormat\"\n />\n </template>\n <a-select\n show-search\n v-else\n :style=\"{\n width: condition.fieldValue === 'PARENT' ? '' : 'calc(100% - 130px)',\n marginRight: '10px'\n }\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <template v-if=\"condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <template v-if=\"isDateType\">\n <a-select\n class=\"field-value\"\n show-search\n style=\"margin: 0;width: 130px;\"\n placeholder=\"日期格式化\"\n v-model:value=\"condition.dateFormat\"\n :filter-option=\"filterOption\"\n :options=\"formatList\"\n >\n </a-select>\n </template>\n </div>\n <a-select\n class=\"field-value\"\n v-else-if=\"['IN', 'NOT_IN'].includes(condition.rule || '')\"\n :value=\"fieldValues\"\n mode=\"multiple\"\n :options=\"valueOptions\"\n @change=\"onFieldValueSelectChange\"\n >\n </a-select>\n <a-select\n class=\"field-value\"\n show-search\n v-else-if=\"isShowCustomDataType && condition.dataType === 'component'\"\n v-model:value=\"condition.fieldValue\"\n :filter-option=\"filterOption\"\n :options=\"keyNameOptions\"\n @change=\"onChangeComponent\"\n >\n </a-select>\n <a-input\n v-else\n class=\"field-value\"\n v-model:value=\"condition.fieldValue\"\n />\n <template v-if=\"!isDateType && condition.fieldValue === 'PARENT'\">\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.modelKey\"\n placeholder=\"组件别名\"\n style=\"margin: 0;\"\n />\n <a-input\n class=\"field-value\"\n v-model:value=\"condition.prop\"\n placeholder=\"属性名\"\n />\n </template>\n <appstore-add-outlined\n v-if=\"isDateType\"\n class=\"calendar-icon\"\n :style=\"{\n color: isUseCurrentTime || isConfigFlag ? '#1890ff' : ''\n }\"\n @click=\"popoverVisible = true;\"\n />\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\n <template #content>\n <div class=\"popover-content-wrap\">\n <div class=\"use-current-time\" v-if=\"condition.dataType !== 'component'\">\n <a-checkbox v-model:checked=\"isUseCurrentTime\">使用当前时间</a-checkbox>\n </div>\n <a-tabs :defaultActiveKey=\"condition.activeKey\" @change=\"changeTabInitDate\">\n <a-tab-pane v-for=\"(tabItem, tabIndex) in tabDateList\" :key=\"tabIndex\" :tab=\"tabItem.label\">\n <div class=\"tabFilterRadio\">\n <a-radio-group v-model:value=\"tabItem.radioValue\" @change=\"changeRadioValue($event,tabItem)\">\n <div v-if=\"showTime\">相对当前时间:{{tabItem.value}}</div>\n <div v-else>相对当前时间:{{getFieldValue(tabIndex)}}</div>\n <a-radio :style=\"dateRadioStyle\" value=\"1\">\n <a-input-number v-model:value=\"tabItem.beforeNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'-','1')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.beforeLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"2\">\n <a-input-number v-model:value=\"tabItem.afterNum\" :min=\"0\" @blur=\"blurCompare($event, tabItem,'+','2')\" />\n <span style=\"margin-left: 10px;\">{{tabItem.afterLabel}}</span>\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"3\" v-if=\"tabItem.beforeText\">\n {{tabItem.beforeText}}\n </a-radio>\n <a-radio :style=\"dateRadioStyle\" value=\"4\" v-if=\"tabItem.afterText\">\n {{tabItem.afterText}}\n </a-radio>\n </a-radio-group>\n <div style=\"position: absolute;bottom: 10px;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okDatePickConfig(tabItem,tabIndex)\">确定</a-button>\n </div>\n </div>\n </a-tab-pane>\n <!-- 自定义 -->\n <a-tab-pane tab=\"自定义\" :key=\"5\">\n <div style=\"display: flex;\">\n <a-select\n v-model:value=\"customTabData.expression\"\n allowClear\n style=\"width: 120px;margin-right: 10px;\"\n >\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.unit\" style=\"margin-right: 10px;\">\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"QUARTER\">季度</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"WEEK\">周</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select v-model:value=\"customTabData.around\">\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n </div>\n <div style=\"position: absolute;bottom: 10px;left: 0;text-align: center;width: 100%;\">\n <a-button style=\"margin-right:12px;\" @click=\"popoverVisible = false\">取消</a-button>\n <a-button @click=\"okCustomConfig\">确定</a-button>\n </div>\n </a-tab-pane>\n </a-tabs>\n </div>\n </template>\n </a-popover>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, ref, watch, onMounted } from 'vue'\nimport { CloseOutlined, AppstoreAddOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n Select as ASelect,\n SelectOption as ASelectOption,\n Input as AInput,\n DatePicker as ADatePicker,\n Button as AButton,\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Popover as APopover,\n Tabs as ATabs,\n TabPane as ATabPane,\n RadioGroup as ARadioGroup,\n Radio as ARadio,\n InputNumber as AInputNumber\n} from 'ant-design-vue'\nimport 'ant-design-vue/es/popover/style'\nimport 'ant-design-vue/es/dropdown/style'\nimport {\n REQUEST,\n INDICATOR_TOKEN,\n INDICATOR_URL,\n GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport { nanoid } from 'nanoid'\nimport dayjs, { Dayjs } from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport { cloneDeep } from 'lodash-es'\ndayjs.extend(quarterOfYear)\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n AppstoreAddOutlined,\n ASelect,\n AInput,\n ADatePicker,\n AButton,\n ADropdown,\n AMenu,\n AMenuItem,\n APopover,\n ATabs,\n ATabPane,\n ARadioGroup,\n ARadio,\n AInputNumber,\n ASelectOption,\n MenuOutlined\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n // @ts-ignore\n const PAGE_ID = window?.config?.pageId\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const dataViewColumns = inject(DATA_VIEW_COLUMNS) as any\n const renderComponents = inject(RENDER_USED_COMPONENTS) as any\n const isUseCurrentTime = ref(false)\n const currentTime = dayjs()\n const controlList = computed(() => {\n const result = []\n unref(renderComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`,\n id\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`,\n id\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`,\n id\n })\n }\n })\n return result\n })\n const keyNameOptions = computed(() => {\n return [\n {\n label: '父页面',\n value: 'PARENT',\n id: 'PARENT',\n keyName: 'PARENT'\n },\n ...unref(controlList)\n ]\n })\n const dataViewId = computed(() => unref(graphicConfig)?.dataViewId)\n const source = computed(() => unref(graphicConfig)?.source)\n // const isDataViewMode = computed(() => unref(source) === 'SQL_VIEW')\n const showTime = ref(false)\n const dateRadioStyle = {\n display: 'block',\n height: '34px',\n lineHeight: '34px',\n marginTop: '3px'\n }\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n const customTabData = ref({\n expression: 'rangeValue',\n unit: 'YEAR',\n around: 'before'\n })\n const tabDateList = ref([\n { key: 0, value: '', label: '年', type: 'years', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '年前', afterLabel: '年后', beforeText: '年初', afterText: '年末' },\n { key: 1, value: '', label: '季度', type: 'quarters', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个季度前', afterLabel: '个季度后', beforeText: '季度初', afterText: '季度末' },\n { key: 2, value: '', label: '月', type: 'months', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '个月前', afterLabel: '个月后', beforeText: '月初', afterText: '月末' },\n { key: 3, value: '', label: '周', type: 'weeks', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '周前', afterLabel: '周后', beforeText: '', afterText: '' },\n { key: 4, value: '', label: '天', type: 'days', radioValue: '1', beforeNum: 0, afterNum: 0, beforeLabel: '天前', afterLabel: '天后', beforeText: '今天', afterText: '' }\n ])\n const compareList = [\n { label: '年份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '季的季度', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '月的月份', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '周的周', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' },\n { label: '天的日期', text: '年', yearNum: 0, yearRule: 'before', otherNum: 0, otherRule: 'before' }\n ]\n const menuRule = [\n { label: '时间值', value: 'time' },\n { label: '过滤组件值', value: 'component' }\n ]\n const dataTypeList = [\n { label: '自定义值', value: '' },\n { label: '组件值', value: 'component' }\n ]\n // const { getDataList } = inject(DATA_LIST, {\n // getDataList: () => ([] as { key:string } [])\n // })\n interface Condition {\n fieldName: undefined | string\n fieldType: undefined | string\n rule: undefined | string\n id: undefined | string\n fieldValue: undefined | string | Dayjs\n label: string\n targetSource: string\n typeGuid: string\n indexCode: string\n indexCodeNum: string\n dateFormat?: string\n dataType?: string\n activeKey?: number\n radioValue?: string\n calcWays?: any\n dateCalcTypes?: any\n componentId?: string\n useCurrentTime?: boolean\n keyValue?: string\n modelKey?: string\n prop?: string\n edvDataSetId?: string\n }\n const condition = ref<Condition>({\n fieldName: props.data?.fieldName,\n fieldType: props.data?.fieldType,\n rule: props.data?.rule,\n id: props.data?.id,\n fieldValue: getDefaultFieldValue(),\n label: props.data?.label,\n // 暂时传空\n targetSource: '',\n typeGuid: props.data?.typeGuid,\n indexCode: props.data?.indexCode,\n indexCodeNum: props.data?.indexCodeNum,\n dataType: props.data?.dataType || '',\n componentId: props.data?.componentId || '',\n useCurrentTime: !!props.data?.useCurrentTime,\n keyValue: props.data?.keyValue,\n modelKey: props.data?.modelKey,\n prop: props.data?.prop\n })\n\n function getDefaultFieldValue () {\n const { fieldType = '', dataType = '', fieldValue = '' } = props.data\n if (fieldType === 'DATE' && !dataType) {\n return fieldValue ? dayjs(fieldValue) : fieldValue\n } else if (dataType === 'component') {\n const target = unref(controlList).find(v => v.keyName === fieldValue)\n if (target) {\n return target.value\n } else {\n return fieldValue\n }\n } else {\n return fieldValue\n }\n }\n const dataSetfieldOptions = ref([])\n\n const popoverVisible = ref(false)\n const isDateType = computed(() => condition.value.fieldType === 'DATE')\n const fieldOptions = computed(() => {\n const type = props.type\n const { source } = unref(graphicConfig)\n let result = []\n const dims = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const otherList = ['controlList', 'sqlConditions', 'variableList', 'variableConditions']\n if (source === 'EDV_DATA_SET') {\n // 获取当前使用数据集列表数据\n // const dataSetList = JSON.parse(sessionStorage.getItem('dataSetList'))\n // if (Array.isArray(dataSetList.dataViewColumns)) {\n // result = dataSetList.dataViewColumns.map(v => {\n // return {\n // datato: dataSetList.datato,\n // dataSetParams: dataSetList.dataSetParams,\n // ...v\n // }\n // })\n // }\n result = dataSetfieldOptions.value\n\n // eslint-disable-next-line vue/no-async-in-computed-properties\n // aw request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n // headers: {\n // Authentication: indicatorToken,\n // operateContext: 'ygt'\n // }\n // }).then((res: any) => {\n // if (res.data.success) {\n // console.log(res.data)\n // // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n // setTimeout(() => {\n // result = res.data.data.column.map((v:any) => {\n // return {\n // ...v,\n // genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n // edvDataSetId: res.data.data.id,\n // name: v.columnName,\n // label: v.columnName\n\n // }\n // })\n // })\n\n // console.log(result)\n // }\n // }).catch((err) => {\n // console.error(err)\n // })\n } else if (dims.includes(type)) {\n let options = [] as { key:string } []\n for (const key in unref(graphicConfig)) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), key) && !otherList.includes(key)) {\n const value = unref(graphicConfig)[key]\n if (Array.isArray(value)) {\n if (dims.includes(key)) {\n options = options.concat(value.filter(v => v.show))\n } else {\n options = options.concat(value)\n }\n }\n }\n }\n result = options\n } else if (['leftAxisList', 'rightAxisList', 'indicators'].includes(type)) {\n // return unref(getDataList())\n result = unref(dataViewColumns)\n }\n return result.map((v: any) => {\n return {\n ...v,\n label: v.label || v.title,\n value: v.name\n }\n })\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any}, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n watch(condition, (condition) => {\n const result = cloneDeep(condition)\n if (condition.fieldType === 'DATE' && condition.dataType !== 'component' && condition.fieldValue) {\n result.fieldValue = (condition.fieldValue as Dayjs).format(condition.dateFormat)\n }\n updateCondition(result, props.index, props.path)\n }, {\n deep: true\n })\n\n watch(isUseCurrentTime, (value: boolean) => {\n condition.value.fieldValue = ''\n condition.value.useCurrentTime = value\n })\n\n const onFieldChange = (value: string) => {\n const option = unref(fieldOptions).find(v => v.value === value) || {}\n const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n condition.value = {\n id,\n fieldName: name,\n fieldType: genericType,\n label,\n // 重置规则\n rule: '',\n fieldValue: genericType === 'DATE' ? null : undefined,\n targetSource: '',\n typeGuid,\n indexCode,\n edvDataSetId,\n indexCodeNum,\n dataType: '',\n useCurrentTime: false,\n keyValue: unref(condition)?.keyValue || nanoid(),\n modelKey: '',\n prop: ''\n }\n }\n const onChangeComponent = (value: string) => {\n const option = unref(controlList).find(v => v.value === value) || {}\n unref(condition).componentId = option.id || ''\n }\n const ruleOptions = computed(() => {\n const type = unref(condition).fieldType\n\n if (type === 'TEXT') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'NUMBER') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n // { label: '前N个', value: 'TOP' },\n // { label: '后N个', value: 'BOTTOM' }\n ]\n } else if (type === 'DATE') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n }\n })\n const dateBtnLabel = computed(() => {\n let result = ''\n const obj = unref(ruleOptions).find(item => item.value === unref(condition).rule)\n if (obj) {\n result = obj.label\n }\n return result\n })\n const downIconStyle = computed(() => {\n let style: any = {\n fontSize: '12px'\n }\n if (!unref(dateBtnLabel)) {\n style = {\n ...style,\n position: 'absolute',\n right: '11px',\n top: '9px'\n }\n }\n return style\n })\n const valueOptions = ref< { [key:string]: any } []>([])\n const handleValueOptions = async () => {\n if (unref(valueOptions).length > 0) return\n try {\n const res = await request.post(`${INDICATOR_URL}/diagram/groupvalue`, {\n source: unref(source),\n dataViewId: unref(dataViewId),\n groupColumn: unref(condition).fieldName,\n hrpIndexTypeGuid: unref(condition).typeGuid,\n pageId: PAGE_ID,\n pageFlag: true,\n edvDataSetId: unref(condition).edvDataSetId || ''\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n valueOptions.value = data?.slice(0, 200)?.map((item: string) => ({ label: item, value: item }))\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onRuleChange = (value: string) => {\n unref(condition).rule = value\n unref(condition).fieldValue = unref(condition).fieldType === 'DATE' ? null : undefined\n if (['IN', 'NOT_IN'].includes(value)) {\n handleValueOptions()\n }\n }\n const onDataTypeChange = (value: string) => {\n unref(condition).dataType = value\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n const fieldValues = ref<string []>()\n const onFieldValueSelectChange = (values: string []) => {\n fieldValues.value = values\n unref(condition).fieldValue = values?.join(',') || ''\n }\n\n const handleMenuClick = (data: any) => {\n const { keyPath } = data\n unref(condition).rule = keyPath[0]\n unref(condition).dataType = keyPath[1]\n unref(condition).dateFormat = keyPath[2]\n unref(condition).fieldValue = ''\n unref(condition).modelKey = ''\n unref(condition).prop = ''\n }\n\n onMounted(async () => {\n condition.value.dataType = props.data?.dataType || ''\n condition.value.componentId = props.data?.componentId || ''\n condition.value.keyValue = props.data?.keyValue\n condition.value.modelKey = props.data?.modelKey\n condition.value.prop = props.data?.prop\n if (unref(condition).fieldType === 'DATE') {\n const { activeKey, dateCalcTypes = [] } = props.data || {}\n unref(condition).dateFormat = props.data?.dateFormat\n unref(condition).activeKey = activeKey\n unref(condition).calcWays = props.data?.calcWays || []\n unref(condition).dateCalcTypes = dateCalcTypes\n if (unref(condition).useCurrentTime && unref(condition).dataType !== 'component') {\n // 使用当前时间\n isUseCurrentTime.value = true\n }\n if (activeKey === 5) {\n // 范围差值\n const calcWay = unref(condition).calcWays[0]\n if (calcWay) {\n const vals = calcWay.split('-')\n unref(customTabData).expression = vals[0]\n unref(customTabData).around = vals[1]\n }\n unref(customTabData).unit = dateCalcTypes[0] || 'YEAR'\n } else {\n unref(condition).radioValue = props.data?.radioValue || ''\n const tabItem = unref(tabDateList).find(item => item.key === props.data?.activeKey)\n if (tabItem) {\n setTabItemData(tabItem, props.data)\n }\n }\n } else {\n fieldValues.value = props.data?.fieldValue?.split(',') || []\n }\n const { fieldType, fieldName, rule } = condition.value\n if (fieldType !== 'DATE' && fieldName && rule && ['IN', 'NOT_IN'].includes(rule)) {\n handleValueOptions()\n }\n const { source } = unref(graphicConfig)\n if (source === 'EDV_DATA_SET') {\n await request.get(`${INDICATOR_URL}/dataset/` + unref(graphicConfig).edvDataSetId || '', {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }).then((res: any) => {\n if (res.data.success) {\n // console.log(res.data)\n // const { name, genericType, id, edvDataSetId, label, typeGuid, indexCode, indexCodeNum } = option\n dataSetfieldOptions.value = res.data.data.column.map((v:any) => {\n return {\n ...v,\n genericType: v.columnCategory === '0' ? 'TEXT' : v.columnCategory === '1' ? 'NUMBER' : 'DATE',\n edvDataSetId: res.data.data.id,\n name: v.columnName,\n label: v.columnName\n\n }\n })\n }\n }).catch((err) => {\n console.error(err)\n })\n }\n })\n\n // 时间相对配置Tab切换\n const changeTabInitDate = (activeKey: any) => {\n if (unref(condition).activeKey === activeKey) {\n unref(tabDateList)[activeKey].radioValue = unref(condition).radioValue\n if (unref(tabDateList)[unref(condition).activeKey]) {\n unref(tabDateList)[unref(condition).activeKey].radioValue = unref(condition).radioValue\n if (unref(condition).radioValue === '1') {\n unref(tabDateList)[activeKey].beforeNum = unref(condition).calcWays[0]\n } else if (unref(condition).radioValue === '2') {\n unref(tabDateList)[activeKey].afterNum = unref(condition).calcWays[0]\n }\n }\n return\n }\n unref(tabDateList).forEach(row => {\n row.beforeNum = 0\n row.afterNum = 0\n row.radioValue = '1'\n row.value = ''\n })\n }\n\n // 时间相对配置选中值改变\n const changeRadioValue = (e: any, tabItem: any) => {\n showTime.value = true\n const value = e.target.value\n const type = tabItem.type\n const format = unref(condition).dateFormat\n const beforeNum = Math.abs(tabItem.beforeNum)\n const afterNum = tabItem.afterNum\n tabItem.value = getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n const getFieldValue = (tabIndex: number) => {\n const activeKey = unref(condition).activeKey\n if (tabIndex !== activeKey) {\n return\n }\n let type = ''\n if (activeKey === 0) {\n type = 'years'\n } else if (activeKey === 1) {\n type = 'quarters'\n } else if (activeKey === 2) {\n type = 'months'\n } else if (activeKey === 3) {\n type = 'weeks'\n } else if (activeKey === 4) {\n type = 'days'\n }\n const format = unref(condition).dateFormat\n const value = unref(condition).radioValue\n let beforeNum = 0\n let afterNum = 0\n if (value === '1') {\n beforeNum = Math.abs(unref(condition).calcWays[0])\n } else if (value === '2') {\n afterNum = unref(condition).calcWays[0]\n }\n return getDateValue(value, type, format, beforeNum, afterNum)\n }\n\n // 时间相对配置中的比较失焦\n const blurCompare = (e: any, tabItem: any, flag: any, key: any) => {\n showTime.value = true\n if (tabItem.radioValue === key) {\n const value = e.target.value\n if (flag === '+') {\n tabItem.value = dayjs().add(value, tabItem.type).format(unref(condition).dateFormat)\n } else {\n tabItem.value = dayjs().subtract(value, tabItem.type).format(unref(condition).dateFormat)\n }\n }\n }\n\n const isConfigFlag = computed(() => {\n let result = false\n const { calcWays = [] } = unref(condition)\n const value = calcWays[0]\n if (value && parseFloat(value) !== 0) {\n result = true\n }\n return result\n })\n\n // 保存时间相对配置\n const okDatePickConfig = (tabItem: any, tabIndex: any) => {\n // if (unref(condition).fieldType !== 'DATE' || unref(condition).dataType !== 'component') {\n // condition.value.fieldValue = dayjs(tabItem.value, unref(condition).dateFormat)\n // }\n if (!unref(condition).calcWays) {\n unref(condition).calcWays = []\n }\n // condition.value.absoluteBool = true\n unref(condition).activeKey = tabIndex\n unref(condition).radioValue = tabItem.radioValue\n if (tabItem.radioValue === '1') {\n unref(condition).calcWays[0] = '-' + tabItem.beforeNum\n } else if (tabItem.radioValue === '2') {\n unref(condition).calcWays[0] = tabItem.afterNum\n } else if (tabItem.radioValue === '3') {\n if (tabIndex === 4) {\n unref(condition).calcWays[0] = '0'// 今天\n } else {\n unref(condition).calcWays[0] = 'BEGIN'\n }\n } else if (tabItem.radioValue === '4') {\n unref(condition).calcWays[0] = 'END'\n }\n if (tabIndex === 0) {\n unref(condition).dateCalcTypes = ['YEAR']\n } else if (tabIndex === 1) {\n unref(condition).dateCalcTypes = ['QUARTER']\n } else if (tabIndex === 2) {\n unref(condition).dateCalcTypes = ['MONTH']\n } else if (tabIndex === 3) {\n unref(condition).dateCalcTypes = ['WEEK']\n } else if (tabIndex === 4) {\n unref(condition).dateCalcTypes = ['DAY']\n }\n popoverVisible.value = false\n }\n\n const okCustomConfig = () => {\n unref(condition).activeKey = 5\n unref(condition).dateCalcTypes = [unref(customTabData).unit]\n unref(condition).calcWays[0] = `${unref(customTabData).expression}-${unref(customTabData).around}`\n popoverVisible.value = false\n }\n\n function setTabItemData (tabItem: any, source: any) {\n const { radioValue = '', calcWays = [] } = source\n tabItem.radioValue = radioValue\n if (calcWays?.length) {\n if (radioValue === '1') {\n tabItem.beforeNum = Math.abs(calcWays[0])\n } else if (radioValue === '2') {\n tabItem.afterNum = calcWays[0]\n }\n }\n }\n\n // 相对时间设置\n function getDateValue (value: any, type: any, format: any, beforeNum: any, afterNum: any) {\n if (value === '1') {\n return dayjs().subtract(beforeNum, type).format(format)\n } else if (value === '2') {\n return dayjs().add(afterNum, type).format(format)\n } else if (value === '3') {\n if (type === 'years') {\n return dayjs().startOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().startOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().startOf('month').format(format)\n } else if (type === 'days') {\n return dayjs().format(format)\n }\n } else if (value === '4') {\n if (type === 'years') {\n return dayjs().endOf('year').format(format)\n } else if (type === 'quarters') {\n return dayjs().endOf('quarter').format(format)\n } else if (type === 'months') {\n return dayjs().endOf('month').format(format)\n }\n }\n return ''\n }\n\n const filterOption = (input: string, option: any) => {\n return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n\n const isShowCustomDataType = computed(() => unref(isDateType) || !['IN', 'NOT_IN'].includes(unref(condition).rule))\n\n const clickConditionMenu = ({ key }) => {\n addCondition(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n return {\n fieldOptions,\n ruleOptions,\n onFieldChange,\n condition,\n valueOptions,\n onRuleChange,\n onDataTypeChange,\n onFieldValueSelectChange,\n fieldValues,\n onDelete,\n isDateType,\n formatList,\n tabDateList,\n compareList,\n menuRule,\n dateBtnLabel,\n downIconStyle,\n popoverVisible,\n dateRadioStyle,\n showTime,\n controlList,\n keyNameOptions,\n dataTypeList,\n customTabData,\n isUseCurrentTime,\n currentTime,\n isShowCustomDataType,\n handleMenuClick,\n changeTabInitDate,\n changeRadioValue,\n getFieldValue,\n blurCompare,\n okDatePickConfig,\n onChangeComponent,\n filterOption,\n okCustomConfig,\n clickConditionMenu,\n dataSetfieldOptions,\n isConfigFlag\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 20%;\n margin-right: 10px;\n}\n\n.field-value {\n flex: 1;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 10px;\n}\n\n.rule {\n width: 14%;\n}\n\n.delete-icon,\n.more-icon,\n.calendar-icon {\n margin-right: 10px;\n}\n\n.calendar-icon:hover {\n border-color: #1890ff;\n}\n\n.dropdown {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n padding-left: 11px;\n padding-right: 11px;\n}\n\n.popover-content-wrap {\n width: 400px;\n height: 300px;\n padding: 0 12px;\n .ant-tabs{\n height: 100%;\n .tabFilterRadio{\n display: flex;\n justify-content: center;\n height: 100%;\n }\n }\n}\n</style>\n<style lang=\"less\">\n.ant-dropdown-menu-title-content {\n white-space: nowrap;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n :type=\"type\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.keyValue || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n :type=\"type\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n :type=\"type\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.keyValue || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n :type=\"type\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n type: {\n type: String,\n default: ''\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\r\n <div class=\"truncations\">\r\n <!-- <div class=\"title\">截断配置</div> -->\r\n <div\r\n class=\"item\"\r\n v-for=\"(item, _index) in truncationList\"\r\n :key=\"_index\"\r\n >\r\n <div class=\"rule\">\r\n <a-select\r\n style=\"width: 100%;\"\r\n v-model:value=\"item.rule\"\r\n :options=\"ruleOptions\"\r\n >\r\n </a-select>\r\n </div>\r\n <div class=\"field-value\">\r\n N=\r\n <a-input-number v-model:value=\"item.num\" :min=\"0\" />\r\n </div>\r\n <div class=\"field-value\">\r\n <div class=\"text\">将其余项设为</div>\r\n <a-input v-model:value=\"item.name\" style=\"width: 100px;margin: 0 10px;\"/>\r\n <div class=\"text\">分组</div>\r\n </div>\r\n <div class=\"clear-truncation\" @click=\"clearData(item)\">清空</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Input as AInput,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'TruncationList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AInput,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const ruleOptions = [\r\n { label: '前N个', value: 'TOP' },\r\n { label: '后N个', value: 'BOTTOM' }\r\n ]\r\n const truncationList = ref<any[]>([])\r\n watch(truncationList, (val) => {\r\n if (val?.length) {\r\n emit('update', val)\r\n }\r\n }, {\r\n deep: true\r\n })\r\n onMounted(() => {\r\n if (props.list?.length) {\r\n truncationList.value = cloneDeep(props.list)\r\n } else {\r\n truncationList.value = [{\r\n num: 0,\r\n rule: '',\r\n name: '其他'\r\n }]\r\n }\r\n })\r\n\r\n const clearData = (item: any) => {\r\n item.rule = ''\r\n item.num = 0\r\n item.name = ''\r\n }\r\n return {\r\n ruleOptions,\r\n truncationList,\r\n clearData\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.truncations {\r\n width: 100%;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n border: 1px solid #e8e8e8;\r\n padding: 8px;\r\n .title {\r\n font-size: 16px;\r\n color: #333;\r\n padding-bottom: 8px;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .field-value {\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n .text {\r\n word-break: keep-all;\r\n }\r\n }\r\n\r\n .rule {\r\n width: 180px;\r\n }\r\n\r\n .clear-truncation {\r\n margin: auto 0 auto auto;\r\n color: red;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n &:hover {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"truncations\">\r\n <!-- <div class=\"title\">截断配置</div> -->\r\n <div\r\n class=\"item\"\r\n v-for=\"(item, _index) in truncationList\"\r\n :key=\"_index\"\r\n >\r\n <div class=\"rule\">\r\n <a-select\r\n style=\"width: 100%;\"\r\n v-model:value=\"item.rule\"\r\n :options=\"ruleOptions\"\r\n >\r\n </a-select>\r\n </div>\r\n <div class=\"field-value\">\r\n N=\r\n <a-input-number v-model:value=\"item.num\" :min=\"0\" />\r\n </div>\r\n <div class=\"field-value\">\r\n <div class=\"text\">将其余项设为</div>\r\n <a-input v-model:value=\"item.name\" style=\"width: 100px;margin: 0 10px;\"/>\r\n <div class=\"text\">分组</div>\r\n </div>\r\n <div class=\"clear-truncation\" @click=\"clearData(item)\">清空</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent, onMounted, ref, watch } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Input as AInput,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'TruncationList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AInput,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const ruleOptions = [\r\n { label: '前N个', value: 'TOP' },\r\n { label: '后N个', value: 'BOTTOM' }\r\n ]\r\n const truncationList = ref<any[]>([])\r\n watch(truncationList, (val) => {\r\n if (val?.length) {\r\n emit('update', val)\r\n }\r\n }, {\r\n deep: true\r\n })\r\n onMounted(() => {\r\n if (props.list?.length) {\r\n truncationList.value = cloneDeep(props.list)\r\n } else {\r\n truncationList.value = [{\r\n num: 0,\r\n rule: '',\r\n name: '其他'\r\n }]\r\n }\r\n })\r\n\r\n const clearData = (item: any) => {\r\n item.rule = ''\r\n item.num = 0\r\n item.name = ''\r\n }\r\n return {\r\n ruleOptions,\r\n truncationList,\r\n clearData\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.truncations {\r\n width: 100%;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n border: 1px solid #e8e8e8;\r\n padding: 8px;\r\n .title {\r\n font-size: 16px;\r\n color: #333;\r\n padding-bottom: 8px;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n }\r\n .field-value {\r\n display: flex;\r\n align-items: center;\r\n margin-left: 20px;\r\n .text {\r\n word-break: keep-all;\r\n }\r\n }\r\n\r\n .rule {\r\n width: 180px;\r\n }\r\n\r\n .clear-truncation {\r\n margin: auto 0 auto auto;\r\n color: red;\r\n cursor: pointer;\r\n opacity: 0.7;\r\n &:hover {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\n <a-modal\n :title=\"handleTitle()\"\n :visible=\"visible\"\n destroy-on-close\n width=\"60%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n paddingTop: '10px'\n }\"\n :closable=\"false\"\n @ok=\"onOk\"\n @cancel=\"onCancel\"\n >\n <a-tabs v-model:activeKey=\"activeKey\" v-if=\"['classificationList', 'rowHeaderList', 'dimensionList'].includes(type)\">\n <a-tab-pane key=\"1\" tab=\"过滤条件\" style=\"overflow: auto;\">\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"截断配置\">\n <truncation-list\n :list=\"truncationList\"\n @update=\"onUpdatetruncation\"\n />\n </a-tab-pane>\n </a-tabs>\n <template v-else>\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, provide, watch, inject, computed } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Tabs as ATabs,\n TabPane as ATabPane\n} from 'ant-design-vue'\nimport ConditionList from './ConditionList.vue'\nimport TruncationList from './TruncationList.vue'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n SOURCE_TYPE\n} from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { getConditions, getEventName, getSqlConditions } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'FilterModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ConditionList,\n TruncationList,\n AModal,\n AButton,\n ATabs,\n ATabPane\n },\n setup (props, { expose }) {\n const activeKey = ref('1')\n const handleTitle = () => `添加过滤条件-${props.item?.label || ''}`\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const dataSourceId = computed(() => unref(graphicConfig)?.dataSourceId)\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const conditionList = ref<{ [key: string]: any } []>([])\n const truncationList = ref<{ [key: string]: any } []>([])\n const visible = ref(false)\n const source = inject(SOURCE_TYPE)\n const addKeyValue = (conditions: { [key: string]: any } []) => {\n for (const item of conditions) {\n if (item.conditions?.length) {\n addKeyValue(item.conditions)\n } else {\n item.keyValue = nanoid()\n if (item.dataType === 'time') {\n item.dataType = ''\n }\n }\n }\n }\n\n watch(visible, (visible) => {\n if (visible) {\n if (Array.isArray(props.item?.conditions)) {\n const conditions = cloneDeep(props.item?.conditions || [])\n addKeyValue(conditions)\n conditionList.value = conditions\n }\n if (Array.isArray(props.item?.truncations)) {\n truncationList.value = cloneDeep(props.item?.truncations) || []\n } else {\n truncationList.value = [{\n rule: '',\n num: 0,\n name: '其他'\n }]\n }\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n let isDataChange = false\n const addCondition = (join?: '||' | '&&') => {\n isDataChange = true\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\n conditionList.value = [{}]\n } else if (unref(conditionList)[0] != null) {\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\n conditionList.value = [{\n join,\n conditions: [\n unref(conditionList)[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\n conditionList.value[0].conditions.push({\n keyValue: nanoid()\n })\n }\n }\n }\n provide(CHANGE_CONDITION, {\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = condition\n }\n },\n deleteCondition (index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = unref(conditionList)\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n conditionList.value = []\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // if (Array.isArray(conditions) && conditions[index]) {\n // conditions.splice(index, 1)\n // if (conditions.length === 1) {\n // let wrapperConditions = unref(conditionList)\n // const wrapperLevel = level - 2 > 0 ? level - 2 : 0\n // for (let i = 0; i < wrapperLevel; i++) {\n // if (wrapperConditions[0]) {\n // wrapperConditions = wrapperConditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // // 合并\n // if (wrapperConditions[0].join === conditions[0].join) {\n // // 最外层合并 (需要搞清数据结构)\n // wrapperConditions[0].conditions = [\n // ...conditions[0].conditions,\n // ...wrapperConditions[0].conditions.slice(1)\n // ]\n // } else {\n // // 当前 conditions[0].join 无条件说明是第一层,直接替换\n // wrapperConditions[0] = conditions[0]\n // }\n // }\n // }\n },\n addCondition (path: string, index: number, join: '||' | '&&') {\n isDataChange = true\n let conditions = unref(conditionList)\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n }\n }\n })\n const onUpdatetruncation = (list: any[]) => {\n isDataChange = true\n truncationList.value = list\n }\n const renderControlList = computed(() => {\n const result = []\n unref(renderUsedComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`\n })\n }\n })\n return result\n })\n const updateFilter = () => {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const oldConditions = getConditions(cloneDeep(list[props.index].conditions))\n list[props.index].conditions = unref(conditionList)\n if (['classificationList', 'rowHeaderList', 'dimensionList'].includes(props.type) && unref(truncationList)?.length) {\n list[props.index].truncations = unref(truncationList)\n }\n const conditions = getConditions(unref(conditionList))\n for (const item of conditions) {\n if (item.dataType === 'component' && item.fieldValue) {\n const target = unref(renderControlList).find(v => v.value === item.fieldValue)\n if (target) {\n item.fieldValue = target.keyName\n }\n }\n }\n // 待删除的交互组件\n const pendingDelete =\n oldConditions\n .filter(v => !conditions.find(f => f.componentId === v.componentId))\n .filter(v => !controlList.find(f => f.id === v.componentId))\n // 待新增的交互组件\n const pendingAdd =\n conditions\n .filter(v => !oldConditions.find(f => f.componentId === v.componentId))\n setEvent(pendingDelete, pendingAdd)\n updateGraphicConfig({\n [props.type]: list,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n [props.type]: list\n }, unref(renderUsedComponents))\n })\n }\n\n // 设置目标组件的交互,刷新当前选中组件\n function setEvent (deletes: any, adds: any) {\n const result = deletes.map(v => {\n return {\n ...v,\n delete: true\n }\n }).concat(adds.map(v => {\n return {\n ...v,\n add: true\n }\n }))\n for (const item of result) {\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n if (item.add) {\n if (!events.find((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n } else if (item.delete) {\n const index = events.findIndex((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n }\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n conditionList.value = []\n visible.value = false\n }\n const onOk = () => {\n if (isDataChange) updateFilter()\n isDataChange = false\n hideModal()\n }\n const onCancel = () => {\n hideModal()\n }\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n const dataViewColumns = ref([])\n provide(DATA_VIEW_COLUMNS, dataViewColumns)\n const getHrpIndexWithComplex = async (indtData: any) => {\n if (!['leftAxisList', 'rightAxisList', 'indicators', 'queryColumnList'].includes(props.type)) return\n try {\n const { id: indexGuid, indexCode } = indtData\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n pageId: PAGE_ID,\n dataSourceId: unref(dataSourceId),\n // hrpIndexGuid: indexGuid,\n indexGuid,\n indexCode\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n dataViewColumns.value = data.dataViewColumns\n .map((column: { [key: string]: any }) => {\n return {\n ...column,\n label: column.title || column.label\n }\n })\n }\n } catch (e) {\n console.error(e)\n }\n }\n watch(() => props.item, (data: any) => {\n if (data && visible.value && unref(source) !== 'EDV_DATA_SET') {\n getHrpIndexWithComplex(data)\n }\n })\n expose({\n showModal\n })\n return {\n visible,\n onOk,\n onCancel,\n handleTitle,\n conditionList,\n truncationList,\n addCondition,\n onUpdatetruncation,\n activeKey,\n source\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 30px;\n}\n.add-and-condition {\n width: 100px;\n margin-right: 15px;\n}\n.add-or-condition {\n width: 100px;\n}\n\n</style>\n","<template>\n <a-modal\n :title=\"handleTitle()\"\n :visible=\"visible\"\n destroy-on-close\n width=\"60%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n paddingTop: '10px'\n }\"\n :closable=\"false\"\n @ok=\"onOk\"\n @cancel=\"onCancel\"\n >\n <a-tabs v-model:activeKey=\"activeKey\" v-if=\"['classificationList', 'rowHeaderList', 'dimensionList'].includes(type)\">\n <a-tab-pane key=\"1\" tab=\"过滤条件\" style=\"overflow: auto;\">\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </a-tab-pane>\n <a-tab-pane key=\"2\" tab=\"截断配置\">\n <truncation-list\n :list=\"truncationList\"\n @update=\"onUpdatetruncation\"\n />\n </a-tab-pane>\n </a-tabs>\n <template v-else>\n <div class=\"header\">\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\n <a-button\n class=\"add-and-condition\"\n @click=\"addCondition('&&')\"\n >\n 添加且条件\n </a-button>\n <a-button\n class=\"add-or-condition\"\n @click=\"addCondition('||')\"\n >\n 添加或条件\n </a-button>\n </template>\n <a-button @click=\"addCondition()\" v-else>\n 添加条件\n </a-button>\n </div>\n <condition-list\n class=\"condition-list\"\n :list=\"conditionList\"\n :level=\"0\"\n :type=\"type\"\n />\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, provide, watch, inject, computed } from 'vue'\nimport {\n Modal as AModal,\n Button as AButton,\n Tabs as ATabs,\n TabPane as ATabPane\n} from 'ant-design-vue'\nimport ConditionList from './ConditionList.vue'\nimport TruncationList from './TruncationList.vue'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n CHANGE_CONDITION,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n DATA_VIEW_COLUMNS,\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n SOURCE_TYPE\n} from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { getConditions, getEventName, getSqlConditions } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'FilterModal',\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ConditionList,\n TruncationList,\n AModal,\n AButton,\n ATabs,\n ATabPane\n },\n setup (props, { expose }) {\n const activeKey = ref('1')\n const handleTitle = () => `添加过滤条件-${props.item?.label || ''}`\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const dataSourceId = computed(() => unref(graphicConfig)?.dataSourceId)\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const conditionList = ref<{ [key: string]: any } []>([])\n const truncationList = ref<{ [key: string]: any } []>([])\n const visible = ref(false)\n const source = inject(SOURCE_TYPE)\n const addKeyValue = (conditions: { [key: string]: any } []) => {\n for (const item of conditions) {\n if (item.conditions?.length) {\n addKeyValue(item.conditions)\n } else {\n item.keyValue = nanoid()\n if (item.dataType === 'time') {\n item.dataType = ''\n }\n }\n }\n }\n\n watch(visible, (visible) => {\n if (visible) {\n if (Array.isArray(props.item?.conditions)) {\n const conditions = cloneDeep(props.item?.conditions || [])\n addKeyValue(conditions)\n conditionList.value = conditions\n }\n if (Array.isArray(props.item?.truncations)) {\n truncationList.value = cloneDeep(props.item?.truncations) || []\n } else {\n truncationList.value = [{\n rule: '',\n num: 0,\n name: '其他'\n }]\n }\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!visible)\n }\n }, {\n flush: 'post'\n })\n let isDataChange = false\n const addCondition = (join?: '||' | '&&') => {\n isDataChange = true\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\n conditionList.value = [{}]\n } else if (unref(conditionList)[0] != null) {\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\n conditionList.value = [{\n join,\n conditions: [\n unref(conditionList)[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\n conditionList.value[0].conditions.push({\n keyValue: nanoid()\n })\n }\n }\n }\n provide(CHANGE_CONDITION, {\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = condition\n }\n },\n deleteCondition (index: number, path: string) {\n isDataChange = true\n let conditions = unref(conditionList)\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = unref(conditionList)\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n conditionList.value = []\n }\n }\n }\n // for (let i = 0; i < level; i++) {\n // if (conditions[0]) {\n // conditions = conditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // if (Array.isArray(conditions) && conditions[index]) {\n // conditions.splice(index, 1)\n // if (conditions.length === 1) {\n // let wrapperConditions = unref(conditionList)\n // const wrapperLevel = level - 2 > 0 ? level - 2 : 0\n // for (let i = 0; i < wrapperLevel; i++) {\n // if (wrapperConditions[0]) {\n // wrapperConditions = wrapperConditions[0]?.conditions as { [key:string]: any } []\n // } else {\n // break\n // }\n // }\n // // 合并\n // if (wrapperConditions[0].join === conditions[0].join) {\n // // 最外层合并 (需要搞清数据结构)\n // wrapperConditions[0].conditions = [\n // ...conditions[0].conditions,\n // ...wrapperConditions[0].conditions.slice(1)\n // ]\n // } else {\n // // 当前 conditions[0].join 无条件说明是第一层,直接替换\n // wrapperConditions[0] = conditions[0]\n // }\n // }\n // }\n },\n addCondition (path: string, index: number, join: '||' | '&&') {\n isDataChange = true\n let conditions = unref(conditionList)\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n }\n }\n })\n const onUpdatetruncation = (list: any[]) => {\n isDataChange = true\n truncationList.value = list\n }\n const renderControlList = computed(() => {\n const result = []\n unref(renderUsedComponents)?.forEach((item: any) => {\n const { keyName = '', id = '', type } = item\n if (type === 'ecanRangePicker') {\n result.push({\n value: `${id}-startTime`,\n label: `${keyName || id}-开始时间值`,\n keyName: `${keyName || id}-startTime`\n }, {\n value: `${id}-endTime`,\n label: `${keyName || id}-结束时间值`,\n keyName: `${keyName || id}-endTime`\n })\n } else {\n result.push({\n value: id,\n label: `${keyName || id}`,\n keyName: `${keyName || id}`\n })\n }\n })\n return result\n })\n const updateFilter = () => {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n const list = (unref(graphicConfig)[props.type])?.slice() || []\n const oldConditions = getConditions(cloneDeep(list[props.index].conditions))\n list[props.index].conditions = unref(conditionList)\n if (['classificationList', 'rowHeaderList', 'dimensionList'].includes(props.type) && unref(truncationList)?.length) {\n list[props.index].truncations = unref(truncationList)\n }\n const conditions = getConditions(unref(conditionList))\n for (const item of conditions) {\n if (item.dataType === 'component' && item.fieldValue) {\n const target = unref(renderControlList).find(v => v.value === item.fieldValue)\n if (target) {\n item.fieldValue = target.keyName\n }\n }\n }\n // 待删除的交互组件\n const pendingDelete =\n oldConditions\n .filter(v => !conditions.find(f => f.componentId === v.componentId))\n .filter(v => !controlList.find(f => f.id === v.componentId))\n // 待新增的交互组件\n const pendingAdd =\n conditions\n .filter(v => !oldConditions.find(f => f.componentId === v.componentId))\n setEvent(pendingDelete, pendingAdd)\n updateGraphicConfig({\n [props.type]: list,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n [props.type]: list\n }, unref(renderUsedComponents))\n })\n }\n\n // 设置目标组件的交互,刷新当前选中组件\n function setEvent (deletes: any, adds: any) {\n const result = deletes.map(v => {\n return {\n ...v,\n delete: true\n }\n }).concat(adds.map(v => {\n return {\n ...v,\n add: true\n }\n }))\n for (const item of result) {\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n if (item.add) {\n if (!events.find((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n } else if (item.delete) {\n const index = events.findIndex((e: any) =>\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n }\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n conditionList.value = []\n visible.value = false\n }\n const onOk = () => {\n if (isDataChange) updateFilter()\n isDataChange = false\n hideModal()\n }\n const onCancel = () => {\n hideModal()\n }\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n const dataViewColumns = ref([])\n provide(DATA_VIEW_COLUMNS, dataViewColumns)\n const getHrpIndexWithComplex = async (indtData: any) => {\n if (!['leftAxisList', 'rightAxisList', 'indicators', 'queryColumnList'].includes(props.type)) return\n try {\n const { id: indexGuid, indexCode } = indtData\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n pageId: PAGE_ID,\n dataSourceId: unref(dataSourceId),\n // hrpIndexGuid: indexGuid,\n indexGuid,\n indexCode\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n dataViewColumns.value = data.dataViewColumns\n .map((column: { [key: string]: any }) => {\n return {\n ...column,\n label: column.title || column.label\n }\n })\n }\n } catch (e) {\n console.error(e)\n }\n }\n watch(() => props.item, (data: any) => {\n if (data && visible.value && unref(source) !== 'EDV_DATA_SET') {\n getHrpIndexWithComplex(data)\n }\n })\n expose({\n showModal\n })\n return {\n visible,\n onOk,\n onCancel,\n handleTitle,\n conditionList,\n truncationList,\n addCondition,\n onUpdatetruncation,\n activeKey,\n source\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 30px;\n}\n.add-and-condition {\n width: 100px;\n margin-right: 15px;\n}\n.add-or-condition {\n width: 100px;\n}\n\n</style>\n","<template>\r\n <a-modal\r\n title=\"配置展示名称\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"config-name\">\r\n <div style=\"word-break: keep-all;\">名称:</div>\r\n <a-input v-model:value=\"fieldName\" />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Input as AInput,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'ConfigName',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n AInput,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const showModal = (item: any) => {\r\n const { showLabel = '', label = '' } = item\r\n fieldName.value = showLabel || label || ''\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].showLabel = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n fieldName\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-name {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置展示名称\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"config-name\">\r\n <div style=\"word-break: keep-all;\">名称:</div>\r\n <a-input v-model:value=\"fieldName\" />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Input as AInput,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'ConfigName',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n AInput,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const showModal = (item: any) => {\r\n const { showLabel = '', label = '' } = item\r\n fieldName.value = showLabel || label || ''\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].showLabel = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n fieldName\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-name {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联组件排序\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"sort-by-cpnt\">\r\n <div style=\"word-break: keep-all;\">控件:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n mode=\"multiple\"\r\n style=\"width: 100%;\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref, computed } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n RENDER_USED_COMPONENTS,\r\n SELECTED_COMPONENT,\r\n UPDATE_USED_COMPONENT\r\n} from '@/utils/constant'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { getEventName, getConditions } from '@/utils/util'\r\nexport default defineComponent({\r\n name: 'SortByCpnt',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\r\n const fieldName = ref()\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n let oldData = []\r\n const showModal = (item: any) => {\r\n const { sortCpnts = [] } = item\r\n oldData = cloneDeep(sortCpnts)\r\n fieldName.value = cloneDeep(sortCpnts)\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n // 设置关联组件的交互事件\r\n const setEvent = () => {\r\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\r\n // 待删除的交互组件\r\n const pendingDelete =\r\n oldData\r\n .filter(v => !unref(fieldName).includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n // 待新增的交互组件\r\n const pendingAdd =\r\n unref(fieldName)\r\n .filter(v => !oldData.includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n const result: any = pendingDelete.map(v => {\r\n return {\r\n componentId: v,\r\n delete: true\r\n }\r\n }).concat(pendingAdd.map(v => {\r\n return {\r\n componentId: v,\r\n add: true\r\n }\r\n }))\r\n for (const item of result) {\r\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\r\n if (component) {\r\n const { type, id, events = [] } = component\r\n const event = getEventName(type)\r\n if (item.add) {\r\n if (!events.find((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\r\n updateUsedComponent({\r\n id,\r\n events: [...events, {\r\n on: event,\r\n target: unref(selectedComponent)?.id,\r\n emit: 'refreshData'\r\n }].reverse()\r\n })\r\n }\r\n } else if (item.delete) {\r\n const index = events.findIndex((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\r\n if (index !== -1) {\r\n events.splice(index, 1)\r\n updateUsedComponent({\r\n id,\r\n events\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onOk = () => {\r\n setEvent()\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].sortCpnts = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n usedComponentList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.sort-by-cpnt {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联组件排序\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"sort-by-cpnt\">\r\n <div style=\"word-break: keep-all;\">控件:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n mode=\"multiple\"\r\n style=\"width: 100%;\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref, computed } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n RENDER_USED_COMPONENTS,\r\n SELECTED_COMPONENT,\r\n UPDATE_USED_COMPONENT\r\n} from '@/utils/constant'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { getEventName, getConditions } from '@/utils/util'\r\nexport default defineComponent({\r\n name: 'SortByCpnt',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\r\n const fieldName = ref()\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n let oldData = []\r\n const showModal = (item: any) => {\r\n const { sortCpnts = [] } = item\r\n oldData = cloneDeep(sortCpnts)\r\n fieldName.value = cloneDeep(sortCpnts)\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n // 设置关联组件的交互事件\r\n const setEvent = () => {\r\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\r\n // 待删除的交互组件\r\n const pendingDelete =\r\n oldData\r\n .filter(v => !unref(fieldName).includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n // 待新增的交互组件\r\n const pendingAdd =\r\n unref(fieldName)\r\n .filter(v => !oldData.includes(v))\r\n .filter(v => !controlList.find(f => f.id === v))\r\n const result: any = pendingDelete.map(v => {\r\n return {\r\n componentId: v,\r\n delete: true\r\n }\r\n }).concat(pendingAdd.map(v => {\r\n return {\r\n componentId: v,\r\n add: true\r\n }\r\n }))\r\n for (const item of result) {\r\n const component = unref(renderUsedComponents).find(v => v.id === item.componentId)\r\n if (component) {\r\n const { type, id, events = [] } = component\r\n const event = getEventName(type)\r\n if (item.add) {\r\n if (!events.find((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')) {\r\n updateUsedComponent({\r\n id,\r\n events: [...events, {\r\n on: event,\r\n target: unref(selectedComponent)?.id,\r\n emit: 'refreshData'\r\n }].reverse()\r\n })\r\n }\r\n } else if (item.delete) {\r\n const index = events.findIndex((e: any) =>\r\n e.on === event && e.target === unref(selectedComponent)?.id && e.emit === 'refreshData')\r\n if (index !== -1) {\r\n events.splice(index, 1)\r\n updateUsedComponent({\r\n id,\r\n events\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onOk = () => {\r\n setEvent()\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].sortCpnts = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n usedComponentList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.sort-by-cpnt {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联维度\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"dim-by-count\">\r\n <div style=\"word-break: keep-all;\">维度:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n style=\"width: 100%;\"\r\n :options=\"dimensionList\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG\r\n} from '@/utils/constant'\r\n// import { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'DimByCount',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const dimensionList = ref([])\r\n\r\n const showModal = (item: any, columns: any) => {\r\n const { dimByCount = '' } = item\r\n fieldName.value = dimByCount\r\n dimensionList.value = columns\r\n .filter((v: any) => ['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(v.scope))\r\n .map((v: any) => ({\r\n label: v.title || v.name,\r\n value: v.typeGuid\r\n }))\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].dimByCount = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n dimensionList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.dim-by-count {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n title=\"配置关联维度\"\r\n :visible=\"visible\"\r\n destroy-on-close\r\n width=\"30%\"\r\n :bodyStyle=\"{\r\n overflow: 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n paddingTop: '10px'\r\n }\"\r\n :closable=\"false\"\r\n @ok=\"onOk\"\r\n @cancel=\"onCancel\"\r\n >\r\n <div class=\"dim-by-count\">\r\n <div style=\"word-break: keep-all;\">维度:</div>\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"fieldName\"\r\n style=\"width: 100%;\"\r\n :options=\"dimensionList\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n />\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, unref } from 'vue'\r\nimport {\r\n Select as ASelect,\r\n Modal as AModal\r\n} from 'ant-design-vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG\r\n} from '@/utils/constant'\r\n// import { cloneDeep } from 'lodash-es'\r\nexport default defineComponent({\r\n name: 'DimByCount',\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 卡片类型\r\n type: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n components: {\r\n ASelect,\r\n AModal\r\n },\r\n setup (props, { expose }) {\r\n const visible = ref(false)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const fieldName = ref()\r\n const dimensionList = ref([])\r\n\r\n const showModal = (item: any, columns: any) => {\r\n const { dimByCount = '' } = item\r\n fieldName.value = dimByCount\r\n dimensionList.value = columns\r\n .filter((v: any) => ['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(v.scope))\r\n .map((v: any) => ({\r\n label: v.title || v.name,\r\n value: v.typeGuid\r\n }))\r\n visible.value = true\r\n }\r\n const hideModal = () => {\r\n visible.value = false\r\n }\r\n\r\n const onOk = () => {\r\n const list = (unref(graphicConfig)[props.type])?.slice() || []\r\n list[props.index].dimByCount = fieldName.value\r\n updateGraphicConfig({\r\n [props.type]: list\r\n })\r\n hideModal()\r\n }\r\n const onCancel = () => {\r\n hideModal()\r\n }\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n expose({\r\n showModal\r\n })\r\n return {\r\n visible,\r\n onOk,\r\n onCancel,\r\n idFilterOption,\r\n fieldName,\r\n dimensionList\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.dim-by-count {\r\n display: flex;\r\n align-items: center;\r\n padding-top: 10px;\r\n}\r\n</style>\r\n","<template>\n <div class=\"formula-calculation\">\n <a-row style=\"height: 100%\">\n <a-col :span=\"6\">\n <div class=\"field-area\">\n <div style=\"text-align: center;padding: 10px 0;\">\n <a-radio-group v-model:value=\"activeKey\" size=\"small\">\n <a-radio-button value=\"1\">数值字段({{ fieldList.length }})</a-radio-button>\n <a-radio-button value=\"2\">全局变量({{ varList.length }})</a-radio-button>\n </a-radio-group>\n </div>\n <template v-if=\"activeKey === '1'\">\n <div\n class=\"field\"\n v-for=\"(field, index) in fieldList\"\n :key=\"index\"\n @click=\"selectedElem(field.label, 'name')\"\n >\n {{ field.label }}\n </div>\n </template>\n <template v-if=\"activeKey === '2'\">\n <div\n class=\"field\"\n v-for=\"(variabled, index) in varList\"\n :key=\"index\"\n @click=\"selectedElem(variabled.variableName, 'name')\"\n >\n {{ variabled.variableName }}\n </div>\n </template>\n </div>\n </a-col>\n <a-col :span=\"18\">\n <a-textarea\n class=\"textarea\"\n id=\"calTextArea\"\n v-model:value=\"myValue\"\n :autoSize=\"{\n minRows: 13,\n maxRows: 13\n }\"\n placeholder=\"示例: ${指标} * 3\"\n />\n <div class=\"cal_right_bottom\">\n <ul class=\"cal_fu\">\n <li\n v-for=\"(item, index) in calculMethods\"\n @click=\"selectedElem(item, 'symbol')\"\n :key=\"index\"\n >\n {{ item }}\n </li>\n </ul>\n <a-popover\n placement=\"topRight\"\n trigger=\"click\"\n overlayClassName=\"func-popover\">\n <template #content>\n <div class=\"function-wrap\">\n <div class=\"wrap-search\">\n <a-input-search\n v-model:value=\"searchFuncValue\"\n style=\"margin-bottom: 8px\"\n placeholder=\"请输入关键字搜索\"\n />\n </div>\n <div class=\"tree-box\">\n <a-tree\n :expanded-keys=\"expandedKeys\"\n :auto-expand-parent=\"autoExpandParent\"\n :tree-data=\"funcDescsData\"\n @expand=\"onExpand\"\n >\n <template #title=\"{ title, leaf, describe, exp }\">\n <a-tooltip placement=\"top\">\n <template #title v-if=\"leaf\">\n <div>\n <span style=\"font-weight: bold;\">描述:</span>\n <span>{{ describe }}</span>\n </div>\n <div>\n <span style=\"font-weight: bold;\">示例:</span>\n <span>{{ exp }}</span>\n </div>\n </template>\n <span v-if=\"title.indexOf(searchFuncValue) > -1\">\n {{ title.substr(0, title.indexOf(searchFuncValue)) }}\n <span style=\"color: #f50\">{{ searchFuncValue }}</span>\n {{ title.substr(title.indexOf(searchFuncValue) + searchFuncValue.length) }}\n </span>\n <span v-else>{{ title }}</span>\n <span\n v-if=\"leaf\"\n class=\"insertsty\"\n @click=\"selectedElem(title, 'function')\"\n >插入</span>\n </a-tooltip>\n </template>\n </a-tree>\n </div>\n </div>\n </template>\n <span class=\"cal_a\">\n 更多函数\n <double-right-outlined style=\"font-size: 12px;margin: 2px 0 0 2px;color: #1890ff;\"/>\n </span>\n </a-popover>\n </div>\n </a-col>\n </a-row>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, inject, ref, onMounted, watch, PropType } from 'vue'\nimport { GRAPHIC_CONFIG, REQUEST, INDICATOR_URL, INDICATOR_TOKEN } from '@/utils/constant'\nimport {\n RadioGroup as ARadioGroup,\n RadioButton as ARadioButton,\n Row as ARow,\n Col as ACol,\n Textarea as ATextarea,\n Popover as APopover,\n InputSearch as AInputSearch,\n Tree as ATree,\n type TreeProps\n} from 'ant-design-vue'\nimport { DoubleRightOutlined } from '@ant-design/icons-vue'\nconst getParentKey = (\n key: string | number,\n tree: TreeProps['treeData']\n): string | number | undefined => {\n let parentKey\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some(item => item.key === key)) {\n parentKey = node.key\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children)\n }\n }\n }\n return parentKey\n}\n\nexport default defineComponent({\n name: 'FormulaCalculation',\n props: {\n value: {\n type: String,\n default: ''\n },\n item: {\n type: Object,\n default: () => ({})\n },\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ARow,\n ACol,\n ATextarea,\n APopover,\n AInputSearch,\n ATree,\n ARadioGroup,\n ARadioButton,\n DoubleRightOutlined\n },\n emits: ['update:value', 'change'],\n setup (props, { emit }) {\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const leftAxisList = computed(() => unref(graphicConfig).leftAxisList || [])\n const variableList = computed(() => unref(graphicConfig).variableList || [])\n const rightAxisList = computed(\n () => unref(graphicConfig).rightAxisList || []\n )\n const indicators = computed(() => unref(graphicConfig).indicators || [])\n const queryColumnList = computed(\n () => unref(graphicConfig).queryColumnList || []\n )\n const indexLibColumns = computed(() => unref(graphicConfig).indexLibColumns || [])\n const fieldList = computed(() => {\n let fieldList = unref(leftAxisList)\n .concat(unref(rightAxisList))\n .concat(unref(indicators))\n .concat(unref(queryColumnList)) as { [key: string]: any }[]\n if (props.type === 'indexLibColumns' && unref(indexLibColumns)?.length) {\n fieldList = unref(queryColumnList)\n .concat(unref(indexLibColumns)) as { [key: string]: any }[]\n }\n // 公式计算需要过滤不是数字类型的字段\n // return fieldList?.filter((field) => field.genericType === 'NUMBER') || []\n if (props.mode === 'edit') {\n return fieldList?.filter((field) => field.id !== props.item?.id) || []\n }\n return fieldList || []\n })\n\n const varList = computed(() =>\n variableList.value.filter((v: any) => !v.randomKey))\n\n const myValue = computed({\n get: () => props.value || '',\n set: (value) => {\n emit('update:value', value)\n emit('change', value)\n }\n })\n const activeKey = ref('1')\n const searchFuncValue = ref('')\n const insertText = (str: string) => {\n const obj: any = document.getElementById('calTextArea')\n let tmpStr = myValue.value\n if ((document as any).selection) {\n const sel = (document as any).selection.createRange()\n sel.text = str\n } else if (\n typeof obj.selectionStart === 'number' &&\n typeof obj.selectionEnd === 'number'\n ) {\n const startPos = obj.selectionStart\n const endPos = obj.selectionEnd\n let cursorPos = startPos\n tmpStr =\n tmpStr.substring(0, startPos) +\n str +\n tmpStr.substring(endPos, tmpStr.length)\n cursorPos += str.length\n obj.selectionStart = obj.selectionEnd = cursorPos\n } else {\n tmpStr += str\n }\n myValue.value = tmpStr\n }\n const calculMethods = ['+', '-', '*', '/', '(', ')']\n const selectedElem = (value: string, type: string) => {\n let inputVal = ''\n switch (type) {\n case 'name': {\n // 名称\n inputVal = '${' + value + '}'\n break\n }\n case 'function': {\n // 函数\n inputVal = value + '()'\n break\n }\n default: {\n // 加减符号\n inputVal = value\n }\n }\n insertText(inputVal)\n }\n const dataList: TreeProps['treeData'] = []\n const expandedKeys = ref<(string | number)[]>([])\n const autoExpandParent = ref<boolean>(true)\n const funcDescsData = ref([])\n const setDataList = (data: any) => {\n for (const item of data) {\n if (item?.children?.length) {\n setDataList(item.children)\n } else {\n dataList.push({\n key: item.key,\n title: item.title\n })\n }\n }\n }\n const getFuncDescs = async () => {\n try {\n const res = await request.get(`${INDICATOR_URL}/diagram/funcdescs`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.length) {\n setDataList(data)\n funcDescsData.value = data\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onExpand = (keys: string[]) => {\n expandedKeys.value = keys\n autoExpandParent.value = false\n }\n watch(searchFuncValue, value => {\n const expanded = dataList\n .map((item: any) => {\n if (item.title.indexOf(value) > -1) {\n return getParentKey(item.key, funcDescsData.value)\n }\n return null\n })\n .filter((item, i, self) => item && self.indexOf(item) === i)\n expandedKeys.value = expanded\n searchFuncValue.value = value\n autoExpandParent.value = true\n })\n onMounted(() => {\n getFuncDescs()\n })\n return {\n fieldList,\n varList,\n myValue,\n calculMethods,\n funcDescsData,\n searchFuncValue,\n expandedKeys,\n autoExpandParent,\n activeKey,\n selectedElem,\n onExpand\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.formula-calculation {\n // border: 1px solid #ccc;\n width: 100%;\n}\n\n[theme='dark'] .formula-calculation {\n border: 1px solid #333;\n}\n\n.field-area {\n height: 100%;\n // padding-left: 20px;\n // padding-top: 20px;\n background: #eff1f4;\n border: 1px solid #d9d9d9;\n border-right: none;\n}\n[theme='dark'] .field-area {\n background: #333;\n}\n.field {\n margin-bottom: 10px;\n padding-left: 15px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.textarea {\n height: 100%;\n border-radius: 0;\n}\n.cal_right_bottom {\n height: 26px;\n width: 100%;\n border: 1px solid #d9d9d9;\n border-top: none;\n line-height: 26px;\n .cal_fu {\n padding: 0;\n width: 200px;\n float: left;\n margin: 0;\n li {\n width: 20px;\n float: left;\n text-align: center;\n margin: 0 5px;\n cursor: pointer;\n &:hover {\n background: #eff1f4;\n }\n }\n }\n .cal_a {\n color: #1890ff;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n float: right;\n margin-right: 10px;\n height: 13px;\n margin-top: 6px;\n &:hover {\n color: #40a9ff;\n }\n }\n}\n.function-wrap {\n width: 260px;\n height: 200px;\n .wrap-search {\n height: 40px;\n background-color: #ffffff;\n border-bottom: 1px solid #d9d9d9;\n padding: 0 10px;\n }\n .tree-box {\n height: calc(100% - 40px);\n overflow: auto;\n }\n}\n</style>\n<style lang=\"less\">\n.func-popover {\n .ant-popover-inner-content {\n padding: 12px 0;\n }\n .insertsty {\n color: #1890ff;\n margin-left: 6px;\n display: none;\n &:hover {\n color: red;\n }\n }\n .ant-tree-title {\n &:hover {\n .insertsty {\n display: inline-block;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"formula-calculation\">\n <a-row style=\"height: 100%\">\n <a-col :span=\"6\">\n <div class=\"field-area\">\n <div style=\"text-align: center;padding: 10px 0;\">\n <a-radio-group v-model:value=\"activeKey\" size=\"small\">\n <a-radio-button value=\"1\">数值字段({{ fieldList.length }})</a-radio-button>\n <a-radio-button value=\"2\">全局变量({{ varList.length }})</a-radio-button>\n </a-radio-group>\n </div>\n <template v-if=\"activeKey === '1'\">\n <div\n class=\"field\"\n v-for=\"(field, index) in fieldList\"\n :key=\"index\"\n @click=\"selectedElem(field.label, 'name')\"\n >\n {{ field.label }}\n </div>\n </template>\n <template v-if=\"activeKey === '2'\">\n <div\n class=\"field\"\n v-for=\"(variabled, index) in varList\"\n :key=\"index\"\n @click=\"selectedElem(variabled.variableName, 'name')\"\n >\n {{ variabled.variableName }}\n </div>\n </template>\n </div>\n </a-col>\n <a-col :span=\"18\">\n <a-textarea\n class=\"textarea\"\n id=\"calTextArea\"\n v-model:value=\"myValue\"\n :autoSize=\"{\n minRows: 13,\n maxRows: 13\n }\"\n placeholder=\"示例: ${指标} * 3\"\n />\n <div class=\"cal_right_bottom\">\n <ul class=\"cal_fu\">\n <li\n v-for=\"(item, index) in calculMethods\"\n @click=\"selectedElem(item, 'symbol')\"\n :key=\"index\"\n >\n {{ item }}\n </li>\n </ul>\n <a-popover\n placement=\"topRight\"\n trigger=\"click\"\n overlayClassName=\"func-popover\">\n <template #content>\n <div class=\"function-wrap\">\n <div class=\"wrap-search\">\n <a-input-search\n v-model:value=\"searchFuncValue\"\n style=\"margin-bottom: 8px\"\n placeholder=\"请输入关键字搜索\"\n />\n </div>\n <div class=\"tree-box\">\n <a-tree\n :expanded-keys=\"expandedKeys\"\n :auto-expand-parent=\"autoExpandParent\"\n :tree-data=\"funcDescsData\"\n @expand=\"onExpand\"\n >\n <template #title=\"{ title, leaf, describe, exp }\">\n <a-tooltip placement=\"top\">\n <template #title v-if=\"leaf\">\n <div>\n <span style=\"font-weight: bold;\">描述:</span>\n <span>{{ describe }}</span>\n </div>\n <div>\n <span style=\"font-weight: bold;\">示例:</span>\n <span>{{ exp }}</span>\n </div>\n </template>\n <span v-if=\"title.indexOf(searchFuncValue) > -1\">\n {{ title.substr(0, title.indexOf(searchFuncValue)) }}\n <span style=\"color: #f50\">{{ searchFuncValue }}</span>\n {{ title.substr(title.indexOf(searchFuncValue) + searchFuncValue.length) }}\n </span>\n <span v-else>{{ title }}</span>\n <span\n v-if=\"leaf\"\n class=\"insertsty\"\n @click=\"selectedElem(title, 'function')\"\n >插入</span>\n </a-tooltip>\n </template>\n </a-tree>\n </div>\n </div>\n </template>\n <span class=\"cal_a\">\n 更多函数\n <double-right-outlined style=\"font-size: 12px;margin: 2px 0 0 2px;color: #1890ff;\"/>\n </span>\n </a-popover>\n </div>\n </a-col>\n </a-row>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, inject, ref, onMounted, watch, PropType } from 'vue'\nimport { GRAPHIC_CONFIG, REQUEST, INDICATOR_URL, INDICATOR_TOKEN } from '@/utils/constant'\nimport {\n RadioGroup as ARadioGroup,\n RadioButton as ARadioButton,\n Row as ARow,\n Col as ACol,\n Textarea as ATextarea,\n Popover as APopover,\n InputSearch as AInputSearch,\n Tree as ATree,\n type TreeProps\n} from 'ant-design-vue'\nimport { DoubleRightOutlined } from '@ant-design/icons-vue'\nconst getParentKey = (\n key: string | number,\n tree: TreeProps['treeData']\n): string | number | undefined => {\n let parentKey\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some(item => item.key === key)) {\n parentKey = node.key\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children)\n }\n }\n }\n return parentKey\n}\n\nexport default defineComponent({\n name: 'FormulaCalculation',\n props: {\n value: {\n type: String,\n default: ''\n },\n item: {\n type: Object,\n default: () => ({})\n },\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n components: {\n ARow,\n ACol,\n ATextarea,\n APopover,\n AInputSearch,\n ATree,\n ARadioGroup,\n ARadioButton,\n DoubleRightOutlined\n },\n emits: ['update:value', 'change'],\n setup (props, { emit }) {\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const leftAxisList = computed(() => unref(graphicConfig).leftAxisList || [])\n const variableList = computed(() => unref(graphicConfig).variableList || [])\n const rightAxisList = computed(\n () => unref(graphicConfig).rightAxisList || []\n )\n const indicators = computed(() => unref(graphicConfig).indicators || [])\n const queryColumnList = computed(\n () => unref(graphicConfig).queryColumnList || []\n )\n const indexLibColumns = computed(() => unref(graphicConfig).indexLibColumns || [])\n const fieldList = computed(() => {\n let fieldList = unref(leftAxisList)\n .concat(unref(rightAxisList))\n .concat(unref(indicators))\n .concat(unref(queryColumnList)) as { [key: string]: any }[]\n if (props.type === 'indexLibColumns' && unref(indexLibColumns)?.length) {\n fieldList = unref(queryColumnList)\n .concat(unref(indexLibColumns)) as { [key: string]: any }[]\n }\n // 公式计算需要过滤不是数字类型的字段\n // return fieldList?.filter((field) => field.genericType === 'NUMBER') || []\n if (props.mode === 'edit') {\n return fieldList?.filter((field) => field.id !== props.item?.id) || []\n }\n return fieldList || []\n })\n\n const varList = computed(() =>\n variableList.value.filter((v: any) => !v.randomKey))\n\n const myValue = computed({\n get: () => props.value || '',\n set: (value) => {\n emit('update:value', value)\n emit('change', value)\n }\n })\n const activeKey = ref('1')\n const searchFuncValue = ref('')\n const insertText = (str: string) => {\n const obj: any = document.getElementById('calTextArea')\n let tmpStr = myValue.value\n if ((document as any).selection) {\n const sel = (document as any).selection.createRange()\n sel.text = str\n } else if (\n typeof obj.selectionStart === 'number' &&\n typeof obj.selectionEnd === 'number'\n ) {\n const startPos = obj.selectionStart\n const endPos = obj.selectionEnd\n let cursorPos = startPos\n tmpStr =\n tmpStr.substring(0, startPos) +\n str +\n tmpStr.substring(endPos, tmpStr.length)\n cursorPos += str.length\n obj.selectionStart = obj.selectionEnd = cursorPos\n } else {\n tmpStr += str\n }\n myValue.value = tmpStr\n }\n const calculMethods = ['+', '-', '*', '/', '(', ')']\n const selectedElem = (value: string, type: string) => {\n let inputVal = ''\n switch (type) {\n case 'name': {\n // 名称\n inputVal = '${' + value + '}'\n break\n }\n case 'function': {\n // 函数\n inputVal = value + '()'\n break\n }\n default: {\n // 加减符号\n inputVal = value\n }\n }\n insertText(inputVal)\n }\n const dataList: TreeProps['treeData'] = []\n const expandedKeys = ref<(string | number)[]>([])\n const autoExpandParent = ref<boolean>(true)\n const funcDescsData = ref([])\n const setDataList = (data: any) => {\n for (const item of data) {\n if (item?.children?.length) {\n setDataList(item.children)\n } else {\n dataList.push({\n key: item.key,\n title: item.title\n })\n }\n }\n }\n const getFuncDescs = async () => {\n try {\n const res = await request.get(`${INDICATOR_URL}/diagram/funcdescs`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success && data?.length) {\n setDataList(data)\n funcDescsData.value = data\n }\n } catch (e) {\n console.error(e)\n }\n }\n const onExpand = (keys: string[]) => {\n expandedKeys.value = keys\n autoExpandParent.value = false\n }\n watch(searchFuncValue, value => {\n const expanded = dataList\n .map((item: any) => {\n if (item.title.indexOf(value) > -1) {\n return getParentKey(item.key, funcDescsData.value)\n }\n return null\n })\n .filter((item, i, self) => item && self.indexOf(item) === i)\n expandedKeys.value = expanded\n searchFuncValue.value = value\n autoExpandParent.value = true\n })\n onMounted(() => {\n getFuncDescs()\n })\n return {\n fieldList,\n varList,\n myValue,\n calculMethods,\n funcDescsData,\n searchFuncValue,\n expandedKeys,\n autoExpandParent,\n activeKey,\n selectedElem,\n onExpand\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.formula-calculation {\n // border: 1px solid #ccc;\n width: 100%;\n}\n\n[theme='dark'] .formula-calculation {\n border: 1px solid #333;\n}\n\n.field-area {\n height: 100%;\n // padding-left: 20px;\n // padding-top: 20px;\n background: #eff1f4;\n border: 1px solid #d9d9d9;\n border-right: none;\n}\n[theme='dark'] .field-area {\n background: #333;\n}\n.field {\n margin-bottom: 10px;\n padding-left: 15px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.textarea {\n height: 100%;\n border-radius: 0;\n}\n.cal_right_bottom {\n height: 26px;\n width: 100%;\n border: 1px solid #d9d9d9;\n border-top: none;\n line-height: 26px;\n .cal_fu {\n padding: 0;\n width: 200px;\n float: left;\n margin: 0;\n li {\n width: 20px;\n float: left;\n text-align: center;\n margin: 0 5px;\n cursor: pointer;\n &:hover {\n background: #eff1f4;\n }\n }\n }\n .cal_a {\n color: #1890ff;\n font-size: 13px;\n cursor: pointer;\n display: flex;\n align-items: center;\n float: right;\n margin-right: 10px;\n height: 13px;\n margin-top: 6px;\n &:hover {\n color: #40a9ff;\n }\n }\n}\n.function-wrap {\n width: 260px;\n height: 200px;\n .wrap-search {\n height: 40px;\n background-color: #ffffff;\n border-bottom: 1px solid #d9d9d9;\n padding: 0 10px;\n }\n .tree-box {\n height: calc(100% - 40px);\n overflow: auto;\n }\n}\n</style>\n<style lang=\"less\">\n.func-popover {\n .ant-popover-inner-content {\n padding: 12px 0;\n }\n .insertsty {\n color: #1890ff;\n margin-left: 6px;\n display: none;\n &:hover {\n color: red;\n }\n }\n .ant-tree-title {\n &:hover {\n .insertsty {\n display: inline-block;\n }\n }\n }\n}\n</style>\n","<template>\n <a-modal\n :title=\"`${mode === 'add' ? '新增' : '编辑'}计算指标`\"\n :visible=\"visible\"\n width=\"50%\"\n :bodyStyle=\"{\n height: '55vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :closable=\"false\"\n @Ok=\"onOK\"\n @cancel=\"onCancel\"\n >\n <a-form :model=\"formState\" :rules=\"formRules\" ref=\"formRef\">\n <a-form-item\n label=\"指标名\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"label\"\n >\n <a-input\n v-model:value=\"formState.label\"\n @change=\"onChange\"\n />\n </a-form-item>\n <a-form-item\n label=\"计算方式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-show=\"type !== 'indexLibColumns'\"\n >\n <a-select\n v-model:value=\"formState.calcType\"\n @change=\"onChange\"\n >\n <a-select-option value=\"FORMULA\">公式</a-select-option>\n <a-select-option value=\"BUILT_IN\" v-if=\"!isIndexSet\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\" v-if=\"!isIndexSet\">固定值</a-select-option>\n </a-select>\n </a-form-item>\n <template v-if=\"formState.calcType === 'FORMULA'\">\n <formula-calculation\n v-model:value=\"formState.formula\"\n :item=\"item\"\n :mode=\"mode\"\n :type=\"type\"\n @change=\"onChange\"\n />\n </template>\n <template v-if=\"formState.calcType === 'BUILT_IN'\">\n <a-form-item\n label=\"内置公式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInFormula\"\n >\n <a-select\n v-model:value=\"formState.builtInFormula\"\n @change=\"onChangeBuiltInFormula\"\n >\n <a-select-option value=\"BUILT_IN_ALL_VALUE\">所有值</a-select-option>\n <a-select-option value=\"BUILT_IN_ALL_VALUE_IN_GROUPO\"\n >组内所有值</a-select-option\n >\n <a-select-option value=\"BUILT_IN_RANK\">排名</a-select-option>\n <a-select-option value=\"BUILT_IN_RANK_IN_GROUPO\"\n >组内排名</a-select-option\n >\n <a-select-option value=\"FIRST_ROW_RATE\"\n >首行占比</a-select-option\n >\n <a-select-option value=\"DATE_OFFSET\"\n >日期偏移</a-select-option\n >\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n v-model:value=\"formState.builtInValueSource\"\n @change=\"onChange\"\n >\n <a-select-option\n v-for=\"(builtInValueSource, index) in builtInValueSourceList\"\n :key=\"index\"\n :value=\"builtInValueSource.label\"\n :disabled=\"mode === 'edit' && item.label === builtInValueSource.name\"\n >\n {{ builtInValueSource.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数原则\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <a-select\n v-model:value=\"formState.builtInCalcWay\"\n @change=\"onChange\"\n >\n <template\n v-if=\"\n ['BUILT_IN_ALL_VALUE', 'BUILT_IN_ALL_VALUE_IN_GROUPO'].includes(\n formState.builtInFormula || ''\n )\n \"\n >\n <!-- 所有值/组内所有值 -->\n <a-select-option value=\"SUM\">求和</a-select-option>\n <a-select-option value=\"AVG\">求平均</a-select-option>\n <a-select-option value=\"MAX\">求最大值</a-select-option>\n <a-select-option value=\"MIN\">求最小值</a-select-option>\n </template>\n <template v-else>\n <!-- 排名/组内排名 -->\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </template>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数逻辑\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <div\n class=\"accesstip\"\n v-if=\"[\n 'BUILT_IN_RANK_IN_GROUPO',\n 'BUILT_IN_ALL_VALUE_IN_GROUPO'\n ].includes(formState.builtInFormula) && formState.builtInValueSource\"\n >\n 蓝色字段跟随您后续维度设置的顺序而变化,以获取相应的{{ formState.builtInValueSource }}\n </div>\n <a-textarea\n :value=\"accessLogic\"\n :rows=\"6\"\n disabled\n />\n </a-form-item>\n </template>\n <template v-if=\"formState.calcType === 'COMPONENT'\">\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n show-search\n v-model:value=\"formState.builtInValueSource\"\n :filter-option=\"filterOption\"\n :options=\"componentList\"\n :fieldNames=\"{ value: 'id', label: 'keyName' }\"\n @change=\"onChangeComponent\"\n ></a-select>\n </a-form-item>\n </template>\n <template v-if=\"formState.builtInFormula === 'DATE_OFFSET'\">\n <a-form-item\n label=\"偏移设置\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n >\n <div style=\"display: flex;align-items: center;\">\n <a-input-number\n v-model:value=\"offsetConfig.value\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n ></a-input-number>\n <a-select\n v-model:value=\"offsetConfig.unit\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select\n v-model:value=\"offsetConfig.around\"\n style=\"width: 120px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n <a-tooltip\n title=\"内置公式【日期偏移】,依赖于【全局过滤】中的时间条件,若没有配置则不会进行偏移计算\"\n overlayClassName=\"question-tooltip\"\n color=\"#fff\"\n >\n <question-circle-outlined class=\"icon\" style=\"color: #40a9ff;font-size: 18px;cursor: pointer;margin-left: 10px;\"/>\n </a-tooltip>\n </div>\n </a-form-item>\n </template>\n </a-form>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n unref,\n PropType,\n watch,\n inject\n} from 'vue'\nimport { nanoid } from 'nanoid'\nimport FormulaCalculation from './FormulaCalculation.vue'\nimport {\n Form as AForm,\n Modal as AModal,\n FormItem as AFormItem,\n Input as AInput,\n InputNumber as AInputNumber,\n Select as ASelect,\n SelectOption as ASelectOption,\n Textarea as ATextarea,\n Tooltip as ATooltip\n} from 'ant-design-vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SELECTED_COMPONENT } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport type { Rule } from 'ant-design-vue/es/form'\nimport { QuestionCircleOutlined } from '@ant-design/icons-vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'CalculationModal',\n components: {\n FormulaCalculation,\n AForm,\n AModal,\n AFormItem,\n AInput,\n ASelect,\n ASelectOption,\n ATextarea,\n AInputNumber,\n ATooltip,\n QuestionCircleOutlined\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n isIndexSet: {\n type: Boolean,\n default: false\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 模式\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n setup (props, { expose }) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG)\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const componentList = computed(() => unref(renderUsedComponents))\n const builtInValueSourceList = computed(\n () => unref(graphicConfig)[props.type] || []\n )\n const allValueSourceList = computed(() => {\n const values = ['leftAxisList', 'rightAxisList', 'queryColumnList', 'indicators']\n let list = []\n for (const item of values) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), item)) {\n list = list.concat(unref(graphicConfig)[item])\n }\n }\n return list\n })\n const labelCol = { span: 4 }\n const wrapperCol = { span: 18 }\n const formDefaultValue = {\n label: '',\n calcType: 'FORMULA',\n formula: undefined,\n builtInValueSource: undefined,\n builtInFormula: undefined,\n builtInCalcWay: undefined\n }\n const defaultConfig = {\n value: 0,\n unit: 'YEAR',\n around: 'before'\n }\n const offsetConfig = ref<any>({})\n const formRef = ref()\n const visible = ref(false)\n const formState = ref()\n watch(\n visible,\n (value: boolean) => {\n if (value) {\n if (props.mode === 'edit') {\n const {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n } = props.item\n formState.value = {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n }\n if (builtInFormula === 'DATE_OFFSET') {\n // 日期偏移\n const list = builtInCalcWay.split('-')\n if (list?.length === 3) {\n offsetConfig.value = {\n value: list[0],\n unit: list[1],\n around: list[2]\n }\n }\n }\n } else if (props.mode === 'add') {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n } else {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n },\n {\n immediate: true,\n deep: true\n }\n )\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const onChangeComponent = (value: string) => {\n const option = unref(componentList).find(v => v.id === value)\n if (option) {\n formState.value.builtInCalcWay = option.keyName\n }\n isDataChange = true\n }\n // 保存指标库\n const saveIndicator = () => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const { label, builtInFormula } = unref(formState) || {}\n const offset: any = {}\n if (builtInFormula === 'DATE_OFFSET') {\n offset.builtInCalcWay = `${unref(offsetConfig).value}-${unref(offsetConfig).unit}-${unref(offsetConfig).around}`\n }\n if (props.mode === 'add') {\n const id = nanoid()\n if (lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])) {\n list.forEach((v: any) => {\n v.show = false\n })\n }\n list.push({\n ...unref(formState),\n ...offset,\n id,\n show: true,\n name: label\n })\n } else if (props.mode === 'edit') {\n list[props.index] = {\n ...list[props.index],\n ...unref(formState),\n ...offset,\n name: label\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const validateLabel = async (_rule: Rule, value: string) => {\n if (value === '') {\n return Promise.reject(new Error('请输入指标名'))\n } else {\n const source = unref(allValueSourceList).find(v => v.label === value)\n if (source) {\n if (source.id === props.item.id) {\n return Promise.resolve()\n }\n return Promise.reject(new Error('指标名不能重复'))\n }\n return Promise.resolve()\n }\n }\n const formRules = computed(() => {\n let result: any = {\n label: [\n {\n required: true,\n validator: validateLabel,\n trigger: 'change'\n }\n ]\n }\n if (formState.value.calcType === 'BUILT_IN') {\n result = {\n ...result,\n builtInFormula: [\n {\n required: true,\n message: '请选择内置公式'\n }\n ],\n builtInValueSource: [\n {\n required: true,\n message: '请选择数值来自'\n }\n ],\n builtInCalcWay: [\n {\n required: true,\n message: '请选择取数原则'\n }\n ]\n }\n }\n return result\n })\n const onOK = () => {\n formRef.value.validate().then(() => {\n if (isDataChange) saveIndicator()\n isDataChange = false\n // 重置\n hideModal()\n })\n }\n const onCancel = () => {\n // 重置\n formRef.value.clearValidate()\n hideModal()\n }\n // 改变计算方式\n const onChangeBuiltInFormula = () => {\n isDataChange = true\n unref(formState).builtInCalcWay = ''\n }\n // 取数逻辑值\n const accessLogic = computed(() => {\n let data = ''\n const principle = unref(formState).builtInCalcWay\n const comefrom = unref(formState).builtInValueSource\n if (!comefrom || !principle) {\n return data\n }\n switch (unref(formState).builtInFormula) {\n case 'BUILT_IN_RANK': {\n // 排名\n if (principle === 'ASC') {\n // 升序\n data = '【' + comefrom + '】' + '由小到大在所有值中的排名'\n } else {\n // 降序\n data = '【' + comefrom + '】' + '由大到小在所有值中的排名'\n }\n break\n }\n case 'BUILT_IN_RANK_IN_GROUPO': {\n // 组内排名\n data = '所有【】的' + '\\n'\n if (principle === 'ASC') {\n // 升序\n data = data + '【' + comefrom + '】' + '由小到大的组内的排名'\n } else {\n // 降序\n data = data + '【' + comefrom + '】' + '由大到小的组内的排名'\n }\n break\n }\n case 'BUILT_IN_ALL_VALUE': {\n // 所有值\n let str = ''\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = '将所有【' + comefrom + '】' + str\n break\n }\n case 'BUILT_IN_ALL_VALUE_IN_GROUPO': {\n let str = ''\n data = '所有【】的' + '\\n'\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = data + '将所有【' + comefrom + '】' + str\n break\n }\n }\n return data\n })\n const filterOption = (input: string, option: any) => {\n return option.keyName.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n expose({\n showModal\n })\n return {\n visible,\n onCancel,\n labelCol,\n wrapperCol,\n formState,\n builtInValueSourceList,\n onOK,\n onChange,\n formRules,\n accessLogic,\n formRef,\n onChangeBuiltInFormula,\n componentList,\n onChangeComponent,\n filterOption,\n offsetConfig\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.accesstip{\n color: #3f8ce8;\n}\n</style>\n<style lang=\"less\">\n.question-tooltip .ant-tooltip-inner {\n color: #333;\n}\n</style>\n","<template>\n <a-modal\n :title=\"`${mode === 'add' ? '新增' : '编辑'}计算指标`\"\n :visible=\"visible\"\n width=\"50%\"\n :bodyStyle=\"{\n height: '55vh',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column'\n }\"\n :closable=\"false\"\n @Ok=\"onOK\"\n @cancel=\"onCancel\"\n >\n <a-form :model=\"formState\" :rules=\"formRules\" ref=\"formRef\">\n <a-form-item\n label=\"指标名\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"label\"\n >\n <a-input\n v-model:value=\"formState.label\"\n @change=\"onChange\"\n />\n </a-form-item>\n <a-form-item\n label=\"计算方式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-show=\"type !== 'indexLibColumns'\"\n >\n <a-select\n v-model:value=\"formState.calcType\"\n @change=\"onChange\"\n >\n <a-select-option value=\"FORMULA\">公式</a-select-option>\n <a-select-option value=\"BUILT_IN\" v-if=\"!isIndexSet\">内置公式</a-select-option>\n <a-select-option value=\"COMPONENT\" v-if=\"!isIndexSet\">固定值</a-select-option>\n </a-select>\n </a-form-item>\n <template v-if=\"formState.calcType === 'FORMULA'\">\n <formula-calculation\n v-model:value=\"formState.formula\"\n :item=\"item\"\n :mode=\"mode\"\n :type=\"type\"\n @change=\"onChange\"\n />\n </template>\n <template v-if=\"formState.calcType === 'BUILT_IN'\">\n <a-form-item\n label=\"内置公式\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInFormula\"\n >\n <a-select\n v-model:value=\"formState.builtInFormula\"\n @change=\"onChangeBuiltInFormula\"\n >\n <a-select-option value=\"BUILT_IN_ALL_VALUE\">所有值</a-select-option>\n <a-select-option value=\"BUILT_IN_ALL_VALUE_IN_GROUPO\"\n >组内所有值</a-select-option\n >\n <a-select-option value=\"BUILT_IN_RANK\">排名</a-select-option>\n <a-select-option value=\"BUILT_IN_RANK_IN_GROUPO\"\n >组内排名</a-select-option\n >\n <a-select-option value=\"FIRST_ROW_RATE\"\n >首行占比</a-select-option\n >\n <a-select-option value=\"DATE_OFFSET\"\n >日期偏移</a-select-option\n >\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n v-model:value=\"formState.builtInValueSource\"\n @change=\"onChange\"\n >\n <a-select-option\n v-for=\"(builtInValueSource, index) in builtInValueSourceList\"\n :key=\"index\"\n :value=\"builtInValueSource.label\"\n :disabled=\"mode === 'edit' && item.label === builtInValueSource.name\"\n >\n {{ builtInValueSource.label }}\n </a-select-option>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数原则\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <a-select\n v-model:value=\"formState.builtInCalcWay\"\n @change=\"onChange\"\n >\n <template\n v-if=\"\n ['BUILT_IN_ALL_VALUE', 'BUILT_IN_ALL_VALUE_IN_GROUPO'].includes(\n formState.builtInFormula || ''\n )\n \"\n >\n <!-- 所有值/组内所有值 -->\n <a-select-option value=\"SUM\">求和</a-select-option>\n <a-select-option value=\"AVG\">求平均</a-select-option>\n <a-select-option value=\"MAX\">求最大值</a-select-option>\n <a-select-option value=\"MIN\">求最小值</a-select-option>\n </template>\n <template v-else>\n <!-- 排名/组内排名 -->\n <a-select-option value=\"ASC\">升序</a-select-option>\n <a-select-option value=\"DESC\">降序</a-select-option>\n </template>\n </a-select>\n </a-form-item>\n <a-form-item\n label=\"取数逻辑\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n v-if=\"!['FIRST_ROW_RATE', 'DATE_OFFSET'].includes(formState.builtInFormula)\"\n >\n <div\n class=\"accesstip\"\n v-if=\"[\n 'BUILT_IN_RANK_IN_GROUPO',\n 'BUILT_IN_ALL_VALUE_IN_GROUPO'\n ].includes(formState.builtInFormula) && formState.builtInValueSource\"\n >\n 蓝色字段跟随您后续维度设置的顺序而变化,以获取相应的{{ formState.builtInValueSource }}\n </div>\n <a-textarea\n :value=\"accessLogic\"\n :rows=\"6\"\n disabled\n />\n </a-form-item>\n </template>\n <template v-if=\"formState.calcType === 'COMPONENT'\">\n <a-form-item\n label=\"数值来自\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n name=\"builtInValueSource\"\n >\n <a-select\n show-search\n v-model:value=\"formState.builtInValueSource\"\n :filter-option=\"filterOption\"\n :options=\"componentList\"\n :fieldNames=\"{ value: 'id', label: 'keyName' }\"\n @change=\"onChangeComponent\"\n ></a-select>\n </a-form-item>\n </template>\n <template v-if=\"formState.builtInFormula === 'DATE_OFFSET'\">\n <a-form-item\n label=\"偏移设置\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n >\n <div style=\"display: flex;align-items: center;\">\n <a-input-number\n v-model:value=\"offsetConfig.value\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n ></a-input-number>\n <a-select\n v-model:value=\"offsetConfig.unit\"\n style=\"width: 120px;margin-right: 10px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"YEAR\">年</a-select-option>\n <a-select-option value=\"MONTH\">月</a-select-option>\n <a-select-option value=\"DAY\">天</a-select-option>\n </a-select>\n <a-select\n v-model:value=\"offsetConfig.around\"\n style=\"width: 120px;\"\n @change=\"onChange\"\n >\n <a-select-option value=\"before\">前</a-select-option>\n <a-select-option value=\"after\">后</a-select-option>\n </a-select>\n <a-tooltip\n title=\"内置公式【日期偏移】,依赖于【全局过滤】中的时间条件,若没有配置则不会进行偏移计算\"\n overlayClassName=\"question-tooltip\"\n color=\"#fff\"\n >\n <question-circle-outlined class=\"icon\" style=\"color: #40a9ff;font-size: 18px;cursor: pointer;margin-left: 10px;\"/>\n </a-tooltip>\n </div>\n </a-form-item>\n </template>\n </a-form>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n ref,\n computed,\n unref,\n PropType,\n watch,\n inject\n} from 'vue'\nimport { nanoid } from 'nanoid'\nimport FormulaCalculation from './FormulaCalculation.vue'\nimport {\n Form as AForm,\n Modal as AModal,\n FormItem as AFormItem,\n Input as AInput,\n InputNumber as AInputNumber,\n Select as ASelect,\n SelectOption as ASelectOption,\n Textarea as ATextarea,\n Tooltip as ATooltip\n} from 'ant-design-vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SELECTED_COMPONENT } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport type { Rule } from 'ant-design-vue/es/form'\nimport { QuestionCircleOutlined } from '@ant-design/icons-vue'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'CalculationModal',\n components: {\n FormulaCalculation,\n AForm,\n AModal,\n AFormItem,\n AInput,\n ASelect,\n ASelectOption,\n ATextarea,\n AInputNumber,\n ATooltip,\n QuestionCircleOutlined\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n index: {\n type: Number,\n default: 0\n },\n isIndexSet: {\n type: Boolean,\n default: false\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n },\n // 模式\n mode: {\n type: String as PropType<'add' | 'edit'>,\n default: 'add'\n }\n },\n setup (props, { expose }) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG)\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const componentList = computed(() => unref(renderUsedComponents))\n const builtInValueSourceList = computed(\n () => unref(graphicConfig)[props.type] || []\n )\n const allValueSourceList = computed(() => {\n const values = ['leftAxisList', 'rightAxisList', 'queryColumnList', 'indicators']\n let list = []\n for (const item of values) {\n if (Object.prototype.hasOwnProperty.call(unref(graphicConfig), item)) {\n list = list.concat(unref(graphicConfig)[item])\n }\n }\n return list\n })\n const labelCol = { span: 4 }\n const wrapperCol = { span: 18 }\n const formDefaultValue = {\n label: '',\n calcType: 'FORMULA',\n formula: undefined,\n builtInValueSource: undefined,\n builtInFormula: undefined,\n builtInCalcWay: undefined\n }\n const defaultConfig = {\n value: 0,\n unit: 'YEAR',\n around: 'before'\n }\n const offsetConfig = ref<any>({})\n const formRef = ref()\n const visible = ref(false)\n const formState = ref()\n watch(\n visible,\n (value: boolean) => {\n if (value) {\n if (props.mode === 'edit') {\n const {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n } = props.item\n formState.value = {\n label,\n calcType,\n formula,\n builtInValueSource,\n builtInFormula,\n builtInCalcWay\n }\n if (builtInFormula === 'DATE_OFFSET') {\n // 日期偏移\n const list = builtInCalcWay.split('-')\n if (list?.length === 3) {\n offsetConfig.value = {\n value: list[0],\n unit: list[1],\n around: list[2]\n }\n }\n }\n } else if (props.mode === 'add') {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n } else {\n formState.value = cloneDeep(formDefaultValue)\n offsetConfig.value = cloneDeep(defaultConfig)\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n },\n {\n immediate: true,\n deep: true\n }\n )\n let isDataChange = false\n const onChange = () => {\n isDataChange = true\n }\n const onChangeComponent = (value: string) => {\n const option = unref(componentList).find(v => v.id === value)\n if (option) {\n formState.value.builtInCalcWay = option.keyName\n }\n isDataChange = true\n }\n // 保存指标库\n const saveIndicator = () => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const { label, builtInFormula } = unref(formState) || {}\n const offset: any = {}\n if (builtInFormula === 'DATE_OFFSET') {\n offset.builtInCalcWay = `${unref(offsetConfig).value}-${unref(offsetConfig).unit}-${unref(offsetConfig).around}`\n }\n if (props.mode === 'add') {\n const id = nanoid()\n if (lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])) {\n list.forEach((v: any) => {\n v.show = false\n })\n }\n list.push({\n ...unref(formState),\n ...offset,\n id,\n show: true,\n name: label\n })\n } else if (props.mode === 'edit') {\n list[props.index] = {\n ...list[props.index],\n ...unref(formState),\n ...offset,\n name: label\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const validateLabel = async (_rule: Rule, value: string) => {\n if (value === '') {\n return Promise.reject(new Error('请输入指标名'))\n } else {\n const source = unref(allValueSourceList).find(v => v.label === value)\n if (source) {\n if (source.id === props.item.id) {\n return Promise.resolve()\n }\n return Promise.reject(new Error('指标名不能重复'))\n }\n return Promise.resolve()\n }\n }\n const formRules = computed(() => {\n let result: any = {\n label: [\n {\n required: true,\n validator: validateLabel,\n trigger: 'change'\n }\n ]\n }\n if (formState.value.calcType === 'BUILT_IN') {\n result = {\n ...result,\n builtInFormula: [\n {\n required: true,\n message: '请选择内置公式'\n }\n ],\n builtInValueSource: [\n {\n required: true,\n message: '请选择数值来自'\n }\n ],\n builtInCalcWay: [\n {\n required: true,\n message: '请选择取数原则'\n }\n ]\n }\n }\n return result\n })\n const onOK = () => {\n formRef.value.validate().then(() => {\n if (isDataChange) saveIndicator()\n isDataChange = false\n // 重置\n hideModal()\n })\n }\n const onCancel = () => {\n // 重置\n formRef.value.clearValidate()\n hideModal()\n }\n // 改变计算方式\n const onChangeBuiltInFormula = () => {\n isDataChange = true\n unref(formState).builtInCalcWay = ''\n }\n // 取数逻辑值\n const accessLogic = computed(() => {\n let data = ''\n const principle = unref(formState).builtInCalcWay\n const comefrom = unref(formState).builtInValueSource\n if (!comefrom || !principle) {\n return data\n }\n switch (unref(formState).builtInFormula) {\n case 'BUILT_IN_RANK': {\n // 排名\n if (principle === 'ASC') {\n // 升序\n data = '【' + comefrom + '】' + '由小到大在所有值中的排名'\n } else {\n // 降序\n data = '【' + comefrom + '】' + '由大到小在所有值中的排名'\n }\n break\n }\n case 'BUILT_IN_RANK_IN_GROUPO': {\n // 组内排名\n data = '所有【】的' + '\\n'\n if (principle === 'ASC') {\n // 升序\n data = data + '【' + comefrom + '】' + '由小到大的组内的排名'\n } else {\n // 降序\n data = data + '【' + comefrom + '】' + '由大到小的组内的排名'\n }\n break\n }\n case 'BUILT_IN_ALL_VALUE': {\n // 所有值\n let str = ''\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = '将所有【' + comefrom + '】' + str\n break\n }\n case 'BUILT_IN_ALL_VALUE_IN_GROUPO': {\n let str = ''\n data = '所有【】的' + '\\n'\n switch (principle) {\n case 'SUM': { str = '求和'; break }\n case 'AVG': { str = '求平均值'; break }\n case 'MIN': { str = '求最小值'; break }\n case 'MAX': { str = '求最大值'; break }\n }\n data = data + '将所有【' + comefrom + '】' + str\n break\n }\n }\n return data\n })\n const filterOption = (input: string, option: any) => {\n return option.keyName.toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n expose({\n showModal\n })\n return {\n visible,\n onCancel,\n labelCol,\n wrapperCol,\n formState,\n builtInValueSourceList,\n onOK,\n onChange,\n formRules,\n accessLogic,\n formRef,\n onChangeBuiltInFormula,\n componentList,\n onChangeComponent,\n filterOption,\n offsetConfig\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.accesstip{\n color: #3f8ce8;\n}\n</style>\n<style lang=\"less\">\n.question-tooltip .ant-tooltip-inner {\n color: #333;\n}\n</style>\n","<template>\n <div class=\"variable-item\">\n <!-- 变量名 -->\n <a-input\r\n class=\"field-name\"\n v-model:value=\"variableData.variableName\"\n placeholder=\"请输入变量名\"\n :disabled=\"!!variableData.randomKey || nameDisabled\"\n />\r\n <!-- 变量类型 -->\r\n <a-select\n class=\"field-name\"\n v-model:value=\"variableData.variableType\"\n :options=\"typeOption\"\n disabled\n style=\"max-width: 120px;\"\n placeholder=\"请选择变量类型\"\n @change=\"onChangeVariableType\"\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.format\"\r\n :options=\"formatOptions\"\r\n placeholder=\"请选择值格式\"\r\n />\r\n <!-- 日期加减 -->\r\n <template v-if=\"isShowDateOperate\">\r\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\r\n <template #content>\r\n <div class=\"popover-content-wrap\">\r\n <a-tabs :defaultActiveKey=\"variableData.activeOperateKey\" @change=\"changeTab\">\r\n <a-tab-pane tab=\"日期偏移\" :key=\"1\">\r\n <a-input-number\r\n class=\"field-name\"\r\n min=\"0\"\r\n v-model:value=\"variableData.operateValue\"\r\n style=\"max-width: 180px;flex: auto;\"\r\n >\r\n <template #addonBefore>\r\n <a-select v-model:value=\"variableData.operateType\" style=\"width: 60px\">\r\n <a-select-option value=\"add\">加</a-select-option>\r\n <a-select-option value=\"minus\">减</a-select-option>\r\n </a-select>\r\n </template>\r\n <template #addonAfter>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"width: 60px\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n </template>\r\n </a-input-number>\r\n </a-tab-pane>\r\n <!-- 自定义 -->\r\n <a-tab-pane tab=\"自定义\" :key=\"2\" v-if=\"isDateRangeComponent\">\r\n <div style=\"display: flex;\">\r\n <a-select\r\n v-model:value=\"variableData.operateValue\"\r\n allowClear\r\n style=\"width: 120px;margin-right: 10px;\"\r\n >\r\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"margin-right: 10px;\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateType\">\r\n <a-select-option value=\"minus\">前</a-select-option>\r\n <a-select-option value=\"add\">后</a-select-option>\r\n </a-select>\r\n </div>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </template>\r\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\r\n <appstore-add-outlined />\r\n </div>\r\n </a-popover>\r\n </template>\r\n <close-outlined\n class=\"delete-icon\"\n @click=\"onDelete\"\n v-if=\"showDelete === undefined ? !variableData.randomKey : showDelete\"\n />\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\n// import { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n nameDisabled: {\n type: Boolean,\n default: false\n },\n showDelete: {\n type: Boolean,\n default: undefined\n }\n },\n components: {\r\n CloseOutlined,\r\n AppstoreAddOutlined,\r\n ASelect,\r\n ASelectOption,\r\n AInput,\r\n APopover,\r\n ATabs,\r\n ATabPane,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const popoverVisible = ref(false)\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n const typeOption = [{\r\n label: 'TEXT',\r\n value: 'TEXT'\r\n }, {\r\n label: 'NUMBER',\r\n value: 'NUMBER'\r\n }, {\r\n label: 'DATE',\r\n value: 'DATE'\r\n }]\r\n\r\n const dataTypeOption = [{\r\n label: '自定义值',\r\n value: ''\r\n }, {\r\n label: '组件值',\r\n value: 'component'\r\n }]\r\n\r\n const rangeTypeOptions = [{\r\n label: '间隔值',\r\n value: 'rangeValue'\r\n }, {\r\n label: '开始时间',\r\n value: 'startTime'\r\n }, {\r\n label: '结束时间',\r\n value: 'endTime'\r\n }]\r\n\r\n // const variableData = ref(cloneDeep(props.item))\r\n\r\n // watch(variableData, (data: { [key: string]: any }) => {\r\n // emit('update', {\r\n // ...data,\r\n // label: props.label\r\n // }, props.index)\r\n // }, {\r\n // deep: true\r\n // })\r\n\r\n const variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\n emit('update', data, props.index)\n }\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '年月', value: 'YYYY-MM' },\r\n { label: '年月日', value: 'YYYY-MM-DD' },\r\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\r\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\r\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\r\n ]\r\n } else {\r\n return []\r\n }\r\n })\r\n\r\n const onChangeDataType = () => {\r\n unref(variableData).id = null\r\n unref(variableData).keyName = ''\r\n // unref(variableData).format = null\r\n unref(variableData).dateTypeValue = null\r\n unref(variableData).variableValue = ''\r\n }\r\n\r\n const onChangeVariableType = () => {\r\n unref(variableData).format = null\r\n }\r\n\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n\r\n watch(isShowDateOperate, (val: boolean) => {\r\n if (val) {\r\n if (!unref(variableData).operateType) {\r\n unref(variableData).operateType = 'add'\r\n }\r\n if (!unref(variableData).operateMode) {\r\n unref(variableData).operateMode = 'year'\r\n }\r\n if (!unref(variableData).operateValue) {\r\n unref(variableData).operateValue = 0\r\n }\r\n if (!unref(variableData).activeOperateKey) {\r\n unref(variableData).activeOperateKey = 1\r\n }\r\n }\r\n }, {\r\n immediate: true\r\n })\r\n\r\n const changeTab = (activeKey: number) => {\r\n unref(variableData).activeOperateKey = activeKey\r\n if (activeKey === 1) {\r\n unref(variableData).operateValue = 0\r\n } else if (activeKey === 2) {\r\n unref(variableData).operateValue = 'rangeValue'\r\n }\r\n }\r\n\r\n return {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .calendar-wrap {\n width: 25px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 50%;\r\n height: 25px;\r\n text-align: center;\r\n cursor: pointer;\r\n margin-right: 15px;\r\n &:hover {\r\n border-color: rgb(24, 144, 255);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\n <div class=\"variable-item\">\n <!-- 变量名 -->\n <a-input\r\n class=\"field-name\"\n v-model:value=\"variableData.variableName\"\n placeholder=\"请输入变量名\"\n :disabled=\"!!variableData.randomKey || nameDisabled\"\n />\r\n <!-- 变量类型 -->\r\n <a-select\n class=\"field-name\"\n v-model:value=\"variableData.variableType\"\n :options=\"typeOption\"\n disabled\n style=\"max-width: 120px;\"\n placeholder=\"请选择变量类型\"\n @change=\"onChangeVariableType\"\n />\r\n <!-- 自定义值或者选择组件 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dataType\"\r\n :options=\"dataTypeOption\"\r\n style=\"max-width: 120px;\"\r\n @change=\"onChangeDataType\"\r\n />\r\n <!-- 变量值 -->\r\n <template v-if=\"variableData.dataType === 'component'\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.id\"\r\n :options=\"usedComponentList\"\r\n :fieldNames=\"{\r\n label: 'keyName',\r\n value: 'id'\r\n }\"\r\n show-search\r\n :filter-option=\"idFilterOption\"\r\n style=\"max-width: 180px;\"\r\n placeholder=\"请选择组件\"\r\n @change=\"onChangeComponent\"\r\n />\r\n </template>\r\n <template v-else>\r\n <a-input\r\n class=\"field-name\"\r\n style=\"max-width: 180px;\"\r\n v-model:value=\"variableData.variableValue\"\r\n placeholder=\"请输入变量值\"\r\n />\r\n </template>\r\n <!-- 日期范围的取值类型:间隔值、开始时间、结束时间 -->\r\n <template v-if=\"isDateRangeComponent\">\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.dateTypeValue\"\r\n :options=\"rangeTypeOptions\"\r\n placeholder=\"请选择取值类型\"\r\n />\r\n </template>\r\n <!-- 值格式,YYYY-MM-DD等 -->\r\n <a-select\r\n class=\"field-name\"\r\n v-model:value=\"variableData.format\"\r\n :options=\"formatOptions\"\r\n placeholder=\"请选择值格式\"\r\n />\r\n <!-- 日期加减 -->\r\n <template v-if=\"isShowDateOperate\">\r\n <a-popover v-model:visible=\"popoverVisible\" trigger=\"click\" placement=\"bottomRight\">\r\n <template #content>\r\n <div class=\"popover-content-wrap\">\r\n <a-tabs :defaultActiveKey=\"variableData.activeOperateKey\" @change=\"changeTab\">\r\n <a-tab-pane tab=\"日期偏移\" :key=\"1\">\r\n <a-input-number\r\n class=\"field-name\"\r\n min=\"0\"\r\n v-model:value=\"variableData.operateValue\"\r\n style=\"max-width: 180px;flex: auto;\"\r\n >\r\n <template #addonBefore>\r\n <a-select v-model:value=\"variableData.operateType\" style=\"width: 60px\">\r\n <a-select-option value=\"add\">加</a-select-option>\r\n <a-select-option value=\"minus\">减</a-select-option>\r\n </a-select>\r\n </template>\r\n <template #addonAfter>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"width: 60px\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n </template>\r\n </a-input-number>\r\n </a-tab-pane>\r\n <!-- 自定义 -->\r\n <a-tab-pane tab=\"自定义\" :key=\"2\" v-if=\"isDateRangeComponent\">\r\n <div style=\"display: flex;\">\r\n <a-select\r\n v-model:value=\"variableData.operateValue\"\r\n allowClear\r\n style=\"width: 120px;margin-right: 10px;\"\r\n >\r\n <a-select-option value=\"rangeValue\">范围差值</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateMode\" style=\"margin-right: 10px;\">\r\n <a-select-option value=\"year\">年</a-select-option>\r\n <a-select-option value=\"month\">月</a-select-option>\r\n <a-select-option value=\"week\">周</a-select-option>\r\n <a-select-option value=\"day\">日</a-select-option>\r\n <a-select-option value=\"hour\">时</a-select-option>\r\n <a-select-option value=\"minute\">分</a-select-option>\r\n </a-select>\r\n <a-select v-model:value=\"variableData.operateType\">\r\n <a-select-option value=\"minus\">前</a-select-option>\r\n <a-select-option value=\"add\">后</a-select-option>\r\n </a-select>\r\n </div>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </template>\r\n <div class=\"calendar-wrap\" @click=\"popoverVisible = true;\">\r\n <appstore-add-outlined />\r\n </div>\r\n </a-popover>\r\n </template>\r\n <close-outlined\n class=\"delete-icon\"\n @click=\"onDelete\"\n v-if=\"showDelete === undefined ? !variableData.randomKey : showDelete\"\n />\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, inject, unref, ref, watch } from 'vue'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { RENDER_USED_COMPONENTS } from '@/utils/constant'\r\nimport { CloseOutlined, AppstoreAddOutlined } from '@ant-design/icons-vue'\r\n// import { cloneDeep } from 'lodash-es'\r\nimport {\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Input as AInput,\r\n Popover as APopover,\r\n Tabs as ATabs,\r\n TabPane as ATabPane,\r\n InputNumber as AInputNumber\r\n} from 'ant-design-vue'\r\nimport 'ant-design-vue/es/popover/style'\r\nexport default defineComponent({\r\n name: 'VariableCard',\r\n props: {\r\n item: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n require: true\r\n },\r\n nameDisabled: {\n type: Boolean,\n default: false\n },\n showDelete: {\n type: Boolean,\n default: undefined\n }\n },\n components: {\r\n CloseOutlined,\r\n AppstoreAddOutlined,\r\n ASelect,\r\n ASelectOption,\r\n AInput,\r\n APopover,\r\n ATabs,\r\n ATabPane,\r\n AInputNumber\r\n },\r\n setup (props, { emit }) {\r\n const popoverVisible = ref(false)\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const usedComponentList = computed(() => {\r\n return unref(renderUsedComponents)?.filter((usedComponent) => {\r\n return usedComponent.keyName !== ''\r\n })\r\n })\r\n const typeOption = [{\r\n label: 'TEXT',\r\n value: 'TEXT'\r\n }, {\r\n label: 'NUMBER',\r\n value: 'NUMBER'\r\n }, {\r\n label: 'DATE',\r\n value: 'DATE'\r\n }]\r\n\r\n const dataTypeOption = [{\r\n label: '自定义值',\r\n value: ''\r\n }, {\r\n label: '组件值',\r\n value: 'component'\r\n }]\r\n\r\n const rangeTypeOptions = [{\r\n label: '间隔值',\r\n value: 'rangeValue'\r\n }, {\r\n label: '开始时间',\r\n value: 'startTime'\r\n }, {\r\n label: '结束时间',\r\n value: 'endTime'\r\n }]\r\n\r\n // const variableData = ref(cloneDeep(props.item))\r\n\r\n // watch(variableData, (data: { [key: string]: any }) => {\r\n // emit('update', {\r\n // ...data,\r\n // label: props.label\r\n // }, props.index)\r\n // }, {\r\n // deep: true\r\n // })\r\n\r\n const variableData = computed({\r\n get () {\r\n return props.item\r\n },\r\n set (data: { [key: string]: any }) {\n emit('update', data, props.index)\n }\n })\r\n\r\n const curComponent = computed(() => {\r\n let result = null\r\n if (unref(variableData)?.dataType === 'component') {\r\n const target = unref(usedComponentList).find(v => v.id === unref(variableData)?.id)\r\n if (target) {\r\n result = target\r\n }\r\n }\r\n return result\r\n })\r\n const isShowFormat = computed(() => {\r\n let result = false\r\n // if (unref(curComponent)) {\r\n // result = lowerCaseIncludes(unref(curComponent).type, ['range', 'date'])\r\n // }\r\n if (unref(variableData)?.variableType === 'DATE') {\r\n result = true\r\n }\r\n return result\r\n })\r\n const isDateRangeComponent = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n result = lowerCaseIncludes(unref(curComponent).type, 'range')\r\n }\r\n return result\r\n })\r\n\r\n const isShowDateOperate = computed(() => {\r\n let result = false\r\n if (unref(curComponent)) {\r\n if (lowerCaseIncludes(unref(curComponent).type, 'range')) {\r\n if (['startTime', 'endTime'].includes(unref(variableData).dateTypeValue)) {\r\n result = true\r\n }\r\n } else if (lowerCaseIncludes(unref(curComponent).type, 'date')) {\r\n result = true\r\n }\r\n }\r\n return result\r\n })\r\n\r\n const onChangeComponent = (value: string, option: { [key:string]:any }) => {\r\n if (value) {\r\n unref(variableData).keyName = option.keyName\r\n }\r\n }\r\n\r\n const onDelete = () => {\r\n emit('delete', props.index)\r\n }\r\n\r\n const formatOptions = computed(() => {\r\n if (unref(isShowFormat)) {\r\n return [\r\n { label: '年', value: 'YYYY' },\r\n { label: '年月', value: 'YYYY-MM' },\r\n { label: '年月日', value: 'YYYY-MM-DD' },\r\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\r\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\r\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\r\n ]\r\n } else {\r\n return []\r\n }\r\n })\r\n\r\n const onChangeDataType = () => {\r\n unref(variableData).id = null\r\n unref(variableData).keyName = ''\r\n // unref(variableData).format = null\r\n unref(variableData).dateTypeValue = null\r\n unref(variableData).variableValue = ''\r\n }\r\n\r\n const onChangeVariableType = () => {\r\n unref(variableData).format = null\r\n }\r\n\r\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\r\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\r\n }\r\n\r\n watch(isShowDateOperate, (val: boolean) => {\r\n if (val) {\r\n if (!unref(variableData).operateType) {\r\n unref(variableData).operateType = 'add'\r\n }\r\n if (!unref(variableData).operateMode) {\r\n unref(variableData).operateMode = 'year'\r\n }\r\n if (!unref(variableData).operateValue) {\r\n unref(variableData).operateValue = 0\r\n }\r\n if (!unref(variableData).activeOperateKey) {\r\n unref(variableData).activeOperateKey = 1\r\n }\r\n }\r\n }, {\r\n immediate: true\r\n })\r\n\r\n const changeTab = (activeKey: number) => {\r\n unref(variableData).activeOperateKey = activeKey\r\n if (activeKey === 1) {\r\n unref(variableData).operateValue = 0\r\n } else if (activeKey === 2) {\r\n unref(variableData).operateValue = 'rangeValue'\r\n }\r\n }\r\n\r\n return {\r\n variableData,\r\n typeOption,\r\n dataTypeOption,\r\n usedComponentList,\r\n formatOptions,\r\n rangeTypeOptions,\r\n isShowFormat,\r\n isDateRangeComponent,\r\n isShowDateOperate,\r\n popoverVisible,\r\n idFilterOption,\r\n onChangeComponent,\r\n onDelete,\r\n onChangeDataType,\r\n onChangeVariableType,\r\n changeTab\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-item {\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n border: 1px solid #e8e8e8;\r\n .field-name {\r\n margin-right: 20px;\r\n flex: 1;\r\n }\r\n\r\n .calendar-wrap {\n width: 25px;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 50%;\r\n height: 25px;\r\n text-align: center;\r\n cursor: pointer;\r\n margin-right: 15px;\r\n &:hover {\r\n border-color: rgb(24, 144, 255);\r\n }\r\n }\r\n}\r\n</style>\r\n","import { nanoid } from 'nanoid'\n\nexport const isGlobalVariable = (item: { [key: string]: any } = {}) => {\n return item.globalCondition === true || (item.globalCondition == null && !item.randomKey)\n}\n\nexport const normalizeVariableList = (variableList: { [key: string]: any }[]): { [key: string]: any }[] => {\n return (variableList || []).map((item) => ({\n ...item,\n globalCondition: isGlobalVariable(item)\n }))\n}\n\nexport const createIndicatorVariableList = (\n dataSetParams: { [key: string]: any }[],\n indicator: { [key: string]: any },\n source: any\n): { [key: string]: any }[] => {\n const list: { [key: string]: any }[] = []\n if (!Array.isArray(dataSetParams) || !dataSetParams.length) {\n return list\n }\n for (const val of dataSetParams) {\n list.push({\n ...val,\n dataType: '',\n id: null,\n variableValue: source === 'EDV_DATA_SET' ? val.defaultValue : null,\n dateTypeValue: null,\n format: val.valueFormat ? (val.valueFormat.toUpperCase() || null) : null,\n variableName: val.name,\n variableType: val.valueType,\n label: indicator.label,\n randomKey: indicator.randomKey,\n keyValue: nanoid(),\n disabled: source === 'EDV_DATA_SET',\n globalCondition: false\n })\n }\n return list\n}\n\nexport const createGlobalVariableList = (\n graphicConfig: { [key: string]: any },\n savedVariableList: { [key: string]: any }[]\n): { [key: string]: any }[] => {\n const types = ['leftAxisList', 'rightAxisList', 'indicators', 'specialIndicators']\n const allParamNames: string[][] = []\n const allParamMap = new Map<string, { [key: string]: any }>()\n for (const type of types) {\n for (const item of graphicConfig?.[type] || []) {\n const dataSetParams: any[] = Array.isArray(item?.dataSetParams) ? item.dataSetParams : []\n if (dataSetParams.length) {\n const paramNames: string[] = dataSetParams.map((param: any) => param.name).filter(Boolean)\n allParamNames.push([...new Set(paramNames)])\n for (const param of dataSetParams) {\n if (param.name && !allParamMap.has(param.name)) {\n allParamMap.set(param.name, param)\n }\n }\n }\n }\n }\n if (!allParamNames.length) {\n return []\n }\n let commonNames = allParamNames[0]\n for (const names of allParamNames) {\n commonNames = commonNames.filter(name => names.includes(name))\n }\n const savedGlobalList = (savedVariableList || []).filter(isGlobalVariable)\n return commonNames.map((name) => {\n const source = allParamMap.get(name)\n const saved = savedGlobalList.find(v => v.variableName === name)\n if (saved) {\n return saved\n }\n return {\n ...source,\n variableName: name,\n variableType: source?.valueType,\n dataType: '',\n id: null,\n variableValue: source?.defaultValue ?? null,\n dateTypeValue: null,\n format: source?.valueFormat ? source.valueFormat.toUpperCase() : null,\n keyValue: `global-${name}`,\n globalCondition: true,\n randomKey: null,\n disabled: false\n }\n })\n}\n","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\">\n <!-- <a-button @click=\"onAddVariable\">添加变量</a-button> -->\n </div>\n </div>\n <div class=\"variable-group-content\">\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\n <variable-item\n :item=\"item\"\n :index=\"Number(index)\"\n :show-delete=\"false\"\n :name-disabled=\"mode === 'global'\"\n @update=\"onUpdateItem\"\n @delete=\"onDeleteItem\"\n />\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, watch } from 'vue'\nimport VariableItem from './VariableItem.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { createGlobalVariableList, isGlobalVariable, normalizeVariableList } from './variable-utils'\nexport default defineComponent({\n name: 'VariableGroup',\n components: {\n VariableItem\n },\n props: {\n mode: {\n type: String,\n default: 'global'\n },\n indicatorLabel: {\n type: String,\n default: ''\n },\n indicatorKey: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const source = inject(SOURCE_TYPE)\n const variableList = computed(() => {\n const list = unref(graphicConfig)?.variableList || []\n if (props.mode === 'indicator') {\n return list.filter((item: any) => item.randomKey === props.indicatorKey)\n }\n return createGlobalVariableList(unref(graphicConfig), list)\n })\n\n const updateConfig = (list: { [key:string]: any }[]) => {\n const allList = cloneDeep(unref(graphicConfig)?.variableList || [])\n let mergedList\n if (props.mode === 'global') {\n mergedList = allList.filter(item => !isGlobalVariable(item)).concat(list)\n } else {\n const scopeKeyMap = new Map(list.map(item => [item.keyValue, item]))\n mergedList = allList.map(item => scopeKeyMap.get(item.keyValue) || item)\n for (const item of list) {\n if (!allList.some(oldItem => oldItem.keyValue === item.keyValue)) {\n mergedList.push(item)\n }\n }\n }\n const normalizedList = normalizeVariableList(mergedList)\n updateGraphicConfig({\n ...unref(graphicConfig),\n variableConditions: handleVariableList(normalizedList, renderUsedComponents),\n variableList: normalizedList\n })\n }\n\n watch(() => {\n if (props.mode === 'global') {\n return variableList.value.map((v: any) => v.variableName).join(',')\n }\n return ''\n }, () => {\n if (props.mode === 'global') {\n updateConfig(cloneDeep(variableList.value))\n }\n }, {\n immediate: true\n })\n\n const onAddVariable = () => {\n const list = cloneDeep(unref(variableList))\n const newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableType: 'TEXT',\n dataType: '',\n id: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator'\n }\n if (props.mode === 'indicator') {\n newItem.label = props.indicatorLabel\n newItem.randomKey = props.indicatorKey\n newItem.disabled = unref(source) === 'EDV_DATA_SET'\n }\n list.push(newItem)\n updateConfig(list)\n }\n\r\n const onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onSyncVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\n <div class=\"variable-group\">\n <div class=\"variable-group-header\">\n <!-- <a-button @click=\"onAddVariable\">添加变量</a-button> -->\n </div>\n </div>\n <div class=\"variable-group-content\">\n <template v-for=\"(item, index) in variableList\" :key=\"item.keyValue\">\n <variable-item\n :item=\"item\"\n :index=\"Number(index)\"\n :show-delete=\"false\"\n :name-disabled=\"mode === 'global'\"\n @update=\"onUpdateItem\"\n @delete=\"onDeleteItem\"\n />\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref, watch } from 'vue'\nimport VariableItem from './VariableItem.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { createGlobalVariableList, isGlobalVariable, normalizeVariableList } from './variable-utils'\nexport default defineComponent({\n name: 'VariableGroup',\n components: {\n VariableItem\n },\n props: {\n mode: {\n type: String,\n default: 'global'\n },\n indicatorLabel: {\n type: String,\n default: ''\n },\n indicatorKey: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const source = inject(SOURCE_TYPE)\n const variableList = computed(() => {\n const list = unref(graphicConfig)?.variableList || []\n if (props.mode === 'indicator') {\n return list.filter((item: any) => item.randomKey === props.indicatorKey)\n }\n return createGlobalVariableList(unref(graphicConfig), list)\n })\n\n const updateConfig = (list: { [key:string]: any }[]) => {\n const allList = cloneDeep(unref(graphicConfig)?.variableList || [])\n let mergedList\n if (props.mode === 'global') {\n mergedList = allList.filter(item => !isGlobalVariable(item)).concat(list)\n } else {\n const scopeKeyMap = new Map(list.map(item => [item.keyValue, item]))\n mergedList = allList.map(item => scopeKeyMap.get(item.keyValue) || item)\n for (const item of list) {\n if (!allList.some(oldItem => oldItem.keyValue === item.keyValue)) {\n mergedList.push(item)\n }\n }\n }\n const normalizedList = normalizeVariableList(mergedList)\n updateGraphicConfig({\n ...unref(graphicConfig),\n variableConditions: handleVariableList(normalizedList, renderUsedComponents),\n variableList: normalizedList\n })\n }\n\n watch(() => {\n if (props.mode === 'global') {\n return variableList.value.map((v: any) => v.variableName).join(',')\n }\n return ''\n }, () => {\n if (props.mode === 'global') {\n updateConfig(cloneDeep(variableList.value))\n }\n }, {\n immediate: true\n })\n\n const onAddVariable = () => {\n const list = cloneDeep(unref(variableList))\n const newItem: { [key: string]: any } = {\n keyValue: nanoid(),\n variableType: 'TEXT',\n dataType: '',\n id: null,\n dateTypeValue: null,\n format: null,\n globalCondition: props.mode !== 'indicator'\n }\n if (props.mode === 'indicator') {\n newItem.label = props.indicatorLabel\n newItem.randomKey = props.indicatorKey\n newItem.disabled = unref(source) === 'EDV_DATA_SET'\n }\n list.push(newItem)\n updateConfig(list)\n }\n\r\n const onSyncVariable = () => {\r\n const {\r\n leftAxisList = [],\r\n rightAxisList = [],\r\n indicators = [],\r\n specialIndicators = []\r\n } = unref(graphicConfig) || {}\r\n const list = cloneDeep(unref(variableList))\r\n const variableValueMap = new Map()\r\n const variableNames = []\r\n const mergeList = leftAxisList.concat(rightAxisList).concat(indicators).concat(specialIndicators)\r\n for (const item of mergeList) {\r\n if (item.dataSetParams?.length) {\r\n for (const param of item.dataSetParams) {\r\n if (!variableValueMap.has(param.name)) {\r\n variableNames.push(param.name)\r\n variableValueMap.set(param.name, list.find((v: any) => v.variableName === param.name))\r\n }\r\n }\r\n }\r\n }\r\n for (const item of variableNames) {\r\n const data = variableValueMap.get(item)\r\n if (data) {\r\n const filterList = list.filter((v: any) => v.variableName === item && data.randomKey !== v.randomKey)\r\n const ignoreField = ['label', 'randomKey', 'keyValue']\r\n for (const fl of filterList) {\r\n for (const key in data) {\r\n if (!ignoreField.includes(key)) {\r\n fl[key] = data[key]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n updateConfig(list)\r\n }\r\n\r\n const onUpdateItem = (data: { [key: string]: any }, index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list[index] = data\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(variableList))\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n return {\r\n variableList,\r\n onAddVariable,\r\n onSyncVariable,\r\n onUpdateItem,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.variable-group-header {\r\n margin: 20px 0;\r\n}\r\n</style>\r\n","<template>\n <a-modal\n :title=\"`配置变量 - ${item?.label || ''}`\"\n :visible=\"visible\"\n destroy-on-close\n width=\"70%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <variable-group\n mode=\"indicator\"\n :indicator-label=\"item?.label || ''\"\n :indicator-key=\"item?.randomKey || ''\"\n />\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, inject, watch } from 'vue'\nimport { Modal as AModal } from 'ant-design-vue'\nimport VariableGroup from './VariableGroup.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { cloneDeep } from 'lodash-es'\nimport { createIndicatorVariableList, normalizeVariableList } from './variable-utils'\n\nexport default defineComponent({\n name: 'VariableModal',\n components: {\n AModal,\n VariableGroup\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const visible = ref(false)\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const source = inject(SOURCE_TYPE) as any\n\n const ensureInitialVariables = () => {\n const { randomKey, label, dataSetParams } = props.item || {}\n if (!randomKey || !Array.isArray(dataSetParams) || !dataSetParams.length) {\n return\n }\n const currentList = unref(graphicConfig)?.variableList || []\n if (currentList.some((item: any) => item.randomKey === randomKey)) {\n return\n }\n const newVariables = createIndicatorVariableList(dataSetParams, { label, randomKey }, unref(source))\n if (!newVariables.length) {\n return\n }\n const variableList = normalizeVariableList(cloneDeep(currentList))\n variableList.unshift(...newVariables)\n updateGraphicConfig({\n variableList,\n variableConditions: handleVariableList(variableList, renderUsedComponents)\n })\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n hideModal()\n }\n\n watch(visible, (value: boolean) => {\n if (value) {\n ensureInitialVariables()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n }, {\n flush: 'post'\n })\n\n watch(() => props.item, () => {\n if (visible.value) {\n ensureInitialVariables()\n }\n })\n\n expose({\n showModal\n })\n\n return {\n visible,\n onCancel\n }\n }\n})\n</script>\n","<template>\n <a-modal\n :title=\"`配置变量 - ${item?.label || ''}`\"\n :visible=\"visible\"\n destroy-on-close\n width=\"70%\"\n :bodyStyle=\"{\n height: '70vh',\n overflow: 'auto',\n padding: '10px 24px'\n }\"\n :footer=\"null\"\n @cancel=\"onCancel\"\n >\n <variable-group\n mode=\"indicator\"\n :indicator-label=\"item?.label || ''\"\n :indicator-key=\"item?.randomKey || ''\"\n />\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, unref, inject, watch } from 'vue'\nimport { Modal as AModal } from 'ant-design-vue'\nimport VariableGroup from './VariableGroup.vue'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, SOURCE_TYPE } from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { cloneDeep } from 'lodash-es'\nimport { createIndicatorVariableList, normalizeVariableList } from './variable-utils'\n\nexport default defineComponent({\n name: 'VariableModal',\n components: {\n AModal,\n VariableGroup\n },\n props: {\n item: {\n type: Object,\n default: () => ({})\n },\n type: {\n type: String,\n default: ''\n }\n },\n setup (props, { expose }) {\n const visible = ref(false)\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const source = inject(SOURCE_TYPE) as any\n\n const ensureInitialVariables = () => {\n const { randomKey, label, dataSetParams } = props.item || {}\n if (!randomKey || !Array.isArray(dataSetParams) || !dataSetParams.length) {\n return\n }\n const currentList = unref(graphicConfig)?.variableList || []\n if (currentList.some((item: any) => item.randomKey === randomKey)) {\n return\n }\n const newVariables = createIndicatorVariableList(dataSetParams, { label, randomKey }, unref(source))\n if (!newVariables.length) {\n return\n }\n const variableList = normalizeVariableList(cloneDeep(currentList))\n variableList.unshift(...newVariables)\n updateGraphicConfig({\n variableList,\n variableConditions: handleVariableList(variableList, renderUsedComponents)\n })\n }\n\n const showModal = () => {\n visible.value = true\n }\n const hideModal = () => {\n visible.value = false\n }\n const onCancel = () => {\n hideModal()\n }\n\n watch(visible, (value: boolean) => {\n if (value) {\n ensureInitialVariables()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(!value)\n }\n }, {\n flush: 'post'\n })\n\n watch(() => props.item, () => {\n if (visible.value) {\n ensureInitialVariables()\n }\n })\n\n expose({\n showModal\n })\n\n return {\n visible,\n onCancel\n }\n }\n})\n</script>\n","<template>\n <a-card\n v-if=\"type === 'formFields'\"\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">{{ title }}</div>\n </div>\n </template>\n <div class=\"field-wrap\">\n <div class=\"field-item\">\n <div class=\"item-label\">名称:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.labelField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'labelField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\">\n <div class=\"item-label\">值:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.valueField\"\n :options=\"fieldOptions\"\n :mode=\"lowerCaseIncludes(selectedComponent.type, 'valueline') ? 'multiple' : undefined\"\n @change=\"onFieldChange($event, 'valueField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanTreeSelect'\">\n <div class=\"item-label\">父节点:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.parentField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'parentField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanSelect'\">\n <div class=\"item-label\" style=\"width: 20px;\"></div>\n <a-checkbox v-model:checked=\"fieldData.hasAllOption\">\n 显示【全部】选项\n </a-checkbox>\n </div>\n </div>\n </a-card>\n <a-card\n v-else\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">\n {{ title }}\n <template v-if=\"type === 'dimensionList'\">\n <a-popover title=\"提示\" placement=\"topLeft\">\n <template #content>\n <p>配置了维度后,会使用返回数据的第一条中以【维度名】为key的值作为显示值</p>\n </template>\n <info-circle-outlined style=\"color: #919191;cursor: pointer;\" />\n </a-popover>\n </template>\n </div>\n <div\n class=\"add-calculation\"\n v-if=\"isShowCalcBtn\"\n @click.prevent.stop=\"onShowCalculationModal('add')\"\n >\n <plus-outlined class=\"add-calculation-icon\" />\n <span>添加计算指标</span>\n </div>\n <a-checkbox\n v-if=\"isIndexSet && type === 'indicators'\"\n v-model:checked=\"compositeIndicator\"\n style=\"margin-left: 15px;\"\n >合计</a-checkbox>\n </div>\n </template>\n <div :class=\"type + '-list'\" style=\"height: 100%;padding: 10px;\">\n <draggable\n v-model=\"cardItemList\"\n class=\"chart-column\"\n :id=\"type\"\n :group=\"{\n name: 'cardItem',\n pull: type !== 'indexLibColumns',\n put: type !== 'indexLibColumns'\n }\"\n item-key=\"index\"\n @add=\"onDragItemAdd\"\n @sort=\"onDragItemSort\"\n @end=\"onDragItemEnd\"\n @start=\"onDragItemStart($event, cardItemList)\"\n >\n <template #item=\"{ element: cardItem, index }\">\n <div class=\"card-item-wrap\">\n <a-checkbox\n class=\"card-item\"\n :checked=\"cardItem.show\"\n @change=\"onCheckboxChange($event, index)\"\n >\n <!-- editLabelList 和 labelList 都为 cardItemList 映射列表,用于修改label交互 -->\n <!-- editLabelList 是否修改名字, 变为输入框,值为 boolean -->\n <!-- labelList,label 列表 -->\n <div class=\"card-item-inner\">\n <div\n class=\"name\"\n v-if=\"!editLabelList[index] && cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n {{ cardItem.label }}\n </div>\n <div\n class=\"name placeholder\"\n v-if=\"!editLabelList[index] && !cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n 请点击填入名字\n </div>\n <a-input\n :default-value=\"cardItem.label\"\n size=\"small\"\n v-if=\"editLabelList[index]\"\n v-focus\n @pointerdown.stop\n @mousedown.stop\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n @keydown=\"handleInputKeyDown\"\n />\n <span\n class=\"calculation-icon\"\n @click.prevent.stop=\"\n onShowCalculationModal('edit', cardItem, index)\n \"\n v-if=\"['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n >\n fx\n </span>\n <a-popover title=\"\">\n <template #content>\n {{ getIndexSetRawLabel(cardItem.calcType) }}\n </template>\n <info-circle-outlined\n v-if=\"type === 'indexLibColumns' && !['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n class=\"setting-icon\"\n />\n </a-popover>\n <a-dropdown :trigger=\"['click']\" @visibleChange=\"onVisibleChange($event, cardItem)\" v-if=\"type !== 'indexLibColumns'\">\n <setting-outlined class=\"setting-icon\" @click=\"onClickSetting(cardItem)\"/>\n <template #overlay>\n <a-menu>\n <!-- 仅在分类、系列中设置 -->\n <template\n v-if=\"dimensionType.includes(type)\"\n >\n <!-- 升序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'ASC')\"\n key=\"0\"\n >\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'ASC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 降序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'DESC')\"\n key=\"1\"\n >\n <a-menu-item\n class=\"menu-item\"\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'DESC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 自定义排序 -->\n <a-menu-item @click=\"showCustomSortModal(cardItem, index)\">\n {{ handleCustomSortTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 自定义分组 -->\n <a-menu-item @click=\"showCustomGroupModal(cardItem, index)\">\n {{ handleCustomGroupTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 日期维度的格式化 -->\n <template v-if=\"cardItem.genericType === 'DATE'\">\n <a-sub-menu title=\"日期格式化\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"format in formatList\"\n :key=\"format.value\"\n @click=\"onDateFormatChange(format.value, index)\"\n >\n <span\n :style=\"(cardItem.dateFormat === format.value) ||\n (!cardItem.dateFormat && format.value === 'YYYY-MM-DD') ? 'color: #1890FF;' : ''\">\n {{ format.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n </template>\n <!-- 过滤 -->\n <a-menu-item @click=\"showFilterModal(cardItem, index)\">\n {{ handleFilterTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <template v-if=\"!dimensionType.includes(type)\">\n <!-- 指标排序 -->\n <a-sub-menu :title=\"handleIndSortTitle(cardItem.sort)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sort in indSortList\"\n :key=\"sort.value\"\n @click=\"onIndSortChange(sort.value, index)\"\n >\n <span\n :style=\"cardItem.sort && cardItem.sort === sort.value ? 'color: #1890FF;' : ''\">\n {{ sort.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n\n <template\n v-if=\"!['classificationList', 'seriesList'].includes(type)\"\n >\n <!-- 汇总方式 -->\n <a-sub-menu :title=\"handleAggregateTitle(cardItem.aggregate)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"aggregate in aggregateList\"\n :key=\"aggregate.value\"\n @click=\"onAggregateChange(aggregate.value, index)\"\n >\n {{ aggregate.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <template v-if=\"idxList.includes(type) && hasIndicatorVariables(cardItem)\">\n <a-menu-item @click=\"showVariableModal(cardItem, index)\">\n 配置变量\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 展示名称 -->\n <template v-if=\"isShowConfigName\">\n <a-menu-item @click=\"showConfigNameModal(cardItem, index)\">\n 修改展示名称\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 关联组件排序 -->\n <template v-if=\"isShowSortByCpnt\">\n <a-menu-item @click=\"showSortByCpntModal(cardItem, index)\">\n 关联组件排序\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 在钻取的普通表中显示/隐藏 -->\n <a-sub-menu :title=\"handleDrillTableTitle(cardItem.showInDrillTable)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"shl in showHideList\"\n :key=\"shl.value\"\n @click=\"onShowHideChange(shl.value, index)\"\n >\n {{ shl.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 仪表盘指标类型,主指标/目标指标 -->\n <a-sub-menu :title=\"handleIndTypeTitle(cardItem.gaugeIndType)\" v-if=\"selectedComponent.type === 'ecanGauge'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in indTypeList\"\n :key=\"il.value\"\n @click=\"onIndTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <!-- 预算执行图指标类型,累计指标/当期指标 -->\n <a-sub-menu :title=\"handleBudgetTypeTitle(cardItem.budgetIndType)\" v-if=\"selectedComponent.type === 'ecanBudget' && type === 'indicators'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in budgetTypeList\"\n :key=\"il.value\"\n @click=\"onBudgetTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 计数(内置)指标关联维度 -->\n <template v-if=\"cardItem.name === 'the_count'\">\n <a-menu-item @click=\"showDimByCountModal(cardItem, index)\">\n 关联维度\n </a-menu-item>\n <a-menu-divider />\n <a-sub-menu :title=\"handleDistinctTitle(cardItem.distinct)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"distinct in distinctList\"\n :key=\"distinct.value\"\n @click=\"onDistinctChange(distinct.value, index)\"\n >\n {{ distinct.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 指标名 -->\n <template v-if=\"!dimensionType.includes(type)\">\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].name)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].name\">\n <span style=\"font-weight: bold;\">指标名:</span>\n {{ dataViewMap[cardItem.name].name }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].code)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].code\">\n <span style=\"font-weight: bold;\">指标编码:</span>\n {{ dataViewMap[cardItem.name].code }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n </template>\n </a-menu>\n </template>\n </a-dropdown>\n <delete-outlined\n v-if=\"type !== 'indexLibColumns' || cardItem.calcType === 'FORMULA'\"\n class=\"delete-icon\"\n @click.prevent=\"onDelete(index)\"\n />\n </div>\n </a-checkbox>\n </div>\n </template>\n </draggable>\n </div>\n <custom-sort-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n :sortList=\"sortList\"\n ref=\"customSortModalRef\"\n />\n <custom-group-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"customGroupModalRef\"\n />\n <filter-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"filterModalRef\"\n />\n <config-name\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"configNameRef\"\n />\n <sort-by-cpnt\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"sortByCpntRef\"\n />\n <dim-by-count\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"dimByCountRef\"\n />\n <calculation-modal\n :type=\"type\"\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :mode=\"calculationModalMode\"\n :isIndexSet=\"isIndexSet\"\n ref=\"calculationModalRef\"\n />\n <variable-modal\n :item=\"currentItem\"\n :type=\"type\"\n ref=\"variableModalRef\"\n />\n </a-card>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, watch, inject, onMounted } from 'vue'\nimport {\n Card as ACard,\n Checkbox as ACheckbox,\n Input as AInput,\n Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n MenuDivider as AMenuDivider,\n Select as ASelect,\n Popover as APopover,\n message\n} from 'ant-design-vue'\nimport {\n SettingOutlined,\n DeleteOutlined,\n PlusOutlined,\n CopyOutlined,\n InfoCircleOutlined\n} from '@ant-design/icons-vue'\nimport focus from '@/directives/focus'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n SOURCE_TYPE,\n SELECTED_COMPONENT,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport CustomSortModal from './CustomSortModal.vue'\nimport CustomGroupModal from './CustomGroupModal.vue'\nimport FilterModal from './filter-modal'\nimport ConfigName from './config-name'\nimport SortByCpnt from './sort-by-cpnt'\nimport DimByCount from './dim-by-count'\nimport CalculationModal from './calculation-modal'\nimport VariableModal from '../../variable-group/VariableModal.vue'\nimport Draggable from 'vuedraggable'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nimport { createIndicatorVariableList, normalizeVariableList } from '../../variable-group/variable-utils'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n VariableModal,\n SettingOutlined,\n DeleteOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CustomSortModal,\n PlusOutlined,\n ACard,\n ACheckbox,\n AInput,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n AMenuDivider,\n ASelect,\n APopover,\n Draggable,\n ConfigName,\n SortByCpnt,\n DimByCount\n },\n props: {\n title: {\n type: String,\n default: ''\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' }\n ]\n const indSortList = [\n { label: '升序', value: 'ASC' },\n { label: '降序', value: 'DESC' },\n { label: '无', value: '' }\n ]\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const idxList = ['leftAxisList', 'rightAxisList', 'indicators', 'specialIndicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetMap = {\n CURRENT: '本期值',\n LAST_CYCLE: '上期值',\n LAST_YEAR: '同比值',\n PERIOD_ON_PERIOD: '环比',\n YEAR_ON_YEAR: '同比',\n DW: '单位'\n }\n const source = inject(SOURCE_TYPE)\n const currentCardItem = ref()\n // const variableList = computed(() => {\n // const list = unref(graphicConfig)?.variableList || []\n // return list\n // })\n\n const compositeIndicator = computed({\n get () {\n return unref(graphicConfig)?.compositeIndicator || false\n },\n set (val: boolean) {\n updateGraphicConfig({\n compositeIndicator: val\n })\n }\n })\n\n const isAllowAdd = (data: any = {}) => {\n const { type } = props\n if (unref(source) === 'SQL_VIEW') {\n // 视图不需要判断\n return true\n }\n if (unref(source) === 'EDV_DATA_SET') {\n // 数据集需要多传一个edvDataSetId\n updateGraphicConfig({ edvDataSetId: data.parentId })\n }\n let result = false\n if (data.scope === 'FIELD') {\n // 数据集没有维度指标区分,指标库-数据集配置时,列信息需要真是字段类型(字符串0,数字1,日期2),字符串不可以拉到值轴上\n result = true\n if ((['0', '2'].includes(data.genericType) && idxList.includes(type)) || (data.genericType === '1' && dimList.includes(type))) {\n result = false\n }\n }\n if (['IDX', 'BUILT_IN_IDX'].includes(data.scope)) {\n if (idxList.includes(type)) {\n result = true\n }\n } else if (['DIM', 'BUILT_IN_DIM'].includes(data.scope)) {\n if (dimList.includes(type)) {\n result = true\n }\n }\n if (type === 'dimensionList') {\n // 只能拖一个维度\n const list = unref(graphicConfig)[type]?.slice() || []\n if (list?.length === 1) {\n result = false\n }\n }\n return result\n }\n const dataSelectIndicators = computed(() =>\n lowerCaseIncludes(unref(selectedComponent)?.type, ['dataSelect']) && props.type === 'indicators')\n const handleListItemData = (listData: string = '{}') => {\n try {\n const data = JSON.parse(listData)\n if (!isAllowAdd(data)) {\n return\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n props.type === 'specialIndicatorList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate', 'scatter'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n reNameSame(list, data)\n // 新增一个随机值作为唯一值,用于指标的内置变量的处理\n data.randomKey = nanoid()\n list.push(data)\n const { type } = props\n const varConfig: { [key: string]: any } = {}\n if (['IDX', 'BUILT_IN_IDX', 'FIELD'].includes(data.scope)) {\n let varList = unref(graphicConfig)?.variableList || []\n let variates = sessionStorage.getItem('indicator-variates')\n if (data.scope === 'FIELD' && !idxList.includes(type)) {\n variates = '[]'\n }\n if (variates) {\n const variableList = JSON.parse(variates)\n if (variableList?.length) {\n const newVariableList = createIndicatorVariableList(variableList, data, unref(source))\n if (newVariableList?.length) {\n varList.unshift(...newVariableList)\n }\n }\n }\n varList = normalizeVariableList(varList)\n varConfig.variableList = varList\n varConfig.variableConditions = handleVariableList(varList, renderUsedComponents)\n }\n updateGraphicConfig({\n [props.type]: list,\n ...varConfig\n })\n sessionStorage.setItem('indicator-list-item', '')\n sessionStorage.setItem('indicator-variates', '')\n } catch (e) {\n console.error(e)\n }\n }\n const handleCardItemData = (cardData: string = '{}') => {\n try {\n const { cardItem, type, index } = JSON.parse(cardData)\n if (!isAllowAdd(cardItem)) {\n return\n }\n if (type === props.type) return\n // 添加新元素\n const currentList = unref(graphicConfig)[props.type]?.slice() || []\n reNameSame(currentList, cardItem)\n currentList.push(cardItem)\n // 删除原先的元素\n const originalList = unref(graphicConfig)[type].slice() || []\n originalList.splice(index, 1)\n // 更新\n updateGraphicConfig({\n [props.type]: currentList,\n [type]: originalList\n })\n } catch (e) {\n console.error(e)\n }\n }\n function reNameSame (list: any, addItem: any) {\n const sameNums = []\n list.forEach((checkItem: any) => {\n if (checkItem.label.includes(addItem.label)) {\n sameNums.push(checkItem.label.split(addItem.label)[1])\n }\n })\n if (sameNums.length >= 1) {\n for (let i = 1; i <= sameNums.length; i++) {\n if (!sameNums.includes(i + '')) {\n addItem.label = addItem.label + i\n break\n }\n }\n }\n }\n const onCheckboxChange = (event, index: number) => {\n const value = (event.target as any)?.checked\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n list[index].show = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDropEnd = (index: string) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDragItemEnd = () => {\n sessionStorage.setItem('indicator-card-item', '')\n }\n const onDragItemAdd = (e) => {\n const listItemData = sessionStorage.getItem('indicator-list-item')\n const cardItemData = sessionStorage.getItem('indicator-card-item')\n if (listItemData) {\n handleListItemData(listItemData)\n } else if (cardItemData) {\n handleCardItemData(cardItemData)\n }\n }\n const onDragItemSort = (event: any) => {\n const { newIndex, oldIndex, from, to } = event\n const fromType = from.id\n const toType = to.id\n if (newIndex >= 0 && oldIndex >= 0) {\n if (fromType === toType) {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const currItem = list.splice(oldIndex, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n } else if (props.type === toType) {\n const list = unref(graphicConfig)[toType]?.slice() || []\n if (list?.length) {\n const currItem = list.splice(list.length - 1, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n }\n }\n }\n }\n const onDragItemStart = (event: any, dataViews: { [key: string]: any }[]) => {\n const index = event.oldIndex\n const dataView = dataViews[index]\n if (dataView) {\n sessionStorage.setItem('indicator-card-item', JSON.stringify({\n cardItem: dataView,\n type: props.type,\n index\n }))\n }\n }\n const cardItemList = computed(() => unref(graphicConfig)[props.type] || [])\n const editLabelList = ref<boolean[]>([])\n let isLabelChange = false\n watch(\n () => unref(cardItemList).length,\n (length) => {\n editLabelList.value = new Array(length).fill(false)\n },\n {\n flush: 'post',\n immediate: true\n }\n )\n const onDelete = (index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n for (let i = varList.length - 1; i >= 0; i--) {\n if (varList[i].randomKey === list[index].randomKey) {\n varList.splice(i, 1)\n }\n }\n const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\n })\n }\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onEdit = (index: number) => {\n editLabelList.value[index] = true\n }\n const onLabelChange = () => {\n isLabelChange = true\n }\n const handleInputKeyDown = (e: any) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n e.preventDefault()\n }\n }\n const onCommitLabelChange = (event: Event, index: number, oldLabel: string) => {\n editLabelList.value[index] = false\n if (isLabelChange) {\n const value = (event.target as any)?.value\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 计算公式中有包含旧值的数据\n const aboutFormulaIds = list.filter((v: any) => v?.formula?.includes(oldLabel)).map((v: any) => v.id)\n // 数值来源中有包含旧值的数据\n const aboutSourceIds = list.filter((v: any) => v?.builtInValueSource?.includes(oldLabel)).map((v: any) => v.id)\n if (aboutFormulaIds?.length) {\n for (const id of aboutFormulaIds) {\n const item = list.find((v: any) => v.id === id)\n item.formula = item.formula.replaceAll(oldLabel, value)\n }\n }\n if (aboutSourceIds?.length) {\n for (const id of aboutSourceIds) {\n const item = list.find((v: any) => v.id === id)\n item.builtInValueSource = item.builtInValueSource.replaceAll(oldLabel, value)\n }\n }\n // 限定单选\n list[index].label = value\n\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n const targetList = varList.filter(v => v.randomKey === list[index].randomKey)\n if (targetList?.length) {\n targetList.forEach((item: any) => {\n item.label = value\n })\n }\n const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\n })\n }\n\n updateGraphicConfig({\n [props.type]: list\n })\n }\n isLabelChange = false\n }\n const DEFAULT = 'DEFAULT'\n const sortList = computed(() => {\n const codeDim = []\n const { scope } = unref(currentCardItem) || {}\n // 自身分类加指标\n const list = unref(graphicConfig)[props.type] || []\n // if (['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(scope)) {\n // // 当前想要排序的是维度\n // list = list.filter((v: any) => v.label === label)\n // }\n if (scope === 'DIM' && !unref(currentCardItem).typeGuid.includes('_code')) {\n const cloneDim = cloneDeep(unref(currentCardItem))\n delete cloneDim.show\n delete cloneDim.truncations\n delete cloneDim.conditions\n cloneDim.hrpIndexComplexid += '_code'\n cloneDim.id += '_code'\n cloneDim.typeGuid += '_code'\n cloneDim.label = cloneDim.name + '_编码'\n cloneDim.name = cloneDim.typeGuid\n cloneDim.defaultCode = cloneDim.typeGuid\n codeDim.push(cloneDim)\n }\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n specialIndicators = []\n } = unref(graphicConfig) || {}\n return [\n // {\n // id: DEFAULT,\n // label: '默认',\n // name: '默认'\n // },\n ...list,\n ...codeDim,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...specialIndicators\n ]\n })\n // 升降序\n const onSort = (\n item: { [key: string]: any } = {},\n index: number,\n order: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const { label, name, id, defaultCode } = item\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (id === DEFAULT) {\n delete list[index].sort\n } else {\n list[index].sort = {\n label,\n columnName: name,\n type: 'NORMAL',\n order,\n defaultCode\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleSortTitle = (\n item: { [key: string]: any } = {},\n type: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n const text = map[type]\n const { sort } = item\n const { label, order } = sort || {}\n return label && order === type ? `${text}(${label})` : text\n }\n const currentItem = ref()\n const currentIndex = ref()\n const customSortModalRef = ref()\n const customGroupModalRef = ref()\n const showCustomSortModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customSortModalRef)?.showModal(item)\n }\n const handleCustomSortTitle = (item: { [key: string]: any }) => {\n // return '自定义排序' + (item?.sort?.type === 'CUSTOM' ? '(已配置)' : '')\n return '排序' + (item?.sort ? '(已配置)' : '')\n }\n const showCustomGroupModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customGroupModalRef)?.showModal()\n }\n const handleCustomGroupTitle = (item: { [key: string]: any }) => {\n return '自定义分组' + (!item?.customGroup || (!Object.keys(item.customGroup?.groupInfoMap || {}).length && !item.customGroup?.otherGroupName) ? '' : '(已配置)')\n }\n const showHideList = [\n {\n name: '显示',\n value: 'show'\n },\n {\n name: '隐藏',\n value: 'hide'\n }\n ]\n const indTypeList = [\n {\n name: '主指标',\n value: 'main'\n },\n {\n name: '目标指标',\n value: 'target'\n }\n ]\n const budgetTypeList = [\n {\n name: '当期指标',\n value: 'current'\n },\n {\n name: '累计指标',\n value: 'cuml'\n }\n ]\n // 汇总方式\n const aggregateList = [\n {\n name: '总和',\n value: 'SUM'\n },\n {\n name: '平均数',\n value: 'AVG'\n },\n {\n name: '最小值',\n value: 'MIN'\n },\n {\n name: '最大值',\n value: 'MAX'\n },\n {\n name: '计数',\n value: 'COUNT'\n },\n {\n name: '聚合',\n value: 'GROUP'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onShowHideChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].showInDrillTable = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.gaugeIndType === value) {\n item.gaugeIndType = ''\n }\n }\n list[index].gaugeIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onBudgetTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.budgetIndType === value) {\n item.budgetIndType = ''\n }\n }\n list[index].budgetIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onAggregateChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].aggregate = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDistinctChange = (value: number, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].distinct = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDateFormatChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].dateFormat = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndSortChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].sort = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleDrillTableTitle = (\n key: 'show' | 'hide' = 'show'\n ) => {\n const map = {\n show: '显示',\n hide: '隐藏'\n }\n return `在钻取的普通表中(${map[key]})`\n }\n const handleIndTypeTitle = (\n key: 'main' | 'target'\n ) => {\n const map = {\n main: '主指标',\n target: '目标指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleBudgetTypeTitle = (\n key: 'cuml' | 'current'\n ) => {\n const map = {\n cuml: '累计指标',\n current: '当期指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'GROUP' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数',\n GROUP: '聚合'\n }\n return `汇总方式(${map[key]})`\n }\n\n const handleIndSortTitle = (key: string) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n if (key) {\n return `排序(${map[key]})`\n } else {\n return '排序'\n }\n }\n\n const handleDistinctTitle = (\n key: 0 | 1\n ) => {\n const map = {\n 0: '否',\n 1: '是'\n }\n return `是否去重(${map[key] || '否'})`\n }\n\n const handleFilterTitle = (item: { [key: string]: any } = {}) => {\n return (\n '过滤' +\n (item?.conditions && item?.conditions?.length > 0 ? '(已配置)' : '')\n )\n }\n const hasIndicatorVariables = (item: { [key: string]: any } = {}) => {\n if (item.randomKey && Array.isArray(item.dataSetParams) && item.dataSetParams.length) {\n return true\n }\n return !!(item.randomKey && (unref(graphicConfig)?.variableList || []).some((v: any) => v.randomKey === item.randomKey))\n }\n const filterModalRef = ref()\n const configNameRef = ref()\n const sortByCpntRef = ref()\n const dimByCountRef = ref()\n const showFilterModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(filterModalRef).showModal()\n }\n const showConfigNameModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(configNameRef).showModal(item)\n }\n const showSortByCpntModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(sortByCpntRef).showModal(item)\n }\n const showDimByCountModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(dimByCountRef).showModal(item, unref(dataViewColumns))\n }\n const variableModalRef = ref()\n const showVariableModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(variableModalRef)?.showModal(item)\n }\n const calculationModalRef = ref()\n const calculationModalMode = ref<'add' | 'edit'>('add')\n const onShowCalculationModal = (\n mode: 'add' | 'edit',\n item?: { [key: string]: any },\n index?: number\n ) => {\n calculationModalMode.value = mode\n if (mode === 'edit') {\n currentItem.value = item\n currentIndex.value = index\n }\n unref(calculationModalRef)?.showModal()\n }\n\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const fieldOptions = ref<any[]>([])\n const fieldData = computed<any>(() => unref(graphicConfig)[props.type] || {})\n watch(graphicConfig, () => {\n if (lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline']) && unref(graphicConfig)?.indicators) {\n fieldOptions.value = unref(graphicConfig).indicators.map((v: any) => ({\n label: v.label,\n value: v.label\n }))\n }\n }, {\n immediate: true\n })\n\n watch(() => graphicConfig.value.classificationList, () => {\n getEdvFieldData()\n })\n\n const currentEdvId = ref('')\n const getEdvFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (source !== 'EDV_DATA_SET') {\n return\n }\n if (!lowerCaseIncludes(unref(selectedComponent).type, 'select')) {\n return\n }\n const { classificationList = [] } = unref(graphicConfig)\n const target = classificationList.find((v: any) => v.show)\n if (target?.parentId) {\n if (unref(currentEdvId) === target.parentId) {\n return\n } else {\n currentEdvId.value = target.parentId\n }\n } else {\n unref(graphicConfig).selectFieldOptions = []\n fieldOptions.value = []\n currentEdvId.value = ''\n return\n }\n const res = await request.get(`${INDICATOR_URL}/dataset/` + target.parentId, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n const columnList = data.column.map(v => {\n return {\n label: v.columnName,\n value: v.columnName\n }\n })\n unref(graphicConfig).selectFieldOptions = columnList\n fieldOptions.value = columnList\n }\n }\n\n const getFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (!lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline'])) {\n try {\n if (source === 'EDV_DATA_SET') {\n await getEdvFieldData()\n } else {\n const res = await request.post(`${INDICATOR_URL}/diagram/dimFields`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n unref(graphicConfig).selectFieldOptions = data || []\n fieldOptions.value = data\n }\n }\n } catch (e) {\n console.error(e)\n }\n }\n }\n const onFieldChange = (value: any, type: string) => {\n const formFields = unref(graphicConfig)[props.type] || {}\n formFields[type] = value\n updateGraphicConfig({\n [props.type]: formFields\n })\n }\n const dimensionType = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const dataViewMap = ref({})\n const dataViewColumns = ref([])\n const onVisibleChange = async (visible: boolean, cardItem: any) => {\n const { name: itemName } = cardItem\n if (!dimensionType.includes(props.type) && visible && hasOwn(cardItem, 'indexCode')) {\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n dataSourceId: '',\n indexGuid: cardItem.id,\n indexCode: cardItem.indexCode,\n pageId: (window as any)?.config?.pageId\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data } = res.data\n if (success && data) {\n dataViewColumns.value = data?.dataViewColumns || []\n dataViewMap.value[itemName] = {\n name: data.name,\n code: data.indexCode\n }\n }\n }\n }\n const onClickSetting = (cardItem: any) => {\n currentCardItem.value = cardItem\n }\n // 复制指标名\n const copyDataViewName = (text: string) => {\n const input = document.createElement('input')\n document.body.appendChild(input)\n input.setAttribute('value', text)\n input.select()\n document.execCommand('copy')\n document.body.removeChild(input)\n message.success('复制成功')\n }\n\n // 是否需要显示展示名称的配置\n const isShowConfigName = computed(() => {\n if (props.type === 'indicators' && unref(selectedComponent).type === 'ecanTable') {\n return true\n } else {\n return false\n }\n })\n // 是否显示关联控件排序\n const isShowSortByCpnt = computed(() => {\n if (['indicators', 'classificationList', 'leftAxisList', 'rightAxisList'].includes(props.type)) {\n return true\n } else {\n return false\n }\n })\n\n const isIndexSet = computed(() => lowerCaseIncludes(unref(selectedComponent)?.type, ['table']) && unref(graphicConfig)?.isIndexSet)\n\n // 是否显示添加计算指标按钮\n const isShowCalcBtn = computed(() => {\n // && (!unref(isIndexSet) || props.type !== 'indicators')\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators)\n })\n\n const getIndexSetRawLabel = (calcType: string) => {\n if (calcType) {\n return indexSetMap[calcType]\n } else {\n return '--'\n }\n }\n\n onMounted(() => {\n if (props.type === 'formFields') {\n if (unref(selectedComponent).type === 'ecanDataSelect') {\n fieldOptions.value = [\n {\n label: '维度编码',\n value: '_code'\n },\n {\n label: '维度值',\n value: '_value'\n }\n ]\n } else {\n getFieldData()\n }\n }\n })\n return {\n onCheckboxChange,\n onDropEnd,\n onDragItemEnd,\n onDragItemAdd,\n onDragItemSort,\n onDragItemStart,\n cardItemList,\n onDelete,\n onEdit,\n onCommitLabelChange,\n sortList,\n onSort,\n handleSortTitle,\n showCustomSortModal,\n customSortModalRef,\n currentItem,\n currentIndex,\n handleCustomSortTitle,\n handleCustomGroupTitle,\n customGroupModalRef,\n showCustomGroupModal,\n editLabelList,\n onLabelChange,\n handleInputKeyDown,\n aggregateList,\n showHideList,\n indTypeList,\n budgetTypeList,\n distinctList,\n onAggregateChange,\n onShowHideChange,\n onIndTypeChange,\n onBudgetTypeChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDrillTableTitle,\n handleIndTypeTitle,\n handleBudgetTypeTitle,\n handleDistinctTitle,\n onShowCalculationModal,\n handleFilterTitle,\n filterModalRef,\n configNameRef,\n sortByCpntRef,\n dimByCountRef,\n showFilterModal,\n calculationModalRef,\n calculationModalMode,\n formatList,\n indSortList,\n fieldOptions,\n fieldData,\n onFieldChange,\n onVisibleChange,\n onClickSetting,\n copyDataViewName,\n dataViewMap,\n isShowConfigName,\n showConfigNameModal,\n dimensionType,\n idxList,\n hasIndicatorVariables,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n variableModalRef,\n showVariableModal,\n selectedComponent,\n lowerCaseIncludes,\n isShowCalcBtn,\n isIndexSet,\n compositeIndicator,\n handleIndSortTitle,\n getIndexSetRawLabel\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config-card {\n display: flex;\n flex-direction: column;\n height: 280px;\n}\n\n.card-item {\n background-color: rgba(161, 212, 230, 0.3);\n width: 100%;\n height: 100%;\n padding: 5px;\n margin: 3px 0;\n}\n\n.title {\n display: flex;\n // justify-content: space-between;\n .title-text {\n flex: 1;\n }\n}\n\n.add-calculation {\n cursor: pointer;\n font-size: 13px;\n color: #3f8ce8;\n line-height: 24px;\n}\n\n.add-calculation-icon {\n color: #3f8ce8;\n margin-right: 3px;\n}\n\n.ant-checkbox + span {\n width: 100% !important;\n}\n\n.card-item-inner {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.name {\n width: 100%;\n}\n\n.placeholder {\n color: red;\n}\n\n.setting-icon {\n color: #545;\n margin-left: 5px;\n}\n\n.delete-icon {\n color: #ff0000;\n margin-left: 5px;\n}\n\n.calculation-icon {\n font-weight: bold;\n font-style: italic;\n}\n\n.menu-item {\n white-space: nowrap;\n}\n\n.chart-column {\n height: 100%;\n}\n\n.data-view-name {\n display: inline-block;\n max-width: 200px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n</style>\n\n<style lang=\"less\">\n.data-config-card {\n .ant-card-body {\n overflow-y: auto;\n }\n}\n\n.card-item {\n .ant-checkbox + span {\n width: 100%;\n }\n}\n\n.field-wrap {\n padding: 10px 0;\n .field-item {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n .item-label {\n width: 70px;\n font-size: 14px;\n text-align: right;\n }\n }\n}\n</style>\n","<template>\n <a-card\n v-if=\"type === 'formFields'\"\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">{{ title }}</div>\n </div>\n </template>\n <div class=\"field-wrap\">\n <div class=\"field-item\">\n <div class=\"item-label\">名称:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.labelField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'labelField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\">\n <div class=\"item-label\">值:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.valueField\"\n :options=\"fieldOptions\"\n :mode=\"lowerCaseIncludes(selectedComponent.type, 'valueline') ? 'multiple' : undefined\"\n @change=\"onFieldChange($event, 'valueField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanTreeSelect'\">\n <div class=\"item-label\">父节点:</div>\n <a-select\n style=\"width: 70%;\"\n class=\"item-select\"\n :value=\"fieldData.parentField\"\n :options=\"fieldOptions\"\n @change=\"onFieldChange($event, 'parentField')\"\n >\n </a-select>\n </div>\n <div class=\"field-item\" v-if=\"selectedComponent.type === 'ecanSelect'\">\n <div class=\"item-label\" style=\"width: 20px;\"></div>\n <a-checkbox v-model:checked=\"fieldData.hasAllOption\">\n 显示【全部】选项\n </a-checkbox>\n </div>\n </div>\n </a-card>\n <a-card\n v-else\n class=\"data-config-card\"\n :head-style=\"{\n backgroundColor: 'rgba(161,212,230,0.3)',\n height: '58px',\n padding: '0 10px'\n }\"\n >\n <template #title>\n <div class=\"title\">\n <div class=\"title-text\">\n {{ title }}\n <template v-if=\"type === 'dimensionList'\">\n <a-popover title=\"提示\" placement=\"topLeft\">\n <template #content>\n <p>配置了维度后,会使用返回数据的第一条中以【维度名】为key的值作为显示值</p>\n </template>\n <info-circle-outlined style=\"color: #919191;cursor: pointer;\" />\n </a-popover>\n </template>\n </div>\n <div\n class=\"add-calculation\"\n v-if=\"isShowCalcBtn\"\n @click.prevent.stop=\"onShowCalculationModal('add')\"\n >\n <plus-outlined class=\"add-calculation-icon\" />\n <span>添加计算指标</span>\n </div>\n <a-checkbox\n v-if=\"isIndexSet && type === 'indicators'\"\n v-model:checked=\"compositeIndicator\"\n style=\"margin-left: 15px;\"\n >合计</a-checkbox>\n </div>\n </template>\n <div :class=\"type + '-list'\" style=\"height: 100%;padding: 10px;\">\n <draggable\n v-model=\"cardItemList\"\n class=\"chart-column\"\n :id=\"type\"\n :group=\"{\n name: 'cardItem',\n pull: type !== 'indexLibColumns',\n put: type !== 'indexLibColumns'\n }\"\n item-key=\"index\"\n @add=\"onDragItemAdd\"\n @sort=\"onDragItemSort\"\n @end=\"onDragItemEnd\"\n @start=\"onDragItemStart($event, cardItemList)\"\n >\n <template #item=\"{ element: cardItem, index }\">\n <div class=\"card-item-wrap\">\n <a-checkbox\n class=\"card-item\"\n :checked=\"cardItem.show\"\n @change=\"onCheckboxChange($event, index)\"\n >\n <!-- editLabelList 和 labelList 都为 cardItemList 映射列表,用于修改label交互 -->\n <!-- editLabelList 是否修改名字, 变为输入框,值为 boolean -->\n <!-- labelList,label 列表 -->\n <div class=\"card-item-inner\">\n <div\n class=\"name\"\n v-if=\"!editLabelList[index] && cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n {{ cardItem.label }}\n </div>\n <div\n class=\"name placeholder\"\n v-if=\"!editLabelList[index] && !cardItem.label\"\n @click.prevent.stop=\"onEdit(index)\"\n >\n 请点击填入名字\n </div>\n <a-input\n :default-value=\"cardItem.label\"\n size=\"small\"\n v-if=\"editLabelList[index]\"\n v-focus\n @pointerdown.stop\n @mousedown.stop\n @blur=\"onCommitLabelChange($event, index, cardItem.label)\"\n @pressEnter=\"onCommitLabelChange($event, index, cardItem.label)\"\n @change=\"onLabelChange\"\n @keydown=\"handleInputKeyDown\"\n />\n <span\n class=\"calculation-icon\"\n @click.prevent.stop=\"\n onShowCalculationModal('edit', cardItem, index)\n \"\n v-if=\"['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n >\n fx\n </span>\n <a-popover title=\"\">\n <template #content>\n {{ getIndexSetRawLabel(cardItem.calcType) }}\n </template>\n <info-circle-outlined\n v-if=\"type === 'indexLibColumns' && !['FORMULA', 'BUILT_IN', 'COMPONENT'].includes(cardItem.calcType)\"\n class=\"setting-icon\"\n />\n </a-popover>\n <a-dropdown :trigger=\"['click']\" @visibleChange=\"onVisibleChange($event, cardItem)\" v-if=\"type !== 'indexLibColumns'\">\n <setting-outlined class=\"setting-icon\" @click=\"onClickSetting(cardItem)\"/>\n <template #overlay>\n <a-menu>\n <!-- 仅在分类、系列中设置 -->\n <template\n v-if=\"dimensionType.includes(type)\"\n >\n <!-- 升序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'ASC')\"\n key=\"0\"\n >\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'ASC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 降序 -->\n <!-- <a-sub-menu\n :title=\"handleSortTitle(cardItem, 'DESC')\"\n key=\"1\"\n >\n <a-menu-item\n class=\"menu-item\"\n style=\"white-space: nowrap\"\n v-for=\"sortItem in sortList\"\n :key=\"sortItem.id\"\n @click=\"onSort(sortItem, index, 'DESC')\"\n >\n {{ sortItem.label }}\n </a-menu-item>\n </a-sub-menu> -->\n <!-- 自定义排序 -->\n <a-menu-item @click=\"showCustomSortModal(cardItem, index)\">\n {{ handleCustomSortTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 自定义分组 -->\n <a-menu-item @click=\"showCustomGroupModal(cardItem, index)\">\n {{ handleCustomGroupTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <!-- 日期维度的格式化 -->\n <template v-if=\"cardItem.genericType === 'DATE'\">\n <a-sub-menu title=\"日期格式化\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"format in formatList\"\n :key=\"format.value\"\n @click=\"onDateFormatChange(format.value, index)\"\n >\n <span\n :style=\"(cardItem.dateFormat === format.value) ||\n (!cardItem.dateFormat && format.value === 'YYYY-MM-DD') ? 'color: #1890FF;' : ''\">\n {{ format.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n </template>\n <!-- 过滤 -->\n <a-menu-item @click=\"showFilterModal(cardItem, index)\">\n {{ handleFilterTitle(cardItem) }}\n </a-menu-item>\n <a-menu-divider />\n <template v-if=\"!dimensionType.includes(type)\">\n <!-- 指标排序 -->\n <a-sub-menu :title=\"handleIndSortTitle(cardItem.sort)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"sort in indSortList\"\n :key=\"sort.value\"\n @click=\"onIndSortChange(sort.value, index)\"\n >\n <span\n :style=\"cardItem.sort && cardItem.sort === sort.value ? 'color: #1890FF;' : ''\">\n {{ sort.label }}\n </span>\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n\n <template\n v-if=\"!['classificationList', 'seriesList'].includes(type)\"\n >\n <!-- 汇总方式 -->\n <a-sub-menu :title=\"handleAggregateTitle(cardItem.aggregate)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"aggregate in aggregateList\"\n :key=\"aggregate.value\"\n @click=\"onAggregateChange(aggregate.value, index)\"\n >\n {{ aggregate.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <template v-if=\"idxList.includes(type) && hasIndicatorVariables(cardItem)\">\n <a-menu-item @click=\"showVariableModal(cardItem, index)\">\n 配置变量\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 展示名称 -->\n <template v-if=\"isShowConfigName\">\n <a-menu-item @click=\"showConfigNameModal(cardItem, index)\">\n 修改展示名称\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 关联组件排序 -->\n <template v-if=\"isShowSortByCpnt\">\n <a-menu-item @click=\"showSortByCpntModal(cardItem, index)\">\n 关联组件排序\n </a-menu-item>\n <a-menu-divider />\n </template>\n <!-- 在钻取的普通表中显示/隐藏 -->\n <a-sub-menu :title=\"handleDrillTableTitle(cardItem.showInDrillTable)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"shl in showHideList\"\n :key=\"shl.value\"\n @click=\"onShowHideChange(shl.value, index)\"\n >\n {{ shl.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 仪表盘指标类型,主指标/目标指标 -->\n <a-sub-menu :title=\"handleIndTypeTitle(cardItem.gaugeIndType)\" v-if=\"selectedComponent.type === 'ecanGauge'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in indTypeList\"\n :key=\"il.value\"\n @click=\"onIndTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <!-- 预算执行图指标类型,累计指标/当期指标 -->\n <a-sub-menu :title=\"handleBudgetTypeTitle(cardItem.budgetIndType)\" v-if=\"selectedComponent.type === 'ecanBudget' && type === 'indicators'\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"il in budgetTypeList\"\n :key=\"il.value\"\n @click=\"onBudgetTypeChange(il.value, index)\"\n >\n {{ il.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n <!-- 计数(内置)指标关联维度 -->\n <template v-if=\"cardItem.name === 'the_count'\">\n <a-menu-item @click=\"showDimByCountModal(cardItem, index)\">\n 关联维度\n </a-menu-item>\n <a-menu-divider />\n <a-sub-menu :title=\"handleDistinctTitle(cardItem.distinct)\">\n <a-menu-item\n style=\"white-space: nowrap\"\n v-for=\"distinct in distinctList\"\n :key=\"distinct.value\"\n @click=\"onDistinctChange(distinct.value, index)\"\n >\n {{ distinct.name }}\n </a-menu-item>\n </a-sub-menu>\n <a-menu-divider />\n </template>\n <!-- 指标名 -->\n <template v-if=\"!dimensionType.includes(type)\">\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].name)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].name\">\n <span style=\"font-weight: bold;\">指标名:</span>\n {{ dataViewMap[cardItem.name].name }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n <template v-if=\"dataViewMap[cardItem.name]\">\n <a-menu-item @click=\"copyDataViewName(dataViewMap[cardItem.name].code)\">\n <div style=\"display: flex;align-items: center\">\n <span class=\"data-view-name\" :title=\"dataViewMap[cardItem.name].code\">\n <span style=\"font-weight: bold;\">指标编码:</span>\n {{ dataViewMap[cardItem.name].code }}\n </span>\n <copy-outlined\n style=\"color: #52C41A;margin-left: 10px;\"\n title=\"点击复制\"\n />\n </div>\n </a-menu-item>\n </template>\n </template>\n </a-menu>\n </template>\n </a-dropdown>\n <delete-outlined\n v-if=\"type !== 'indexLibColumns' || cardItem.calcType === 'FORMULA'\"\n class=\"delete-icon\"\n @click.prevent=\"onDelete(index)\"\n />\n </div>\n </a-checkbox>\n </div>\n </template>\n </draggable>\n </div>\n <custom-sort-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n :sortList=\"sortList\"\n ref=\"customSortModalRef\"\n />\n <custom-group-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"customGroupModalRef\"\n />\n <filter-modal\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"filterModalRef\"\n />\n <config-name\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"configNameRef\"\n />\n <sort-by-cpnt\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"sortByCpntRef\"\n />\n <dim-by-count\n :index=\"currentIndex\"\n :type=\"type\"\n ref=\"dimByCountRef\"\n />\n <calculation-modal\n :type=\"type\"\n :item=\"currentItem\"\n :index=\"currentIndex\"\n :mode=\"calculationModalMode\"\n :isIndexSet=\"isIndexSet\"\n ref=\"calculationModalRef\"\n />\n <variable-modal\n :item=\"currentItem\"\n :type=\"type\"\n ref=\"variableModalRef\"\n />\n </a-card>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, watch, inject, onMounted } from 'vue'\nimport {\n Card as ACard,\n Checkbox as ACheckbox,\n Input as AInput,\n Dropdown as ADropdown,\n Menu as AMenu,\n SubMenu as ASubMenu,\n MenuItem as AMenuItem,\n MenuDivider as AMenuDivider,\n Select as ASelect,\n Popover as APopover,\n message\n} from 'ant-design-vue'\nimport {\n SettingOutlined,\n DeleteOutlined,\n PlusOutlined,\n CopyOutlined,\n InfoCircleOutlined\n} from '@ant-design/icons-vue'\nimport focus from '@/directives/focus'\nimport {\n GRAPHIC_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n SOURCE_TYPE,\n SELECTED_COMPONENT,\n RENDER_USED_COMPONENTS\n} from '@/utils/constant'\nimport CustomSortModal from './CustomSortModal.vue'\nimport CustomGroupModal from './CustomGroupModal.vue'\nimport FilterModal from './filter-modal'\nimport ConfigName from './config-name'\nimport SortByCpnt from './sort-by-cpnt'\nimport DimByCount from './dim-by-count'\nimport CalculationModal from './calculation-modal'\nimport VariableModal from '../../variable-group/VariableModal.vue'\nimport Draggable from 'vuedraggable'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nimport { createIndicatorVariableList, normalizeVariableList } from '../../variable-group/variable-utils'\nexport default defineComponent({\n name: 'DataConfigCard',\n directives: {\n focus\n },\n components: {\n CalculationModal,\n FilterModal,\n CustomGroupModal,\n VariableModal,\n SettingOutlined,\n DeleteOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CustomSortModal,\n PlusOutlined,\n ACard,\n ACheckbox,\n AInput,\n ADropdown,\n AMenu,\n ASubMenu,\n AMenuItem,\n AMenuDivider,\n ASelect,\n APopover,\n Draggable,\n ConfigName,\n SortByCpnt,\n DimByCount\n },\n props: {\n title: {\n type: String,\n default: ''\n },\n // 卡片类型\n type: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const formatList = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' }\n ]\n const indSortList = [\n { label: '升序', value: 'ASC' },\n { label: '降序', value: 'DESC' },\n { label: '无', value: '' }\n ]\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const idxList = ['leftAxisList', 'rightAxisList', 'indicators', 'specialIndicators']\n const dimList = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const indexSetMap = {\n CURRENT: '本期值',\n LAST_CYCLE: '上期值',\n LAST_YEAR: '同比值',\n PERIOD_ON_PERIOD: '环比',\n YEAR_ON_YEAR: '同比',\n DW: '单位'\n }\n const source = inject(SOURCE_TYPE)\n const currentCardItem = ref()\n // const variableList = computed(() => {\n // const list = unref(graphicConfig)?.variableList || []\n // return list\n // })\n\n const compositeIndicator = computed({\n get () {\n return unref(graphicConfig)?.compositeIndicator || false\n },\n set (val: boolean) {\n updateGraphicConfig({\n compositeIndicator: val\n })\n }\n })\n\n const isAllowAdd = (data: any = {}) => {\n const { type } = props\n if (unref(source) === 'SQL_VIEW') {\n // 视图不需要判断\n return true\n }\n if (unref(source) === 'EDV_DATA_SET') {\n // 数据集需要多传一个edvDataSetId\n updateGraphicConfig({ edvDataSetId: data.parentId })\n }\n let result = false\n if (data.scope === 'FIELD') {\n // 数据集没有维度指标区分,指标库-数据集配置时,列信息需要真是字段类型(字符串0,数字1,日期2),字符串不可以拉到值轴上\n result = true\n if ((['0', '2'].includes(data.genericType) && idxList.includes(type)) || (data.genericType === '1' && dimList.includes(type))) {\n result = false\n }\n }\n if (['IDX', 'BUILT_IN_IDX'].includes(data.scope)) {\n if (idxList.includes(type)) {\n result = true\n }\n } else if (['DIM', 'BUILT_IN_DIM'].includes(data.scope)) {\n if (dimList.includes(type)) {\n result = true\n }\n }\n if (type === 'dimensionList') {\n // 只能拖一个维度\n const list = unref(graphicConfig)[type]?.slice() || []\n if (list?.length === 1) {\n result = false\n }\n }\n return result\n }\n const dataSelectIndicators = computed(() =>\n lowerCaseIncludes(unref(selectedComponent)?.type, ['dataSelect']) && props.type === 'indicators')\n const handleListItemData = (listData: string = '{}') => {\n try {\n const data = JSON.parse(listData)\n if (!isAllowAdd(data)) {\n return\n }\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n props.type === 'specialIndicatorList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate', 'scatter'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n reNameSame(list, data)\n // 新增一个随机值作为唯一值,用于指标的内置变量的处理\n data.randomKey = nanoid()\n list.push(data)\n const { type } = props\n const varConfig: { [key: string]: any } = {}\n if (['IDX', 'BUILT_IN_IDX', 'FIELD'].includes(data.scope)) {\n let varList = unref(graphicConfig)?.variableList || []\n let variates = sessionStorage.getItem('indicator-variates')\n if (data.scope === 'FIELD' && !idxList.includes(type)) {\n variates = '[]'\n }\n if (variates) {\n const variableList = JSON.parse(variates)\n if (variableList?.length) {\n const newVariableList = createIndicatorVariableList(variableList, data, unref(source))\n if (newVariableList?.length) {\n varList.unshift(...newVariableList)\n }\n }\n }\n varList = normalizeVariableList(varList)\n varConfig.variableList = varList\n varConfig.variableConditions = handleVariableList(varList, renderUsedComponents)\n }\n updateGraphicConfig({\n [props.type]: list,\n ...varConfig\n })\n sessionStorage.setItem('indicator-list-item', '')\n sessionStorage.setItem('indicator-variates', '')\n } catch (e) {\n console.error(e)\n }\n }\n const handleCardItemData = (cardData: string = '{}') => {\n try {\n const { cardItem, type, index } = JSON.parse(cardData)\n if (!isAllowAdd(cardItem)) {\n return\n }\n if (type === props.type) return\n // 添加新元素\n const currentList = unref(graphicConfig)[props.type]?.slice() || []\n reNameSame(currentList, cardItem)\n currentList.push(cardItem)\n // 删除原先的元素\n const originalList = unref(graphicConfig)[type].slice() || []\n originalList.splice(index, 1)\n // 更新\n updateGraphicConfig({\n [props.type]: currentList,\n [type]: originalList\n })\n } catch (e) {\n console.error(e)\n }\n }\n function reNameSame (list: any, addItem: any) {\n const sameNums = []\n list.forEach((checkItem: any) => {\n if (checkItem.label.includes(addItem.label)) {\n sameNums.push(checkItem.label.split(addItem.label)[1])\n }\n })\n if (sameNums.length >= 1) {\n for (let i = 1; i <= sameNums.length; i++) {\n if (!sameNums.includes(i + '')) {\n addItem.label = addItem.label + i\n break\n }\n }\n }\n }\n const onCheckboxChange = (event, index: number) => {\n const value = (event.target as any)?.checked\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 限定单选\n if (\n props.type === 'seriesList' ||\n (props.type === 'classificationList' && !lowerCaseIncludes(unref(selectedComponent).type, ['list', 'circulate'])) ||\n unref(dataSelectIndicators) ||\n lowerCaseIncludes(unref(selectedComponent).type, ['indexPanel'])\n ) {\n list.forEach((item: { [key: string]: any }) => {\n item.show = false\n })\n }\n list[index].show = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDropEnd = (index: string) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDragItemEnd = () => {\n sessionStorage.setItem('indicator-card-item', '')\n }\n const onDragItemAdd = (e) => {\n const listItemData = sessionStorage.getItem('indicator-list-item')\n const cardItemData = sessionStorage.getItem('indicator-card-item')\n if (listItemData) {\n handleListItemData(listItemData)\n } else if (cardItemData) {\n handleCardItemData(cardItemData)\n }\n }\n const onDragItemSort = (event: any) => {\n const { newIndex, oldIndex, from, to } = event\n const fromType = from.id\n const toType = to.id\n if (newIndex >= 0 && oldIndex >= 0) {\n if (fromType === toType) {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n const currItem = list.splice(oldIndex, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n } else if (props.type === toType) {\n const list = unref(graphicConfig)[toType]?.slice() || []\n if (list?.length) {\n const currItem = list.splice(list.length - 1, 1)[0]\n if (currItem) {\n list.splice(newIndex, 0, currItem)\n // 更新\n updateGraphicConfig({\n [props.type]: list\n })\n }\n }\n }\n }\n }\n const onDragItemStart = (event: any, dataViews: { [key: string]: any }[]) => {\n const index = event.oldIndex\n const dataView = dataViews[index]\n if (dataView) {\n sessionStorage.setItem('indicator-card-item', JSON.stringify({\n cardItem: dataView,\n type: props.type,\n index\n }))\n }\n }\n const cardItemList = computed(() => unref(graphicConfig)[props.type] || [])\n const editLabelList = ref<boolean[]>([])\n let isLabelChange = false\n watch(\n () => unref(cardItemList).length,\n (length) => {\n editLabelList.value = new Array(length).fill(false)\n },\n {\n flush: 'post',\n immediate: true\n }\n )\n const onDelete = (index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n for (let i = varList.length - 1; i >= 0; i--) {\n if (varList[i].randomKey === list[index].randomKey) {\n varList.splice(i, 1)\n }\n }\n const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\n })\n }\n list.splice(index, 1)\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onEdit = (index: number) => {\n editLabelList.value[index] = true\n }\n const onLabelChange = () => {\n isLabelChange = true\n }\n const handleInputKeyDown = (e: any) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n e.preventDefault()\n }\n }\n const onCommitLabelChange = (event: Event, index: number, oldLabel: string) => {\n editLabelList.value[index] = false\n if (isLabelChange) {\n const value = (event.target as any)?.value\n const list = unref(graphicConfig)[props.type]?.slice() || []\n // 计算公式中有包含旧值的数据\n const aboutFormulaIds = list.filter((v: any) => v?.formula?.includes(oldLabel)).map((v: any) => v.id)\n // 数值来源中有包含旧值的数据\n const aboutSourceIds = list.filter((v: any) => v?.builtInValueSource?.includes(oldLabel)).map((v: any) => v.id)\n if (aboutFormulaIds?.length) {\n for (const id of aboutFormulaIds) {\n const item = list.find((v: any) => v.id === id)\n item.formula = item.formula.replaceAll(oldLabel, value)\n }\n }\n if (aboutSourceIds?.length) {\n for (const id of aboutSourceIds) {\n const item = list.find((v: any) => v.id === id)\n item.builtInValueSource = item.builtInValueSource.replaceAll(oldLabel, value)\n }\n }\n // 限定单选\n list[index].label = value\n\n if (list[index]?.randomKey) {\n // 同步全部变量中的label\n const varList = unref(graphicConfig)?.variableList || []\n const targetList = varList.filter(v => v.randomKey === list[index].randomKey)\n if (targetList?.length) {\n targetList.forEach((item: any) => {\n item.label = value\n })\n }\n const variableList = normalizeVariableList(varList)\n updateGraphicConfig({\n variableConditions: handleVariableList(variableList, renderUsedComponents),\n variableList: variableList\n })\n }\n\n updateGraphicConfig({\n [props.type]: list\n })\n }\n isLabelChange = false\n }\n const DEFAULT = 'DEFAULT'\n const sortList = computed(() => {\n const codeDim = []\n const { scope } = unref(currentCardItem) || {}\n // 自身分类加指标\n const list = unref(graphicConfig)[props.type] || []\n // if (['DIM', 'BUILT_IN_DIM', 'FIELD'].includes(scope)) {\n // // 当前想要排序的是维度\n // list = list.filter((v: any) => v.label === label)\n // }\n if (scope === 'DIM' && !unref(currentCardItem).typeGuid.includes('_code')) {\n const cloneDim = cloneDeep(unref(currentCardItem))\n delete cloneDim.show\n delete cloneDim.truncations\n delete cloneDim.conditions\n cloneDim.hrpIndexComplexid += '_code'\n cloneDim.id += '_code'\n cloneDim.typeGuid += '_code'\n cloneDim.label = cloneDim.name + '_编码'\n cloneDim.name = cloneDim.typeGuid\n cloneDim.defaultCode = cloneDim.typeGuid\n codeDim.push(cloneDim)\n }\n const {\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n specialIndicators = []\n } = unref(graphicConfig) || {}\n return [\n // {\n // id: DEFAULT,\n // label: '默认',\n // name: '默认'\n // },\n ...list,\n ...codeDim,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...specialIndicators\n ]\n })\n // 升降序\n const onSort = (\n item: { [key: string]: any } = {},\n index: number,\n order: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const { label, name, id, defaultCode } = item\n const list = unref(graphicConfig)[props.type]?.slice() || []\n if (id === DEFAULT) {\n delete list[index].sort\n } else {\n list[index].sort = {\n label,\n columnName: name,\n type: 'NORMAL',\n order,\n defaultCode\n }\n }\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleSortTitle = (\n item: { [key: string]: any } = {},\n type: 'ASC' | 'DESC' = 'ASC'\n ) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n const text = map[type]\n const { sort } = item\n const { label, order } = sort || {}\n return label && order === type ? `${text}(${label})` : text\n }\n const currentItem = ref()\n const currentIndex = ref()\n const customSortModalRef = ref()\n const customGroupModalRef = ref()\n const showCustomSortModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customSortModalRef)?.showModal(item)\n }\n const handleCustomSortTitle = (item: { [key: string]: any }) => {\n // return '自定义排序' + (item?.sort?.type === 'CUSTOM' ? '(已配置)' : '')\n return '排序' + (item?.sort ? '(已配置)' : '')\n }\n const showCustomGroupModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(customGroupModalRef)?.showModal()\n }\n const handleCustomGroupTitle = (item: { [key: string]: any }) => {\n return '自定义分组' + (!item?.customGroup || (!Object.keys(item.customGroup?.groupInfoMap || {}).length && !item.customGroup?.otherGroupName) ? '' : '(已配置)')\n }\n const showHideList = [\n {\n name: '显示',\n value: 'show'\n },\n {\n name: '隐藏',\n value: 'hide'\n }\n ]\n const indTypeList = [\n {\n name: '主指标',\n value: 'main'\n },\n {\n name: '目标指标',\n value: 'target'\n }\n ]\n const budgetTypeList = [\n {\n name: '当期指标',\n value: 'current'\n },\n {\n name: '累计指标',\n value: 'cuml'\n }\n ]\n // 汇总方式\n const aggregateList = [\n {\n name: '总和',\n value: 'SUM'\n },\n {\n name: '平均数',\n value: 'AVG'\n },\n {\n name: '最小值',\n value: 'MIN'\n },\n {\n name: '最大值',\n value: 'MAX'\n },\n {\n name: '计数',\n value: 'COUNT'\n },\n {\n name: '聚合',\n value: 'GROUP'\n }\n ]\n // 是否去重\n const distinctList = [\n {\n name: '是',\n value: 1\n },\n {\n name: '否',\n value: 0\n }\n ]\n const onShowHideChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].showInDrillTable = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.gaugeIndType === value) {\n item.gaugeIndType = ''\n }\n }\n list[index].gaugeIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onBudgetTypeChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n for (const item of list) {\n if (item.budgetIndType === value) {\n item.budgetIndType = ''\n }\n }\n list[index].budgetIndType = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onAggregateChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].aggregate = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDistinctChange = (value: number, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].distinct = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onDateFormatChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].dateFormat = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const onIndSortChange = (value: string, index: number) => {\n const list = unref(graphicConfig)[props.type]?.slice() || []\n list[index].sort = value\n updateGraphicConfig({\n [props.type]: list\n })\n }\n const handleDrillTableTitle = (\n key: 'show' | 'hide' = 'show'\n ) => {\n const map = {\n show: '显示',\n hide: '隐藏'\n }\n return `在钻取的普通表中(${map[key]})`\n }\n const handleIndTypeTitle = (\n key: 'main' | 'target'\n ) => {\n const map = {\n main: '主指标',\n target: '目标指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleBudgetTypeTitle = (\n key: 'cuml' | 'current'\n ) => {\n const map = {\n cuml: '累计指标',\n current: '当期指标'\n }\n return `指标类型(${map[key] || '无'})`\n }\n const handleAggregateTitle = (\n key: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'GROUP' = 'SUM'\n ) => {\n const map = {\n SUM: '总和',\n AVG: '平均数',\n MIN: '最小值',\n MAX: '最大值',\n COUNT: '计数',\n GROUP: '聚合'\n }\n return `汇总方式(${map[key]})`\n }\n\n const handleIndSortTitle = (key: string) => {\n const map = {\n ASC: '升序',\n DESC: '降序'\n }\n if (key) {\n return `排序(${map[key]})`\n } else {\n return '排序'\n }\n }\n\n const handleDistinctTitle = (\n key: 0 | 1\n ) => {\n const map = {\n 0: '否',\n 1: '是'\n }\n return `是否去重(${map[key] || '否'})`\n }\n\n const handleFilterTitle = (item: { [key: string]: any } = {}) => {\n return (\n '过滤' +\n (item?.conditions && item?.conditions?.length > 0 ? '(已配置)' : '')\n )\n }\n const hasIndicatorVariables = (item: { [key: string]: any } = {}) => {\n if (item.randomKey && Array.isArray(item.dataSetParams) && item.dataSetParams.length) {\n return true\n }\n return !!(item.randomKey && (unref(graphicConfig)?.variableList || []).some((v: any) => v.randomKey === item.randomKey))\n }\n const filterModalRef = ref()\n const configNameRef = ref()\n const sortByCpntRef = ref()\n const dimByCountRef = ref()\n const showFilterModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(filterModalRef).showModal()\n }\n const showConfigNameModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(configNameRef).showModal(item)\n }\n const showSortByCpntModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(sortByCpntRef).showModal(item)\n }\n const showDimByCountModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(dimByCountRef).showModal(item, unref(dataViewColumns))\n }\n const variableModalRef = ref()\n const showVariableModal = (\n item: { [key: string]: any } = {},\n index: number\n ) => {\n currentItem.value = item\n currentIndex.value = index\n unref(variableModalRef)?.showModal(item)\n }\n const calculationModalRef = ref()\n const calculationModalMode = ref<'add' | 'edit'>('add')\n const onShowCalculationModal = (\n mode: 'add' | 'edit',\n item?: { [key: string]: any },\n index?: number\n ) => {\n calculationModalMode.value = mode\n if (mode === 'edit') {\n currentItem.value = item\n currentIndex.value = index\n }\n unref(calculationModalRef)?.showModal()\n }\n\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const fieldOptions = ref<any[]>([])\n const fieldData = computed<any>(() => unref(graphicConfig)[props.type] || {})\n watch(graphicConfig, () => {\n if (lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline']) && unref(graphicConfig)?.indicators) {\n fieldOptions.value = unref(graphicConfig).indicators.map((v: any) => ({\n label: v.label,\n value: v.label\n }))\n }\n }, {\n immediate: true\n })\n\n watch(() => graphicConfig.value.classificationList, () => {\n getEdvFieldData()\n })\n\n const currentEdvId = ref('')\n const getEdvFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (source !== 'EDV_DATA_SET') {\n return\n }\n if (!lowerCaseIncludes(unref(selectedComponent).type, 'select')) {\n return\n }\n const { classificationList = [] } = unref(graphicConfig)\n const target = classificationList.find((v: any) => v.show)\n if (target?.parentId) {\n if (unref(currentEdvId) === target.parentId) {\n return\n } else {\n currentEdvId.value = target.parentId\n }\n } else {\n unref(graphicConfig).selectFieldOptions = []\n fieldOptions.value = []\n currentEdvId.value = ''\n return\n }\n const res = await request.get(`${INDICATOR_URL}/dataset/` + target.parentId, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n const columnList = data.column.map(v => {\n return {\n label: v.columnName,\n value: v.columnName\n }\n })\n unref(graphicConfig).selectFieldOptions = columnList\n fieldOptions.value = columnList\n }\n }\n\n const getFieldData = async () => {\n const { source } = unref(graphicConfig)\n if (!lowerCaseIncludes(unref(selectedComponent).type, ['scatter', 'valueline'])) {\n try {\n if (source === 'EDV_DATA_SET') {\n await getEdvFieldData()\n } else {\n const res = await request.post(`${INDICATOR_URL}/diagram/dimFields`, {}, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data = [] } = res.data\n if (success) {\n unref(graphicConfig).selectFieldOptions = data || []\n fieldOptions.value = data\n }\n }\n } catch (e) {\n console.error(e)\n }\n }\n }\n const onFieldChange = (value: any, type: string) => {\n const formFields = unref(graphicConfig)[props.type] || {}\n formFields[type] = value\n updateGraphicConfig({\n [props.type]: formFields\n })\n }\n const dimensionType = ['classificationList', 'seriesList', 'rowHeaderList', 'queryColumnList', 'dimensionList']\n const dataViewMap = ref({})\n const dataViewColumns = ref([])\n const onVisibleChange = async (visible: boolean, cardItem: any) => {\n const { name: itemName } = cardItem\n if (!dimensionType.includes(props.type) && visible && hasOwn(cardItem, 'indexCode')) {\n const res = await request.post(`${INDICATOR_URL}/diagram/hrpIndexWithComplex`, {\n dataSourceId: '',\n indexGuid: cardItem.id,\n indexCode: cardItem.indexCode,\n pageId: (window as any)?.config?.pageId\n }, {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n })\n const { success, data } = res.data\n if (success && data) {\n dataViewColumns.value = data?.dataViewColumns || []\n dataViewMap.value[itemName] = {\n name: data.name,\n code: data.indexCode\n }\n }\n }\n }\n const onClickSetting = (cardItem: any) => {\n currentCardItem.value = cardItem\n }\n // 复制指标名\n const copyDataViewName = (text: string) => {\n const input = document.createElement('input')\n document.body.appendChild(input)\n input.setAttribute('value', text)\n input.select()\n document.execCommand('copy')\n document.body.removeChild(input)\n message.success('复制成功')\n }\n\n // 是否需要显示展示名称的配置\n const isShowConfigName = computed(() => {\n if (props.type === 'indicators' && unref(selectedComponent).type === 'ecanTable') {\n return true\n } else {\n return false\n }\n })\n // 是否显示关联控件排序\n const isShowSortByCpnt = computed(() => {\n if (['indicators', 'classificationList', 'leftAxisList', 'rightAxisList'].includes(props.type)) {\n return true\n } else {\n return false\n }\n })\n\n const isIndexSet = computed(() => lowerCaseIncludes(unref(selectedComponent)?.type, ['table']) && unref(graphicConfig)?.isIndexSet)\n\n // 是否显示添加计算指标按钮\n const isShowCalcBtn = computed(() => {\n // && (!unref(isIndexSet) || props.type !== 'indicators')\n return !dimensionType.includes(props.type) && !unref(dataSelectIndicators)\n })\n\n const getIndexSetRawLabel = (calcType: string) => {\n if (calcType) {\n return indexSetMap[calcType]\n } else {\n return '--'\n }\n }\n\n onMounted(() => {\n if (props.type === 'formFields') {\n if (unref(selectedComponent).type === 'ecanDataSelect') {\n fieldOptions.value = [\n {\n label: '维度编码',\n value: '_code'\n },\n {\n label: '维度值',\n value: '_value'\n }\n ]\n } else {\n getFieldData()\n }\n }\n })\n return {\n onCheckboxChange,\n onDropEnd,\n onDragItemEnd,\n onDragItemAdd,\n onDragItemSort,\n onDragItemStart,\n cardItemList,\n onDelete,\n onEdit,\n onCommitLabelChange,\n sortList,\n onSort,\n handleSortTitle,\n showCustomSortModal,\n customSortModalRef,\n currentItem,\n currentIndex,\n handleCustomSortTitle,\n handleCustomGroupTitle,\n customGroupModalRef,\n showCustomGroupModal,\n editLabelList,\n onLabelChange,\n handleInputKeyDown,\n aggregateList,\n showHideList,\n indTypeList,\n budgetTypeList,\n distinctList,\n onAggregateChange,\n onShowHideChange,\n onIndTypeChange,\n onBudgetTypeChange,\n onDistinctChange,\n onDateFormatChange,\n onIndSortChange,\n handleAggregateTitle,\n handleDrillTableTitle,\n handleIndTypeTitle,\n handleBudgetTypeTitle,\n handleDistinctTitle,\n onShowCalculationModal,\n handleFilterTitle,\n filterModalRef,\n configNameRef,\n sortByCpntRef,\n dimByCountRef,\n showFilterModal,\n calculationModalRef,\n calculationModalMode,\n formatList,\n indSortList,\n fieldOptions,\n fieldData,\n onFieldChange,\n onVisibleChange,\n onClickSetting,\n copyDataViewName,\n dataViewMap,\n isShowConfigName,\n showConfigNameModal,\n dimensionType,\n idxList,\n hasIndicatorVariables,\n isShowSortByCpnt,\n showSortByCpntModal,\n dataSelectIndicators,\n showDimByCountModal,\n variableModalRef,\n showVariableModal,\n selectedComponent,\n lowerCaseIncludes,\n isShowCalcBtn,\n isIndexSet,\n compositeIndicator,\n handleIndSortTitle,\n getIndexSetRawLabel\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config-card {\n display: flex;\n flex-direction: column;\n height: 280px;\n}\n\n.card-item {\n background-color: rgba(161, 212, 230, 0.3);\n width: 100%;\n height: 100%;\n padding: 5px;\n margin: 3px 0;\n}\n\n.title {\n display: flex;\n // justify-content: space-between;\n .title-text {\n flex: 1;\n }\n}\n\n.add-calculation {\n cursor: pointer;\n font-size: 13px;\n color: #3f8ce8;\n line-height: 24px;\n}\n\n.add-calculation-icon {\n color: #3f8ce8;\n margin-right: 3px;\n}\n\n.ant-checkbox + span {\n width: 100% !important;\n}\n\n.card-item-inner {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.name {\n width: 100%;\n}\n\n.placeholder {\n color: red;\n}\n\n.setting-icon {\n color: #545;\n margin-left: 5px;\n}\n\n.delete-icon {\n color: #ff0000;\n margin-left: 5px;\n}\n\n.calculation-icon {\n font-weight: bold;\n font-style: italic;\n}\n\n.menu-item {\n white-space: nowrap;\n}\n\n.chart-column {\n height: 100%;\n}\n\n.data-view-name {\n display: inline-block;\n max-width: 200px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n</style>\n\n<style lang=\"less\">\n.data-config-card {\n .ant-card-body {\n overflow-y: auto;\n }\n}\n\n.card-item {\n .ant-checkbox + span {\n width: 100%;\n }\n}\n\n.field-wrap {\n padding: 10px 0;\n .field-item {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n .item-label {\n width: 70px;\n font-size: 14px;\n text-align: right;\n }\n }\n}\n</style>\n","export const cardTypeMap = {\n classificationList: {\n title: '分类'\n },\n seriesList: {\n title: '系列'\n },\n leftAxisList: {\n title: '左值轴'\n },\n rightAxisList: {\n title: '右值轴'\n },\n indicators: {\n title: '数值'\n },\n queryColumnList: {\n title: '查询列'\n },\n rowHeaderList: {\n title: '行表头'\n },\n formFields: {\n title: '字段'\n },\n dimensionList: {\n title: '维度'\n },\n indexLibColumns: {\n title: '查询列'\n },\n specialIndicators: {\n title: '目标指标'\n }\n}\n","<template>\n <div class=\"data-group\">\n <template v-for=\"card in cards\" :key=\"card.type\">\n <data-config-card class=\"data-config-card\" :type=\"card.type\" v-bind=\"card\" />\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, reactive, ref, unref, inject, watch } from 'vue'\nimport DataConfigCard from './data-config-card'\nimport { cardTypeMap } from './data'\nimport { SELECTED_COMPONENT, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { hasOwn } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'DataConfigGroup',\n components: {\n DataConfigCard\n },\n setup () {\n const allMap = ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList', 'indicators', 'rowHeaderList', 'queryColumnList']\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const selectedComponentType = computed(() => unref(selectedComponent)?.type)\n const isGroupTable = computed(() => !!unref(selectedComponent)?.isGroupTable)\n const cardsMap = ref({})\n const cards = reactive<{ [key: string]: any }[]>([])\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const handleGraphicConfigMap = () => {\n const graphicConfig = cloneDeep(unref(selectedComponent)?.graphicConfig)\n const graphicConfigMap = {\n // leftAxisList + rightAxisList = indicatorList,只是 location 是 LEFT,RIGHT\n card: ['rowHeaderList', 'indicators'],\n pie: ['classificationList', 'indicators'],\n circulate: ['classificationList', 'indicators'],\n bar: ['classificationList', 'seriesList', 'leftAxisList'],\n line: ['classificationList', 'seriesList', 'leftAxisList'],\n comboGraph: ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList'],\n radar: ['classificationList', 'seriesList', 'leftAxisList'],\n table: isGroupTable.value ? ['rowHeaderList', 'indicators'] : [graphicConfig.isIndexSet ? 'indexLibColumns' : 'queryColumnList', 'indicators'],\n text: ['dimensionList', 'indicators'],\n proportion: ['indicators'],\n select: ['classificationList', 'formFields'],\n treeSelect: ['classificationList', 'formFields'],\n dataSelect: ['classificationList', 'indicators', 'formFields'],\n checkbox: ['classificationList', 'formFields'],\n radio: ['classificationList', 'formFields'],\n list: ['classificationList', 'indicators'],\n counter: ['indicators'],\n scatter: ['classificationList', 'indicators', 'formFields'],\n pivotTable: ['queryColumnList', 'indicators'],\n valueLine: ['classificationList', 'indicators', 'formFields'],\n indexPanel: ['indicators'],\n gauge: ['indicators'],\n boxplot: ['classificationList', 'indicators'],\n budget: ['classificationList', 'indicators', 'specialIndicators']\n } as { [key: string]: any }\n const startStr = 'ecan'\n let type = unref(selectedComponentType) as string\n if (type.startsWith(startStr)) {\n const startIndex = startStr.length\n type = type.slice(startIndex, startIndex + 1)?.toLowerCase() + type.slice(startIndex + 1)\n }\n const componentMapKeys = graphicConfigMap[type]\n const map = cardTypeMap as { [key: string]: any }\n const len = componentMapKeys?.length || 0\n for (let i = 0; i < len; i++) {\n const componentMapKey = (componentMapKeys[i]) as string\n // 为空直接跳过\n if (!componentMapKey) break\n cards.push({\n ...map[componentMapKey],\n type: componentMapKey\n })\n }\n\n // 用于切换graphicConfig变量后清空无效的变量,比如table切到分组表的时候,要把queryColumnList=[]\n for (const item of allMap) {\n if (hasOwn(graphicConfig, item) && !componentMapKeys.find((v: string) => v === item)) {\n graphicConfig[item] = []\n } else {\n delete graphicConfig[item]\n }\n }\n updateGraphicConfig(graphicConfig)\n }\n // xiaohua\n handleGraphicConfigMap()\n watch(() => selectedComponentType.value, () => {\n cards.length = 0\n handleGraphicConfigMap()\n })\n\n return {\n cardsMap,\n cards\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-group {\n display: flex;\n}\n\n.data-config-card {\n width: 25%;\n\n &:not(:last-child) {\n margin-right: 15px;\n }\n}\n</style>\n\n<style lang=\"less\">\n.data-group {\n .ant-card-body {\n padding: 0;\n height: calc(100% - 58px);\n }\n}\n</style>\n","<template>\n <div class=\"data-group\">\n <template v-for=\"card in cards\" :key=\"card.type\">\n <data-config-card class=\"data-config-card\" :type=\"card.type\" v-bind=\"card\" />\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, reactive, ref, unref, inject, watch } from 'vue'\nimport DataConfigCard from './data-config-card'\nimport { cardTypeMap } from './data'\nimport { SELECTED_COMPONENT, UPDATE_GRAPHIC_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { hasOwn } from '@ecan-bi/tools'\nexport default defineComponent({\n name: 'DataConfigGroup',\n components: {\n DataConfigCard\n },\n setup () {\n const allMap = ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList', 'indicators', 'rowHeaderList', 'queryColumnList']\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const selectedComponentType = computed(() => unref(selectedComponent)?.type)\n const isGroupTable = computed(() => !!unref(selectedComponent)?.isGroupTable)\n const cardsMap = ref({})\n const cards = reactive<{ [key: string]: any }[]>([])\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const handleGraphicConfigMap = () => {\n const graphicConfig = cloneDeep(unref(selectedComponent)?.graphicConfig)\n const graphicConfigMap = {\n // leftAxisList + rightAxisList = indicatorList,只是 location 是 LEFT,RIGHT\n card: ['rowHeaderList', 'indicators'],\n pie: ['classificationList', 'indicators'],\n circulate: ['classificationList', 'indicators'],\n bar: ['classificationList', 'seriesList', 'leftAxisList'],\n line: ['classificationList', 'seriesList', 'leftAxisList'],\n comboGraph: ['classificationList', 'seriesList', 'leftAxisList', 'rightAxisList'],\n radar: ['classificationList', 'seriesList', 'leftAxisList'],\n table: isGroupTable.value ? ['rowHeaderList', 'indicators'] : [graphicConfig.isIndexSet ? 'indexLibColumns' : 'queryColumnList', 'indicators'],\n text: ['dimensionList', 'indicators'],\n proportion: ['indicators'],\n select: ['classificationList', 'formFields'],\n treeSelect: ['classificationList', 'formFields'],\n dataSelect: ['classificationList', 'indicators', 'formFields'],\n checkbox: ['classificationList', 'formFields'],\n radio: ['classificationList', 'formFields'],\n list: ['classificationList', 'indicators'],\n counter: ['indicators'],\n scatter: ['classificationList', 'indicators', 'formFields'],\n pivotTable: ['queryColumnList', 'indicators'],\n valueLine: ['classificationList', 'indicators', 'formFields'],\n indexPanel: ['indicators'],\n gauge: ['indicators'],\n boxplot: ['classificationList', 'indicators'],\n budget: ['classificationList', 'indicators', 'specialIndicators']\n } as { [key: string]: any }\n const startStr = 'ecan'\n let type = unref(selectedComponentType) as string\n if (type.startsWith(startStr)) {\n const startIndex = startStr.length\n type = type.slice(startIndex, startIndex + 1)?.toLowerCase() + type.slice(startIndex + 1)\n }\n const componentMapKeys = graphicConfigMap[type]\n const map = cardTypeMap as { [key: string]: any }\n const len = componentMapKeys?.length || 0\n for (let i = 0; i < len; i++) {\n const componentMapKey = (componentMapKeys[i]) as string\n // 为空直接跳过\n if (!componentMapKey) break\n cards.push({\n ...map[componentMapKey],\n type: componentMapKey\n })\n }\n\n // 用于切换graphicConfig变量后清空无效的变量,比如table切到分组表的时候,要把queryColumnList=[]\n for (const item of allMap) {\n if (hasOwn(graphicConfig, item) && !componentMapKeys.find((v: string) => v === item)) {\n graphicConfig[item] = []\n } else {\n delete graphicConfig[item]\n }\n }\n updateGraphicConfig(graphicConfig)\n }\n // xiaohua\n handleGraphicConfigMap()\n watch(() => selectedComponentType.value, () => {\n cards.length = 0\n handleGraphicConfigMap()\n })\n\n return {\n cardsMap,\n cards\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-group {\n display: flex;\n}\n\n.data-config-card {\n width: 25%;\n\n &:not(:last-child) {\n margin-right: 15px;\n }\n}\n</style>\n\n<style lang=\"less\">\n.data-group {\n .ant-card-body {\n padding: 0;\n height: calc(100% - 58px);\n }\n}\n</style>\n","export interface PropsGroup {\r\n title?: string // 标题\r\n enableProps?: string // 是否能使用(禁用)\r\n showSwitch?: boolean\r\n onlyType?: string | string[],\r\n excludeType?: string | string[]\r\n props: (string | { value: string, onlyType?: string | string[], excludeType?: string | string[] })[] // 属性组\r\n}\r\n\r\nexport type PropsGroups = PropsGroup[]\r\n\r\nexport interface DetailPropsGroup {\r\n title?: string\r\n enableProps?: boolean\r\n onlyType?: string | string[]\r\n excludeType?: string | string[]\r\n showSwitch?: boolean\r\n // enablePropsName 就是 PropsGroup 的 enableProps\r\n enablePropsName?: string\r\n props: {\r\n [key: string]: any\r\n }\r\n}\r\n\r\nexport type DetailPropsGroups = DetailPropsGroup[]\r\n\r\n// 没有title属性直接展示属性\r\n// 有tilt属性才有折叠面板\r\n// 此属性控制属性配置面板的顺序\r\nexport const propsGroups: PropsGroups = [\r\n {\r\n title: '基本属性',\r\n props: [\r\n 'keyName',\r\n 'left',\r\n 'top',\r\n 'width',\r\n 'height',\r\n 'colors',\r\n 'textShadow',\r\n 'backgroundColor',\r\n 'backgroundImage',\r\n 'backgroundSize',\r\n 'theme',\r\n 'pageFontFamily',\r\n 'contextRequestUrl',\r\n 'graphicType'\r\n ]\r\n },\r\n {\r\n title: '定时跳转',\r\n props: [\r\n 'jumpType',\r\n 'jumpTime',\r\n 'jumpPage',\r\n 'jumpLink'\r\n ]\r\n },\r\n // {\r\n // title: '文本',\r\n // props: [\r\n // 'text',\r\n // {\r\n // value: 'format',\r\n // excludeType: ['date', 'range', 'time']\r\n // },\r\n // 'color',\r\n // 'title',\r\n // {\r\n // excludeType: ['table'],\r\n // value: 'fontSize'\r\n // },\r\n // 'fontFamily',\r\n // {\r\n // excludeType: ['table'],\r\n // value: 'fontWeight'\r\n // },\r\n // 'fontStyle',\r\n // 'lineHeight',\r\n // 'textAlign',\r\n // 'strokeTextWidth',\r\n // 'justifyContent',\r\n // 'alignItems',\r\n // 'titleFontSize',\r\n // 'titleColor',\r\n // 'decimalFormat',\r\n // 'variableColor',\r\n // 'variableFontSize',\r\n // 'variableDefaultValue',\r\n // 'strokeTextShow',\r\n // 'percentageSide',\r\n // 'increaseColor',\r\n // 'declineColor',\r\n // 'minusSignShow',\r\n // 'exceedConfig',\r\n // 'showAnimation'\r\n // ]\r\n // },\r\n {\r\n title: '弹窗',\r\n onlyType: 'modal',\r\n props: [\r\n 'position',\r\n 'fullModal',\r\n 'isShowCloseBtn',\r\n 'centered',\r\n 'destroyOnClose',\r\n 'closeBtnColor',\r\n 'borderRadius',\r\n 'borderWidth',\r\n 'borderColor',\r\n 'boxShadow'\r\n ]\r\n },\r\n {\r\n title: '图片',\r\n props: [\r\n 'borderRadius',\r\n 'isAnimation',\r\n 'animationSource',\r\n 'isHoverStyle',\r\n 'imgUrl'\r\n ]\r\n },\r\n {\r\n title: '链接',\r\n props: [\r\n 'linkPage',\r\n 'href',\r\n 'target',\r\n 'transParams'\r\n ]\r\n },\r\n {\r\n title: '系列',\r\n props: [\r\n 'seriesTypes'\r\n ]\r\n },\r\n {\r\n title: '折线图',\r\n onlyType: ['line', 'comboGraph'],\r\n props: [\r\n 'areaStyleOpacity',\r\n 'areaGradientShow',\r\n 'areaGradientColor',\r\n 'smooth',\r\n 'lineStyleWidth',\r\n 'symbolSize',\r\n 'shadowColor',\r\n 'shadowBlur',\r\n 'shadowOffsetX',\r\n 'shadowOffsetY'\r\n ]\r\n },\r\n {\r\n title: '散点图',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'symbolSize',\r\n 'symbolColor'\r\n ]\r\n },\r\n {\r\n title: '雷达图',\r\n onlyType: ['radar'],\r\n props: [\r\n 'areaStyleOpacity',\r\n 'lineStyleWidth',\r\n 'symbolSize',\r\n 'labelShow',\r\n 'axisNameColor'\r\n ]\r\n },\r\n {\r\n title: '单选框',\r\n onlyType: ['radio'],\r\n props: [\r\n 'value',\r\n 'optionType',\r\n 'tabFontSize',\r\n 'tabHorizontalPadding',\r\n 'tabBarGutter',\r\n 'tabFlexDirection',\r\n 'tabTextAlign',\r\n 'tabColor',\r\n 'activeTabColor',\r\n 'tabBackgroundImage',\r\n 'activeTabBackgroundImage'\r\n ]\r\n },\r\n {\r\n title: '柱状图',\r\n onlyType: ['bar', 'comboGraph'],\r\n props: [\r\n 'barWidth',\r\n 'barBorderRadius',\r\n 'isUseHorizontalAxis',\r\n 'axisInverse',\r\n 'isStack',\r\n 'stackColumns',\r\n 'labelShow',\r\n 'showBarBackground'\r\n ]\r\n },\r\n {\r\n title: '饼图',\r\n onlyType: 'pie',\r\n props: [\r\n 'centerTop',\r\n 'centerLeft',\r\n 'innerRadius',\r\n 'outerRadius',\r\n 'roseType',\r\n 'minAngle'\r\n ]\r\n },\r\n {\r\n title: '布局',\r\n props: [\r\n 'gridTop',\r\n 'gridBottom',\r\n 'gridLeft',\r\n 'gridRight',\r\n 'gridContainLabel'\r\n ]\r\n },\r\n {\r\n title: '标签边距',\r\n props: [\r\n 'gridTopPx',\r\n 'gridBottomPx',\r\n 'gridLeftPx',\r\n 'gridRightPx'\r\n ]\r\n },\r\n {\r\n title: '标题',\r\n onlyType: ['bar', 'combo-graph', 'line', 'pie', 'radar', 'scatter'],\r\n props: [\r\n 'titleText',\r\n 'titleFontSize',\r\n 'titleColor',\r\n 'fontWeight',\r\n 'textAlign'\r\n ]\r\n },\r\n {\r\n title: 'x轴',\r\n props: [\r\n 'xAxisLabelColor',\r\n 'xAxisLineStyleColor',\r\n 'xAxisLabelWidth',\r\n 'xAxisLabelOverflow',\r\n 'xAxisLabelRotate',\r\n 'xAxisTickShow',\r\n 'xAxisSplitLineShow',\r\n 'xAxisSplitLineType',\r\n 'xAxisSplitAreaShow',\r\n 'xAxisLineShow',\r\n 'isBoundaryGap',\r\n 'xAxisSplitLineInterval',\r\n 'xAxisSplitLineStyleColor',\r\n 'xAxisLabelFormatter',\r\n 'xAxisInverse',\r\n 'xAxisMinInterval',\r\n 'xAxisLabelInterval',\r\n 'xAxisLabelFontSize',\r\n 'xAxisName',\r\n 'xAxisMaxValue',\r\n 'showXAxisLineArrow',\r\n 'xAxisLineInverse'\r\n ]\r\n },\r\n {\r\n title: 'y轴',\r\n props: [\r\n 'yAxisLabelColor',\r\n 'yAxisLineStyleColor',\r\n 'yAxisLineAlwaysDisplay',\r\n 'yAxisLabelWidth',\r\n 'yAxisLabelOverflow',\r\n 'yAxisLabelRotate',\r\n 'yAxisTickShow',\r\n 'yAxisSplitLineShow',\r\n\r\n 'yAxisSplitLineType',\r\n 'yAxisLeftSplitLineShow',\r\n 'yAxisLeftSplitLineType',\r\n 'yAxisRightSplitLineShow',\r\n 'yAxisRightSplitLineType',\r\n 'yAxisSplitAreaShow',\r\n 'yAxisLabelShow',\r\n 'yAxisSplitLineStyleColor',\r\n 'yAxisLabelFormatter',\r\n 'yAxisInverse',\r\n 'yAxisMinInterval',\r\n 'yAxis',\r\n 'yAxisLabelFontSize',\r\n 'yAxisName',\r\n 'yAxisLeftName',\r\n 'yAxisRightName',\r\n 'yAxisMaxValue',\r\n 'showYAxisLineArrow',\r\n 'yAxisLineInverse'\r\n ]\r\n },\r\n {\r\n title: '标签',\r\n enableProps: 'labelShow',\r\n excludeType: 'map',\r\n props: [\r\n 'labelFormatter',\r\n 'labelWidth',\r\n 'labelColor',\r\n 'isUseLabelColors',\r\n 'labelFontSize',\r\n 'labelPosition',\r\n 'labelOverflow'\r\n ]\r\n },\r\n {\r\n title: '标签引导线',\r\n enableProps: 'labelLineShow',\r\n props: [\r\n 'labelLineLength',\r\n 'labelLineLength2'\r\n ]\r\n },\r\n {\r\n title: '图例',\r\n enableProps: 'legendShow',\r\n props: [\r\n 'legendFormatter',\r\n 'legendWidth',\r\n 'legendHeight',\r\n 'legendTextWidth',\r\n 'legendTextStyleColor',\r\n 'legendFontSize',\r\n 'legendTop',\r\n 'legendLeft',\r\n 'legendOrient',\r\n 'legendType',\r\n 'legendItemGap',\r\n 'legendItemWidth',\r\n 'legendItemHeight',\r\n 'legendScroll'\r\n ]\r\n },\r\n {\r\n title: '提示框',\r\n enableProps: 'tooltipShow',\r\n props: [\r\n 'tooltipTrigger',\r\n 'tooltipFormatter',\r\n 'tooltipTextStyleColor',\r\n 'tooltipBackgroundColor',\r\n 'tooltipRequestData',\r\n 'tooltipPosition'\r\n ]\r\n },\r\n // {\r\n // title: '工具栏',\r\n // enableProps: 'toolboxShow',\r\n // props: [\r\n // 'toolboxOrient',\r\n // 'toolboxItemSize',\r\n // 'toolboxItemGap',\r\n // 'toolboxLeft',\r\n // 'toolboxTop',\r\n // 'toolboxIconStyleBorderColor',\r\n // 'toolboxLocation',\r\n // 'toolboxDownloadShow',\r\n // 'toolboxDataZoomShow',\r\n // 'toolboxInfoShow',\r\n // 'toolboxDownloadUrl',\r\n // 'toolboxInfoText'\r\n // ]\r\n // },\r\n {\r\n title: '渐变',\r\n enableProps: 'gradientShow',\r\n showSwitch: true,\r\n onlyType: ['bar', 'proportion', 'border', 'comboGraph', 'text', 'radar'],\r\n props: [\r\n 'isTransparent',\r\n 'gradientColor',\r\n 'gradientColors',\r\n 'gradientOffset',\r\n 'gradientAngle'\r\n ]\r\n },\r\n {\r\n title: '图表标线',\r\n enableProps: 'isShowMarkLine',\r\n showSwitch: true,\r\n onlyType: ['line', 'bar', 'comboGraph', 'scatter'],\r\n props: [\r\n 'markLineType'\r\n ]\r\n },\r\n {\r\n title: '图表标线',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'xAxisMarkLineValue',\r\n 'yAxisMarkLineValue'\r\n ]\r\n },\r\n {\r\n title: '图表标域',\r\n onlyType: ['scatter'],\r\n props: [\r\n 'axisMarkArea'\r\n ]\r\n },\r\n {\r\n title: '默认范围值',\r\n enableProps: 'defaultRangeValue',\r\n showSwitch: true,\r\n onlyType: ['bar', 'comboGraph'],\r\n props: [\r\n 'startValue',\r\n 'endValue'\r\n ]\r\n },\r\n {\r\n title: '单位',\r\n enableProps: 'unitShow',\r\n onlyType: ['text'],\r\n props: [\r\n 'unitText',\r\n 'unitFontSize',\r\n 'unitFontWeight',\r\n 'unitColor',\r\n 'unitTop',\r\n 'unitLeft'\r\n ]\r\n },\r\n {\r\n title: '目标值',\r\n enableProps: 'targetShow',\r\n onlyType: ['text'],\r\n props: [\r\n 'targetRule',\r\n 'targetValue',\r\n 'notExpectColor'\r\n ]\r\n },\r\n {\r\n title: '时间',\r\n onlyType: ['date', 'time', 'range'],\r\n props: [\r\n 'picker',\r\n 'optionFontSize',\r\n 'format',\r\n 'show',\r\n 'limitInterval',\r\n 'startTime',\r\n 'endTime',\r\n 'value',\r\n 'showTime',\r\n 'useCurrentTime',\r\n 'isAllowSpanYear',\r\n 'interval',\r\n 'intervalUnit',\r\n 'updateInterval',\r\n 'operate',\r\n 'limitStartTime',\r\n 'limitEndTime'\r\n ]\r\n },\r\n {\r\n title: '选择器',\r\n onlyType: 'select',\r\n props: [\r\n 'value',\r\n 'mode',\r\n 'multiple',\r\n 'treeCheckable',\r\n 'maxTagCount',\r\n 'autoClearSearchValue',\r\n 'isAllowClear',\r\n 'placeholder',\r\n // 'selectFirstOption',\r\n 'valueType',\r\n 'optionFontSize'\r\n ]\r\n },\r\n {\r\n title: '表格',\r\n onlyType: 'table',\r\n props: [\r\n 'size',\r\n 'allOverflow',\r\n 'hoverRow',\r\n 'hoverColor',\r\n 'boderList',\r\n 'columnDropEnable',\r\n 'showTotalBool',\r\n 'totalName',\r\n 'expandAll'\r\n ]\r\n },\r\n {\r\n title: '列表',\r\n onlyType: 'list',\r\n props: [\r\n 'columns',\r\n 'sliceCount',\r\n // 'columnCount',\r\n 'itemWidth',\r\n 'itemHeight',\r\n 'itemColSpan',\r\n 'itemPadding',\r\n 'itemRowSpan',\r\n // 'useRanking',\r\n 'useTitle',\r\n 'isAutoScroll',\r\n 'scrollSpeed'\r\n ]\r\n },\r\n {\r\n title: '小计',\r\n onlyType: 'table',\r\n props: [\r\n 'subTotalName',\r\n 'subTotalColumn'\r\n ]\r\n },\r\n {\r\n title: '序号列',\r\n onlyType: ['table', 'list'],\r\n enableProps: 'isUseSeq',\r\n props: [\r\n 'seqWidth',\r\n 'seqName',\r\n 'seqIcon',\r\n 'seqFontSize',\r\n 'seqIndexFormatter'\r\n ]\r\n },\r\n {\r\n title: '序号图标',\r\n onlyType: ['list'],\r\n enableProps: 'seqIcon',\r\n props: [\r\n 'seqIconConfig',\r\n 'seqIconWidth',\r\n 'seqIconHeight',\r\n 'seqIconOffsetX',\r\n 'seqIconOffsetY'\r\n ]\r\n },\r\n {\r\n title: '操作列',\r\n onlyType: 'table',\r\n enableProps: 'isUseAction',\r\n props: [\r\n 'actionList',\r\n 'actionColumnWidth'\r\n ]\r\n },\r\n {\r\n title: '分页',\r\n enableProps: 'paginationShow',\r\n props: [\r\n 'paginationPageSize',\r\n 'simple',\r\n 'pageSizeShow',\r\n 'showQuickJumper',\r\n 'paginationPosition',\r\n 'isPageBottom',\r\n 'isShowTotal',\r\n 'paginationColor',\r\n 'paginationBgColor',\r\n 'activePaginationColor',\r\n 'activePaginationBgColor'\r\n ]\r\n },\r\n {\r\n title: '循环列表',\r\n onlyType: 'circulate',\r\n props: [\r\n 'colNum',\r\n 'unitInterval',\r\n 'isAutoScroll',\r\n 'scrollSpeed',\r\n 'scrollDirection',\r\n 'keyFieldMap'\r\n ]\r\n },\r\n {\r\n title: '计数器',\r\n onlyType: 'counter',\r\n props: [\r\n 'digits',\r\n 'unitInterval',\r\n 'unitWidth',\r\n 'unitHeight',\r\n 'counterBackgroundImage'\r\n ]\r\n },\r\n {\r\n title: '边框',\r\n onlyType: ['border', 'circulate'],\r\n props: [\r\n 'mode',\r\n 'borderWidth',\r\n 'borderRadius',\r\n 'borderColor',\r\n 'useBorderModify',\r\n 'borderStyle',\r\n 'titleMode'\r\n ]\r\n },\r\n {\r\n title: '标签页',\r\n onlyType: 'tabs',\r\n props: [\r\n 'tabType',\r\n 'tabWidth',\r\n 'activeKey',\r\n 'tabFontSize',\r\n 'tabFontWeight',\r\n 'tabHorizontalPadding',\r\n 'tabBarGutter',\r\n 'tabOuterMargin',\r\n 'tabFlexDirection',\r\n 'tabAlignItems',\r\n 'tabJustifyContent',\r\n 'tabColor',\r\n 'activeTabColor',\r\n 'tabBackgroundImage',\r\n 'activeTabBackgroundImage',\r\n 'autoSwitch',\r\n 'autoSwitchInterval',\r\n 'hideTabs'\r\n // 'isAutoScroll',\r\n // 'scrollSpeed'\r\n ]\r\n },\r\n {\r\n title: '进度条',\r\n onlyType: 'proportion',\r\n props: [\r\n 'strokeWidth',\r\n 'strokeType',\r\n 'strokeLinecap',\r\n 'strokeColor',\r\n 'trailColor'\r\n ]\r\n },\r\n {\r\n title: '地图数据',\r\n onlyType: 'map',\r\n props: [\r\n 'mapJson',\r\n 'geoCenter'\r\n ]\r\n },\r\n {\r\n title: '地图样式',\r\n onlyType: 'map',\r\n props: [\r\n 'geoRoam',\r\n 'geoZoom',\r\n 'geoLabelColor',\r\n 'geoLabelShow',\r\n 'geoLabelFontSize',\r\n 'geoBackgroundImage',\r\n 'geoBackgroundImageRepeat',\r\n 'geoItemStyleAreaColor',\r\n 'geoItemStyleBorderColor',\r\n 'geoItemStyleBorderWidth',\r\n 'geoItemStyleShadowColor',\r\n 'geoItemStyleShadowOffsetX',\r\n 'geoItemStyleShadowOffsetY',\r\n 'geoItemStyleShadowBlur',\r\n 'symbolImage',\r\n 'symbolWidth',\r\n 'symbolHeight'\r\n ]\r\n },\r\n {\r\n title: '悬停地图样式',\r\n onlyType: 'map',\r\n props: [\r\n 'geoEmphasisDisabled',\r\n 'geoEmphasisLabelColor',\r\n 'geoEmphasisItemStyleAreaColor',\r\n 'geoEmphasisItemStyleBorderColor'\r\n ]\r\n },\r\n {\r\n title: '按钮',\r\n onlyType: 'button',\r\n props: [\r\n 'mode',\r\n 'danger',\r\n 'shape',\r\n 'tooltipTextStyleColor',\r\n 'borderColor',\r\n 'buttonBackgroundColor'\r\n ]\r\n },\r\n {\r\n title: '输入框',\r\n onlyType: 'input',\r\n props: [\r\n 'value',\r\n 'placeholder',\r\n 'optionFontSize'\r\n ]\r\n },\r\n {\r\n title: '网页',\r\n onlyType: 'iframe',\r\n props: [\r\n 'link',\r\n 'linkType'\r\n ]\r\n }\r\n]\r\n","import { VNode } from 'vue'\n\nexport interface PropToAttributeConfig {\n label: string // 标题\n component: string // 需要转化的组件,如 width 由 numberInput 控制\n style?: string // 组件样式\n valueProp?: any // 值的属性字段\n value?: string // 值\n changeValueEventName?: string // 改变值的事件\n options?: { value: any; label?: any }[] // 子组件option\n updateMode?: 'page' | 'component' // 修改页面、组件页面供属性\n props?: { [key: string]: any } // 组件的 v-bind\n events?: { [key: string]: (e: any) => void } // 组件的 v-on\n onlyType?: string | string[] // 限定数组类型 onlyType\n excludeType?: string | string[]\n layout?: 'horizontal' | 'vertical'\n show?: { [key: string]: any }[]\n effect?: any\n effectVal?: any\n}\n\ntype PropToAttributeConfigList = PropToAttributeConfig[]\n\n// 属性转换配置(表单)\nexport type PropsToAttributeConfig = {\n [key: string]: PropToAttributeConfig | PropToAttributeConfigList\n}\n\nconst fontFamilyArr = [\n { label: '思源黑体', value: '\"SansSc\"' },\n { label: '黑体', value: '\"SimHei\",\"STHeiti\"' },\n { label: '楷体', value: '\"KaiTi\",\"STKaiti\"' },\n { label: '宋体', value: '\"SimSun\",\"STSong\"' },\n { label: '仿宋', value: '\"FangSong\",\"STFangsong\"' }\n]\n// 内嵌样式 jsx 转 template\nconst fontFamilyOptions = fontFamilyArr.map((font) => {\n return {\n value: font.value,\n label: (<span style={{ fontFamily: font.value }}>{font.label}</span>) as VNode\n }\n})\n\n// 属性转表单的字典映射\nexport const mapAttributeProps: PropsToAttributeConfig = {\n keyName: {\n label: '控件别名',\n component: 'input',\n props: {\n isKeyName: true\n }\n },\n text: {\n label: '文本',\n component: 'textarea'\n },\n title: {\n label: '标题',\n component: 'input'\n },\n textShadow: {\n label: '阴影',\n component: 'input'\n },\n width: [\n {\n label: '页面宽度',\n updateMode: 'page',\n component: 'input-number',\n onlyType: 'page',\n props: {\n suffix: 'px',\n disabled: false\n }\n },\n {\n label: '弹窗宽度',\n onlyType: 'modal',\n component: 'input-number',\n props: {\n suffix: 'px',\n max: 1920,\n min: 0\n }\n },\n {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n }\n ],\n height: [\n {\n label: '页面高度',\n updateMode: 'page',\n onlyType: 'page',\n component: 'input-number',\n props: {\n suffix: 'px',\n disabled: false\n }\n },\n {\n label: '弹窗高度',\n onlyType: 'modal',\n component: 'input-number',\n props: {\n suffix: 'px',\n max: 1080,\n min: 10\n }\n },\n {\n label: '高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 1\n }\n }\n ],\n backgroundImage: [\n {\n label: '背景图',\n component: 'image-pick',\n updateMode: 'page',\n onlyType: 'page'\n },\n {\n label: '背景图',\n component: 'image-pick'\n }\n ],\n backgroundSize: [\n {\n label: '背景尺寸',\n component: 'radio-group',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '覆盖',\n value: 'cover'\n },\n {\n label: '铺满',\n value: '100% 100%'\n }\n ]\n }\n }\n ],\n backgroundColor: [\n {\n label: '背景颜色',\n component: 'color-pick',\n updateMode: 'page',\n onlyType: 'page'\n },\n {\n label: '背景颜色',\n component: 'color-pick'\n }\n ],\n contextRequestUrl: {\n label: '请求地址',\n component: 'input',\n updateMode: 'page'\n },\n theme: {\n label: '主题',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'light'\n },\n {\n label: '暗蓝',\n value: 'darkBlue'\n }\n ]\n },\n updateMode: 'page'\n },\n pageFontFamily: {\n label: '字体',\n component: 'select',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n ...fontFamilyOptions\n ]\n }\n },\n value: [\n {\n label: '时间值',\n component: 'time-pick',\n onlyType: 'date'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'select'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'tabs'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'input'\n },\n {\n label: '默认值',\n component: 'checkbox',\n onlyType: 'checkbox'\n },\n {\n label: '默认值',\n component: 'input',\n onlyType: 'radio'\n }\n ],\n placeholder: [\n {\n label: '占位文字',\n component: 'input'\n }\n ],\n imgUrl: {\n label: '图片',\n component: 'image-pick',\n show: [\n {\n match: 'isAnimation',\n value: false\n }\n ]\n },\n linkUrl: {\n label: '链接地址',\n component: 'input'\n },\n linkMethod: {\n label: '打开方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '本窗口',\n value: '_self'\n },\n {\n label: '新窗口',\n value: '_blank'\n }\n ]\n }\n },\n linkPage: {\n label: '链接项目页面',\n component: 'page-pick'\n },\n fontSize: {\n label: '字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n variableFontSize: {\n label: '变量字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n percentageSide: {\n label: '涨跌幅图标',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n left: {\n label: 'x轴',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n top: {\n label: 'y轴',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n textAlign: {\n label: '水平对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n verticalAlign: {\n label: '垂直对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'middle'\n },\n {\n label: '下',\n value: 'bottom'\n }\n ]\n }\n },\n justifyContent: {\n label: '水平对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '左',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'flex-end'\n }\n ]\n }\n },\n alignItems: {\n label: '垂直对齐',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '上',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '下',\n value: 'flex-end'\n }\n ]\n }\n },\n fontFamily: {\n label: '字体',\n component: 'select',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n ...fontFamilyOptions\n ]\n }\n },\n tabFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n headerFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n fontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n fontStyle: {\n label: '字体风格',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '正常',\n value: 'normal'\n },\n {\n label: '倾斜',\n value: 'italic'\n }\n ],\n isTransformNumber: true\n }\n },\n color: {\n label: '颜色',\n component: 'color-pick'\n },\n colors: {\n label: '颜色',\n component: 'color-group-pick'\n },\n centerLeft: {\n label: '水平位置',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n centerTop: {\n label: '垂直位置',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n lineHeight: {\n label: '行高',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0,\n step: 0.1\n }\n },\n innerRadius: {\n label: '内半径',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n outerRadius: {\n label: '外半径',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n titleText: {\n label: '标题',\n component: 'input'\n },\n titleSubtext: {\n label: '副标题',\n component: 'input'\n },\n tooltipTrigger: {\n label: '触发条件',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '图形',\n value: 'item'\n },\n {\n label: '坐标轴',\n value: 'axis'\n },\n {\n label: '无',\n value: 'none'\n }\n ]\n }\n },\n tooltipTextStyleColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n tooltipFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n legendTextStyleColor: {\n label: '颜色',\n component: 'color-pick'\n },\n legendTop: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'middle'\n },\n {\n label: '下',\n value: 'bottom'\n }\n ]\n }\n },\n legendLeft: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '左',\n value: 'left'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'right'\n }\n ]\n }\n },\n legendOrient: {\n label: '布局',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '垂直',\n value: 'vertical'\n },\n {\n label: '水平',\n value: 'horizontal'\n }\n ]\n }\n },\n labelFormatter: {\n label: '格式化',\n component: 'input'\n },\n labelColor: {\n label: '标签颜色',\n component: 'color-pick'\n },\n isUseLabelColors: {\n label: '系列色',\n component: 'switch'\n },\n labelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 12,\n suffix: 'px'\n }\n },\n labelPosition: [\n {\n label: '位置',\n component: 'radio-group',\n onlyType: 'pie',\n props: {\n options: [\n {\n label: '外侧',\n value: 'outside'\n },\n {\n label: '内侧',\n value: 'inside'\n },\n {\n label: '中心',\n value: 'center'\n }\n ]\n }\n },\n {\n label: '位置',\n component: 'select',\n onlyType: ['bar', 'radar'],\n props: {\n options: [\n {\n label: '上',\n value: 'top'\n },\n {\n label: '中',\n value: 'inside'\n },\n {\n label: '下',\n value: 'bottom'\n },\n {\n label: '右',\n value: 'right'\n },\n {\n label: '左',\n value: 'left'\n }\n ]\n }\n }\n ],\n labelLineLength: {\n label: '第一段',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n labelLineLength2: {\n label: '第二段',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolSize: {\n label: '标记点尺寸',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolColor: {\n label: '标记点颜色',\n component: 'color-pick'\n },\n symbolWidth: {\n label: '图标宽',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n symbolHeight: {\n label: '图标高',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n smooth: {\n label: '线条光滑',\n component: 'switch'\n },\n lineStyleWidth: {\n label: '线条宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n picker: {\n label: '选择类型',\n component: 'select',\n props: {\n options: [\n {\n label: '日期',\n value: 'date'\n },\n {\n label: '年份',\n value: 'year'\n },\n {\n label: '月份',\n value: 'month'\n },\n {\n label: '星期',\n value: 'week'\n },\n {\n label: '季度',\n value: 'quarter'\n }\n ]\n }\n },\n format: [\n {\n label: '格式化',\n onlyType: 'text',\n component: 'select',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '百分比',\n value: 'percent'\n },\n {\n label: '涨跌幅',\n value: 'percentage'\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '千分位',\n value: 'thousands'\n }\n ]\n }\n },\n {\n label: '格式化',\n component: 'input',\n onlyType: ['date', 'range', 'time']\n }\n ],\n showTime: {\n label: '展示时间',\n component: 'switch'\n },\n xAxisSplitLineShow: {\n label: '分割线',\n component: 'switch'\n },\n xAxisSplitAreaShow: {\n label: '分隔区域',\n component: 'switch'\n },\n xAxisLineShow: {\n label: '显示轴线',\n component: 'switch'\n },\n isBoundaryGap: {\n label: '两边留白',\n component: 'switch'\n },\n xAxisSplitLineInterval: {\n label: '分割线间隔',\n component: 'input-number',\n props: {\n suffix: '',\n min: 0\n }\n },\n xAxisSplitLineStyleColor: {\n label: '分割线颜色',\n component: 'color-pick'\n },\n xAxisLabelColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n xAxisLineStyleColor: {\n label: '横边颜色',\n component: 'color-pick'\n },\n xAxisTickShow: {\n label: '显示刻度',\n component: 'switch'\n },\n yAxisTickShow: {\n label: '显示刻度',\n component: 'switch'\n },\n xAxisLabelFormatter: {\n label: '格式化',\n component: 'input'\n },\n yAxisSplitLineShow: {\n label: '分割线',\n component: 'switch'\n },\n yAxisLeftSplitLineShow: {\n label: '分割线-左轴',\n component: 'switch'\n },\n yAxisRightSplitLineShow: {\n label: '分割线-右轴',\n component: 'switch'\n },\n yAxisSplitLineType: {\n label: '分割线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisLeftSplitLineType: {\n label: '分割线类型-左轴',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisRightSplitLineType: {\n label: '分割线类型-左轴',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n xAxisSplitLineType: {\n label: '分割线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n yAxisSplitAreaShow: {\n label: '分隔区域',\n component: 'switch'\n },\n yAxisLabelShow: {\n label: '刻度标签',\n component: 'switch'\n },\n yAxisLineAlwaysDisplay: {\n label: '显示轴线',\n component: 'switch'\n },\n yAxisSplitLineStyleColor: {\n label: '分割线颜色',\n component: 'color-pick'\n },\n yAxisLabelColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n yAxisLineStyleColor: {\n label: '竖边颜色',\n component: 'color-pick'\n },\n yAxisLabelFormatter: {\n label: '格式化',\n component: 'input'\n },\n roseType: {\n label: '玫瑰图',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '不展示',\n value: ''\n },\n {\n label: '圆心角',\n value: 'area'\n },\n {\n label: '半径',\n value: 'radius'\n }\n ]\n }\n },\n fullModal: {\n label: '全屏',\n component: 'switch'\n },\n seqIconConfig: [\n {\n label: '图标索引',\n component: 'icon-config',\n layout: 'vertical',\n onlyType: 'list'\n }\n ],\n columns: [\n {\n label: '表格列',\n component: 'form-collapse',\n onlyType: 'table',\n props: {\n format: [\n {\n label: '名称',\n value: 'title',\n type: 'input'\n },\n {\n label: '索引',\n value: 'dataIndex',\n type: 'input'\n },\n {\n label: '宽度',\n value: 'width',\n type: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n {\n label: '头部对齐',\n value: 'headerCellAlign',\n type: 'select',\n defaultValue: 'center',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '单元格对齐',\n value: 'cellAlign',\n type: 'select',\n defaultValue: 'center',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n // {\n // label: '头部字体',\n // value: 'headerCellColor',\n // type: 'color',\n // defaultValue: ''\n // },\n // {\n // label: '单元格字体',\n // value: 'cellColor',\n // type: 'color',\n // defaultValue: ''\n // },\n {\n label: '格式化',\n value: 'format',\n type: 'select',\n defaultValue: '',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '百分比',\n value: 'percentage'\n },\n {\n label: '布尔值',\n value: 'boolean'\n },\n {\n label: '对比',\n value: 'contrast'\n },\n {\n label: '进度条',\n value: 'progress'\n },\n {\n label: '保留小数',\n value: 'decimals'\n },\n {\n label: '自定义',\n value: 'custom'\n }\n ]\n }\n },\n {\n label: '保留位数',\n value: 'retentiondigit',\n type: 'input-number',\n show: {\n match: 'format',\n value: 'decimals'\n },\n props: {\n min: 0\n }\n },\n {\n label: '自定义格式化',\n value: 'customFormatter',\n type: 'input',\n defaultValue: '{value}',\n show: {\n match: 'format',\n value: ['custom', 'contrast']\n }\n },\n {\n label: '涨幅颜色',\n value: 'increaseColor',\n type: 'color',\n defaultValue: '#ff512e',\n show: {\n match: 'format',\n value: 'contrast'\n }\n },\n {\n label: '跌幅颜色',\n value: 'declineColor',\n type: 'color',\n defaultValue: '#39cf93',\n show: {\n match: 'format',\n value: 'contrast'\n }\n },\n {\n label: '进度条颜色',\n value: 'progressColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条文字颜色',\n value: 'progressTextColor',\n type: 'color',\n defaultValue: '#333',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条完成文字颜色',\n value: 'progressFinishedTextColor',\n type: 'color',\n defaultValue: '#fff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条文字保留小数位',\n value: 'progressTextDecimalPlaces',\n type: 'input-number',\n defaultValue: '2',\n props: {\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条线宽度',\n value: 'progressWidth',\n type: 'input-number',\n defaultValue: '18',\n props: {\n suffix: 'px',\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '默认值',\n value: 'defaultVal',\n type: 'input',\n defaultValue: ''\n },\n {\n label: '内容超出时',\n value: 'overflow',\n type: 'select',\n defaultValue: 'wrap',\n props: {\n options: [\n {\n label: '换行',\n value: 'wrap'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n }\n ]\n }\n },\n {\n label: '排序',\n value: 'sorter',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '小计',\n value: 'isCalcTotal',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '过滤',\n value: 'tableFilter',\n type: 'switch',\n typeValue: 'checked'\n },\n {\n label: '隐藏',\n value: 'isHidden',\n type: 'switch',\n typeValue: 'checked'\n }\n ]\n }\n },\n {\n label: '列索引',\n component: 'form-group',\n layout: 'vertical',\n onlyType: 'list',\n props: {\n format: [\n {\n label: '索引',\n value: 'key',\n type: 'input'\n },\n {\n label: '标题',\n value: 'title',\n type: 'input'\n },\n {\n label: '宽度',\n value: 'width',\n type: 'input-number',\n props: {\n suffix: '%',\n min: 1\n }\n },\n {\n label: '对齐',\n value: 'align',\n type: 'select',\n defaultValue: 'left',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '内容对齐',\n value: 'cellAlign',\n type: 'select',\n defaultValue: 'left',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n {\n label: '背景颜色',\n value: 'cellColor',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '字体大小',\n value: 'fontSize',\n type: 'input-number',\n props: {\n suffix: 'px',\n min: 12\n }\n },\n {\n label: '字体颜色',\n value: 'color',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '字体粗细',\n value: 'fontWeight',\n type: 'select',\n defaultValue: 'normal',\n props: {\n options: [\n {\n label: '较细',\n value: 'lighter'\n },\n {\n label: '正常',\n value: 'normal'\n },\n {\n label: '较粗',\n value: 'bold'\n }\n ]\n }\n },\n {\n label: '标题字体颜色',\n value: 'titleColor',\n type: 'color',\n defaultValue: ''\n },\n {\n label: '格式化',\n value: 'format',\n type: 'select',\n defaultValue: '',\n props: {\n options: [\n {\n label: '无',\n value: ''\n },\n {\n label: '金额',\n value: 'money'\n },\n {\n label: '百分比',\n value: 'percentage'\n },\n {\n label: '对比',\n value: 'contrast'\n },\n {\n label: '进度条',\n value: 'progress'\n },\n {\n label: '自定义',\n value: 'custom'\n }\n ]\n }\n },\n {\n label: '进度条颜色',\n value: 'progressColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条渐变色',\n value: 'progressGradientColor',\n type: 'color',\n defaultValue: '#1890ff',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条底色',\n value: 'progressBaseColor',\n type: 'color',\n defaultValue: '',\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '进度条线宽度',\n value: 'progressWidth',\n type: 'input-number',\n defaultValue: '14',\n props: {\n suffix: 'px',\n min: 0\n },\n show: {\n match: 'format',\n value: 'progress'\n }\n },\n {\n label: '自定义格式化',\n value: 'customFormatter',\n type: 'input',\n defaultValue: '{value}',\n show: {\n match: 'format',\n value: ['custom']\n }\n }\n ]\n }\n }\n ],\n bordered: {\n label: '边框',\n component: 'switch'\n },\n size: [\n {\n label: '尺寸',\n onlyType: 'table',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '中等',\n value: 'middle'\n },\n {\n label: '小号',\n value: 'small'\n }\n ]\n }\n }\n ],\n allOverflow: {\n label: '表内容超出',\n onlyType: 'table',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '换行',\n value: 'false'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n },\n {\n label: '省略号+title显示',\n value: 'title'\n },\n {\n label: '省略号+tooltip显示',\n value: 'tooltip'\n }\n ]\n }\n },\n hoverRow: {\n onlyType: 'table',\n label: '点击行高亮',\n component: 'switch'\n },\n hoverColor: {\n onlyType: 'table',\n label: 'hover行颜色',\n component: 'color-pick'\n },\n boderList: {\n label: '边框不显示',\n component: 'select',\n onlyType: 'table',\n props: {\n mode: 'multiple',\n options: [\n {\n label: '表格上边框',\n value: 'top'\n },\n {\n label: '表格下边框',\n value: 'bottom'\n },\n {\n label: '表格左边框',\n value: 'left'\n },\n {\n label: '表格右边框',\n value: 'right'\n },\n {\n label: '表格内容边框',\n value: 'middle'\n },\n {\n label: '列按钮边框',\n value: 'button'\n }\n ]\n }\n },\n columnDropEnable: {\n onlyType: 'table',\n label: '列拖拽',\n component: 'switch'\n },\n showTotalBool: {\n onlyType: 'table',\n label: '显示汇总行',\n component: 'switch'\n },\n totalName: {\n onlyType: 'table',\n label: '汇总行名',\n component: 'input'\n },\n expandAll: {\n onlyType: 'table',\n label: '展开所有节点',\n component: 'switch'\n },\n isUseSeq: {\n label: '使用序列',\n component: 'switch'\n },\n centered: {\n label: '居中',\n component: 'switch'\n },\n columnsFixedNum: {\n label: '左固定列数',\n component: 'input-number',\n props: {\n min: 0,\n step: 1\n }\n },\n scrollX: {\n label: '滚动宽度',\n component: 'input-number',\n props: {\n min: 0,\n step: 1\n }\n },\n variableColor: {\n label: '变量颜色',\n component: 'color-pick'\n },\n mode: [\n {\n label: '类型',\n component: 'select',\n onlyType: 'border',\n props: {\n options: [\n // { label: '默认', value: 'only-border' },\n {\n label: '无标题',\n value: 'no-title'\n },\n {\n label: '上标题',\n value: 'top-title'\n },\n {\n label: '左标题',\n value: 'left-title'\n }\n ]\n }\n },\n {\n label: '类型',\n component: 'radio-group',\n onlyType: 'tabs',\n props: {\n options: [\n {\n label: '线条',\n value: 'line'\n },\n {\n label: '卡片',\n value: 'card'\n }\n ]\n }\n },\n {\n label: '类型',\n component: 'select',\n onlyType: 'button',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '主要',\n value: 'primary'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '链接',\n value: 'link'\n },\n {\n label: '文本',\n value: 'text'\n }\n ]\n }\n },\n {\n label: '模式',\n onlyType: 'select',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '单选',\n value: ''\n },\n {\n label: '多选',\n value: 'multiple'\n }\n ]\n }\n }\n ],\n tabColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n activeTabColor: {\n label: '激活颜色',\n component: 'color-pick'\n },\n tabBackgroundImage: {\n label: '背景图',\n component: 'image-pick'\n },\n activeTabBackgroundImage: {\n label: '激活背景图',\n component: 'image-pick'\n },\n tabBarGutter: {\n label: '标签间隔',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n tabFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12\n }\n },\n simple: {\n label: '简单分页',\n component: 'switch'\n },\n pageSizeShow: {\n label: '每页条数',\n component: 'switch'\n },\n sliceCount: {\n label: '截取条数',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n useRanking: {\n label: '使用排行',\n component: 'switch'\n },\n headerBackgroundColor: {\n label: '表头背景',\n component: 'color-pick'\n },\n cellBackgroundColor: {\n label: '单元格背景',\n component: 'color-pick'\n },\n borderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n useBorderModify: {\n label: '边框(四角)',\n component: 'switch'\n },\n useTitle: {\n label: '使用标题',\n component: 'switch'\n },\n paginationPosition: {\n label: '位置',\n component: 'select',\n props: {\n options: [\n {\n label: '上左',\n value: 'topLeft'\n },\n {\n label: '上中',\n value: 'topCenter'\n },\n {\n label: '上右',\n value: 'topRight'\n },\n {\n label: '下左',\n value: 'bottomLeft'\n },\n {\n label: '下中',\n value: 'bottomCenter'\n },\n {\n label: '下右',\n value: 'bottomRight'\n }\n ]\n }\n },\n paginationPageSize: {\n label: '分页数',\n component: 'input-number'\n },\n destroyOnClose: {\n label: '关闭销毁',\n component: 'switch'\n },\n position: [\n {\n label: '位置',\n onlyType: 'modal',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '顶部',\n value: 'top'\n },\n {\n label: '居中',\n value: 'middle'\n },\n {\n label: '底部',\n value: 'bottom'\n }\n ]\n }\n }\n ],\n yAxis: {\n label: '系列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n max: 2,\n format: [\n {\n label: ['左轴', '右轴'],\n type: 'input',\n value: 'axisLabelFormatter',\n props: {\n options: [\n {\n label: '柱状图',\n value: 'bar'\n },\n {\n label: '折线图',\n value: 'line'\n }\n ]\n }\n }\n ]\n }\n },\n seriesTypes: {\n label: '系列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n format: [\n {\n label: '系列',\n type: 'select',\n value: 'type',\n useLabelIndex: true,\n props: {\n options: [\n {\n label: '柱状图',\n value: 'bar'\n },\n {\n label: '折线图',\n value: 'line'\n }\n ]\n }\n },\n {\n label: '对应轴',\n type: 'select',\n value: 'axisIndex',\n props: {\n options: [\n {\n label: '左轴',\n value: 0\n },\n {\n label: '右轴',\n value: 1\n }\n ]\n }\n },\n {\n label: '提示框格式化',\n type: 'input',\n value: 'tooltipFormatter'\n }\n ]\n }\n },\n startTime: {\n label: '开始时间值',\n component: 'time-pick'\n },\n endTime: {\n label: '结束时间值',\n component: 'time-pick'\n },\n limitStartTime: {\n label: '限制开始时间',\n component: 'time-pick'\n },\n limitEndTime: {\n label: '限制结束时间',\n component: 'time-pick'\n },\n strokeColor: {\n label: '完成颜色',\n component: 'color-pick'\n },\n trailColor: {\n label: '未完成颜色',\n component: 'color-pick'\n },\n strokeType: {\n label: '类型',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '环形',\n value: 'circle'\n },\n {\n label: '仪表盘',\n value: 'dashboard'\n },\n {\n label: '直线',\n value: 'line'\n }\n ]\n }\n },\n strokeLinecap: {\n label: '进度条样式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '圆形',\n value: 'round'\n },\n {\n label: '方角',\n value: 'square'\n }\n ]\n }\n },\n strokeWidth: {\n label: '进度条宽度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n strokeTextWidth: {\n label: '文本宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 20\n }\n },\n geoBackgroundImage: {\n label: '填充背景',\n component: 'image-pick'\n },\n geoItemStyleAreaColor: {\n label: '板块颜色',\n component: 'color-pick'\n },\n geoItemStyleBorderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n geoEmphasisLabelColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n geoEmphasisItemStyleAreaColor: {\n label: '板块颜色',\n component: 'color-pick'\n },\n geoEmphasisItemStyleBorderColor: {\n label: '边框颜色',\n component: 'color-pick'\n },\n symbolImage: {\n label: '坐标点图标',\n component: 'image-pick'\n },\n mapJson: {\n label: '上传数据',\n component: 'file-pick'\n },\n barWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0\n }\n },\n columnCount: {\n label: '并行数',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n itemHeight: {\n label: '高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemColSpan: {\n label: '边距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemPadding: {\n label: '内填充',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n itemRowSpan: {\n label: '行距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n geoLabelColor: {\n label: '标签颜色',\n component: 'color-pick'\n },\n geoLabelFontSize: {\n label: '标签大小',\n component: 'input-number',\n props: {\n min: 12,\n max: 100\n }\n },\n geoItemStyleShadowColor: {\n label: '阴影颜色',\n component: 'color-pick'\n },\n geoItemStyleBorderWidth: {\n label: '边框宽度',\n component: 'input-number'\n },\n geoItemStyleShadowBlur: {\n label: '阴影模糊',\n component: 'input-number'\n },\n geoItemStyleShadowOffsetX: {\n label: '阴影水平偏移',\n component: 'input-number'\n },\n geoItemStyleShadowOffsetY: {\n label: '阴影垂直偏移',\n component: 'input-number'\n },\n geoZoom: {\n label: '缩放大小',\n component: 'input-number'\n },\n geoRoam: {\n label: '手动缩放',\n component: 'switch'\n },\n geoCenter: {\n label: '中心位置',\n component: 'input'\n },\n geoBackgroundImageRepeat: {\n label: '背景图片',\n component: 'select',\n props: {\n options: [\n {\n label: '重复',\n value: 'repeat'\n },\n {\n label: '水平重复',\n value: 'repeat-x'\n },\n {\n label: '垂直重复',\n value: 'repeat-y'\n },\n {\n label: '不重复',\n value: 'no-repeat'\n }\n ]\n }\n },\n titleColor: {\n label: '字体颜色',\n component: 'color-pick'\n },\n titleFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n headerFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n geoEmphasisDisabled: {\n label: '禁用',\n component: 'switch'\n },\n gridTop: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridBottom: {\n label: '下侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridLeft: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridRight: {\n label: '右侧距离',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 0,\n max: 100\n }\n },\n gridContainLabel: {\n label: '包含刻度标签',\n component: 'switch'\n },\n geoLabelShow: {\n label: '展示文字',\n component: 'switch'\n },\n toolboxOrient: {\n label: '排版',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '水平',\n value: 'horizontal'\n },\n {\n label: '垂直',\n value: 'vertical'\n }\n ]\n }\n },\n toolboxItemSize: {\n label: '图标大小',\n component: 'input-number'\n },\n toolboxItemGap: {\n label: '图标间距',\n component: 'input-number'\n },\n toolboxLeft: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '居左',\n value: 'left'\n },\n {\n label: '居中',\n value: 'center'\n },\n {\n label: '居右',\n value: 'right'\n }\n ]\n }\n },\n toolboxTop: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '顶部',\n value: 'top'\n },\n {\n label: '居中',\n value: 'middle'\n },\n {\n label: '底部',\n value: 'bottom'\n }\n ]\n }\n },\n toolboxDownloadUrl: {\n label: '下载文件地址',\n component: 'input'\n },\n toolboxInfoText: {\n label: '说明信息内容',\n component: 'input'\n },\n shape: {\n label: '形状',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '角圆',\n value: 'round'\n },\n {\n label: '圆形',\n value: 'circle'\n }\n ]\n }\n },\n danger: {\n label: '危险模式',\n component: 'switch'\n },\n href: {\n label: '链接',\n component: 'textarea',\n show: [\n {\n match: 'linkPage',\n value: ''\n }\n ]\n },\n target: {\n label: '链接方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '当前窗口',\n value: 'self'\n },\n {\n label: '新窗口',\n value: 'blank'\n },\n {\n label: '事件',\n value: 'event'\n }\n ]\n }\n },\n transParams: {\n label: '传递参数',\n component: 'unit-config',\n layout: 'vertical',\n props: {\n indexTip: `【参数名】是跳转链接上携带参数的key值;\n 【参数值】是跳转链接上携带参数的value值。`,\n keyName: '参数名',\n fieldName: '参数值',\n layout: 'vertical'\n }\n },\n borderWidth: {\n label: '边框宽度',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n borderRadius: {\n label: '圆角',\n component: 'input'\n },\n activeKey: {\n label: '激活标签页',\n component: 'input-number'\n },\n isUseAction: {\n label: '使用操作列',\n component: 'switch'\n },\n actionColumnWidth: {\n label: '操作列宽',\n component: 'input-number'\n },\n actionList: {\n label: '操作列',\n component: 'form-group',\n layout: 'vertical',\n props: {\n format: [\n {\n label: '名称',\n value: 'title',\n type: 'input'\n },\n {\n label: '链接地址',\n value: 'href',\n type: 'input'\n },\n {\n label: '链接方式',\n value: 'target',\n type: 'select',\n props: {\n options: [\n {\n label: '本窗口',\n value: 'self'\n },\n {\n label: '新窗口',\n value: 'blank'\n },\n {\n label: '事件',\n value: 'event'\n }\n ]\n }\n },\n {\n label: '颜色',\n value: 'color',\n type: 'color'\n }\n ]\n }\n },\n barBorderRadius: {\n label: '圆角',\n component: 'input'\n },\n isUseHorizontalAxis: {\n label: '横向排列',\n component: 'switch'\n },\n axisInverse: {\n label: '倒叙排列',\n component: 'switch'\n },\n xAxisInverse: {\n label: '图形反转',\n component: 'switch'\n },\n yAxisInverse: {\n label: '图形反转',\n component: 'switch'\n },\n decimalFormat: {\n label: '保留小数',\n component: 'switch'\n },\n variableDefaultValue: {\n label: '变量默认值',\n component: 'input'\n },\n strokeTextShow: {\n label: '显示文本',\n component: 'switch'\n },\n areaStyleOpacity: {\n label: '面积透明度',\n component: 'input-number',\n props: {\n step: 0.1,\n min: 0,\n max: 1\n }\n },\n areaGradientShow: {\n label: '面积渐变',\n component: 'switch'\n },\n areaGradientColor: {\n label: '渐变颜色',\n component: 'color-pick'\n },\n tabHorizontalPadding: {\n label: '内水平边距',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n xAxisLabelWidth: {\n label: '名称宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n xAxisLabelOverflow: {\n label: '名称溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n xAxisLabelRotate: {\n label: '名称旋转',\n component: 'input-number'\n },\n yAxisLabelWidth: {\n label: '名称宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisLabelOverflow: {\n label: '名称溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n yAxisLabelRotate: {\n label: '名称旋转',\n component: 'input-number'\n },\n isStack: {\n label: '是否堆叠',\n component: 'switch',\n effectVal (key, value, updateOptions, graphicConfig) {\n const { leftAxisList = [] } = graphicConfig\n const stackColumns = value ? leftAxisList.map(i => i.label) : []\n updateOptions({ stackColumns })\n }\n },\n stackColumns: {\n label: '堆叠列配置',\n component: 'select',\n props: {\n mode: 'multiple',\n options: (graphicConfig) => {\n const { leftAxisList = [] } = graphicConfig\n return leftAxisList.map(i => ({ label: i.label, value: i.label }))\n }\n },\n effect: {\n hide: {\n props: [\n {\n props: 'isStack',\n value: false,\n rule: '==='\n }\n ]\n }\n }\n },\n clickHighlight: {\n label: '点击高亮',\n component: 'switch'\n },\n labelShow: {\n label: '展示标签',\n component: 'switch'\n },\n isReverse: {\n label: '是否反转',\n component: 'switch'\n },\n link: {\n label: '链接',\n component: 'textarea'\n },\n linkType: {\n onlyType: 'iframe',\n label: '链接类型',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '网页',\n value: 'web'\n },\n {\n label: '报表工程',\n value: 'erd'\n }\n ]\n }\n },\n maxTagCount: {\n label: '显示最大数',\n component: 'input-number'\n },\n tabAlignItems: {\n label: '垂直位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '上',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '下',\n value: 'flex-end'\n }\n ]\n }\n },\n tabJustifyContent: {\n label: '水平位置',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '左',\n value: 'flex-start'\n },\n {\n label: '中',\n value: 'center'\n },\n {\n label: '右',\n value: 'flex-end'\n }\n ]\n }\n },\n tabFlexDirection: {\n label: '布局',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '水平',\n value: 'row'\n },\n {\n label: '垂直',\n value: 'column'\n }\n ]\n }\n },\n filterDropdownHeight: {\n label: '过滤面板高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n stripedShow: {\n label: '斑马线条纹',\n component: 'switch'\n },\n useCurrentTime: {\n label: '使用当前时间',\n component: 'switch'\n },\n interval: {\n label: '时间间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n intervalUnit: {\n label: '时间间隔单位',\n component: 'select',\n props: {\n options: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n operate: {\n label: '操作',\n component: 'input-number',\n props: {\n min: 0,\n prefixValueKey: 'type',\n prefix: [\n {\n label: '加',\n value: 'add'\n },\n {\n label: '减',\n value: 'minus'\n }\n ],\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n updateInterval: {\n label: '更新间隔',\n component: 'input-number',\n props: {\n min: 1,\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '秒',\n value: 'second'\n },\n {\n label: '分',\n value: 'minute'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '天',\n value: 'day'\n }\n ]\n }\n },\n xAxisMinInterval: {\n label: '最小间距',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisMinInterval: {\n label: '最小间距',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n minAngle: {\n label: '最小角度',\n component: 'input-number',\n props: {\n min: 0,\n max: 360\n }\n },\n autoSwitch: {\n label: '自动切换',\n component: 'switch'\n },\n autoSwitchInterval: {\n label: '切换间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n xAxisLabelInterval: {\n label: '标签间隔',\n component: 'input-number',\n props: {\n min: -1\n }\n },\n isUseExport: {\n label: '导出数据',\n component: 'switch'\n },\n autoClearSearchValue: {\n label: '选中清空搜索',\n component: 'switch'\n },\n toolboxLocation: {\n label: '快速定位',\n component: 'switch'\n },\n toolboxDownloadShow: {\n label: '使用数据下载',\n component: 'switch'\n },\n toolboxDataZoomShow: {\n label: '使用放大',\n component: 'switch'\n },\n toolboxInfoShow: {\n label: '使用说明信息',\n component: 'switch'\n },\n multiple: {\n label: '多选模式',\n component: 'switch'\n },\n treeCheckable: {\n label: '复选框模式',\n component: 'switch'\n },\n selectFirstOption: {\n label: '选择首选项',\n component: 'switch'\n },\n gradientColor: {\n label: '渐变颜色',\n component: 'color-pick'\n },\n gradientOffset: {\n label: '渐变度',\n component: 'slider'\n },\n legendItemGap: {\n label: '图例项间隔',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n legendItemWidth: {\n label: '图例图形宽度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n legendItemHeight: {\n label: '图例图形高度',\n component: 'input-number',\n props: {\n min: 1\n }\n },\n showBarBackground: {\n label: '背景色',\n component: 'switch'\n },\n gradientColors: {\n label: '颜色',\n onlyType: 'bar',\n component: 'color-group-pick'\n },\n increaseColor: {\n label: '涨幅颜色 ',\n component: 'color-pick'\n },\n declineColor: {\n label: '跌幅颜色',\n component: 'color-pick'\n },\n legendType: {\n label: '图例类型 ',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '圆形',\n value: 'circle'\n },\n {\n label: '矩形',\n value: 'rect'\n },\n {\n label: '圆角矩形',\n value: 'roundRect'\n },\n {\n label: '三角形',\n value: 'triangle'\n },\n {\n label: '菱形',\n value: 'diamond'\n },\n {\n label: '箭头',\n value: 'arrow'\n }\n ]\n }\n },\n optionType: {\n label: '单选类型',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: 'default'\n },\n {\n label: '框组',\n value: 'button'\n }\n ]\n }\n },\n minusSignShow: {\n label: '涨跌幅负号',\n component: 'switch'\n },\n gradientAngle: {\n label: '渐变角度',\n component: 'input-number',\n props: {\n suffix: 'deg'\n }\n },\n stripedColor: {\n label: '条纹颜色',\n component: 'color-pick'\n },\n axisNameColor: {\n label: '名称颜色',\n component: 'color-pick'\n },\n shadowColor: {\n label: '阴影颜色',\n component: 'color-pick'\n },\n shadowBlur: {\n label: '阴影模糊度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n shadowOffsetX: {\n label: '阴影偏移(X)',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n shadowOffsetY: {\n label: '阴影偏移(Y)',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n borderStyle: {\n label: '边框线类型',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '实线',\n value: 'solid'\n },\n {\n label: '虚线',\n value: 'dashed'\n },\n {\n label: '点状',\n value: 'dotted'\n }\n ]\n }\n },\n unitText: {\n label: '文本',\n component: 'input'\n },\n unitFontSize: {\n label: '字号',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 12,\n max: 100\n }\n },\n unitFontWeight: {\n label: '字体粗细',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '细',\n value: 100\n },\n {\n label: '正常',\n value: 400\n },\n {\n label: '粗',\n value: 700\n }\n ],\n isTransformNumber: true\n }\n },\n unitColor: {\n label: '颜色',\n component: 'color-pick'\n },\n unitTop: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: '%'\n }\n },\n unitLeft: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: '%'\n }\n },\n legendFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n titleMode: {\n label: '标题背景',\n component: 'select',\n props: {\n options: [\n {\n label: '类型一',\n value: 'type-1'\n },\n {\n label: '类型二',\n value: 'type-2'\n }\n ]\n }\n },\n legendFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n valueType: {\n label: '传值类型',\n component: 'select',\n props: {\n options: [\n {\n label: '值',\n value: 'value'\n },\n {\n label: '名称',\n value: 'label'\n }\n ]\n }\n },\n isGroupTable: {\n label: '分组表格',\n component: 'switch'\n },\n xAxisLabelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n yAxisLabelFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n tooltipRequestData: {\n label: '配置请求',\n component: 'tooltip-request'\n },\n tooltipBackgroundColor: {\n label: '背景颜色',\n component: 'color-pick'\n },\n seqWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n min: 0,\n max: 100,\n suffix: '%'\n }\n },\n isAllowClear: {\n label: '支持清除',\n component: 'switch'\n },\n isSummaryFixed: {\n label: '固定小计行',\n component: 'switch'\n },\n labelWidth: {\n label: '标签宽度',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n labelOverflow: {\n label: '标签溢出',\n component: 'radio-group',\n props: {\n optionType: 'button',\n options: [\n {\n label: '无',\n value: 'none'\n },\n {\n label: '换行',\n value: 'break'\n },\n {\n label: '省略号',\n value: 'truncate'\n }\n ]\n }\n },\n isPageBottom: {\n label: '固定在底部',\n component: 'switch'\n },\n optionFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 12,\n suffix: 'px'\n }\n },\n isShowTotal: {\n label: '显示总数',\n component: 'switch'\n },\n graphicType: {\n label: '图表类型',\n component: 'select',\n props: {\n options: [\n {\n label: '饼图',\n value: 'ecanPie'\n },\n {\n label: '折线图',\n value: 'ecanLine'\n },\n {\n label: '柱状图',\n value: 'ecanBar'\n },\n {\n label: '散点图',\n value: 'ecanScatter'\n },\n {\n label: '组合图表',\n value: 'ecanComboGraph'\n },\n {\n label: '自定义图表',\n value: 'ecanCustomGraph'\n },\n {\n label: '雷达图',\n value: 'ecanRadar'\n }\n ],\n graphic: true\n }\n },\n isAllowSpanYear: {\n label: '允许跨年',\n component: 'switch'\n },\n tabType: {\n label: '类型',\n component: 'select',\n props: {\n options: [\n {\n label: '标签',\n value: 'tabs'\n },\n {\n label: '下拉框',\n value: 'select'\n }\n ]\n }\n },\n targetRule: {\n label: '规则',\n component: 'select',\n props: {\n options: [\n {\n label: '等于',\n value: 'equal'\n },\n {\n label: '大于',\n value: 'greater'\n },\n {\n label: '大于等于',\n value: 'greater_equal'\n },\n {\n label: '小于',\n value: 'less'\n },\n {\n label: '小于等于',\n value: 'less_equal'\n }\n ]\n }\n },\n targetValue: {\n label: '值',\n component: 'input'\n },\n notExpectColor: {\n label: '颜色',\n component: 'color-pick'\n },\n buttonBackgroundColor: {\n label: '背景色',\n component: 'color-pick'\n },\n tabWidth: {\n label: '标签宽度',\n component: 'input-number',\n props: {\n min: 50,\n suffix: 'px'\n }\n },\n headerFontColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n cellFontColor: {\n label: '文字颜色',\n component: 'color-pick'\n },\n isTransparent: {\n label: '透明色',\n component: 'switch'\n },\n hideTableHeader: {\n label: '隐藏',\n component: 'switch'\n },\n closeBtnColor: {\n label: '关闭按钮颜色',\n component: 'color-pick'\n },\n paginationColor: {\n label: '页码颜色',\n component: 'color-pick'\n },\n paginationBgColor: {\n label: '页码背景色',\n component: 'color-pick'\n },\n activePaginationColor: {\n label: '当前页颜色',\n component: 'color-pick'\n },\n activePaginationBgColor: {\n label: '当前页背景色',\n component: 'color-pick'\n },\n hoverBackgroundColor: {\n label: 'hover行颜色',\n component: 'color-pick'\n },\n tooltipPosition: {\n label: '位置',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '左侧',\n value: 'left'\n },\n {\n label: '右侧',\n value: 'right'\n }\n ]\n }\n },\n tabTextAlign: {\n label: '对齐方式',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '居中',\n value: 'center'\n }\n ]\n }\n },\n seqName: {\n label: '名称',\n component: 'input'\n },\n seqIcon: {\n label: '显示图标',\n component: 'switch'\n },\n isShowCloseBtn: {\n label: '显示关闭按钮',\n component: 'switch'\n },\n markLineType: {\n label: '标线类型',\n component: 'select',\n props: {\n options: [\n {\n label: '平均值',\n value: 'average'\n },\n {\n label: '最小值',\n value: 'min'\n },\n {\n label: '最大值',\n value: 'max'\n },\n {\n label: '中位数',\n value: 'median'\n }\n ]\n }\n },\n seqFontSize: {\n label: '字体大小',\n component: 'input-number',\n props: {\n min: 1,\n suffix: 'px'\n }\n },\n isAutoScroll: {\n label: '循环滚动',\n component: 'switch'\n },\n scrollSpeed: {\n label: '滚动速度',\n component: 'input-number',\n props: {\n min: 0.1\n }\n },\n isHoverStyle: {\n label: '悬浮效果',\n component: 'switch',\n show: [\n {\n match: 'isAnimation',\n value: false\n }\n ]\n },\n isAnimation: {\n label: 'JSON动画',\n component: 'switch'\n },\n animationSource: {\n label: '资源文件',\n component: 'zip-pick',\n style: 'width: auto;',\n show: [\n {\n match: 'isAnimation',\n value: true\n }\n ]\n },\n subTotalColumn: {\n label: '放置列',\n component: 'select',\n props: {\n options: [],\n dynamics: true\n }\n },\n subTotalName: {\n label: '名称',\n component: 'input'\n },\n isSortByFront: {\n label: '是否前端排序',\n component: 'switch'\n },\n legendWidth: {\n label: '区域宽度',\n component: 'input-number'\n },\n legendHeight: {\n label: '区域高度',\n component: 'input-number'\n },\n legendTextWidth: {\n label: '文字宽度',\n component: 'input-number'\n },\n legendScroll: {\n label: '分页',\n component: 'switch'\n },\n boxShadow: {\n label: '阴影',\n component: 'textarea'\n },\n limitInterval: {\n label: '限制范围',\n component: 'input-number',\n props: {\n min: 0,\n suffixValueKey: 'mode',\n suffix: [\n {\n label: '年',\n value: 'year'\n },\n {\n label: '月',\n value: 'month'\n },\n {\n label: '周',\n value: 'week'\n },\n {\n label: '日',\n value: 'day'\n },\n {\n label: '时',\n value: 'hour'\n },\n {\n label: '分',\n value: 'minute'\n }\n ]\n }\n },\n xAxisName: {\n label: '坐标轴名称',\n component: 'input'\n },\n yAxisName: {\n label: '坐标轴名称',\n component: 'input'\n },\n yAxisLeftName: {\n label: '坐标轴名称-左轴',\n component: 'input'\n },\n yAxisRightName: {\n label: '坐标轴名称-右轴',\n component: 'input'\n },\n seqIconWidth: {\n label: '图标宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n seqIconHeight: {\n label: '图标高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n seqIconOffsetX: {\n label: '横向偏移',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n seqIconOffsetY: {\n label: '纵向偏移',\n component: 'input-number',\n props: {\n suffix: 'px'\n }\n },\n seqIndexFormatter: {\n label: '格式化',\n component: 'textarea'\n },\n unitInterval: {\n label: '单位间隔',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n keyFieldMap: {\n label: '数据配置',\n component: 'unit-config',\n layout: 'vertical',\n onlyType: 'circulate',\n props: {\n indexTip: `【别名】是循环列表内部要循环的组件别名;\n 【字段】是接口返回的数据字段;`,\n keyName: '别名',\n fieldName: '字段'\n }\n },\n itemWidth: {\n label: '宽度',\n component: 'input-number',\n props: {\n suffix: '%',\n min: 1,\n max: 100\n }\n },\n startValue: {\n label: '开始值',\n component: 'textarea'\n },\n endValue: {\n label: '结束值',\n component: 'textarea'\n },\n colNum: {\n label: '列数量',\n component: 'input-number'\n },\n digits: {\n label: '位数',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n unitWidth: {\n label: '单位宽度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 10\n }\n },\n unitHeight: {\n label: '单位高度',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 10\n }\n },\n counterBackgroundImage: {\n label: '背景图',\n component: 'image-pick'\n },\n showEllipsis: {\n label: '超出省略号',\n component: 'switch'\n },\n exceedConfig: {\n label: '内容超出时',\n component: 'select',\n props: {\n options: [\n {\n label: '默认',\n value: ''\n },\n {\n label: '换行',\n value: 'wrap'\n },\n {\n label: '省略号',\n value: 'ellipsis'\n }\n ]\n }\n },\n xAxisMaxValue: {\n label: '最大值',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n yAxisMaxValue: {\n label: '最大值',\n component: 'input-number',\n props: {\n min: 0\n }\n },\n scrollDirection: {\n label: '滚动方向',\n component: 'radio-group',\n props: {\n options: [\n {\n label: '竖直',\n value: 'vertical'\n },\n {\n label: '水平',\n value: 'horizontal'\n }\n ]\n }\n },\n hideTabs: {\n label: '隐藏标签',\n component: 'switch'\n },\n jumpType: {\n label: '跳转类型',\n component: 'select',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n options: [\n {\n label: '当前项目页面',\n value: 'page'\n },\n {\n label: '外部链接页面',\n value: 'link'\n }\n ]\n }\n },\n jumpTime: {\n label: '定时',\n component: 'input-number',\n updateMode: 'page',\n onlyType: 'page',\n props: {\n min: 0,\n suffix: [\n {\n label: '时',\n value: 'hours'\n },\n {\n label: '分',\n value: 'minute'\n },\n {\n label: '秒',\n value: 'seconds'\n }\n ]\n }\n },\n jumpPage: {\n label: '项目页面',\n component: 'page-pick',\n updateMode: 'page',\n onlyType: 'page',\n show: [\n {\n match: 'jumpType',\n value: 'page'\n }\n ]\n },\n jumpLink: {\n label: '链接',\n component: 'textarea',\n updateMode: 'page',\n onlyType: 'page',\n show: [\n {\n match: 'jumpType',\n value: 'link'\n }\n ]\n },\n gridTopPx: {\n label: '上侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridBottomPx: {\n label: '下侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridLeftPx: {\n label: '左侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n gridRightPx: {\n label: '右侧距离',\n component: 'input-number',\n props: {\n suffix: 'px',\n min: 0\n }\n },\n showAnimation: {\n label: '动画',\n component: 'switch',\n style: 'width: auto;',\n props: {\n tooltip: '文本组件的值会以动画的形式发生变化(只有值为数字类型的时候才生效)'\n }\n },\n showXAxisLineArrow: {\n label: '显示箭头',\n component: 'switch'\n },\n showYAxisLineArrow: {\n label: '显示箭头',\n component: 'switch'\n },\n xAxisLineInverse: {\n label: '倒序',\n component: 'switch'\n },\n yAxisLineInverse: {\n label: '倒序',\n component: 'switch'\n },\n xAxisMarkLineValue: {\n label: 'x轴标线',\n component: 'mark-link-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `【值】代表标线在x轴上的刻度。固定的值直接输入数字;动态的值可以输入表达式,系统提供了两个变量:max和min,\n max表示x轴刻度最大值,min表示x轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量,例如添加一根位于x轴正中间的标线可以这么写:({max} + {min}) / 2`\n }\n },\n yAxisMarkLineValue: {\n label: 'y轴标线',\n component: 'mark-link-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `【值】代表标线在y轴上的刻度。固定的值直接输入数字;动态的值可以输入表达式,系统提供了两个变量:max和min,\n max表示y轴刻度最大值,min表示y轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量,例如添加一根位于y轴正中间的标线可以这么写:({max} + {min}) / 2`\n }\n },\n axisMarkArea: {\n label: '标域设置',\n component: 'mark-area-config',\n layout: 'vertical',\n onlyType: 'scatter',\n props: {\n indexTip: `每个标域需要配置两个坐标点才能确定区域,所以需要填写两个坐标的x和y的值,即(x1, y1)、(x2, y2),这两个点需要配置为区域的对角两个点才能\n 正确的标出区域。如果不设置标域颜色将会使用图表默认颜色。系统提供四个变量:xMax、xMin、yMax、yMin,xMax表示x轴刻度最大值,xMin表示x轴刻度最小值,\n yMax表示y轴刻度最大值,yMin表示y轴刻度最小值。使用变量的时候需要用“{}”符号包裹变量`\n }\n }\n}\n","<template>\n <a-input\n :value=\"value\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n v-focus\n />\n</template>\n\n<script lang=\"ts\">\nimport { Input as AInput } from 'ant-design-vue'\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'Input',\n directives: {\n focus\n },\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n AInput\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onInputChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onInputChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input\n :value=\"value\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n v-focus\n />\n</template>\n\n<script lang=\"ts\">\nimport { Input as AInput } from 'ant-design-vue'\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'Input',\n directives: {\n focus\n },\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n AInput\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onInputChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onInputChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input-number\n :value=\"inputValue\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :parser=\"parser\"\n :addon-before=\"Array.isArray(prefix) ? undefined : prefix\"\n :addon-after=\"Array.isArray(suffix) ? undefined : prefix\"\n @change=\"onInputChange\"\n @blur=\"onInputBlur\"\n >\n <template #addonBefore v-if=\"Array.isArray(prefix) && prefix.length > 0\">\n <a-select v-model:value=\"prefixValue\" @change=\"onPrefixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in prefix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n <template #addonAfter v-if=\"Array.isArray(suffix) && suffix.length > 0\">\n <a-select v-model:value=\"suffixValue\" @change=\"onSuffixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in suffix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, PropType } from 'vue'\nimport { InputNumber as AInputNumber, Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'InputNumber',\n props: {\n value: {\n type: [String, Number, Object],\n default: ''\n },\n valueKey: {\n type: String,\n default: 'value'\n },\n prefixValueKey: {\n type: String,\n default: 'prefix'\n },\n prefix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n suffixValueKey: {\n type: String,\n default: 'suffix'\n },\n suffix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n min: {\n type: Number,\n default: -Infinity\n },\n max: {\n type: Number,\n default: Infinity\n },\n step: {\n type: [String, Number],\n default: 1\n },\n useBlurEvent: {\n type: Boolean,\n default: true\n }\n },\n components: {\n AInputNumber,\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const inputValue = computed(() => {\n const value = props.value\n if (typeof value === 'string') {\n return parseFloat(value)\n } else if (typeof value === 'object' && value != null) {\n return value[props.valueKey]\n }\n return value\n })\n const getPrefixOrSuffixValue = (type: 'prefix' | 'suffix') => {\n if (props.value != null && typeof props.value === 'object') {\n return props.value[props[`${type}ValueKey`]]\n } else if (Array.isArray(props[type])) {\n return props[type][0] && (props[type][0] as any).value\n }\n return null\n }\n const prefixValue = ref(getPrefixOrSuffixValue('prefix'))\n const suffixValue = ref(getPrefixOrSuffixValue('suffix'))\n const onInputChange = (value: string) => {\n const suffix = props.suffix\n // 如果后缀不传\n if (Array.isArray(props.prefix) || Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: value,\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n } else if (suffix === '' || value == null) {\n emit('change', value)\n } else {\n emit('change', `${value}${suffix}`)\n }\n }\n\n const onPrefixChange = () => {\n if (Array.isArray(props.prefix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const onSuffixChange = () => {\n if (Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const parser = (value: string) => {\n if (typeof props.suffix === 'string') {\n return value.replace(props.suffix, '')\n } else if (\n Array.isArray(props.suffix) &&\n props.value != null &&\n typeof props.value === 'object'\n ) {\n return value.replace(props.value[props.suffixValueKey], '')\n }\n return value\n }\n const onInputBlur = () => {\n if (props.useBlurEvent) {\n emit('change', null, false)\n }\n }\n return {\n inputValue,\n onInputChange,\n parser,\n onInputBlur,\n prefixValue,\n suffixValue,\n onPrefixChange,\n onSuffixChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-input-number\n :value=\"inputValue\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :parser=\"parser\"\n :addon-before=\"Array.isArray(prefix) ? undefined : prefix\"\n :addon-after=\"Array.isArray(suffix) ? undefined : prefix\"\n @change=\"onInputChange\"\n @blur=\"onInputBlur\"\n >\n <template #addonBefore v-if=\"Array.isArray(prefix) && prefix.length > 0\">\n <a-select v-model:value=\"prefixValue\" @change=\"onPrefixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in prefix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n <template #addonAfter v-if=\"Array.isArray(suffix) && suffix.length > 0\">\n <a-select v-model:value=\"suffixValue\" @change=\"onSuffixChange\">\n <a-select-option\n v-for=\"({ label, value }, index) in suffix\"\n :key=\"index\"\n :value=\"value\"\n >\n {{ label }}\n </a-select-option>\n </a-select>\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, unref, PropType } from 'vue'\nimport { InputNumber as AInputNumber, Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'InputNumber',\n props: {\n value: {\n type: [String, Number, Object],\n default: ''\n },\n valueKey: {\n type: String,\n default: 'value'\n },\n prefixValueKey: {\n type: String,\n default: 'prefix'\n },\n prefix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n suffixValueKey: {\n type: String,\n default: 'suffix'\n },\n suffix: {\n type: [String, Array] as PropType<any>,\n default: ''\n },\n min: {\n type: Number,\n default: -Infinity\n },\n max: {\n type: Number,\n default: Infinity\n },\n step: {\n type: [String, Number],\n default: 1\n },\n useBlurEvent: {\n type: Boolean,\n default: true\n }\n },\n components: {\n AInputNumber,\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const inputValue = computed(() => {\n const value = props.value\n if (typeof value === 'string') {\n return parseFloat(value)\n } else if (typeof value === 'object' && value != null) {\n return value[props.valueKey]\n }\n return value\n })\n const getPrefixOrSuffixValue = (type: 'prefix' | 'suffix') => {\n if (props.value != null && typeof props.value === 'object') {\n return props.value[props[`${type}ValueKey`]]\n } else if (Array.isArray(props[type])) {\n return props[type][0] && (props[type][0] as any).value\n }\n return null\n }\n const prefixValue = ref(getPrefixOrSuffixValue('prefix'))\n const suffixValue = ref(getPrefixOrSuffixValue('suffix'))\n const onInputChange = (value: string) => {\n const suffix = props.suffix\n // 如果后缀不传\n if (Array.isArray(props.prefix) || Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: value,\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n } else if (suffix === '' || value == null) {\n emit('change', value)\n } else {\n emit('change', `${value}${suffix}`)\n }\n }\n\n const onPrefixChange = () => {\n if (Array.isArray(props.prefix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const onSuffixChange = () => {\n if (Array.isArray(props.suffix)) {\n emit('change', {\n [props.valueKey]: unref(inputValue),\n [props.prefixValueKey]: unref(prefixValue),\n [props.suffixValueKey]: unref(suffixValue)\n })\n }\n }\n\n const parser = (value: string) => {\n if (typeof props.suffix === 'string') {\n return value.replace(props.suffix, '')\n } else if (\n Array.isArray(props.suffix) &&\n props.value != null &&\n typeof props.value === 'object'\n ) {\n return value.replace(props.value[props.suffixValueKey], '')\n }\n return value\n }\n const onInputBlur = () => {\n if (props.useBlurEvent) {\n emit('change', null, false)\n }\n }\n return {\n inputValue,\n onInputChange,\n parser,\n onInputBlur,\n prefixValue,\n suffixValue,\n onPrefixChange,\n onSuffixChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-radio-group\n :value=\"value\"\n :optionType=\"optionType\"\n @change=\"onRadioChange\"\n >\n <a-radio-button\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-radio-button>\n </a-radio-group>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\nimport { RadioGroup as ARadioGroup, RadioButton as ARadioButton } from 'ant-design-vue'\nexport default defineComponent({\n name: 'RadioGroup',\n props: {\n value: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n default: () => []\n },\n optionType: {\n type: String,\n default: 'default'\n },\n size: {\n type: String,\n default: 'default'\n }\n },\n components: {\n ARadioGroup,\n ARadioButton\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onRadioChange = (e) => {\n emit('change', e.target.value)\n }\n return {\n onRadioChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-select\n :value=\"value\"\n @change=\"onSelectChange\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport { Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Select',\n props: {\n value: {\n type: [String, Number, Array<String>, Array<Number>],\n default: ''\n },\n options: {\n type: Array as PropType<any>,\n default: () => []\n },\n customOption: {\n type: Function\n }\n },\n components: {\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onSelectChange = (value: string | number) => {\n emit('change', value)\n }\n return {\n onSelectChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-select\n :value=\"value\"\n @change=\"onSelectChange\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue'\nimport { Select as ASelect, SelectOption as ASelectOption } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Select',\n props: {\n value: {\n type: [String, Number, Array<String>, Array<Number>],\n default: ''\n },\n options: {\n type: Array as PropType<any>,\n default: () => []\n },\n customOption: {\n type: Function\n }\n },\n components: {\n ASelect,\n ASelectOption\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onSelectChange = (value: string | number) => {\n emit('change', value)\n }\n return {\n onSelectChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <div :style=\"{ width: `${width}px` }\">\n <a-switch :disabled=\"disabled\" :checked=\"value\" @change=\"onSwitchChange\"/>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\nimport { Switch as ASwitch } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Switch',\n props: {\n value: {\n type: Boolean,\n default: false\n },\n width: {\n type: [String, Number],\n default: 150\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ASwitch\n },\n emit: ['change'],\n setup (props, { emit }) {\n const onSwitchChange = (value) => {\n emit('change', value)\n }\n return {\n onSwitchChange\n }\n }\n})\n</script>\n\n<style scoped></style>\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import{defineComponent as e,computed as t,openBlock as r,createElementBlock as n,normalizeStyle as o,withModifiers as a,createElementVNode as i,pushScopeId as l,popScopeId as c,ref as u,onMounted as s,watch as f,toDisplayString as d,withKeys as p,inject as h,unref as v,resolveComponent as m,Fragment as g,renderList as y,createBlock as b,createVNode as w,createCommentVNode as x,nextTick as S,onBeforeUnmount as k,provide as C,onUnmounted as O,toRaw as I,Teleport as A,Transition as P,withCtx as j}from\"vue\";import{createPopper as _}from\"@popperjs/core\";function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function E(e,t){if(e){if(\"string\"==typeof e)return N(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?N(e,t):void 0}}function F(e){return function(e){if(Array.isArray(e))return N(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||E(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function L(e){return L=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},L(e)}function z(e,t,r,n,o,a,i){try{var l=e[a](i),c=l.value}catch(e){return void r(e)}l.done?t(c):Promise.resolve(c).then(n,o)}function M(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){z(a,n,o,i,l,\"next\",e)}function l(e){z(a,n,o,i,l,\"throw\",e)}i(void 0)}))}}var R={exports:{}},B={exports:{}};!function(e){function t(r){return e.exports=t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}(B),function(e){var t=B.exports.default;function r(){e.exports=r=function(){return o},e.exports.__esModule=!0,e.exports.default=e.exports;var n,o={},a=Object.prototype,i=a.hasOwnProperty,l=Object.defineProperty||function(e,t,r){e[t]=r.value},c=\"function\"==typeof Symbol?Symbol:{},u=c.iterator||\"@@iterator\",s=c.asyncIterator||\"@@asyncIterator\",f=c.toStringTag||\"@@toStringTag\";function d(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},\"\")}catch(n){d=function(e,t,r){return e[t]=r}}function p(e,t,r,n){var o=t&&t.prototype instanceof w?t:w,a=Object.create(o.prototype),i=new F(n||[]);return l(a,\"_invoke\",{value:j(e,r,i)}),a}function h(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}o.wrap=p;var v=\"suspendedStart\",m=\"suspendedYield\",g=\"executing\",y=\"completed\",b={};function w(){}function x(){}function S(){}var k={};d(k,u,(function(){return this}));var C=Object.getPrototypeOf,O=C&&C(C(L([])));O&&O!==a&&i.call(O,u)&&(k=O);var I=S.prototype=w.prototype=Object.create(k);function A(e){[\"next\",\"throw\",\"return\"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function P(e,r){function n(o,a,l,c){var u=h(e[o],e,a);if(\"throw\"!==u.type){var s=u.arg,f=s.value;return f&&\"object\"==t(f)&&i.call(f,\"__await\")?r.resolve(f.__await).then((function(e){n(\"next\",e,l,c)}),(function(e){n(\"throw\",e,l,c)})):r.resolve(f).then((function(e){s.value=e,l(s)}),(function(e){return n(\"throw\",e,l,c)}))}c(u.arg)}var o;l(this,\"_invoke\",{value:function(e,t){function a(){return new r((function(r,o){n(e,t,r,o)}))}return o=o?o.then(a,a):a()}})}function j(e,t,r){var o=v;return function(a,i){if(o===g)throw new Error(\"Generator is already running\");if(o===y){if(\"throw\"===a)throw i;return{value:n,done:!0}}for(r.method=a,r.arg=i;;){var l=r.delegate;if(l){var c=_(l,r);if(c){if(c===b)continue;return c}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(o===v)throw o=y,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);o=g;var u=h(e,t,r);if(\"normal\"===u.type){if(o=r.done?y:m,u.arg===b)continue;return{value:u.arg,done:r.done}}\"throw\"===u.type&&(o=y,r.method=\"throw\",r.arg=u.arg)}}}function _(e,t){var r=t.method,o=e.iterator[r];if(o===n)return t.delegate=null,\"throw\"===r&&e.iterator.return&&(t.method=\"return\",t.arg=n,_(e,t),\"throw\"===t.method)||\"return\"!==r&&(t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a '\"+r+\"' method\")),b;var a=h(o,e.iterator,t.arg);if(\"throw\"===a.type)return t.method=\"throw\",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=n),t.delegate=null,b):i:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,b)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function F(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(N,this),this.reset(!0)}function L(e){if(e||\"\"===e){var r=e[u];if(r)return r.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function t(){for(;++o<e.length;)if(i.call(e,o))return t.value=e[o],t.done=!1,t;return t.value=n,t.done=!0,t};return a.next=a}}throw new TypeError(t(e)+\" is not iterable\")}return x.prototype=S,l(I,\"constructor\",{value:S,configurable:!0}),l(S,\"constructor\",{value:x,configurable:!0}),x.displayName=d(S,f,\"GeneratorFunction\"),o.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===x||\"GeneratorFunction\"===(t.displayName||t.name))},o.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,d(e,f,\"GeneratorFunction\")),e.prototype=Object.create(I),e},o.awrap=function(e){return{__await:e}},A(P.prototype),d(P.prototype,s,(function(){return this})),o.AsyncIterator=P,o.async=function(e,t,r,n,a){void 0===a&&(a=Promise);var i=new P(p(e,t,r,n),a);return o.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(I),d(I,f,\"Generator\"),d(I,u,(function(){return this})),d(I,\"toString\",(function(){return\"[object Generator]\"})),o.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},o.values=L,F.prototype={constructor:F,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=n,this.tryEntries.forEach(E),!e)for(var t in this)\"t\"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,o){return l.type=\"throw\",l.arg=e,t.next=r,o&&(t.method=\"next\",t.arg=n),!!o}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],l=a.completion;if(\"root\"===a.tryLoc)return r(\"end\");if(a.tryLoc<=this.prev){var c=i.call(a,\"catchLoc\"),u=i.call(a,\"finallyLoc\");if(c&&u){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,\"finallyLoc\")&&this.prev<n.finallyLoc){var o=n;break}}o&&(\"break\"===e||\"continue\"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method=\"next\",this.next=o.finallyLoc,b):this.complete(a)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),b},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),b}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;E(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,r){return this.delegate={iterator:L(e),resultName:t,nextLoc:r},\"next\"===this.method&&(this.arg=n),b}},o}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports}(R);var D=R.exports(),T=D;try{regeneratorRuntime=D}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=D:Function(\"r\",\"regeneratorRuntime = r\")(D)}function H(e){var t=function(e,t){if(\"object\"!==L(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||\"default\");if(\"object\"!==L(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===L(t)?t:String(t)}function G(e,t,r){return(t=H(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var $=e({name:\"Saturation\",props:{size:{type:Number,default:160},hue:{type:Number,default:0},saturation:{type:Number,default:0},value:{type:Number,default:0}},emits:[\"change\"],setup:function(e,r){var n=r.emit,o=t((function(){return{width:\"\".concat(e.size,\"px\"),height:\"\".concat(e.size,\"px\"),background:\"hsl(\".concat(e.hue,\", 100%, 50%)\")}}));return{saturationStyle:o,sliderStyle:t((function(){return{top:\"\".concat((100-e.value)/100*e.size-5,\"px\"),left:\"\".concat(e.saturation*e.size/100-5,\"px\"),width:\"\".concat(10,\"px\"),height:\"\".concat(10,\"px\")}})),onSelect:function(t){var r=t.target.getBoundingClientRect(),o=r.left,a=r.top,i=function(t){var r=t.clientX,i=t.clientY,l=r-o,c=i-a;l<0&&(l=0),c<0&&(c=0),l>e.size&&(l=e.size),c>e.size&&(c=e.size);var u=l/e.size*100,s=100-c/e.size*100;n(\"change\",u,s)};i(t),document.addEventListener(\"mousemove\",i),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",i),document.removeEventListener(\"mouseup\",e)}))}}}}),V=function(e){return l(\"data-v-24517fec\"),e=e(),c(),e},Y=V((function(){return i(\"div\",{class:\"saturation-white\"},null,-1)})),J=V((function(){return i(\"div\",{class:\"saturation-black\"},null,-1)}));function W(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&\"undefined\"!=typeof document){var n=document.head||document.getElementsByTagName(\"head\")[0],o=document.createElement(\"style\");o.type=\"text/css\",\"top\"===r&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}W(\".saturation[data-v-24517fec]{position:relative}.saturation-black[data-v-24517fec],.saturation-white[data-v-24517fec]{cursor:pointer;height:100%;left:0;position:absolute;top:0;width:100%}.saturation-white[data-v-24517fec]{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.saturation-black[data-v-24517fec]{background:linear-gradient(0deg,#000,transparent)}.slider[data-v-24517fec]{border:1px solid #fff;border-radius:50%;box-shadow:0 0 1px 1px rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;top:0;z-index:1}\"),$.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"saturation\",style:o(e.saturationStyle),onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[Y,J,i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],36)},$.__scopeId=\"data-v-24517fec\",$.__file=\"src/picker/Saturation.vue\";var X=e({name:\"Hue\",props:{width:{type:Number,default:15},height:{type:Number,default:160},hue:{type:Number,default:0}},emits:[\"change\"],setup:function(e,r){var n=r.emit,o=t((function(){return{top:\"\".concat((1-e.hue/360)*e.height-2,\"px\"),height:\"\".concat(4,\"px\")}})),a=u();s((function(){!function(){a.value.width=e.width,a.value.height=e.height;var t=a.value.getContext(\"2d\"),r=t.createLinearGradient(0,0,0,e.height);r.addColorStop(0,\"#FF0000\"),r.addColorStop(.17,\"#FF00FF\"),r.addColorStop(.34,\"#0000FF\"),r.addColorStop(.51,\"#00FFFF\"),r.addColorStop(.68,\"#00FF00\"),r.addColorStop(.17*5,\"#FFFF00\"),r.addColorStop(1,\"#FF0000\"),t.fillStyle=r,t.fillRect(0,0,e.width,e.height)}()}));return{canvas:a,sliderStyle:o,onSelect:function(t){var r=t.target.getBoundingClientRect().top,o=function(t){var o=t.clientY-r;o<0&&(o=0),o>e.height&&(o=e.height);var a=-100*o/e.height+100;n(\"change\",360*a/100)};o(t),document.addEventListener(\"mousemove\",o),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",o),document.removeEventListener(\"mouseup\",e)}))}}}}),q={ref:\"canvas\"};W(\".hue[data-v-78b9f4f0]{position:relative}.slider[data-v-78b9f4f0]{background:#fff;box-shadow:0 0 1px 0 rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;width:100%;z-index:1}\"),X.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"hue\",onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[i(\"canvas\",q,null,512),i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],32)},X.__scopeId=\"data-v-78b9f4f0\",X.__file=\"src/picker/Hue.vue\";var U=e({name:\"Alpha\",props:{width:{type:Number,default:15},height:{type:Number,default:160},color:{type:String,default:\"#000000\"},alpha:{type:Number,default:1}},setup:function(e,r){var n=r.emit,o=t((function(){return{top:\"\".concat(e.alpha*e.height-2,\"px\"),height:\"\".concat(4,\"px\")}})),a=u(),i=function(){var t=a.value.getContext(\"2d\");a.value.width=e.width,a.value.height=e.height;var r=function(e){var t=document.createElement(\"canvas\"),r=t.getContext(\"2d\"),n=2*e;return t.width=n,t.height=n,r.fillStyle=\"#ffffff\",r.fillRect(0,0,n,n),r.fillStyle=\"#ccd5db\",r.fillRect(0,0,e,e),r.fillRect(e,e,e,e),t}(5);t.fillStyle=t.createPattern(r,\"repeat\"),t.fillRect(0,0,e.width,e.height);var n=t.createLinearGradient(0,0,0,e.height);n.addColorStop(.01,\"rgba(255,255,255,0)\"),n.addColorStop(.99,e.color),t.fillStyle=n,t.fillRect(0,0,e.width,e.height)};f((function(){return e.color}),(function(){i()})),s((function(){i()}));return{canvas:a,sliderStyle:o,onSelect:function(t){var r=t.target.getBoundingClientRect().top,o=function(t){var o=t.clientY-r;o<0&&(o=0),o>e.height&&(o=e.height);var a=parseFloat((o/e.height).toFixed(2));n(\"change\",a)};o(t),document.addEventListener(\"mousemove\",o),document.addEventListener(\"mouseup\",(function e(){document.removeEventListener(\"mousemove\",o),document.removeEventListener(\"mouseup\",e)}))}}}}),K={ref:\"canvas\"};W(\".alpha[data-v-24dc9656]{position:relative}.slider[data-v-24dc9656]{background:#fff;box-shadow:0 0 1px 0 rgba(0,0,0,.3);left:0;pointer-events:none;position:absolute;width:100%;z-index:1}\"),U.render=function(e,t,l,c,u,s){return r(),n(\"div\",{class:\"alpha\",onMousedown:t[0]||(t[0]=a((function(){return e.onSelect&&e.onSelect.apply(e,arguments)}),[\"prevent\",\"stop\"]))},[i(\"canvas\",K,null,512),i(\"div\",{class:\"slider\",style:o(e.sliderStyle)},null,4)],32)},U.__scopeId=\"data-v-24dc9656\",U.__file=\"src/picker/Alpha.vue\";var Q=e({name:\"Input\",props:{label:{type:String,default:\"RGBA\"},value:{type:String,default:\"\"},width:{type:Number,default:168}},emits:[\"change\",\"focus\",\"blur\",\"enter\"],setup:function(e,r){var n=r.emit;return{onInput:function(e){var t;n(\"change\",null===(t=e.target)||void 0===t?void 0:t.value)},valueStyle:t((function(){return{minWidth:\"\".concat(e.width,\"px\"),maxWidth:\"\".concat(e.width,\"px\"),width:\"\".concat(e.width,\"px\")}})),onFocus:function(){n(\"focus\")},onBlur:function(){n(\"blur\")},onEnter:function(){n(\"enter\")}}}}),Z={class:\"input\"},ee={class:\"label\"},te=[\".value\"];function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=r){var n,o,a,i,l=[],c=!0,u=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw o}}return l}}(e,t)||E(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ne(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function oe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ne(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ne(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".input[data-v-d52a4d02]{display:inline-block;font-size:12px}.label[data-v-d52a4d02]{align-items:center;background:#e7e8e9;color:#999;display:flex;float:left;font-weight:500;height:30px;justify-content:center;width:45px}[pick-colors-theme=dark] .label[data-v-d52a4d02]{background:#252930;color:#999}.value[data-v-d52a4d02]{background:#eceef0;border:1px solid #eceef0;box-sizing:border-box;color:#666;flex:1;height:30px;text-align:center}[pick-colors-theme=dark] .value[data-v-d52a4d02]{background:#2e333a;border:1px solid #2e333a;color:#fff}.value[data-v-d52a4d02]:focus{border:1px solid #1890ff;outline:none}\"),Q.render=function(e,t,a,l,c,u){return r(),n(\"div\",Z,[i(\"span\",ee,d(e.label),1),i(\"input\",{class:\"value\",style:o(e.valueStyle),\".value\":e.value,onFocus:t[0]||(t[0]=function(){return e.onFocus&&e.onFocus.apply(e,arguments)}),onInput:t[1]||(t[1]=function(){return e.onInput&&e.onInput.apply(e,arguments)}),onBlur:t[2]||(t[2]=function(){return e.onBlur&&e.onBlur.apply(e,arguments)}),onKeydown:t[3]||(t[3]=p((function(){return e.onEnter&&e.onEnter.apply(e,arguments)}),[\"enter\"]))},null,44,te)])},Q.__scopeId=\"data-v-d52a4d02\",Q.__file=\"src/picker/InputValue.vue\";var ae=function(e,t,r){return[e,t*r/((e=(2-t)*r)<1?e:2-e)||0,e/2]},ie={10:\"A\",11:\"B\",12:\"C\",13:\"D\",14:\"E\",15:\"F\"},le=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),r=e%16;return\"\".concat(ie[t]||t).concat(ie[r]||r)},ce=function(e){var t=e.r,r=e.g,n=e.b;return isNaN(t)||isNaN(r)||isNaN(n)?\"\":\"#\".concat(le(t)).concat(le(r)).concat(le(n))},ue=function(e,t){var r;\"string\"==typeof(r=e)&&-1!==r.indexOf(\".\")&&1===parseFloat(r)&&(e=\"100%\");var n=function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"%\")}(e);return e=Math.min(t,Math.max(0,parseFloat(\"\".concat(e)))),n&&(e=parseInt(\"\".concat(e*t),10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},se=function(e,t,r){e=6*ue(e,360),t=ue(t,100),r=ue(r,100);var n=Math.floor(e),o=e-n,a=r*(1-t),i=r*(1-o*t),l=r*(1-(1-o)*t),c=n%6,u=[r,i,a,a,l,r][c],s=[l,r,r,i,a,a][c],f=[a,a,l,r,r,i][c];return{r:Math.round(255*u),g:Math.round(255*s),b:Math.round(255*f)}},fe=function(e,t,r){var n=e.h,o=e.s,a=e.v,i=e.a;if(r)switch(t){case\"hsl\":var l=ae(n,o/100,a/100);return\"hsla(\".concat(n.toFixed(0),\", \").concat(Math.round(100*l[1]),\"%, \").concat(Math.round(100*l[2]),\"%, \").concat(i,\")\");case\"hsv\":return\"hsva(\".concat(n.toFixed(0),\", \").concat(Math.round(o),\"%, \").concat(Math.round(a),\"%, \").concat(i,\")\");case\"rgb\":var c=se(n,o,a),u=c.r,s=c.g,f=c.b;return\"rgba(\".concat(u,\", \").concat(s,\", \").concat(f,\", \").concat(i,\")\");default:return\"\".concat(ce(se(n,o,a))).concat(le(255*i))}else switch(t){case\"hsl\":var d=ae(n,o/100,a/100);return\"hsl(\".concat(n.toFixed(0),\", \").concat(Math.round(100*d[1]),\"%, \").concat(Math.round(100*d[2]),\"%)\");case\"hsv\":return\"hsv(\".concat(n.toFixed(0),\", \").concat(Math.round(o),\"%, \").concat(Math.round(a),\"%)\");case\"rgb\":var p=se(n,o,a),h=p.r,v=p.g,m=p.b;return\"rgb(\".concat(h,\", \").concat(v,\", \").concat(m,\")\");default:return ce(se(n,o,a))}},de=function(e){var t=e.r,r=e.g,n=e.b;t=ue(t,255),r=ue(r,255),n=ue(n,255);var o,a=Math.max(t,r,n),i=Math.min(t,r,n),l=a,c=a-i,u=0===a?0:c/a;if(a===i)o=0;else{switch(a){case t:o=(r-n)/c+(r<n?6:0);break;case r:o=(n-t)/c+2;break;case n:o=(t-r)/c+4}o/=6}return{h:360*o,s:100*u,v:100*l}},pe=function(e){var t=e.h,r=e.s,n=e.l;n/=100;var o=r/=100,a=Math.max(n,.01);return r*=(n*=2)<=1?n:2-n,o*=a<=1?a:2-a,{h:+t,s:100*(0===n?2*o/(a+o):2*r/(n+r)),v:100*((n+r)/2)}},he=function(e){var t=[];if(e.match(/^#([0-9a-fA-f]{3,4})$/g))for(var r=1;r<e.length;r++)t.push(parseInt(\"0x\"+e[r].repeat(2)));else if(e.match(/^#([0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/g))for(var n=1;n<e.length;n+=2)t.push(parseInt(\"0x\"+e.slice(n,n+2)));return{r:t[0],g:t[1],b:t[2],a:t[3]}},ve=function(e,t,r){if(\"string\"==typeof e&&\"\"!==e){var n=be(e,we(e),r),o=xe(n);return fe(o,t,r)}return\"\"},me=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4);return{r:t[0],g:t[1],b:t[2],a:t[3]}},ge=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4),r=t[0],n=t[1],o=t[2],a=t[3];return{h:r,s:parseFloat(n),l:parseFloat(o),a:a}},ye=function(e){var t=re(e.match(/(\\d(\\.\\d+)?)+/g),4),r=t[0],n=t[1],o=t[2],a=t[3];return{h:parseFloat(r),s:parseFloat(n),v:parseFloat(o),a:parseFloat(a)}},be=function(e,t){if(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])switch(t){case\"rgb\":var r=me(e),n=r.r,o=r.g,a=r.b,i=r.a;return oe(oe({},de({r:n,g:o,b:a})),{},{a:+i});case\"hsv\":var l=ye(e);return{h:l.h,s:l.s,v:l.v,a:l.a};case\"hsl\":var c=ge(e),u=c.h,s=c.s,f=c.l,d=c.a;return oe(oe({},pe({h:u,s:s,l:f})),{},{a:+d});default:var p=he(e),h=p.r,v=p.g,m=p.b,g=p.a;return oe(oe({},de({r:h,g:v,b:m})),{},{a:g/255})}else{switch(t){case\"rgb\":return oe(oe({},de(me(e))),{},{a:1});case\"hsv\":var y=ye(e);return{h:y.h,s:y.s,v:y.v,a:1};case\"hsl\":return oe(oe({},pe(ge(e))),{},{a:1});default:return oe(oe({},de(he(e))),{},{a:1})}}},we=function(e){return e.match(/^#/)?\"hex\":e.match(/^rgb/)?\"rgb\":e.match(/^hsl/)?\"hsl\":e.match(/^hsv/)?\"hsv\":\"hex\"},xe=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;return isNaN(t)&&(t=0),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(o)&&(o=1),{h:t,s:r,v:n,a:o}},Se=e({name:\"ColorItem\",props:{size:{type:[Number,String],default:20},width:{type:[Number,String]},height:{type:[Number,String]},value:{type:String,default:\"\"},border:{type:Boolean,default:!0},borderRadius:{type:Number,default:5},selected:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1}},emits:[\"select\"],setup:function(e){var r=u(),n=h(\"theme\",{theme:\"light\"}).theme,o=t((function(){return parseFloat((e.width||e.size)+\"\")})),a=t((function(){return parseFloat((e.height||e.size)+\"\")})),i=t((function(){return{width:\"\".concat(v(o),\"px\"),height:\"\".concat(v(a),\"px\"),border:e.border?\"1px solid \".concat(\"dark\"===v(n)?\"#434345\":\"#d9d9d9\"):\"\",borderRadius:\"\".concat(e.borderRadius,\"px\"),boxShadow:e.selected?\"0 0 3px 2px \".concat(\"dark\"===v(n)?\"#2681ff\":\"#1890ff\"):\"\"}})),l=function(){var t=r.value.getContext(\"2d\");r.value.width=v(o),r.value.height=v(a);var n=function(e){var t=document.createElement(\"canvas\"),r=t.getContext(\"2d\"),n=2*e;return t.width=n,t.height=n,r.fillStyle=\"#ffffff\",r.fillRect(0,0,n,n),r.fillStyle=\"#ccd5db\",r.fillRect(0,0,e,e),r.fillRect(e,e,e,e),t}(5);t.fillStyle=t.createPattern(n,\"repeat\"),t.fillRect(0,0,v(o),v(a)),t.fillStyle=e.value,t.fillRect(0,0,v(o),v(a))};return f((function(){return e.value}),(function(){l()})),s((function(){l()})),{canvas:r,colorItemStyle:i}}}),ke=[\"draggable\"];W(\".color-item[data-v-02da71fd]{display:inline-block;vertical-align:top}\"),Se.render=function(e,t,a,i,l,c){return r(),n(\"canvas\",{class:\"color-item\",style:o(e.colorItemStyle),ref:\"canvas\",draggable:e.draggable},null,12,ke)},Se.__scopeId=\"data-v-02da71fd\",Se.__file=\"src/color-item/ColorItem.vue\";var Ce=e({name:\"Colors\",components:{ColorItem:Se},props:{colors:{type:Array,default:function(){return[]}},selectedIndex:{type:Number,default:-1}},emits:[\"change\"],setup:function(e,r){var n=r.emit;return{onSelectColor:function(e,t){n(\"change\",e,t)},useColors:t((function(){return e.colors.map((function(e){return ve(e,\"hex\",!0)}))}))}}}),Oe={class:\"colors\"};function Ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ae(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ie(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".colors[data-v-0f8b52a8]{align-items:center;display:flex;flex-wrap:wrap;margin-top:5px}.color-item[data-v-0f8b52a8]{margin:5px}\"),Ce.render=function(e,t,o,i,l,c){var u=m(\"color-item\");return r(),n(\"div\",Oe,[(r(!0),n(g,null,y(e.useColors,(function(t,n){return r(),b(u,{key:n,class:\"color-item\",size:16,value:t,border:!1,\"border-radius\":3,selected:e.selectedIndex===n,onClick:a((function(r){return e.onSelectColor(t,+n)}),[\"stop\",\"prevent\"])},null,8,[\"value\",\"selected\",\"onClick\"])})),128))])},Ce.__scopeId=\"data-v-0f8b52a8\",Ce.__file=\"src/picker/Colors.vue\";var Pe=e({name:\"Picker\",components:{Colors:Ce,Saturation:$,Hue:X,Alpha:U,InputValue:Q},props:{format:{type:String,default:\"hex\"},showAlpha:{type:Boolean,default:!1},value:{type:String,default:\"\"},colors:{type:Array,default:function(){return[]}},style:{type:Object,default:function(){return{}}}},emits:[\"change\",\"update:value\"],setup:function(e,r){var n=r.emit,o=t((function(){return Ae(Ae({},e.style),{},{width:e.showAlpha?\"230px\":\"205px\"})})),a=t((function(){return e.showAlpha?165:140})),i=u(),l=u(),c=u(),s=function(){var t,r=null===(t=e.value)||void 0===t?void 0:t.trim();if(null!=r&&\"\"!==r){var n=we(r);return xe(be(r,n,e.showAlpha))}return null};f((function(){return e.value}),(function(){e.value!==v(c)&&(i.value=s())}),{immediate:!0}),f(i,(function(t,r){var o=\"\";null!=t?(o=fe(Ae({},t),e.format,e.showAlpha),l.value=Ae({},t)):l.value=null,c.value=o;var a=s();JSON.stringify(t)!==JSON.stringify(a)&&JSON.stringify(t)!==JSON.stringify(r)&&n(\"change\",o)}),{immediate:!0});var d=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.h)||0})),p=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.s)||0})),h=t((function(){var e;return(null===(e=v(i))||void 0===e?void 0:e.v)||0})),m=t((function(){var e,t;return null!=(null===(e=v(i))||void 0===e?void 0:e.a)?null===(t=v(i))||void 0===t?void 0:t.a:1})),g=t((function(){return se(v(d),v(p),v(h))})),y=t((function(){return\"rgb(\".concat(v(g).r,\", \").concat(v(g).g,\", \").concat(v(g).b,\")\")})),b=t((function(){var t=e.format;if(e.showAlpha)switch(t){case\"hsv\":return\"HSVA\";case\"hsl\":return\"HSLA\";case\"rgb\":return\"RGBA\";default:return\"HEX\"}else switch(t){case\"hsv\":return\"HSV\";case\"hsl\":return\"HSL\";case\"rgb\":return\"RGB\";default:return\"HEX\"}})),w=u(-1),x=function(e,t,r){if(0!==e.length){var n=be(e,t,r),o=n.h,a=n.s,l=n.v;if(!(isNaN(o)||isNaN(a)||isNaN(l))){var c=1,u=n.a;isNaN(u)||(c=u),i.value={h:o,s:a,v:l,a:c}}}};return{h:d,s:p,v:h,a:m,rgbStr:y,onSelectSaturation:function(e,t){w.value=-1,null==v(i)?i.value={h:v(d),s:e,v:t,a:v(m)}:i.value=Ae(Ae({},v(i)),{},{s:e,v:t})},onSelectHue:function(e){w.value=-1,null==v(i)&&(i.value={h:e,s:v(p),v:v(h),a:v(m)}),i.value=Ae(Ae({},v(i)),{},{h:e})},onSelectAlpha:function(e){w.value=-1,null==v(i)?i.value={h:v(d),s:v(p),v:v(h),a:e}:i.value=Ae(Ae({},v(i)),{},{a:e})},label:b,colorValue:c,pickerStyle:o,inputWidth:a,onInputChange:function(e){w.value=-1,c.value=e},handleChange:function(){var t,r=null===(t=v(c))||void 0===t?void 0:t.trim();if(\"\"!==r){var n=e.showAlpha,o=e.format,a=function(e,t,r){if(r)switch(t){case\"rgb\":return/^[rR][gG][Bb][Aa][(]([\\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\\s]*,){3}[\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*[)]{1}$/.test(e);case\"hsv\":return/^[hH][Ss][Vv][Aa][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,){2}([\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*)[)]$/.test(e);case\"hsl\":return/^[hH][Ss][Ll][Aa][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,){2}([\\s]*(1|1.0|0|0.[0-9]|0.[0-9][0-9])[\\s]*)[)]$/.test(e);default:return/^#([0-9a-fA-f]{4}|[0-9a-fA-F]{8})$/g.test(e)}else switch(t){case\"rgb\":return/^[rR][gG][Bb][(]([\\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\\s]*,){2}[\\s]*(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)[\\s]*[)]{1}$/.test(e);case\"hsv\":return/^[hH][Ss][Vv][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*)[)]$/.test(e);case\"hsl\":return/^[hH][Ss][Ll][(]([\\s]*(2[0-9][0-9]|360|3[0-5][0-9]|[01]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*)[)]$/.test(e);default:return/^#([0-9a-fA-f]{3}|[0-9a-fA-F]{6})$/g.test(e)}}(r,o,n);a?x(r,o,n):null!=v(l)?i.value=v(l):c.value=\"\"}else i.value=null},selectColorIndex:w,onSelectColor:function(e,t){if(w.value=t,\"\"===(e=e.trim()))i.value=null;else{var r=we(e);r?x(e,r,!0):i.value=null}}}}}),je={class:\"picker-inner\"},_e={class:\"picker-header\"};W(\".picker[data-v-6ceadec6]{background:#f7f8f9;border-radius:4px;box-shadow:0 0 16px 0 rgba(0,0,0,.16)}.picker-inner[data-v-6ceadec6]{padding:10px}[pick-colors-theme=dark] .picker-inner[data-v-6ceadec6]{background:#1d2024;box-shadow:0 0 16px 0 rgba(0,0,0,.16)}.picker-header[data-v-6ceadec6]{display:flex;margin-bottom:5px}.alpha[data-v-6ceadec6],.hue[data-v-6ceadec6]{margin-left:10px}.colors[data-v-6ceadec6]{margin-top:5px}\"),Pe.render=function(e,t,a,l,c,u){var s=m(\"saturation\"),f=m(\"hue\"),d=m(\"alpha\"),p=m(\"input-value\"),h=m(\"Colors\");return r(),n(\"div\",{class:\"picker\",style:o(e.pickerStyle)},[i(\"div\",je,[i(\"div\",_e,[w(s,{class:\"saturation\",hue:e.h,saturation:e.s,value:e.v,onChange:e.onSelectSaturation},null,8,[\"hue\",\"saturation\",\"value\",\"onChange\"]),w(f,{class:\"hue\",hue:e.h,onChange:e.onSelectHue},null,8,[\"hue\",\"onChange\"]),e.showAlpha?(r(),b(d,{key:0,class:\"alpha\",alpha:e.a,color:e.rgbStr,onChange:e.onSelectAlpha},null,8,[\"alpha\",\"color\",\"onChange\"])):x(\"v-if\",!0)]),w(p,{label:e.label,value:e.colorValue,width:e.inputWidth,onChange:e.onInputChange,onBlur:e.handleChange,onEnter:e.handleChange},null,8,[\"label\",\"value\",\"width\",\"onChange\",\"onBlur\",\"onEnter\"]),e.colors.length>0?(r(),b(h,{key:0,class:\"colors\",colors:e.colors,\"selected-index\":e.selectColorIndex,onChange:e.onSelectColor},null,8,[\"colors\",\"selected-index\",\"onChange\"])):x(\"v-if\",!0)])],4)},Pe.__scopeId=\"data-v-6ceadec6\",Pe.__file=\"src/picker/Picker.vue\";var Ne=e({name:\"AddColorItem\",props:{size:{type:Number,default:20},selected:{type:Boolean,default:!1}},setup:function(e){var r=h(\"theme\",{theme:\"light\"}).theme;return{addColorItemStyle:t((function(){return{width:\"\".concat(e.size,\"px\"),height:\"\".concat(e.size,\"px\"),lineHeight:\"\".concat(e.size,\"px\"),boxShadow:e.selected?\"0 0 3px 2px \".concat(\"dark\"===v(r)?\"#2681ff\":\"#1890ff\"):\"\"}}))}}}),Ee=[function(e){return l(\"data-v-ceb1719c\"),e=e(),c(),e}((function(){return i(\"g\",{class:\"container\"},[i(\"path\",{d:\"M544 464V160h-80v304H160v80h304v304h80V544h304v-80z\"})],-1)}))];function Fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Le(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(r),!0).forEach((function(t){G(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}W(\".add-color-item[data-v-ceb1719c]{background:#fff;border:1px solid #d9d9d9;border-radius:5px;vertical-align:top}.container[data-v-ceb1719c]{pointer-events:none;transform:scale(.9);transform-origin:center}[pick-colors-theme=dark] .add-color-item[data-v-ceb1719c]{background:#141414;border:1px solid #434343}path[data-v-ceb1719c]{fill:#000}[pick-colors-theme=dark] path[data-v-ceb1719c]{fill:#fff}\"),Ne.render=function(e,t,a,i,l,c){return r(),n(\"svg\",{style:o(e.addColorItemStyle),class:\"add-color-item\",viewBox:\"0 0 1024 1024\",xmlns:\"http://www.w3.org/2000/svg\"},[].concat(Ee),4)},Ne.__scopeId=\"data-v-ceb1719c\",Ne.__file=\"src/add-color-item/AddColorItem.vue\";var ze=null,Me=e({name:\"ColorPicker\",components:{ColorItem:Se,Picker:Pe,AddColorItem:Ne},props:{value:{type:[String,Array]},theme:{type:String,default:\"light\"},size:{type:[Number,String],default:20},width:{type:[Number,String]},height:{type:[Number,String]},format:{type:String,default:\"hex\"},showPicker:{type:Boolean,default:void 0},showAlpha:{type:Boolean,default:!1},addColor:{type:Boolean,default:!1},deleteColor:{type:Boolean,default:!0},max:{type:Number,default:13},popupContainer:{type:[String,Object,Boolean]},zIndex:{type:Number,default:1e3},colors:{type:Array,default:function(){return[\"#ff4500\",\"#ff8c00\",\"#ffd700\",\"#90ee90\",\"#00ced1\",\"#1e90ff\",\"#c71585\",\"#ff4500\",\"#ff7d4d\",\"#00babd\",\"#1f93ff\",\"#fa64c3\"]}}},emits:[\"change\",\"update:value\",\"update:showPicker\",\"overflowMax\",\"closePicker\"],setup:function(e,r){var n=r.emit,o=u([]),a=t((function(){return v(o).map((function(t){return ve(t,\"hex\",e.showAlpha)}))}));f((function(){return e.value}),(function(){var t=e.value||\"\",r=Array.isArray(t)?t:[t];o.value=r.map((function(t){return ve(t,e.format,e.showAlpha)}))}),{immediate:!0});var i=u(void 0),l=t((function(){return v(o)[v(i)]})),c=u(!1);f((function(){return e.showPicker}),(function(){c.value=e.showPicker}),{immediate:!0});var d,p,h,m,g,y,b,w=u(null),x=u(null),A=(d=w,p=x,h={zIndex:e.zIndex},m=u({}),g={strategy:\"absolute\",placement:\"auto\",onFirstUpdate:function(){ze.update()},modifiers:[{name:\"offset\",options:{offset:[0,5]}},{name:\"computeStyles\",options:{gpuAcceleration:!1,adaptive:!0}},{name:\"flip\",options:{fallbackPlacements:[\"top\"],allowedAutoPlacements:[\"top\",\"bottom\"]}},{name:\"applyStyles\",enabled:!1},{name:\"updateState\",enabled:!0,phase:\"write\",requires:[\"computeStyles\"],fn:function(e){var t=e.state,r=t.styles,n=t.placement,o=r.popper;m.value=Le(Le(Le({},o),h),{},{transformOrigin:\"top\"===n?\"center bottom\":\"\"})}}]},f((function(){return[v(d),v(p)]}),(function(e,t){var r,n=re(e,2),o=n[0],a=n[1],i=re(t,2),l=i[0],c=i[1];if(o&&a&&(l!==o||c!==l)){null===(r=ze)||void 0===r||r.destroy();var u=o.$el||o,s=a.$el||a;S((function(){ze=_(u,s,g)}))}})),k((function(){var e;ze&&(null===(e=ze)||void 0===e||e.destroy(),ze=null)})),{instance:ze,style:m}),P=A.style,j=function(){null==v(w)&&(w.value=v(V)[0],i.value=0),void 0===e.showPicker?c.value=!0:n(\"update:showPicker\",!0)},N=function(){i.value=void 0,void 0===e.showPicker?c.value=!1:n(\"update:showPicker\",!1),n(\"closePicker\",I(Array.isArray(e.value)||e.addColor?v(o):v(o)[0]))},E=u(),z=function(){var e=M(T.mark((function e(t){var r,n,o,a;return T.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.target,null!=(o=null===(r=n.dataset)||void 0===r?void 0:r.index)&&\"\"!==o){e.next=4;break}return e.abrupt(\"return\");case 4:if(a=+o,v(i)!==a){e.next=7;break}return e.abrupt(\"return\");case 7:null!=v(i)&&v(i)!==a?(N(),y&&clearTimeout(y),y=setTimeout((function(){j(),clearTimeout(y)}),100)):j(),i.value=a,w.value=n;case 10:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),R=function(){var e=M(T.mark((function e(t){var r,n,o,a,i;return T.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t.target,!(!(null!==(r=v(E))&&void 0!==r&&r.isEqualNode(a))&&(null===(n=v(E))||void 0===n?void 0:n.contains(a)))){e.next=4;break}return e.abrupt(\"return\");case 4:if(i=null===(o=v(x))||void 0===o?void 0:o.$el,!((null==i?void 0:i.contains(a))||!1)){e.next=8;break}return e.abrupt(\"return\");case 8:b&&clearTimeout(b),b=setTimeout((function(){v(c)&&N()}),0);case 10:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();f(c,(function(){v(c)&&(j(),clearTimeout(b))}));var B,D=u(e.max>v(o).length),H=t((function(){return\"string\"==typeof e.popupContainer||\"object\"===L(e.popupContainer)&&null!=e.popupContainer?e.popupContainer:\"body\"})),G=t((function(){return\"boolean\"==typeof e.popupContainer&&!1===e.popupContainer})),$=t((function(){return e.theme}));f((function(){return[e.theme,v(x)]}),(function(){S((function(){var e,t;null===(e=v(E))||void 0===e||e.setAttribute(\"pick-colors-theme\",v($)),null===(t=v(x))||void 0===t||null===(t=t.$el)||void 0===t||t.setAttribute(\"pick-colors-theme\",v($))}))}),{immediate:!0}),C(\"theme\",{theme:$});var V=u([]);return s((function(){document.addEventListener(\"mouseup\",R,!1),e.showPicker&&j()})),O((function(){document.removeEventListener(\"mouseup\",R,!1),y&&(clearTimeout(y),y=null),b&&(clearTimeout(b),b=null)})),{valueList:o,colorItemSelected:function(t){return(e.addColor?v(o).length>0:v(o).length>1)&&v(i)===t},selectedColor:l,selectedIndex:i,isShowPicker:c,addColorItemShow:D,onPickerChange:function(t){var r=v(i),a=v(o).slice(),l=v(o).length;if(null!=r){r>=0?a[r]=t:(i.value=l,a.push(t));var c=\"\";c=Array.isArray(e.value)||e.addColor?a:t,void 0===e.value?o.value=Array.isArray(c)?c:[c]:(n(\"update:value\",c),n(\"change\",c,t,r)),e.addColor&&l>=e.max&&(D.value=!1,n(\"overflowMax\"))}},colorPicker:E,onColorClick:z,pickerRef:x,onColorItemDragStart:function(e){e.dataTransfer.effectAllowed=\"move\";var t=e.target;B=+t.dataset.index},onColorItemDragOver:function(e){},onColorItemDrop:function(e){var t=+e.target.dataset.index,r=F(v(o)),a=r[B];r.splice(B,1);var i=r.slice(0,t),l=r.splice(t),c=i.concat([a]).concat(l);n(\"update:value\",c),n(\"change\",c,c[B],B)},colorItemsRef:V,pickerStyle:P,values:a,teleportDisabled:G,toPopupContainer:H}}});W(\".color-picker[data-v-3c43ade8]{display:inline-block}.color-item[data-v-3c43ade8]{margin:5px}.add-color-item[data-v-3c43ade8]{display:inline-block;margin:5px}.picker[data-v-3c43ade8]{overflow:hidden}.v-enter-active[data-v-3c43ade8],.v-leave-active[data-v-3c43ade8]{opacity:1;transform:scaleY(1);transform-origin:center top;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.v-enter-from[data-v-3c43ade8],.v-leave-to[data-v-3c43ade8]{opacity:0;transform:scaleY(0)}\"),Me.render=function(e,t,i,l,c,u){var s=m(\"color-item\"),f=m(\"add-color-item\"),d=m(\"picker\");return r(),n(\"div\",{class:\"color-picker\",ref:\"colorPicker\",onDragstart:t[0]||(t[0]=a((function(){return e.onColorItemDragStart&&e.onColorItemDragStart.apply(e,arguments)}),[\"stop\"])),onDragover:t[1]||(t[1]=a((function(){return e.onColorItemDragOver&&e.onColorItemDragOver.apply(e,arguments)}),[\"prevent\",\"stop\"])),onDrop:t[2]||(t[2]=a((function(){return e.onColorItemDrop&&e.onColorItemDrop.apply(e,arguments)}),[\"prevent\",\"stop\"])),onClick:t[3]||(t[3]=a((function(){return e.onColorClick&&e.onColorClick.apply(e,arguments)}),[\"stop\"]))},[(r(!0),n(g,null,y(e.values,(function(t,n){return r(),b(s,{class:\"color-item\",key:n,ref_for:!0,ref:function(t){return e.colorItemsRef[n]=t},size:e.size,width:e.width,height:e.height,value:t,selected:e.colorItemSelected(n),\"data-index\":n,draggable:e.valueList.length>1,format:e.format},null,8,[\"size\",\"width\",\"height\",\"value\",\"selected\",\"data-index\",\"draggable\",\"format\"])})),128)),e.addColor&&e.addColorItemShow?(r(),b(f,{key:0,class:\"add-color-item\",ref:\"addColorItem\",selected:e.colorItemSelected(-1),\"data-index\":-1},null,8,[\"selected\"])):x(\"v-if\",!0),(r(),b(A,{to:e.toPopupContainer,disabled:e.teleportDisabled},[w(P,null,{default:j((function(){return[e.isShowPicker?(r(),b(d,{key:0,class:\"picker\",style:o(e.pickerStyle),ref:\"pickerRef\",value:e.selectedColor,format:e.format,\"show-alpha\":e.showAlpha,colors:e.colors,onChange:e.onPickerChange},null,8,[\"style\",\"value\",\"format\",\"show-alpha\",\"colors\",\"onChange\"])):x(\"v-if\",!0)]})),_:1})],8,[\"to\",\"disabled\"]))],544)},Me.__scopeId=\"data-v-3c43ade8\",Me.__file=\"src/ColorPicker.vue\";export{Me as default};\n","<template>\n <div class=\"color-pick\">\n <a-input class=\"input\" v-model:value=\"colorValue\" />\n <pick-colors class=\"pick-colors\" v-model:value=\"colorValue\" :size=\"25\" :showAlpha=\"true\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport { Input as AInput } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorPick',\n components: {\n PickColors,\n AInput\n },\n props: {\n value: {\n type: String,\n require: true\n }\n },\n emits: ['change'],\n setup (props, context) {\n const colorValue = computed({\n get: () => props.value,\n set: (value) => {\n context.emit('change', value)\n }\n })\n const onChangColor = (e: any) => {\n colorValue.value = e.hex\n }\n return {\n colorValue,\n onChangColor\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-pick {\n display: flex;\n}\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"color-pick\">\n <a-input class=\"input\" v-model:value=\"colorValue\" />\n <pick-colors class=\"pick-colors\" v-model:value=\"colorValue\" :size=\"25\" :showAlpha=\"true\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport { Input as AInput } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorPick',\n components: {\n PickColors,\n AInput\n },\n props: {\n value: {\n type: String,\n require: true\n }\n },\n emits: ['change'],\n setup (props, context) {\n const colorValue = computed({\n get: () => props.value,\n set: (value) => {\n context.emit('change', value)\n }\n })\n const onChangColor = (e: any) => {\n colorValue.value = e.hex\n }\n return {\n colorValue,\n onChangColor\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-pick {\n display: flex;\n}\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"color-group-pick\">\n <pick-colors\n :value=\"value\"\n add-color\n :max=\"max\"\n @change=\"onColorsChange\"\n @overflow-max=\"onOverflowMax\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorGroupPick',\n components: {\n PickColors\n },\n props: {\n value: {\n type: Array as PropType<string[]>,\n default: () => ([])\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onColorsChange = (value: string[]) => {\n emit('change', value)\n }\n const max = ref(13)\n const onOverflowMax = () => {\n message.warn(`已经超出最大添加个数:${max.value}`)\n }\n return {\n onColorsChange,\n max,\n onOverflowMax\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-group-pick {\n padding: 10px;\n}\n</style>\n","<template>\n <div class=\"color-group-pick\">\n <pick-colors\n :value=\"value\"\n add-color\n :max=\"max\"\n @change=\"onColorsChange\"\n @overflow-max=\"onOverflowMax\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nexport default defineComponent({\n name: 'ColorGroupPick',\n components: {\n PickColors\n },\n props: {\n value: {\n type: Array as PropType<string[]>,\n default: () => ([])\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onColorsChange = (value: string[]) => {\n emit('change', value)\n }\n const max = ref(13)\n const onOverflowMax = () => {\n message.warn(`已经超出最大添加个数:${max.value}`)\n }\n return {\n onColorsChange,\n max,\n onOverflowMax\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.color-group-pick {\n padding: 10px;\n}\n</style>\n","<template>\n <div class=\"form-group\">\n <appstore-add-outlined\n class=\"icon add\"\n @click=\"onAdd\"\n />\n <draggable class=\"form\" v-model=\"myValue\" item-key=\"id\">\n <template #item=\"{ element: e, index: i}\">\n <div class=\"form-row\">\n <div class=\"form-item\" v-for=\"(f, j) in format\" :key=\"j\">\n <template v-if=\"Array.isArray(f.label)\">\n <span class=\"label\">\n {{ f.useLabelIndex ? f.label[i] + (i + 1) : f.label[i] }}\n </span>\n </template>\n <span class=\"label\" v-else>\n {{ f.useLabelIndex ? f.label + (i + 1) : f.label }}\n </span>\n <component\n class=\"value\"\n :[formatTypeValue(f.typeValue)]=\"typeof e === 'string' ? e : (e[f.value] ?? f.defaultValue)\"\n :is=\"useComponentType(f.type)\"\n :style=\"{\n width: !['color', 'switch'].includes(f.type) && format.length > 1 ? '110px' : ''\n }\"\n v-bind=\"f.props\"\n :theme=\"theme\"\n :use-blur-event=\"false\"\n @change=\"onValueChange($event, i, f.value)\"\n />\n </div>\n </div>\n </template>\n </draggable>\n <div class=\"icon-group\">\n <div class=\"icon-item\" v-for=\"(e, i) in myValue\" :key=\"i\">\n <!-- <plus-circle-outlined class=\"icon add-children-icon\" /> -->\n <minus-circle-outlined class=\"icon delete\" @click=\"onDelete(i)\" />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue'\nimport Draggable from 'vuedraggable'\nimport { AppstoreAddOutlined, MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons-vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nimport InputNumber from '../input-number'\nexport default defineComponent({\n name: 'FormGroup',\n components: {\n Draggable,\n AppstoreAddOutlined,\n MinusCircleOutlined,\n PickColors,\n InputNumber,\n PlusCircleOutlined\n },\n props: {\n value: {\n type: Array,\n default: () => []\n },\n // 格式化 (映射)\n format: {\n type: Array as PropType<{ [key: string]: any } []>,\n default: () => []\n },\n useLabelIndex: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: -1\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const myValue = computed({\n get: () => props.value,\n set: (value) => {\n emit('change', value)\n }\n })\n\n const onValueChange = (e: Event, index: number, key: string) => {\n const temp = props.value?.slice()\n if (Array.isArray(temp)) {\n const target = e?.target as any\n const value = target?.value != null ? target?.value : e\n if (key) {\n temp[index][key] = value\n } else {\n temp[index] = value\n }\n myValue.value = temp\n }\n }\n\n const onAdd = () => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n const len = temp.length\n if (props.max === -1 || props.max > len) {\n const firstItem = temp[0]\n if (Object.prototype.toString.call(firstItem) === '[object Object]') {\n const keys = Object.keys(firstItem)\n const obj = {} as { [key:string]: string}\n keys.forEach((key) => {\n obj[key] = ''\n })\n temp.push(obj)\n } else if (typeof firstItem === 'string') {\n temp.push(firstItem)\n }\n myValue.value = temp\n } else {\n message.warn('已达到最大上限')\n }\n }\n const onDelete = (index: number) => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n if (temp.length === 1) {\n message.warn('已经是最后一条数据,无法删除')\n return\n }\n temp.splice(index, 1)\n myValue.value = temp\n }\n\n const useComponentType = (type: 'input' | 'select' | 'color' | 'switch') => {\n const map = {\n input: 'aInput',\n select: 'aSelect',\n color: 'pickColors',\n 'input-number': 'inputNumber',\n switch: 'aSwitch'\n }\n return map[type]\n }\n\n const theme = 'light'\n const formatTypeValue = (v: string) => v || 'value'\n return {\n myValue,\n onAdd,\n useComponentType,\n onValueChange,\n onDelete,\n theme,\n formatTypeValue\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.form-group {\n position: relative;\n display: flex;\n width: 100%;\n}\n\n.form {\n flex: 1;\n overflow-x: hidden;\n &:hover {\n overflow: overlay;\n }\n}\n\n.form-row {\n display: flex;\n align-items: center;\n}\n\n.form-row:not(:last-child) {\n margin-bottom: 15px;\n\n}\n\n.form-item {\n display: flex;\n align-items: center;\n width: 100%;\n margin-bottom: 10px;\n}\n\n.label {\n width: max-content;\n padding-right: 5px;\n}\n\n.value {\n flex: 1;\n margin-right: 10px;\n}\n\n.icon {\n color: rgba(0, 0, 0, 0.65);\n}\n\n.add {\n position: absolute;\n top: -30px;\n right: 0;\n font-size: 20px;\n}\n\n.icon-group {\n display: flex;\n flex-direction: column;\n}\n\n.delete {\n width: 30px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 18px;\n}\n.icon-item {\n display: flex;\n width: 30px;\n height: 40px;\n justify-content: center;\n align-items: center;\n}\n.icon-item:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.add-children-icon {\n font-size: 18px;\n margin-right: 10px;\n}\n\n// .delete:not(:last-child) {\n// margin-bottom: 15px;\n// }\n\n.fixed {\n font-size: 18px;\n}\n\n.use-font-size {\n display: flex;\n align-items: center;\n}\n\n.use-color {\n margin: 5px;\n}\n</style>\n","<template>\n <div class=\"form-group\">\n <appstore-add-outlined\n class=\"icon add\"\n @click=\"onAdd\"\n />\n <draggable class=\"form\" v-model=\"myValue\" item-key=\"id\">\n <template #item=\"{ element: e, index: i}\">\n <div class=\"form-row\">\n <div class=\"form-item\" v-for=\"(f, j) in format\" :key=\"j\">\n <template v-if=\"Array.isArray(f.label)\">\n <span class=\"label\">\n {{ f.useLabelIndex ? f.label[i] + (i + 1) : f.label[i] }}\n </span>\n </template>\n <span class=\"label\" v-else>\n {{ f.useLabelIndex ? f.label + (i + 1) : f.label }}\n </span>\n <component\n class=\"value\"\n :[formatTypeValue(f.typeValue)]=\"typeof e === 'string' ? e : (e[f.value] ?? f.defaultValue)\"\n :is=\"useComponentType(f.type)\"\n :style=\"{\n width: !['color', 'switch'].includes(f.type) && format.length > 1 ? '110px' : ''\n }\"\n v-bind=\"f.props\"\n :theme=\"theme\"\n :use-blur-event=\"false\"\n @change=\"onValueChange($event, i, f.value)\"\n />\n </div>\n </div>\n </template>\n </draggable>\n <div class=\"icon-group\">\n <div class=\"icon-item\" v-for=\"(e, i) in myValue\" :key=\"i\">\n <!-- <plus-circle-outlined class=\"icon add-children-icon\" /> -->\n <minus-circle-outlined class=\"icon delete\" @click=\"onDelete(i)\" />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue'\nimport Draggable from 'vuedraggable'\nimport { AppstoreAddOutlined, MinusCircleOutlined, PlusCircleOutlined } from '@ant-design/icons-vue'\nimport { message } from 'ant-design-vue'\nimport PickColors from 'vue-pick-colors'\nimport InputNumber from '../input-number'\nexport default defineComponent({\n name: 'FormGroup',\n components: {\n Draggable,\n AppstoreAddOutlined,\n MinusCircleOutlined,\n PickColors,\n InputNumber,\n PlusCircleOutlined\n },\n props: {\n value: {\n type: Array,\n default: () => []\n },\n // 格式化 (映射)\n format: {\n type: Array as PropType<{ [key: string]: any } []>,\n default: () => []\n },\n useLabelIndex: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: -1\n }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const myValue = computed({\n get: () => props.value,\n set: (value) => {\n emit('change', value)\n }\n })\n\n const onValueChange = (e: Event, index: number, key: string) => {\n const temp = props.value?.slice()\n if (Array.isArray(temp)) {\n const target = e?.target as any\n const value = target?.value != null ? target?.value : e\n if (key) {\n temp[index][key] = value\n } else {\n temp[index] = value\n }\n myValue.value = temp\n }\n }\n\n const onAdd = () => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n const len = temp.length\n if (props.max === -1 || props.max > len) {\n const firstItem = temp[0]\n if (Object.prototype.toString.call(firstItem) === '[object Object]') {\n const keys = Object.keys(firstItem)\n const obj = {} as { [key:string]: string}\n keys.forEach((key) => {\n obj[key] = ''\n })\n temp.push(obj)\n } else if (typeof firstItem === 'string') {\n temp.push(firstItem)\n }\n myValue.value = temp\n } else {\n message.warn('已达到最大上限')\n }\n }\n const onDelete = (index: number) => {\n const temp = props.value?.slice()\n if (!Array.isArray(temp)) return\n if (temp.length === 1) {\n message.warn('已经是最后一条数据,无法删除')\n return\n }\n temp.splice(index, 1)\n myValue.value = temp\n }\n\n const useComponentType = (type: 'input' | 'select' | 'color' | 'switch') => {\n const map = {\n input: 'aInput',\n select: 'aSelect',\n color: 'pickColors',\n 'input-number': 'inputNumber',\n switch: 'aSwitch'\n }\n return map[type]\n }\n\n const theme = 'light'\n const formatTypeValue = (v: string) => v || 'value'\n return {\n myValue,\n onAdd,\n useComponentType,\n onValueChange,\n onDelete,\n theme,\n formatTypeValue\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.form-group {\n position: relative;\n display: flex;\n width: 100%;\n}\n\n.form {\n flex: 1;\n overflow-x: hidden;\n &:hover {\n overflow: overlay;\n }\n}\n\n.form-row {\n display: flex;\n align-items: center;\n}\n\n.form-row:not(:last-child) {\n margin-bottom: 15px;\n\n}\n\n.form-item {\n display: flex;\n align-items: center;\n width: 100%;\n margin-bottom: 10px;\n}\n\n.label {\n width: max-content;\n padding-right: 5px;\n}\n\n.value {\n flex: 1;\n margin-right: 10px;\n}\n\n.icon {\n color: rgba(0, 0, 0, 0.65);\n}\n\n.add {\n position: absolute;\n top: -30px;\n right: 0;\n font-size: 20px;\n}\n\n.icon-group {\n display: flex;\n flex-direction: column;\n}\n\n.delete {\n width: 30px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 18px;\n}\n.icon-item {\n display: flex;\n width: 30px;\n height: 40px;\n justify-content: center;\n align-items: center;\n}\n.icon-item:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.add-children-icon {\n font-size: 18px;\n margin-right: 10px;\n}\n\n// .delete:not(:last-child) {\n// margin-bottom: 15px;\n// }\n\n.fixed {\n font-size: 18px;\n}\n\n.use-font-size {\n display: flex;\n align-items: center;\n}\n\n.use-color {\n margin: 5px;\n}\n</style>\n","<template>\n <a-textarea\n :value=\"value\"\n :disabled=\"disabled\"\n :autoSize=\"{\n minRows: 3\n }\"\n @change=\"onTextareaChange\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { Textarea as ATextarea } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Textarea',\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ATextarea\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onTextareaChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onTextareaChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\n <a-textarea\n :value=\"value\"\n :disabled=\"disabled\"\n :autoSize=\"{\n minRows: 3\n }\"\n @change=\"onTextareaChange\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nimport { Textarea as ATextarea } from 'ant-design-vue'\nexport default defineComponent({\n name: 'Textarea',\n props: {\n value: {\n type: String,\n default: ''\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ATextarea\n },\n emits: ['change'],\n setup (props, { emit }) {\n const onTextareaChange = (e: any) => {\n emit('change', e.target.value)\n }\n return {\n onTextareaChange\n }\n }\n})\n</script>\n\n<style scoped>\n\n</style>\n","<template>\r\n <a-row>\r\n <a-col :span=\"16\">\r\n <a-slider\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n <a-col :span=\"8\" style=\"padding-left: 10px;\">\r\n <a-input-number\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n style=\"width: 100%;\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n </a-row>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue'\r\nimport { Slider as ASlider, InputNumber as AInputNumber } from 'ant-design-vue'\r\nexport default defineComponent({\r\n name: 'Slider',\r\n components: {\r\n ASlider,\r\n AInputNumber\r\n },\r\n props: {\r\n value: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n emits: ['change'],\r\n setup (props, { emit }) {\r\n const onChange = (value: number) => {\r\n emit('change', value)\r\n }\r\n return {\r\n onChange\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<template>\r\n <a-row>\r\n <a-col :span=\"16\">\r\n <a-slider\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n <a-col :span=\"8\" style=\"padding-left: 10px;\">\r\n <a-input-number\r\n :value=\"value\"\r\n :min=\"0\"\r\n :max=\"1\"\r\n :step=\"0.1\"\r\n style=\"width: 100%;\"\r\n @change=\"onChange\"\r\n />\r\n </a-col>\r\n </a-row>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent } from 'vue'\r\nimport { Slider as ASlider, InputNumber as AInputNumber } from 'ant-design-vue'\r\nexport default defineComponent({\r\n name: 'Slider',\r\n components: {\r\n ASlider,\r\n AInputNumber\r\n },\r\n props: {\r\n value: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n emits: ['change'],\r\n setup (props, { emit }) {\r\n const onChange = (value: number) => {\r\n emit('change', value)\r\n }\r\n return {\r\n onChange\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<template>\n <div class=\"props-to-form\">\n <template\n v-for=\"(formProp, key) in formProps\"\n :key=\"key\"\n >\n <!--限定特定组件修改属性,formProp 为对象 -->\n <div class=\"prop-item\" v-if=\"formProp.hide !== true\">\n <span class=\"label\">\n {{ formProp.label }}\n </span>\n <div class=\"component-wrapper\">\n <template v-if=\"Array.isArray(formProp)\">\n <template\n v-for=\"(v, k) in formProp\"\n :key=\"k\"\n >\n <component\n class=\"component\"\n :is=\"v.component\"\n :style=\"v.style\"\n :disabled=\"disabled || v.disabled\"\n v-bind=\"v.props\"\n v-on=\"v.events\"\n />\n </template>\n </template>\n <template v-if=\"!Array.isArray(formProp)\">\n <component\n class=\"component\"\n v-if=\"formProp.component\"\n :is=\"formProp.component\"\n :[formProp.valueProp]=\"formProp.value\"\n :style=\"formProp.style\"\n :disabled=\"disabled || formProp.disabled\"\n v-bind=\"formProp.props\"\n v-on=\"formProp.events\"\n />\n </template>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, unref, inject } from 'vue'\nimport { reduce } from 'lodash-es'\nimport {\n CHARTS_OPTIONS,\n UPDATE_CHARTS_OPTIONS,\n UPDATE_TABLE_OPTIONS\n , GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n PropsToAttributeConfig,\n mapAttributeProps,\n PropToAttributeConfig\n} from './data'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport Input from './input'\nimport InputNumber from './input-number'\nimport RadioGroup from './radio-group'\nimport Select from './select'\nimport Switch from './switch'\nimport ColorPick from './color-pick'\nimport ColorGroupPick from './color-group-pick'\nimport FormGroup from './form-group'\nimport Textarea from './textarea'\nimport Slider from './slider'\nexport default defineComponent({\n name: 'PropsToForm',\n components: {\n Input,\n InputNumber,\n RadioGroup,\n Select,\n Switch,\n ColorPick,\n ColorGroupPick,\n FormGroup,\n Textarea,\n Slider\n },\n props: {\n props: {\n type: Object,\n require: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n componentType: {\n // 控件类型\n type: String,\n default: ''\n }\n },\n setup (props) {\n interface SetOptions {\n mapAttributeProp: PropToAttributeConfig\n result: PropsToAttributeConfig\n key: string\n value: any\n }\n const chartsOptions = inject(CHARTS_OPTIONS) as {\n [key: string]: any\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\n const type = computed(() => unref(chartsOptions)?.type)\n const updateOptions = (options: any) => {\n if (props.componentType && props.componentType === 'table') {\n updateTableOptions(options)\n } else {\n updateChartsOptions(options)\n }\n }\n const setFormProps = (setOptions: SetOptions) => {\n const { result, mapAttributeProp, key, value } = setOptions\n if (result == null || typeof result !== 'object') {\n return\n }\n const {\n valueProp = 'value',\n changeValueEventName = 'change',\n events,\n effect,\n effectVal,\n props\n } = mapAttributeProp\n\n result[key] = {\n ...mapAttributeProp,\n // 值属性\n valueProp,\n value,\n events: {\n [changeValueEventName]: (value: any, updateValue: boolean = true) => {\n // 值改变后回调\n if (updateValue) {\n updateOptions({ [key]: value })\n if (effectVal) {\n effectVal(key, value, updateOptions, unref(graphicConfig))\n }\n } else {\n updateOptions({})\n }\n },\n ...events\n },\n ...effectProps(effect),\n props: { ...props, ...getFunProps(props, unref(graphicConfig)) }\n }\n }\n const formProps = computed(() => {\n const attrs = props.props\n if (attrs == null || typeof attrs !== 'object') {\n return {}\n }\n return reduce(\n attrs,\n (result, value, key) => {\n const mapAttributeProp = mapAttributeProps[key]\n if (Array.isArray(mapAttributeProp)) {\n const item = mapAttributeProp.find((item) => {\n const { onlyType, excludeType } = item\n if (onlyType == null && excludeType == null) {\n return true\n } else if (onlyType) {\n return lowerCaseIncludes(unref(type), onlyType)\n } else if (excludeType) {\n return !lowerCaseIncludes(unref(type), excludeType)\n }\n return false\n })\n if (item) {\n setFormProps({ result, value, key, mapAttributeProp: item })\n }\n } else {\n setFormProps({ result, value, key, mapAttributeProp })\n }\n return result\n },\n {} as { [key: string]: any }\n )\n })\n // 受其他组件影响的 属性生成\n const effectProps = (effect: any) => {\n const nProps: any = {}\n for (const key in effect) {\n nProps[key] = reduce(\n effect[key].props,\n (status: boolean, item: any) => effect[key].joinType === '&&' ? (status && calcSingleItemRes(item)) : (status || calcSingleItemRes(item)),\n Boolean(effect[key].default))\n }\n return nProps\n }\n // 值变更影响其他属性-其他组件作用的结果\n const calcSingleItemRes = (item) => {\n // 影响他的属性的 其他组件的值\n const effectVal = props.props[item.props]\n let result\n switch (item.rule) {\n case '!==':\n result = effectVal !== item.value\n break\n case 'includes':\n result = effectVal.includes(item.value)\n break\n case 'action':\n result = item.value(item, props.props)\n break\n default:\n result = effectVal === item.value\n }\n return result\n }\n // 函数获取属性的值\n function getFunProps (props = {}, graphicConfig) {\n // 当前选择的元素\n const otherProps = {}\n for (const prop in props) {\n if (typeof props[prop] === 'function') {\n otherProps[prop] = props[prop](graphicConfig)\n }\n }\n return otherProps\n }\n return {\n formProps,\n lowerCaseIncludes\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 28%;\n display: flex;\n justify-content: center;\n}\n\n.label-vertical {\n justify-content: flex-start;\n padding-bottom: 4px;\n}\n\n.component-wrapper {\n width: 72%;\n}\n\n.component {\n width: 100%;\n}\n\n.layout {\n align-items: flex-start;\n flex-direction: column;\n padding: 10px 5px 10px 10px;\n\n .label {\n text-align: left;\n margin-bottom: 5px;\n }\n\n .component-wrapper {\n width: 100%;\n }\n}\n</style>\n","<template>\n <div class=\"props-to-form\">\n <template\n v-for=\"(formProp, key) in formProps\"\n :key=\"key\"\n >\n <!--限定特定组件修改属性,formProp 为对象 -->\n <div class=\"prop-item\" v-if=\"formProp.hide !== true\">\n <span class=\"label\">\n {{ formProp.label }}\n </span>\n <div class=\"component-wrapper\">\n <template v-if=\"Array.isArray(formProp)\">\n <template\n v-for=\"(v, k) in formProp\"\n :key=\"k\"\n >\n <component\n class=\"component\"\n :is=\"v.component\"\n :style=\"v.style\"\n :disabled=\"disabled || v.disabled\"\n v-bind=\"v.props\"\n v-on=\"v.events\"\n />\n </template>\n </template>\n <template v-if=\"!Array.isArray(formProp)\">\n <component\n class=\"component\"\n v-if=\"formProp.component\"\n :is=\"formProp.component\"\n :[formProp.valueProp]=\"formProp.value\"\n :style=\"formProp.style\"\n :disabled=\"disabled || formProp.disabled\"\n v-bind=\"formProp.props\"\n v-on=\"formProp.events\"\n />\n </template>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, unref, inject } from 'vue'\nimport { reduce } from 'lodash-es'\nimport {\n CHARTS_OPTIONS,\n UPDATE_CHARTS_OPTIONS,\n UPDATE_TABLE_OPTIONS\n , GRAPHIC_CONFIG\n} from '@/utils/constant'\nimport {\n PropsToAttributeConfig,\n mapAttributeProps,\n PropToAttributeConfig\n} from './data'\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\nimport Input from './input'\nimport InputNumber from './input-number'\nimport RadioGroup from './radio-group'\nimport Select from './select'\nimport Switch from './switch'\nimport ColorPick from './color-pick'\nimport ColorGroupPick from './color-group-pick'\nimport FormGroup from './form-group'\nimport Textarea from './textarea'\nimport Slider from './slider'\nexport default defineComponent({\n name: 'PropsToForm',\n components: {\n Input,\n InputNumber,\n RadioGroup,\n Select,\n Switch,\n ColorPick,\n ColorGroupPick,\n FormGroup,\n Textarea,\n Slider\n },\n props: {\n props: {\n type: Object,\n require: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n componentType: {\n // 控件类型\n type: String,\n default: ''\n }\n },\n setup (props) {\n interface SetOptions {\n mapAttributeProp: PropToAttributeConfig\n result: PropsToAttributeConfig\n key: string\n value: any\n }\n const chartsOptions = inject(CHARTS_OPTIONS) as {\n [key: string]: any\n }\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\n const type = computed(() => unref(chartsOptions)?.type)\n const updateOptions = (options: any) => {\n if (props.componentType && props.componentType === 'table') {\n updateTableOptions(options)\n } else {\n updateChartsOptions(options)\n }\n }\n const setFormProps = (setOptions: SetOptions) => {\n const { result, mapAttributeProp, key, value } = setOptions\n if (result == null || typeof result !== 'object') {\n return\n }\n const {\n valueProp = 'value',\n changeValueEventName = 'change',\n events,\n effect,\n effectVal,\n props\n } = mapAttributeProp\n\n result[key] = {\n ...mapAttributeProp,\n // 值属性\n valueProp,\n value,\n events: {\n [changeValueEventName]: (value: any, updateValue: boolean = true) => {\n // 值改变后回调\n if (updateValue) {\n updateOptions({ [key]: value })\n if (effectVal) {\n effectVal(key, value, updateOptions, unref(graphicConfig))\n }\n } else {\n updateOptions({})\n }\n },\n ...events\n },\n ...effectProps(effect),\n props: { ...props, ...getFunProps(props, unref(graphicConfig)) }\n }\n }\n const formProps = computed(() => {\n const attrs = props.props\n if (attrs == null || typeof attrs !== 'object') {\n return {}\n }\n return reduce(\n attrs,\n (result, value, key) => {\n const mapAttributeProp = mapAttributeProps[key]\n if (Array.isArray(mapAttributeProp)) {\n const item = mapAttributeProp.find((item) => {\n const { onlyType, excludeType } = item\n if (onlyType == null && excludeType == null) {\n return true\n } else if (onlyType) {\n return lowerCaseIncludes(unref(type), onlyType)\n } else if (excludeType) {\n return !lowerCaseIncludes(unref(type), excludeType)\n }\n return false\n })\n if (item) {\n setFormProps({ result, value, key, mapAttributeProp: item })\n }\n } else {\n setFormProps({ result, value, key, mapAttributeProp })\n }\n return result\n },\n {} as { [key: string]: any }\n )\n })\n // 受其他组件影响的 属性生成\n const effectProps = (effect: any) => {\n const nProps: any = {}\n for (const key in effect) {\n nProps[key] = reduce(\n effect[key].props,\n (status: boolean, item: any) => effect[key].joinType === '&&' ? (status && calcSingleItemRes(item)) : (status || calcSingleItemRes(item)),\n Boolean(effect[key].default))\n }\n return nProps\n }\n // 值变更影响其他属性-其他组件作用的结果\n const calcSingleItemRes = (item) => {\n // 影响他的属性的 其他组件的值\n const effectVal = props.props[item.props]\n let result\n switch (item.rule) {\n case '!==':\n result = effectVal !== item.value\n break\n case 'includes':\n result = effectVal.includes(item.value)\n break\n case 'action':\n result = item.value(item, props.props)\n break\n default:\n result = effectVal === item.value\n }\n return result\n }\n // 函数获取属性的值\n function getFunProps (props = {}, graphicConfig) {\n // 当前选择的元素\n const otherProps = {}\n for (const prop in props) {\n if (typeof props[prop] === 'function') {\n otherProps[prop] = props[prop](graphicConfig)\n }\n }\n return otherProps\n }\n return {\n formProps,\n lowerCaseIncludes\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 28%;\n display: flex;\n justify-content: center;\n}\n\n.label-vertical {\n justify-content: flex-start;\n padding-bottom: 4px;\n}\n\n.component-wrapper {\n width: 72%;\n}\n\n.component {\n width: 100%;\n}\n\n.layout {\n align-items: flex-start;\n flex-direction: column;\n padding: 10px 5px 10px 10px;\n\n .label {\n text-align: left;\n margin-bottom: 5px;\n }\n\n .component-wrapper {\n width: 100%;\n }\n}\n</style>\n","<template>\n <div class=\"editor\" ref=\"dom\">\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onUnmounted, watch, PropType } from 'vue'\nimport { debounce } from 'lodash-es'\nimport { editor as monacoEditor } from 'monaco-editor'\nimport EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\nimport JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n// 暂时不引入ts,后面需要可以开启\nimport TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'\nexport type LanguageType = 'json' | 'typescript' | 'javascript'\nexport default defineComponent({\n name: 'Editor',\n props: {\n valueData: {\n type: String,\n default: ''\n },\n options: {\n type: Object,\n default: () => ({})\n },\n language: {\n type: String as PropType<LanguageType>,\n default: 'json'\n },\n // 是否使用小地图\n isUseMinimap: {\n type: Boolean,\n default: false\n },\n // 是否开启提示\n UseSuggestions: {\n type: Boolean,\n default: false\n },\n // 是否自动格式化\n autoFormat: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'update:valueData'],\n setup (props, { emit }) {\n /* eslint-disable */\n // @ts-ignore\n window.MonacoEnvironment = {\n getWorker (workerId: string, label: string) {\n if (label === 'json') {\n return new JsonWorker()\n }\n if (label === 'typescript' || label === 'javascript') {\n return new TsWorker()\n }\n return new EditorWorker()\n }\n }\n /* eslint-enable */\n\n // dom\n const dom = ref()\n // 实例\n let editor = null as monacoEditor.IStandaloneCodeEditor | null\n\n // 主题设置\n const themeMap = {\n light: 'vs',\n dark: 'vs-dark'\n }\n onMounted(() => {\n editor = monacoEditor.create(dom.value, {\n language: props.language,\n tabSize: 2,\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeMap.light,\n wordWrap: 'off',\n lineDecorationsWidth: 3,\n lineHeight: 15,\n lineNumbersMinChars: 3,\n formatOnPaste: true,\n formatOnType: true,\n wordBasedSuggestions: false,\n // 代码提示\n quickSuggestions: props.UseSuggestions,\n snippetSuggestions: 'none',\n suggestOnTriggerCharacters: false,\n scrollbar: {\n verticalScrollbarSize: 6,\n horizontalScrollbarSize: 6,\n alwaysConsumeMouseWheel: false,\n arrowSize: 0\n },\n autoIndent: 'advanced',\n glyphMargin: false,\n fontSize: 13,\n // 关闭右键菜单\n contextmenu: false,\n // 小地图\n minimap: {\n enabled: props.isUseMinimap\n },\n readOnly: props.readonly,\n ...props.options\n })\n // 初始化需要延迟格式化\n editor?.setValue(props.valueData)\n // 如果发现 json 格式化无用\n // 请尝试使用 JSON.stringify(ob, null, 2) 进行格式化\n if (props.autoFormat) {\n setTimeout(() => {\n editor?.getAction('editor.action.formatDocument').run()\n }, 200)\n }\n editor.onDidChangeModelContent(debounce(() => {\n // const selection = editor?.getSelection()\n // const = selection?.getSelectionStart()\n const value = editor?.getValue()\n emit('change', value)\n }, 300))\n\n // 由于 change 会实时改变光标,所以v-model在失去焦点时完成\n editor.onDidBlurEditorText(() => {\n const value = editor?.getValue()\n emit('update:valueData', value)\n })\n })\n // 监听值变化\n watch(() => props.valueData, (code) => {\n if (editor) {\n // 保留光标位置\n const position = editor.getPosition()\n editor.setValue(code)\n // 格式化\n if (props.autoFormat) {\n editor.getAction('editor.action.formatDocument').run()\n }\n if (position != null) {\n // 重新赋值光标位置\n editor.setPosition(position)\n }\n }\n })\n\n onUnmounted(() => {\n editor?.dispose()\n })\n return {\n dom\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.editor {\n width: 100%;\n height: 100%;\n}\n:deep(.overlayWidgets) {\n .find-widget {\n min-width: 220px !important;\n }\n}\n</style>\n","<template>\n <div class=\"editor\" ref=\"dom\">\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onUnmounted, watch, PropType } from 'vue'\nimport { debounce } from 'lodash-es'\nimport { editor as monacoEditor } from 'monaco-editor'\nimport EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\nimport JsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n// 暂时不引入ts,后面需要可以开启\nimport TsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'\nexport type LanguageType = 'json' | 'typescript' | 'javascript'\nexport default defineComponent({\n name: 'Editor',\n props: {\n valueData: {\n type: String,\n default: ''\n },\n options: {\n type: Object,\n default: () => ({})\n },\n language: {\n type: String as PropType<LanguageType>,\n default: 'json'\n },\n // 是否使用小地图\n isUseMinimap: {\n type: Boolean,\n default: false\n },\n // 是否开启提示\n UseSuggestions: {\n type: Boolean,\n default: false\n },\n // 是否自动格式化\n autoFormat: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'update:valueData'],\n setup (props, { emit }) {\n /* eslint-disable */\n // @ts-ignore\n window.MonacoEnvironment = {\n getWorker (workerId: string, label: string) {\n if (label === 'json') {\n return new JsonWorker()\n }\n if (label === 'typescript' || label === 'javascript') {\n return new TsWorker()\n }\n return new EditorWorker()\n }\n }\n /* eslint-enable */\n\n // dom\n const dom = ref()\n // 实例\n let editor = null as monacoEditor.IStandaloneCodeEditor | null\n\n // 主题设置\n const themeMap = {\n light: 'vs',\n dark: 'vs-dark'\n }\n onMounted(() => {\n editor = monacoEditor.create(dom.value, {\n language: props.language,\n tabSize: 2,\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: themeMap.light,\n wordWrap: 'off',\n lineDecorationsWidth: 3,\n lineHeight: 15,\n lineNumbersMinChars: 3,\n formatOnPaste: true,\n formatOnType: true,\n wordBasedSuggestions: false,\n // 代码提示\n quickSuggestions: props.UseSuggestions,\n snippetSuggestions: 'none',\n suggestOnTriggerCharacters: false,\n scrollbar: {\n verticalScrollbarSize: 6,\n horizontalScrollbarSize: 6,\n alwaysConsumeMouseWheel: false,\n arrowSize: 0\n },\n autoIndent: 'advanced',\n glyphMargin: false,\n fontSize: 13,\n // 关闭右键菜单\n contextmenu: false,\n // 小地图\n minimap: {\n enabled: props.isUseMinimap\n },\n readOnly: props.readonly,\n ...props.options\n })\n // 初始化需要延迟格式化\n editor?.setValue(props.valueData)\n // 如果发现 json 格式化无用\n // 请尝试使用 JSON.stringify(ob, null, 2) 进行格式化\n if (props.autoFormat) {\n setTimeout(() => {\n editor?.getAction('editor.action.formatDocument').run()\n }, 200)\n }\n editor.onDidChangeModelContent(debounce(() => {\n // const selection = editor?.getSelection()\n // const = selection?.getSelectionStart()\n const value = editor?.getValue()\n emit('change', value)\n }, 300))\n\n // 由于 change 会实时改变光标,所以v-model在失去焦点时完成\n editor.onDidBlurEditorText(() => {\n const value = editor?.getValue()\n emit('update:valueData', value)\n })\n })\n // 监听值变化\n watch(() => props.valueData, (code) => {\n if (editor) {\n // 保留光标位置\n const position = editor.getPosition()\n editor.setValue(code)\n // 格式化\n if (props.autoFormat) {\n editor.getAction('editor.action.formatDocument').run()\n }\n if (position != null) {\n // 重新赋值光标位置\n editor.setPosition(position)\n }\n }\n })\n\n onUnmounted(() => {\n editor?.dispose()\n })\n return {\n dom\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.editor {\n width: 100%;\n height: 100%;\n}\n:deep(.overlayWidgets) {\n .find-widget {\n min-width: 220px !important;\n }\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select class=\"field-name\" v-model:value=\"condition.rule\" :options=\"ruleOptions\" @change=\"onRuleChange\">\n </a-select>\n <a-input class=\"field-value\" v-model:value=\"condition.value\" placeholder=\"请输入值\" />\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, unref, ref, watch, onMounted, inject } from 'vue'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { CHANGE_CONDITION } from '@/utils/constant'\nimport {\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput,\n Select as ASelect,\n Dropdown as ADropdown\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n MenuOutlined,\n AMenu,\n AMenuItem,\n AInput,\n ASelect,\n ADropdown\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const ruleOptions = [\n {\n label: '大于',\n value: '>'\n },\n {\n label: '大于等于',\n value: '>='\n },\n {\n label: '小于',\n value: '<'\n },\n {\n label: '小于等于',\n value: '<='\n },\n {\n label: '等于',\n value: '=='\n },\n {\n label: '不等于',\n value: '!='\n }\n ]\n\n const condition = ref({\n rule: '==',\n value: '',\n key: ''\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any }, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n\n watch(\n condition,\n (condition) => {\n updateCondition(cloneDeep(condition), props.index, props.path)\n },\n {\n deep: true\n }\n )\n\n const onRuleChange = () => {\n // unref(condition).value = ''\n }\n\n const clickConditionMenu = (data: any) => {\n addCondition(props.path, props.index, data.key === '2' ? '||' : '&&')\n }\n\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n\n onMounted(() => {\n unref(condition).rule = props.data?.rule || ''\n unref(condition).value = props.data?.value || ''\n unref(condition).key = props.data?.key || nanoid()\n })\n\n return {\n ruleOptions,\n condition,\n onRuleChange,\n clickConditionMenu,\n onDelete\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 25%;\n margin-right: 10px;\n}\n\n.field-value {\n width: 75%;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"condition\">\n <a-select class=\"field-name\" v-model:value=\"condition.rule\" :options=\"ruleOptions\" @change=\"onRuleChange\">\n </a-select>\n <a-input class=\"field-value\" v-model:value=\"condition.value\" placeholder=\"请输入值\" />\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, unref, ref, watch, onMounted, inject } from 'vue'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport { nanoid } from 'nanoid'\nimport { cloneDeep } from 'lodash-es'\nimport { CHANGE_CONDITION } from '@/utils/constant'\nimport {\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput,\n Select as ASelect,\n Dropdown as ADropdown\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Condition',\n components: {\n CloseOutlined,\n MenuOutlined,\n AMenu,\n AMenuItem,\n AInput,\n ASelect,\n ADropdown\n },\n props: {\n data: {\n type: Object,\n default: () => ({})\n },\n level: {\n type: Number,\n default: 0\n },\n index: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n setup (props) {\n const ruleOptions = [\n {\n label: '大于',\n value: '>'\n },\n {\n label: '大于等于',\n value: '>='\n },\n {\n label: '小于',\n value: '<'\n },\n {\n label: '小于等于',\n value: '<='\n },\n {\n label: '等于',\n value: '=='\n },\n {\n label: '不等于',\n value: '!='\n }\n ]\n\n const condition = ref({\n rule: '==',\n value: '',\n key: ''\n })\n\n const { updateCondition, deleteCondition, addCondition } = inject(CHANGE_CONDITION, {\n // eslint-disable-next-line no-void\n updateCondition: (_condition: { [key: string]: any }, _index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n deleteCondition: (_index: number, _path: string) => void 0,\n // eslint-disable-next-line no-void\n addCondition: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n\n watch(\n condition,\n (condition) => {\n updateCondition(cloneDeep(condition), props.index, props.path)\n },\n {\n deep: true\n }\n )\n\n const onRuleChange = () => {\n // unref(condition).value = ''\n }\n\n const clickConditionMenu = (data: any) => {\n addCondition(props.path, props.index, data.key === '2' ? '||' : '&&')\n }\n\n const onDelete = () => {\n deleteCondition(props.index, props.path)\n }\n\n onMounted(() => {\n unref(condition).rule = props.data?.rule || ''\n unref(condition).value = props.data?.value || ''\n unref(condition).key = props.data?.key || nanoid()\n })\n\n return {\n ruleOptions,\n condition,\n onRuleChange,\n clickConditionMenu,\n onDelete\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition {\n padding: 8px;\n border: 1px solid #e8e8e8;\n width: 100%;\n display: flex;\n align-items: center;\n}\n\n.field-name {\n width: 25%;\n margin-right: 10px;\n}\n\n.field-value {\n width: 75%;\n margin-right: 10px;\n}\n\n.data-type {\n width: 100px;\n margin-left: 20px;\n}\n\n.rule {\n width: 20%;\n}\n\n.delete-icon,\n.more-icon {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.key || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\n <template\n v-for=\"(item, index) in list\"\n :key=\"index\"\n >\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\n <div class=\"condition-container\">\n <template v-if=\"item.conditions.length > 1\">\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\n </template>\n <div class=\"conditions\">\n <template v-if=\"item.conditions.length > 0\">\n <condition-list\n :level=\"level + 1\"\n :path=\"`${path ? path + '-' : ''}${index}`\"\n :list=\"item.conditions\"\n />\n </template>\n </div>\n </div>\n </template>\n <template v-else>\n <condition\n class=\"condition\"\n :key=\"item.key || `${level}-${index}`\"\n :data=\"item\"\n :level=\"level\"\n :index=\"index\"\n :path=\"path || ''\"\n />\n </template>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from 'vue'\nimport Condition from './Condition.vue'\nexport default defineComponent({\n name: 'ConditionList',\n props: {\n list: {\n type: Array as PropType<any[]>,\n default: () => ([])\n },\n level: {\n type: Number,\n default: 0\n },\n path: {\n type: String,\n default: ''\n }\n },\n components: {\n Condition\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.condition-text {\n min-width: 50px;\n max-width: 50px;\n border: 1px solid #e8e8e8;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.condition-container {\n display: flex;\n width: 100%;\n}\n\n.conditions {\n display: flex;\n flex-direction: column;\n flex: 1;\n}\n</style>\n","<template>\r\n <a-modal\r\n width=\"60%\"\r\n v-model:visible=\"visible\"\r\n :title=\"`条件设置`\"\r\n :destroyOnClose=\"true\"\r\n :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n @ok=\"handleOk\"\r\n >\r\n\r\n <div class=\"config-wrap\">\r\n <div class=\"wrap-item left\">\r\n <div class=\"title\">\r\n 条件配置\r\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\r\n <a-button\r\n class=\"add-and-condition\"\r\n @click=\"addCondition('&&')\"\r\n >\r\n 添加且条件\r\n </a-button>\r\n <a-button\r\n class=\"add-or-condition\"\r\n @click=\"addCondition('||')\"\r\n >\r\n 添加或条件\r\n </a-button>\r\n </template>\r\n <a-button style=\"margin-left: 15px;\" @click=\"addCondition()\" v-else>\r\n 添加条件\r\n </a-button>\r\n </div>\r\n <div class=\"border\">\r\n <condition-list\r\n class=\"condition-list\"\r\n :list=\"conditionList\"\r\n :level=\"0\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"wrap-item right\">\r\n <div class=\"title\">属性配置</div>\r\n <div class=\"border\">\r\n <div class=\"row\">\r\n <div>字体颜色:</div>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.color\"\r\n :size=\"25\"\r\n />\r\n </div>\r\n <div class=\"row\">\r\n <div>图标:</div>\r\n <div style=\"display: flex; align-items: center;justify-items: center;\">\r\n <!-- fff -->\r\n <!-- <image-picker\r\n :value=\"attribute.icon\"\r\n :mini=\"true\"\r\n @change=\"onUploadChange\"\r\n /> -->\r\n <!-- <img class=\"image\" v-if=\" attribute.icon\" :src=\"imgBaseUrl + attribute.icon\" style=\"width: 16px;height: 16px\"/> -->\r\n <!-- <svg-icon v-if=\"attribute.icon\" :iSrc=\"attribute.icon\"></svg-icon> -->\r\n <a-select v-model:value=\"attribute.icon\" :options=\"iconOptions\" style=\"width: 160px\"></a-select>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.iconColor\"\r\n :size=\"25\"\r\n />\r\n <!-- </div> -->\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\" v-if=\"attribute.icon\">\r\n <div>图标位置:</div>\r\n <a-radio-group v-model:value=\"attribute.iconAlign\">\r\n <a-radio-button value=\"left\">靠左</a-radio-button>\r\n <a-radio-button value=\"right\">靠右</a-radio-button>\r\n </a-radio-group>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch, unref, provide, computed } from 'vue'\r\nimport ConditionList from './ConditionList.vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { nanoid } from 'nanoid'\r\nimport { CHANGE_CONDITION } from '@/utils/constant'\r\nimport PickColors from 'vue-pick-colors'\r\n// import SvgIcon from '@/components/SvgIcon.vue'\r\n// import ImagePicker from './ImagePicker.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n message,\r\n Select as ASelect\r\n // Select as ASelect\r\n} from 'ant-design-vue'\r\nexport default defineComponent({\r\n components: {\r\n ConditionList,\r\n PickColors,\r\n // ImagePicker,\r\n AButton,\r\n AModal,\r\n ASelect\r\n // SvgIcon\r\n },\r\n props: {\r\n data: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n default: -1\r\n }\r\n },\r\n setup (props, { emit, expose }) {\r\n const visible = ref(false)\r\n const conditionList = ref<{ [key: string]: any } []>([])\r\n const attribute = ref<{ [key: string]: any }>({})\r\n const params = computed(() => ({\r\n pageId: unref('pageId')\r\n }))\r\n const getSameLevelList = (list: { [key: string]: any } []): { [key: string]: any } [] => {\r\n const result: { [key: string]: any } [] = []\r\n for (const l of list) {\r\n if (l.conditions) {\r\n result.push(...getSameLevelList(l.conditions))\r\n } else {\r\n result.push(l)\r\n }\r\n }\r\n return result\r\n }\r\n const handleOk = () => {\r\n const sameLevelList = getSameLevelList(unref(conditionList))\r\n if (sameLevelList.find((v: any) => !v.value || !v.rule)) {\r\n message.error('条件值或规则不能为空')\r\n return\r\n }\r\n emit('save', {\r\n conditions: unref(conditionList),\r\n attribute: unref(attribute)\r\n })\r\n visible.value = false\r\n }\r\n\r\n const addKeyValue = (conditions: { [key: string]: any } []) => {\r\n for (const item of conditions) {\r\n if (item.conditions?.length) {\r\n addKeyValue(item.conditions)\r\n } else {\r\n item.key = nanoid()\r\n }\r\n }\r\n }\r\n\r\n watch(visible, (visible) => {\r\n if (visible) {\r\n if (Array.isArray(props.data?.conditions)) {\r\n const conditions = cloneDeep(props.data?.conditions || [])\r\n addKeyValue(conditions)\r\n conditionList.value = conditions\r\n }\r\n attribute.value = cloneDeep(props.data?.attribute || {})\r\n if (!unref(attribute).color) {\r\n attribute.value.color = ''\r\n }\r\n if (!unref(attribute).iconColor) {\r\n attribute.value.iconColor = ''\r\n }\r\n } else {\r\n conditionList.value = []\r\n attribute.value = {}\r\n }\r\n }, {\r\n flush: 'post'\r\n })\r\n\r\n const showModal = () => {\r\n visible.value = true\r\n }\r\n\r\n const addCondition = (join?: '||' | '&&') => {\r\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\r\n conditionList.value = [{\r\n key: nanoid()\r\n }]\r\n } else if (unref(conditionList)[0] != null) {\r\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\r\n conditionList.value = [{\r\n join,\r\n conditions: [\r\n unref(conditionList)[0],\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }]\r\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\r\n conditionList.value[0].conditions.push({\r\n key: nanoid()\r\n })\r\n }\r\n }\r\n }\r\n\r\n provide(CHANGE_CONDITION, {\r\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\r\n let conditions = conditionList.value\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions[index] = condition\r\n }\r\n },\r\n deleteCondition (index: number, path: string) {\r\n if (!path) {\r\n conditionList.value = []\r\n return\r\n }\r\n let conditions = unref(conditionList)\r\n const pathArr = path.split('-')\r\n if (pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions.splice(index, 1)\r\n if (conditions.length === 1) {\r\n if (pathArr.length > 0) {\r\n const lastIndex = pathArr.length - 1\r\n const lastPath = pathArr[lastIndex]\r\n const wrapperPath = pathArr.slice(0, lastIndex)\r\n let wrapperConditions = unref(conditionList)\r\n let wrapperJoin = ''\r\n for (const j of wrapperPath) {\r\n if (wrapperConditions[+j]) {\r\n wrapperJoin = wrapperConditions[+j]?.join\r\n wrapperConditions = wrapperConditions[+j]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n // 合并\r\n if (wrapperJoin === conditions[0].join) {\r\n if (Array.isArray(conditions[0].conditions)) {\r\n const temp = cloneDeep(conditions[0].conditions)\r\n wrapperConditions.splice(+lastPath, 1)\r\n wrapperConditions.splice(+lastPath, 0, ...temp)\r\n }\r\n } else {\r\n wrapperConditions[+lastPath] = conditions[0]\r\n }\r\n }\r\n } else if (conditions.length === 0) {\r\n conditionList.value = []\r\n }\r\n }\r\n }\r\n },\r\n addCondition (path: string, index: number, join: '||' | '&&') {\r\n let conditions = unref(conditionList)\r\n let cdJoin = ''\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n cdJoin = conditions[+i]?.join\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (cdJoin === join) {\r\n conditions.splice(index + 1, 0, {\r\n key: nanoid()\r\n })\r\n } else {\r\n const temp = cloneDeep(conditions[index])\r\n conditions[index] = {\r\n join,\r\n conditions: [\r\n temp,\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n })\r\n\r\n const onUploadChange = (imgSrc: string) => {\r\n attribute.value.icon = imgSrc\r\n // if (!unref(attribute).iconAlign) {\r\n // attribute.value.iconAlign = 'left'\r\n // }\r\n }\r\n\r\n const imgBaseUrl = computed(() => (window.config as any).imgBaseUrl)\r\n\r\n const iconOptions = ref([\r\n { label: '向下箭头', value: '/static/img/indicator-icon/arrow-down.svg' },\r\n { label: '向上箭头', value: '/static/img/indicator-icon/arrow-up.svg' }])\r\n\r\n expose({\r\n showModal\r\n })\r\n\r\n return {\r\n params,\r\n visible,\r\n conditionList,\r\n attribute,\r\n handleOk,\r\n addCondition,\r\n onUploadChange,\r\n imgBaseUrl,\r\n iconOptions\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-wrap {\r\n display: flex;\r\n align-items: center;\r\n .wrap-item {\r\n .title {\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n .border {\r\n width: 100%;\r\n height: 400px;\r\n border: 1px solid #e8e8e8;\r\n overflow: auto;\r\n .row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n }\r\n }\r\n &.left {\r\n width: calc(60% - 20px);\r\n margin-right: 20px;\r\n }\r\n &.right {\r\n width: 40%;\r\n .border {\r\n padding: 10px;\r\n }\r\n }\r\n }\r\n\r\n .add-and-condition {\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-modal\r\n width=\"60%\"\r\n v-model:visible=\"visible\"\r\n :title=\"`条件设置`\"\r\n :destroyOnClose=\"true\"\r\n :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n @ok=\"handleOk\"\r\n >\r\n\r\n <div class=\"config-wrap\">\r\n <div class=\"wrap-item left\">\r\n <div class=\"title\">\r\n 条件配置\r\n <template v-if=\"Array.isArray(conditionList) && conditionList.length > 0\">\r\n <a-button\r\n class=\"add-and-condition\"\r\n @click=\"addCondition('&&')\"\r\n >\r\n 添加且条件\r\n </a-button>\r\n <a-button\r\n class=\"add-or-condition\"\r\n @click=\"addCondition('||')\"\r\n >\r\n 添加或条件\r\n </a-button>\r\n </template>\r\n <a-button style=\"margin-left: 15px;\" @click=\"addCondition()\" v-else>\r\n 添加条件\r\n </a-button>\r\n </div>\r\n <div class=\"border\">\r\n <condition-list\r\n class=\"condition-list\"\r\n :list=\"conditionList\"\r\n :level=\"0\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"wrap-item right\">\r\n <div class=\"title\">属性配置</div>\r\n <div class=\"border\">\r\n <div class=\"row\">\r\n <div>字体颜色:</div>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.color\"\r\n :size=\"25\"\r\n />\r\n </div>\r\n <div class=\"row\">\r\n <div>图标:</div>\r\n <div style=\"display: flex; align-items: center;justify-items: center;\">\r\n <!-- fff -->\r\n <!-- <image-picker\r\n :value=\"attribute.icon\"\r\n :mini=\"true\"\r\n @change=\"onUploadChange\"\r\n /> -->\r\n <!-- <img class=\"image\" v-if=\" attribute.icon\" :src=\"imgBaseUrl + attribute.icon\" style=\"width: 16px;height: 16px\"/> -->\r\n <!-- <svg-icon v-if=\"attribute.icon\" :iSrc=\"attribute.icon\"></svg-icon> -->\r\n <a-select v-model:value=\"attribute.icon\" :options=\"iconOptions\" style=\"width: 160px\"></a-select>\r\n <pick-colors\r\n class=\"pick-colors\"\r\n v-model:value=\"attribute.iconColor\"\r\n :size=\"25\"\r\n />\r\n <!-- </div> -->\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\" v-if=\"attribute.icon\">\r\n <div>图标位置:</div>\r\n <a-radio-group v-model:value=\"attribute.iconAlign\">\r\n <a-radio-button value=\"left\">靠左</a-radio-button>\r\n <a-radio-button value=\"right\">靠右</a-radio-button>\r\n </a-radio-group>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </a-modal>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, watch, unref, provide, computed } from 'vue'\r\nimport ConditionList from './ConditionList.vue'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport { nanoid } from 'nanoid'\r\nimport { CHANGE_CONDITION } from '@/utils/constant'\r\nimport PickColors from 'vue-pick-colors'\r\n// import SvgIcon from '@/components/SvgIcon.vue'\r\n// import ImagePicker from './ImagePicker.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n message,\r\n Select as ASelect\r\n // Select as ASelect\r\n} from 'ant-design-vue'\r\nexport default defineComponent({\r\n components: {\r\n ConditionList,\r\n PickColors,\r\n // ImagePicker,\r\n AButton,\r\n AModal,\r\n ASelect\r\n // SvgIcon\r\n },\r\n props: {\r\n data: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n index: {\r\n type: Number,\r\n default: -1\r\n }\r\n },\r\n setup (props, { emit, expose }) {\r\n const visible = ref(false)\r\n const conditionList = ref<{ [key: string]: any } []>([])\r\n const attribute = ref<{ [key: string]: any }>({})\r\n const params = computed(() => ({\r\n pageId: unref('pageId')\r\n }))\r\n const getSameLevelList = (list: { [key: string]: any } []): { [key: string]: any } [] => {\r\n const result: { [key: string]: any } [] = []\r\n for (const l of list) {\r\n if (l.conditions) {\r\n result.push(...getSameLevelList(l.conditions))\r\n } else {\r\n result.push(l)\r\n }\r\n }\r\n return result\r\n }\r\n const handleOk = () => {\r\n const sameLevelList = getSameLevelList(unref(conditionList))\r\n if (sameLevelList.find((v: any) => !v.value || !v.rule)) {\r\n message.error('条件值或规则不能为空')\r\n return\r\n }\r\n emit('save', {\r\n conditions: unref(conditionList),\r\n attribute: unref(attribute)\r\n })\r\n visible.value = false\r\n }\r\n\r\n const addKeyValue = (conditions: { [key: string]: any } []) => {\r\n for (const item of conditions) {\r\n if (item.conditions?.length) {\r\n addKeyValue(item.conditions)\r\n } else {\r\n item.key = nanoid()\r\n }\r\n }\r\n }\r\n\r\n watch(visible, (visible) => {\r\n if (visible) {\r\n if (Array.isArray(props.data?.conditions)) {\r\n const conditions = cloneDeep(props.data?.conditions || [])\r\n addKeyValue(conditions)\r\n conditionList.value = conditions\r\n }\r\n attribute.value = cloneDeep(props.data?.attribute || {})\r\n if (!unref(attribute).color) {\r\n attribute.value.color = ''\r\n }\r\n if (!unref(attribute).iconColor) {\r\n attribute.value.iconColor = ''\r\n }\r\n } else {\r\n conditionList.value = []\r\n attribute.value = {}\r\n }\r\n }, {\r\n flush: 'post'\r\n })\r\n\r\n const showModal = () => {\r\n visible.value = true\r\n }\r\n\r\n const addCondition = (join?: '||' | '&&') => {\r\n if (unref(conditionList) == null || unref(conditionList)?.length === 0) {\r\n conditionList.value = [{\r\n key: nanoid()\r\n }]\r\n } else if (unref(conditionList)[0] != null) {\r\n if (unref(conditionList)[0].conditions == null || unref(conditionList)[0].join !== join) {\r\n conditionList.value = [{\r\n join,\r\n conditions: [\r\n unref(conditionList)[0],\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }]\r\n } else if (unref(conditionList)[0].conditions.length > 1 && unref(conditionList)[0].join === join) {\r\n conditionList.value[0].conditions.push({\r\n key: nanoid()\r\n })\r\n }\r\n }\r\n }\r\n\r\n provide(CHANGE_CONDITION, {\r\n updateCondition (condition: { [key:string]: any}, index: number, path: string) {\r\n let conditions = conditionList.value\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions[index] = condition\r\n }\r\n },\r\n deleteCondition (index: number, path: string) {\r\n if (!path) {\r\n conditionList.value = []\r\n return\r\n }\r\n let conditions = unref(conditionList)\r\n const pathArr = path.split('-')\r\n if (pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n if (Array.isArray(conditions) && conditions[index]) {\r\n conditions.splice(index, 1)\r\n if (conditions.length === 1) {\r\n if (pathArr.length > 0) {\r\n const lastIndex = pathArr.length - 1\r\n const lastPath = pathArr[lastIndex]\r\n const wrapperPath = pathArr.slice(0, lastIndex)\r\n let wrapperConditions = unref(conditionList)\r\n let wrapperJoin = ''\r\n for (const j of wrapperPath) {\r\n if (wrapperConditions[+j]) {\r\n wrapperJoin = wrapperConditions[+j]?.join\r\n wrapperConditions = wrapperConditions[+j]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n // 合并\r\n if (wrapperJoin === conditions[0].join) {\r\n if (Array.isArray(conditions[0].conditions)) {\r\n const temp = cloneDeep(conditions[0].conditions)\r\n wrapperConditions.splice(+lastPath, 1)\r\n wrapperConditions.splice(+lastPath, 0, ...temp)\r\n }\r\n } else {\r\n wrapperConditions[+lastPath] = conditions[0]\r\n }\r\n }\r\n } else if (conditions.length === 0) {\r\n conditionList.value = []\r\n }\r\n }\r\n }\r\n },\r\n addCondition (path: string, index: number, join: '||' | '&&') {\r\n let conditions = unref(conditionList)\r\n let cdJoin = ''\r\n const pathArr = path.split('-')\r\n if (path && pathArr?.length) {\r\n for (const i of pathArr) {\r\n if (conditions[+i]) {\r\n cdJoin = conditions[+i]?.join\r\n conditions = conditions[+i]?.conditions as { [key:string]: any } []\r\n } else {\r\n break\r\n }\r\n }\r\n }\r\n if (cdJoin === join) {\r\n conditions.splice(index + 1, 0, {\r\n key: nanoid()\r\n })\r\n } else {\r\n const temp = cloneDeep(conditions[index])\r\n conditions[index] = {\r\n join,\r\n conditions: [\r\n temp,\r\n {\r\n key: nanoid()\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n })\r\n\r\n const onUploadChange = (imgSrc: string) => {\r\n attribute.value.icon = imgSrc\r\n // if (!unref(attribute).iconAlign) {\r\n // attribute.value.iconAlign = 'left'\r\n // }\r\n }\r\n\r\n const imgBaseUrl = computed(() => (window.config as any).imgBaseUrl)\r\n\r\n const iconOptions = ref([\r\n { label: '向下箭头', value: '/static/img/indicator-icon/arrow-down.svg' },\r\n { label: '向上箭头', value: '/static/img/indicator-icon/arrow-up.svg' }])\r\n\r\n expose({\r\n showModal\r\n })\r\n\r\n return {\r\n params,\r\n visible,\r\n conditionList,\r\n attribute,\r\n handleOk,\r\n addCondition,\r\n onUploadChange,\r\n imgBaseUrl,\r\n iconOptions\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.config-wrap {\r\n display: flex;\r\n align-items: center;\r\n .wrap-item {\r\n .title {\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n }\r\n .border {\r\n width: 100%;\r\n height: 400px;\r\n border: 1px solid #e8e8e8;\r\n overflow: auto;\r\n .row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 15px;\r\n }\r\n }\r\n &.left {\r\n width: calc(60% - 20px);\r\n margin-right: 20px;\r\n }\r\n &.right {\r\n width: 40%;\r\n .border {\r\n padding: 10px;\r\n }\r\n }\r\n }\r\n\r\n .add-and-condition {\r\n margin-left: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-modal width=\"60%\" v-model:visible=\"visible\" :title=\"`条件列表`\" :destroyOnClose=\"true\" :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\" @ok=\"close\">\r\n\r\n <a-button @click=\"addRule\">新增条件</a-button>\r\n <a-table class=\"column-table\" size=\"small\" :columns=\"configColumns\" :data-source=\"rules\" :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\" bordered>\r\n <template #bodyCell=\"{ column, record, index }\">\r\n <template v-if=\"column.dataIndex === 'name'\">\r\n <a-input size=\"small\" v-model:value=\"record.name\"></a-input>\r\n </template>\r\n <template v-if=\"column.dataIndex === 'operation'\">\r\n <a-button size=\"small\" @click=\"openRuleModal(record, index)\">编辑</a-button>\r\n <a-button size=\"small\" @click=\"deleteRule(index)\" style=\"margin-left: 6px\">删除</a-button>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-modal>\r\n <condition-wrap\r\n ref=\"conditionsRef\"\r\n :data=\"currentData\"\r\n :index=\"currentIndex\"\r\n @save=\"closeRuleModal\"\r\n />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, unref } from 'vue'\r\nimport ConditionWrap from '../components/ConditionWrap.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n Table as ATable,\r\n Input as AInput\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\ninterface TRule {\r\n conditionCode: string,\r\n name: string,\r\n condition: any[],\r\n attribute: any\r\n}\r\ntype TRuleArr = TRule[]\r\nexport default defineComponent({\r\n components: {\r\n AModal,\r\n AButton,\r\n ATable,\r\n ConditionWrap,\r\n AInput\r\n },\r\n setup (props, { expose, emit }) {\r\n console.log(props)\r\n const visible = ref(false)\r\n const conditionsRef = ref()\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const configColumns: any = [\r\n {\r\n title: '条件标题',\r\n dataIndex: 'name',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '条件内容',\r\n dataIndex: 'conditionCode',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 250\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'operation',\r\n ellipsis: true,\r\n width: 160\r\n }\r\n ]\r\n const rules = ref<TRuleArr>([])\r\n const curTableCompColumn = ref<any>()\r\n // 把条件配置转成表达式\r\n const handleConditions = (conditions: any, join: any = '') => {\r\n let result = ''\r\n conditions.forEach((condition, index) => {\r\n const { value, rule } = condition\r\n if (condition.conditions) {\r\n result += `(${handleConditions(condition.conditions, condition.join)})`\r\n } else if (value && rule) {\r\n result += `value ${rule} '${value}'`\r\n }\r\n result += `${index === conditions.length - 1 ? '' : join ? ' ' + join + ' ' : ''}`\r\n })\r\n return result\r\n }\r\n // 打开弹窗初始化\r\n const open = (tableCompColumn: any) => {\r\n rules.value = []\r\n curTableCompColumn.value = tableCompColumn\r\n const { rules: oldRules, conditionCode, conditions, attribute } = tableCompColumn\r\n if (oldRules) {\r\n rules.value = cloneDeep(oldRules)\r\n } else {\r\n if (conditionCode) {\r\n const newRules = { conditionCode, conditions, attribute, name: '新条件' } as any\r\n rules.value.push(cloneDeep(newRules))\r\n delete tableCompColumn.conditionCode\r\n delete tableCompColumn.conditions\r\n delete tableCompColumn.attribute\r\n }\r\n }\r\n visible.value = true\r\n }\r\n // 关闭弹窗提交\r\n const close = () => {\r\n visible.value = false\r\n for (const rule of rules.value) {\r\n if (rule.conditionCode === '') return '不能条件为空!'\r\n }\r\n emit('confirm', unref(rules))\r\n }\r\n // 新建规则\r\n const addRule = () => {\r\n rules.value.push({\r\n conditionCode: '',\r\n name: '新条件',\r\n condition: [],\r\n attribute: {}\r\n })\r\n }\r\n // 关闭编辑规则弹窗\r\n const closeRuleModal = (data: any) => {\r\n data.conditionCode = handleConditions(data.conditions)\r\n Object.assign(rules.value[currentIndex.value], data)\r\n }\r\n // 打开编辑规则弹窗\r\n const openRuleModal = (record: any, index: number) => {\r\n unref(conditionsRef).showModal()\r\n currentData.value = cloneDeep(record)\r\n currentIndex.value = index\r\n }\r\n const deleteRule = (index: number) => { rules.value.splice(index, 1) }\r\n expose({\r\n open\r\n })\r\n\r\n return {\r\n visible,\r\n currentData,\r\n currentIndex,\r\n configColumns,\r\n conditionsRef,\r\n rules,\r\n open,\r\n close,\r\n addRule,\r\n openRuleModal,\r\n closeRuleModal,\r\n deleteRule\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\"></style>\r\n","<template>\r\n <a-modal width=\"60%\" v-model:visible=\"visible\" :title=\"`条件列表`\" :destroyOnClose=\"true\" :maskClosable=\"false\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\" @ok=\"close\">\r\n\r\n <a-button @click=\"addRule\">新增条件</a-button>\r\n <a-table class=\"column-table\" size=\"small\" :columns=\"configColumns\" :data-source=\"rules\" :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\" bordered>\r\n <template #bodyCell=\"{ column, record, index }\">\r\n <template v-if=\"column.dataIndex === 'name'\">\r\n <a-input size=\"small\" v-model:value=\"record.name\"></a-input>\r\n </template>\r\n <template v-if=\"column.dataIndex === 'operation'\">\r\n <a-button size=\"small\" @click=\"openRuleModal(record, index)\">编辑</a-button>\r\n <a-button size=\"small\" @click=\"deleteRule(index)\" style=\"margin-left: 6px\">删除</a-button>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-modal>\r\n <condition-wrap\r\n ref=\"conditionsRef\"\r\n :data=\"currentData\"\r\n :index=\"currentIndex\"\r\n @save=\"closeRuleModal\"\r\n />\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, unref } from 'vue'\r\nimport ConditionWrap from '../components/ConditionWrap.vue'\r\nimport {\r\n Button as AButton,\r\n Modal as AModal,\r\n Table as ATable,\r\n Input as AInput\r\n} from 'ant-design-vue'\r\nimport { cloneDeep } from 'lodash-es'\r\ninterface TRule {\r\n conditionCode: string,\r\n name: string,\r\n condition: any[],\r\n attribute: any\r\n}\r\ntype TRuleArr = TRule[]\r\nexport default defineComponent({\r\n components: {\r\n AModal,\r\n AButton,\r\n ATable,\r\n ConditionWrap,\r\n AInput\r\n },\r\n setup (props, { expose, emit }) {\r\n console.log(props)\r\n const visible = ref(false)\r\n const conditionsRef = ref()\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const configColumns: any = [\r\n {\r\n title: '条件标题',\r\n dataIndex: 'name',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '条件内容',\r\n dataIndex: 'conditionCode',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 250\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'operation',\r\n ellipsis: true,\r\n width: 160\r\n }\r\n ]\r\n const rules = ref<TRuleArr>([])\r\n const curTableCompColumn = ref<any>()\r\n // 把条件配置转成表达式\r\n const handleConditions = (conditions: any, join: any = '') => {\r\n let result = ''\r\n conditions.forEach((condition, index) => {\r\n const { value, rule } = condition\r\n if (condition.conditions) {\r\n result += `(${handleConditions(condition.conditions, condition.join)})`\r\n } else if (value && rule) {\r\n result += `value ${rule} '${value}'`\r\n }\r\n result += `${index === conditions.length - 1 ? '' : join ? ' ' + join + ' ' : ''}`\r\n })\r\n return result\r\n }\r\n // 打开弹窗初始化\r\n const open = (tableCompColumn: any) => {\r\n rules.value = []\r\n curTableCompColumn.value = tableCompColumn\r\n const { rules: oldRules, conditionCode, conditions, attribute } = tableCompColumn\r\n if (oldRules) {\r\n rules.value = cloneDeep(oldRules)\r\n } else {\r\n if (conditionCode) {\r\n const newRules = { conditionCode, conditions, attribute, name: '新条件' } as any\r\n rules.value.push(cloneDeep(newRules))\r\n delete tableCompColumn.conditionCode\r\n delete tableCompColumn.conditions\r\n delete tableCompColumn.attribute\r\n }\r\n }\r\n visible.value = true\r\n }\r\n // 关闭弹窗提交\r\n const close = () => {\r\n visible.value = false\r\n for (const rule of rules.value) {\r\n if (rule.conditionCode === '') return '不能条件为空!'\r\n }\r\n emit('confirm', unref(rules))\r\n }\r\n // 新建规则\r\n const addRule = () => {\r\n rules.value.push({\r\n conditionCode: '',\r\n name: '新条件',\r\n condition: [],\r\n attribute: {}\r\n })\r\n }\r\n // 关闭编辑规则弹窗\r\n const closeRuleModal = (data: any) => {\r\n data.conditionCode = handleConditions(data.conditions)\r\n Object.assign(rules.value[currentIndex.value], data)\r\n }\r\n // 打开编辑规则弹窗\r\n const openRuleModal = (record: any, index: number) => {\r\n unref(conditionsRef).showModal()\r\n currentData.value = cloneDeep(record)\r\n currentIndex.value = index\r\n }\r\n const deleteRule = (index: number) => { rules.value.splice(index, 1) }\r\n expose({\r\n open\r\n })\r\n\r\n return {\r\n visible,\r\n currentData,\r\n currentIndex,\r\n configColumns,\r\n conditionsRef,\r\n rules,\r\n open,\r\n close,\r\n addRule,\r\n openRuleModal,\r\n closeRuleModal,\r\n deleteRule\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\"></style>\r\n","<template>\r\n <div class=\"table-column-config\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"configData\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, text, record, index }\">\r\n <template v-if=\"column.dataIndex === 'style'\">\r\n <a-checkbox\r\n @change=\"changeRenderBool(record, $event)\"\r\n :checked=\"record.style\"\r\n ></a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'width'\">\r\n <a-input v-model:value.trim=\"record.width\" />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'renderText'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.renderText\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'renderText', '列自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerTemplate'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.headerTemplate\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'headerTemplate', '列表头自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerAlign'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.headerAlign\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'align'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.align\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'fixed'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.fixed\"\r\n >\r\n <a-select-option value=\"\">不固定</a-select-option>\r\n <a-select-option value=\"left\">靠左</a-select-option>\r\n <a-select-option value=\"right\">靠右</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'dataFormat'\">\r\n <a-select\r\n v-model:value=\"record.dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit'\">\r\n <a-input-number\r\n v-if=\"record.dataFormat && record.dataFormat.includes('#.00')\"\r\n v-model:value=\"record.retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'calculateShow'\">\r\n <a-checkbox v-model:checked=\"record.calculateShow.sum\">合计</a-checkbox>\r\n <a-checkbox v-model:checked=\"record.calculateShow.avg\">平均</a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'conditions'\">\r\n <code-outlined class=\"icon\" @click.stop=\"openConditions(index)\"/>\r\n </template>\r\n </template>\r\n </a-table>\r\n <a-modal\r\n :title=\"editorTitle\"\r\n v-model:visible=\"editorVisible\"\r\n destroy-on-close\r\n width=\"700px\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n centered\r\n :zIndex=\"1020\"\r\n okText=\"保存\"\r\n cancelText=\"取消\"\r\n @ok=\"handleOk\"\r\n >\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"optionCode\"\r\n @change=\"onEditorChange\"\r\n />\r\n </a-modal>\r\n <conditions-table\r\n @confirm=\"confirmConditions\"\r\n ref=\"conditionsTableRef\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n ref,\r\n inject,\r\n watch,\r\n onMounted,\r\n unref,\r\n computed\r\n} from 'vue'\r\nimport {\r\n Table as ATable,\r\n Modal as AModal,\r\n Checkbox as ACheckbox,\r\n Input as AInput,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport { CodeOutlined } from '@ant-design/icons-vue'\r\nimport 'ant-design-vue/es/table/style'\r\nimport Editor from '@/indicator/editor'\r\nimport ConditionsTable from './components/ConditionsTable.vue'\r\n\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义',\r\n dataIndex: 'style',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '列宽度(px/%)',\r\n dataIndex: 'width',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义函数',\r\n dataIndex: 'renderText',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '列表头自定义函数',\r\n dataIndex: 'headerTemplate',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '表头/表尾列对齐方式',\r\n dataIndex: 'headerAlign',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '内容列对齐方式',\r\n dataIndex: 'align',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '固定当前列',\r\n dataIndex: 'fixed',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '计算行',\r\n dataIndex: 'calculateShow',\r\n ellipsis: true,\r\n width: 180\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'conditions',\r\n ellipsis: true,\r\n width: 120\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AModal,\r\n ACheckbox,\r\n AInput,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n Editor,\r\n CodeOutlined,\r\n ConditionsTable\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n\r\n const isGroupTable = computed(\r\n () => !!unref(selectedComponent)?.isGroupTable\r\n )\r\n const tableColumns = computed(() => {\r\n return unref(selectedComponent)?.tableColumns || []\r\n })\r\n const configData = ref([])\r\n let saveObj = null\r\n let saveKey = ''\r\n const optionCode = ref<string>('')\r\n const editorTitle = ref<String>('')\r\n const editorVisible = ref<any>(false)\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n const handleTableData = () => {\r\n let columns = []\r\n configData.value = []\r\n if (!isGroupTable.value) {\r\n const queryColumnList = unref(graphicConfig)?.queryColumnList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...queryColumnList, ...indicators]\r\n } else {\r\n const rowHeaderList = unref(graphicConfig)?.rowHeaderList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...rowHeaderList, ...indicators]\r\n }\r\n console.log('columns', columns, tableColumns)\r\n columns.forEach((column) => {\r\n let tableColumn = unref(tableColumns)?.find((item: any) => item.label === column.label)\r\n if (!tableColumn) {\r\n tableColumn = {\r\n label: column.label,\r\n prop: column.label,\r\n style: false,\r\n width: '',\r\n renderText: '',\r\n headerTemplate: '',\r\n headerAlign: 'left',\r\n align: 'left',\r\n fixed: '',\r\n dataFormat: [],\r\n retentiondigit: null,\r\n calculateShow: { // 表格计算显示哪些行\r\n sum: false, // 求和\r\n avg: false // 求平均\r\n },\r\n conditions: [], // 条件配置\r\n attribute: {} // 条件属性\r\n }\r\n }\r\n if (!tableColumn.calculateShow) {\r\n tableColumn.calculateShow = {\r\n sum: false,\r\n avg: false\r\n }\r\n }\r\n configData.value.push(tableColumn)\r\n })\r\n selectedComponent.value.tableColumns = configData.value\r\n }\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n // 是否开启列自定义函数\r\n const changeRenderBool = (row, e) => {\r\n row.style = e.target.checked\r\n if (row.style) {\r\n if (row.renderBool === undefined) {\r\n row.renderBool = false\r\n }\r\n } else {\r\n delete row.renderBool\r\n }\r\n }\r\n const renderSave = (obj: any, key: string, title: string) => {\r\n if (obj && key) {\r\n saveObj = obj\r\n saveKey = key\r\n optionCode.value = obj[key] || ''\r\n editorVisible.value = true\r\n editorTitle.value = title\r\n }\r\n }\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const handleOk = () => {\r\n if (saveObj && saveKey) {\r\n saveObj[saveKey] = optionCode.value\r\n }\r\n optionCode.value = ''\r\n editorVisible.value = false\r\n }\r\n // 条件属性设置弹窗\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const conditionsTableRef = ref()\r\n const openConditions = (index: number) => {\r\n currentIndex.value = index\r\n currentData.value = configData.value[index]\r\n unref(conditionsTableRef).open(configData.value[index])\r\n }\r\n const confirmConditions = (rules: any) => {\r\n currentData.value.rules = rules\r\n }\r\n return {\r\n configColumns,\r\n configData,\r\n editorTitle,\r\n editorVisible,\r\n optionCode,\r\n handleOk,\r\n renderSave,\r\n onEditorChange,\r\n changeRenderBool,\r\n openConditions,\r\n confirmConditions,\r\n conditionsTableRef\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"table-column-config\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"configData\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, text, record, index }\">\r\n <template v-if=\"column.dataIndex === 'style'\">\r\n <a-checkbox\r\n @change=\"changeRenderBool(record, $event)\"\r\n :checked=\"record.style\"\r\n ></a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'width'\">\r\n <a-input v-model:value.trim=\"record.width\" />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'renderText'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.renderText\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'renderText', '列自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerTemplate'\">\r\n <template v-if=\"!record.style\">\r\n {{ text }}\r\n </template>\r\n <a-input\r\n v-else\r\n v-model:value=\"record.headerTemplate\"\r\n :readOnly=\"true\"\r\n @click=\"renderSave(record, 'headerTemplate', '列表头自定义函数')\"\r\n />\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'headerAlign'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.headerAlign\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'align'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.align\"\r\n >\r\n <a-select-option value=\"left\">左对齐</a-select-option>\r\n <a-select-option value=\"center\">居中</a-select-option>\r\n <a-select-option value=\"right\">右对齐</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'fixed'\">\r\n <a-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n v-model:value=\"record.fixed\"\r\n >\r\n <a-select-option value=\"\">不固定</a-select-option>\r\n <a-select-option value=\"left\">靠左</a-select-option>\r\n <a-select-option value=\"right\">靠右</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'dataFormat'\">\r\n <a-select\r\n v-model:value=\"record.dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit'\">\r\n <a-input-number\r\n v-if=\"record.dataFormat && record.dataFormat.includes('#.00')\"\r\n v-model:value=\"record.retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'calculateShow'\">\r\n <a-checkbox v-model:checked=\"record.calculateShow.sum\">合计</a-checkbox>\r\n <a-checkbox v-model:checked=\"record.calculateShow.avg\">平均</a-checkbox>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'conditions'\">\r\n <code-outlined class=\"icon\" @click.stop=\"openConditions(index)\"/>\r\n </template>\r\n </template>\r\n </a-table>\r\n <a-modal\r\n :title=\"editorTitle\"\r\n v-model:visible=\"editorVisible\"\r\n destroy-on-close\r\n width=\"700px\"\r\n :bodyStyle=\"{\r\n height: '500px',\r\n overflow: 'auto'\r\n }\"\r\n centered\r\n :zIndex=\"1020\"\r\n okText=\"保存\"\r\n cancelText=\"取消\"\r\n @ok=\"handleOk\"\r\n >\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"optionCode\"\r\n @change=\"onEditorChange\"\r\n />\r\n </a-modal>\r\n <conditions-table\r\n @confirm=\"confirmConditions\"\r\n ref=\"conditionsTableRef\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n ref,\r\n inject,\r\n watch,\r\n onMounted,\r\n unref,\r\n computed\r\n} from 'vue'\r\nimport {\r\n Table as ATable,\r\n Modal as AModal,\r\n Checkbox as ACheckbox,\r\n Input as AInput,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport { CodeOutlined } from '@ant-design/icons-vue'\r\nimport 'ant-design-vue/es/table/style'\r\nimport Editor from '@/indicator/editor'\r\nimport ConditionsTable from './components/ConditionsTable.vue'\r\n\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义',\r\n dataIndex: 'style',\r\n align: 'center',\r\n ellipsis: true,\r\n width: 100\r\n },\r\n {\r\n title: '列宽度(px/%)',\r\n dataIndex: 'width',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '列自定义函数',\r\n dataIndex: 'renderText',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '列表头自定义函数',\r\n dataIndex: 'headerTemplate',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '表头/表尾列对齐方式',\r\n dataIndex: 'headerAlign',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '内容列对齐方式',\r\n dataIndex: 'align',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '固定当前列',\r\n dataIndex: 'fixed',\r\n ellipsis: true,\r\n width: 170\r\n },\r\n {\r\n title: '计算行',\r\n dataIndex: 'calculateShow',\r\n ellipsis: true,\r\n width: 180\r\n },\r\n {\r\n title: '条件设置',\r\n dataIndex: 'conditions',\r\n ellipsis: true,\r\n width: 120\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AModal,\r\n ACheckbox,\r\n AInput,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n Editor,\r\n CodeOutlined,\r\n ConditionsTable\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n\r\n const isGroupTable = computed(\r\n () => !!unref(selectedComponent)?.isGroupTable\r\n )\r\n const tableColumns = computed(() => {\r\n return unref(selectedComponent)?.tableColumns || []\r\n })\r\n const configData = ref([])\r\n let saveObj = null\r\n let saveKey = ''\r\n const optionCode = ref<string>('')\r\n const editorTitle = ref<String>('')\r\n const editorVisible = ref<any>(false)\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n const handleTableData = () => {\r\n let columns = []\r\n configData.value = []\r\n if (!isGroupTable.value) {\r\n const queryColumnList = unref(graphicConfig)?.queryColumnList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...queryColumnList, ...indicators]\r\n } else {\r\n const rowHeaderList = unref(graphicConfig)?.rowHeaderList || []\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n columns = [...rowHeaderList, ...indicators]\r\n }\r\n console.log('columns', columns, tableColumns)\r\n columns.forEach((column) => {\r\n let tableColumn = unref(tableColumns)?.find((item: any) => item.label === column.label)\r\n if (!tableColumn) {\r\n tableColumn = {\r\n label: column.label,\r\n prop: column.label,\r\n style: false,\r\n width: '',\r\n renderText: '',\r\n headerTemplate: '',\r\n headerAlign: 'left',\r\n align: 'left',\r\n fixed: '',\r\n dataFormat: [],\r\n retentiondigit: null,\r\n calculateShow: { // 表格计算显示哪些行\r\n sum: false, // 求和\r\n avg: false // 求平均\r\n },\r\n conditions: [], // 条件配置\r\n attribute: {} // 条件属性\r\n }\r\n }\r\n if (!tableColumn.calculateShow) {\r\n tableColumn.calculateShow = {\r\n sum: false,\r\n avg: false\r\n }\r\n }\r\n configData.value.push(tableColumn)\r\n })\r\n selectedComponent.value.tableColumns = configData.value\r\n }\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n // 是否开启列自定义函数\r\n const changeRenderBool = (row, e) => {\r\n row.style = e.target.checked\r\n if (row.style) {\r\n if (row.renderBool === undefined) {\r\n row.renderBool = false\r\n }\r\n } else {\r\n delete row.renderBool\r\n }\r\n }\r\n const renderSave = (obj: any, key: string, title: string) => {\r\n if (obj && key) {\r\n saveObj = obj\r\n saveKey = key\r\n optionCode.value = obj[key] || ''\r\n editorVisible.value = true\r\n editorTitle.value = title\r\n }\r\n }\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const handleOk = () => {\r\n if (saveObj && saveKey) {\r\n saveObj[saveKey] = optionCode.value\r\n }\r\n optionCode.value = ''\r\n editorVisible.value = false\r\n }\r\n // 条件属性设置弹窗\r\n const currentData = ref()\r\n const currentIndex = ref(0)\r\n const conditionsTableRef = ref()\r\n const openConditions = (index: number) => {\r\n currentIndex.value = index\r\n currentData.value = configData.value[index]\r\n unref(conditionsTableRef).open(configData.value[index])\r\n }\r\n const confirmConditions = (rules: any) => {\r\n currentData.value.rules = rules\r\n }\r\n return {\r\n configColumns,\r\n configData,\r\n editorTitle,\r\n editorVisible,\r\n optionCode,\r\n handleOk,\r\n renderSave,\r\n onEditorChange,\r\n changeRenderBool,\r\n openConditions,\r\n confirmConditions,\r\n conditionsTableRef\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <a-collapse-panel key=\"cardFormat\" header=\"数据格式化\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"graphicConfig.indicators || []\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.dataIndex === 'dataFormat' && columnsConfigMap[record.label]\">\r\n <a-select\r\n v-model:value=\"columnsConfigMap[record.label].dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit' && columnsConfigMap[record.label]\">\r\n <a-input-number\r\n v-if=\"\r\n columnsConfigMap[record.label].dataFormat && columnsConfigMap[record.label].dataFormat.includes('#.00')\r\n \"\r\n v-model:value=\"columnsConfigMap[record.label].retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-collapse-panel>\r\n </a-collapse>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, inject, watch, onMounted, unref, computed, ref } from 'vue'\r\nimport {\r\n Table as ATable,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport 'ant-design-vue/es/table/style'\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const activePanel = ref<string[]>(['cardFormat'])\r\n\r\n const handleTableData = () => {\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n const columnsConfigMap = selectedComponent.value.columnsConfigMap || {}\r\n const defaultConfig = { dataFormat: [], retentiondigit: '' }\r\n const newColumnsConfig = indicators.reduce(\r\n (a: any, b: any) => ({ ...a, [b.label]: { ...defaultConfig, ...(columnsConfigMap[b.label] || {}) } }),\r\n {}\r\n )\r\n selectedComponent.value.columnsConfigMap = newColumnsConfig\r\n }\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n const columnsConfigMap = computed(() => selectedComponent.value.columnsConfigMap || {})\r\n return {\r\n selectedComponent,\r\n configColumns,\r\n graphicConfig,\r\n columnsConfigMap,\r\n activePanel\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <a-collapse-panel key=\"cardFormat\" header=\"数据格式化\">\r\n <a-table\r\n class=\"column-table\"\r\n :columns=\"configColumns\"\r\n :data-source=\"graphicConfig.indicators || []\"\r\n :scroll=\"{ x: '100%', y: 400 }\"\r\n :pagination=\"false\"\r\n bordered\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.dataIndex === 'dataFormat' && columnsConfigMap[record.label]\">\r\n <a-select\r\n v-model:value=\"columnsConfigMap[record.label].dataFormat\"\r\n style=\"width: 100%\"\r\n mode=\"multiple\"\r\n allowClear\r\n :maxTagCount=\"1\"\r\n >\r\n <a-select-option value=\"#,000\">千分位</a-select-option>\r\n <a-select-option value=\"#.00\">保留小数</a-select-option>\r\n <a-select-option value=\"#\">保留有效位</a-select-option>\r\n </a-select>\r\n </template>\r\n <template v-else-if=\"column.dataIndex === 'retentiondigit' && columnsConfigMap[record.label]\">\r\n <a-input-number\r\n v-if=\"\r\n columnsConfigMap[record.label].dataFormat && columnsConfigMap[record.label].dataFormat.includes('#.00')\r\n \"\r\n v-model:value=\"columnsConfigMap[record.label].retentiondigit\"\r\n :min=\"0\"\r\n :max=\"10\"\r\n ></a-input-number>\r\n </template>\r\n </template>\r\n </a-table>\r\n </a-collapse-panel>\r\n </a-collapse>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, inject, watch, onMounted, unref, computed, ref } from 'vue'\r\nimport {\r\n Table as ATable,\r\n InputNumber as AInputNumber,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel\r\n} from 'ant-design-vue'\r\nimport { SELECTED_COMPONENT, GRAPHIC_CONFIG } from '@/utils/constant'\r\nimport 'ant-design-vue/es/table/style'\r\nconst configColumns: any = [\r\n {\r\n title: '列名',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '参数',\r\n dataIndex: 'label',\r\n fixed: 'left',\r\n ellipsis: true,\r\n width: 135\r\n },\r\n {\r\n title: '数据格式化',\r\n dataIndex: 'dataFormat',\r\n ellipsis: true,\r\n width: 225\r\n },\r\n {\r\n title: '保留小数位数',\r\n dataIndex: 'retentiondigit',\r\n ellipsis: true,\r\n width: 135\r\n }\r\n]\r\n\r\nexport default defineComponent({\r\n name: 'TableColumnConfig',\r\n components: {\r\n ATable,\r\n AInputNumber,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel\r\n },\r\n setup () {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const activePanel = ref<string[]>(['cardFormat'])\r\n\r\n const handleTableData = () => {\r\n const indicators = unref(graphicConfig)?.indicators || []\r\n const columnsConfigMap = selectedComponent.value.columnsConfigMap || {}\r\n const defaultConfig = { dataFormat: [], retentiondigit: '' }\r\n const newColumnsConfig = indicators.reduce(\r\n (a: any, b: any) => ({ ...a, [b.label]: { ...defaultConfig, ...(columnsConfigMap[b.label] || {}) } }),\r\n {}\r\n )\r\n selectedComponent.value.columnsConfigMap = newColumnsConfig\r\n }\r\n watch(\r\n graphicConfig,\r\n () => {\r\n handleTableData()\r\n },\r\n {\r\n deep: true,\r\n flush: 'post'\r\n }\r\n )\r\n onMounted(() => {\r\n handleTableData()\r\n })\r\n const columnsConfigMap = computed(() => selectedComponent.value.columnsConfigMap || {})\r\n return {\r\n selectedComponent,\r\n configColumns,\r\n graphicConfig,\r\n columnsConfigMap,\r\n activePanel\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.table-column-config {\r\n // max-width: 1100px;\r\n width: 100%;\r\n .column-table {\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"style-group\">\r\n <template v-if=\"componentType !== 'table' && componentType !== 'card'\">\r\n <a-form-item label=\"图表类型\">\r\n <a-select v-model:value=\"type\" style=\"width: 100%\" @change=\"handleChangeType\">\r\n <a-select-option value=\"line\">折线图</a-select-option>\r\n <a-select-option value=\"bar\">柱状图</a-select-option>\r\n <a-select-option value=\"pie\">饼图</a-select-option>\r\n <a-select-option value=\"comboGraph\">组合图表</a-select-option>\r\n <a-select-option value=\"customGraph\">自定义图表</a-select-option>\r\n </a-select>\r\n </a-form-item>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <template v-if=\"isRenderForm(detailPropsGroup, type)\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <template #extra>\r\n <a-switch\r\n v-if=\"typeof detailPropsGroup.enableProps === 'boolean'\"\r\n :checked=\"detailPropsGroup.enableProps\"\r\n @change=\"onSwitchChange($event, detailPropsGroup.enablePropsName)\"\r\n @click=\"onSwitchClick\"\r\n />\r\n </template>\r\n <props-to-form\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n </template>\r\n <!-- 只有在选择自定义图表展示 -->\r\n <a-collapse-panel key=\"custom-option\" header=\"自定义option配置\" v-if=\"isShowOptionEditor\">\r\n <editor class=\"option-editor\" language=\"typescript\" :valueData=\"optionCode\" @change=\"onEditorChange\" />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'table'\">\r\n <a-collapse v-model:activeKey=\"tablePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title && detailPropsGroup.onlyType?.includes(componentType)\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <props-to-form\r\n :componentType=\"componentType\"\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n <a-collapse-panel key=\"tableColumn\" header=\"表格列配置\">\r\n <table-column-config />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"headerCellStyleMethod\" header=\"表头单元格样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.headerCellStyleMethod\"\r\n @change=\"tableEditorChange($event, 'headerCellStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"rowStyleMethod\" header=\"行样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.rowStyleMethod\"\r\n @change=\"tableEditorChange($event, 'rowStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'card'\">\r\n <indicator-container></indicator-container>\r\n </template>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, ref, unref, inject } from 'vue'\r\nimport {\r\n FormItem as AFormItem,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel,\r\n Switch as ASwitch\r\n} from 'ant-design-vue'\r\nimport { DetailPropsGroups, DetailPropsGroup, PropsGroup, propsGroups } from './data'\r\nimport propsMap from '@/indicator/indicator-library/data-config/style-config-group/chart-props'\r\nimport PropsToForm from './props-to-form'\r\nimport TableColumnConfig from './table-column-config'\r\nimport IndicatorContainer from './indicator-container'\r\nimport Editor from '@/indicator/editor'\r\nimport {\r\n CHARTS_OPTIONS,\r\n TABLE_OPTIONS,\r\n UPDATE_CHARTS_OPTIONS,\r\n UPDATE_TABLE_OPTIONS,\r\n SELECTED_COMPONENT,\r\n REFRESH_DATA\r\n} from '@/utils/constant'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { pick } from 'lodash-es'\r\nimport 'ant-design-vue/es/collapse/style'\r\nexport default defineComponent({\r\n name: 'StyleConfigGroup',\r\n props: {\r\n componentType: {\r\n // 控件类型\r\n type: String,\r\n default: ''\r\n },\r\n isGroupTable: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n components: {\r\n PropsToForm,\r\n TableColumnConfig,\r\n Editor,\r\n AFormItem,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel,\r\n ASwitch,\r\n IndicatorContainer\r\n },\r\n setup (compProps) {\r\n const activePanel = ref<string[]>([])\r\n const tablePanel = ref<string[]>(['表格'])\r\n const chartsOptions = inject(CHARTS_OPTIONS) as {\r\n [key: string]: any\r\n }\r\n const tableOptions = inject(TABLE_OPTIONS) as any\r\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\r\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\r\n const refreshData = inject(REFRESH_DATA) as Function\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const handleChangeType = (val: string) => {\r\n updateChartsOptions(\r\n {\r\n ...propsMap[val]\r\n },\r\n false\r\n )\r\n unref(selectedComponent).type = unref(type)\r\n refreshData()\r\n }\r\n const type = computed(() => unref(chartsOptions)?.type)\r\n const groupTableProps = ['showTotalBool', 'totalName', 'expandAll']\r\n const detailPropsGroups = computed<DetailPropsGroups>(() => {\r\n return propsGroups\r\n .map((propsGroup: PropsGroup) => {\r\n const { props, title, enableProps, onlyType, excludeType } = propsGroup\r\n const pickProps = [] as string[]\r\n props.forEach((prop) => {\r\n if (typeof prop === 'string') {\r\n if (groupTableProps.includes(prop)) {\r\n if (compProps.isGroupTable) {\r\n pickProps.push(prop)\r\n }\r\n } else {\r\n pickProps.push(prop)\r\n }\r\n }\r\n })\r\n let filterEnableProps, filterProps\r\n if (compProps.componentType === 'table' && onlyType?.includes(compProps.componentType)) {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && tableOptions.value\r\n ? (tableOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(tableOptions), pickProps)\r\n } else {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && chartsOptions.value\r\n ? (chartsOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(chartsOptions), pickProps)\r\n }\r\n return {\r\n title,\r\n enableProps: filterEnableProps,\r\n enablePropsName: enableProps,\r\n onlyType,\r\n excludeType,\r\n props: filterProps\r\n }\r\n }) // 过滤空属性组\r\n .filter(({ props }) => {\r\n return Object.keys(props).length > 0\r\n })\r\n })\r\n const isRenderForm = (detailPropsGroup: DetailPropsGroup, componentType: string) => {\r\n const { onlyType, excludeType } = detailPropsGroup\r\n if (onlyType == null && excludeType == null) {\r\n return true\r\n } else if (onlyType) {\r\n return lowerCaseIncludes(componentType, onlyType)\r\n } else if (excludeType) {\r\n return !lowerCaseIncludes(componentType, excludeType)\r\n }\r\n return false\r\n }\r\n const onSwitchClick = (checked: boolean | string | number, event: Event) => {\r\n event?.stopPropagation()\r\n return checked\r\n }\r\n const onSwitchChange = (value: any, key: string | undefined) => {\r\n if (key != null) {\r\n updateChartsOptions({\r\n [key]: value\r\n })\r\n }\r\n }\r\n const ComponentString = computed(() => JSON.stringify(unref(chartsOptions), null, 2))\r\n const updateComponentOptions = (code: string) => {\r\n try {\r\n const props = JSON.parse(code || '{}')\r\n updateChartsOptions(props, false)\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const optionCode = ref('')\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const tableEditorChange = (code: string, key) => {\r\n try {\r\n updateTableOptions({\r\n [key]: code\r\n })\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const isShowOptionEditor = computed(() => ['customGraph'].includes(unref(chartsOptions)?.type))\r\n return {\r\n type,\r\n handleChangeType,\r\n activePanel,\r\n tablePanel,\r\n ComponentString,\r\n updateComponentOptions,\r\n tableOptions,\r\n optionCode,\r\n onEditorChange,\r\n tableEditorChange,\r\n onSwitchClick,\r\n onSwitchChange,\r\n detailPropsGroups,\r\n isRenderForm,\r\n isShowOptionEditor\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.style-group {\r\n padding-right: 5px;\r\n width: 100%;\r\n\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n :deep(.ant-collapse-content) {\r\n width: 100%;\r\n .ant-collapse-content-box {\r\n width: 100%;\r\n }\r\n }\r\n}\r\n</style>\r\n<style lang=\"less\">\r\n.attribute-config .ant-collapse-content > .ant-collapse-content-box > editor {\r\n padding: 16px 10px;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"style-group\">\r\n <template v-if=\"componentType !== 'table' && componentType !== 'card'\">\r\n <a-form-item label=\"图表类型\">\r\n <a-select v-model:value=\"type\" style=\"width: 100%\" @change=\"handleChangeType\">\r\n <a-select-option value=\"line\">折线图</a-select-option>\r\n <a-select-option value=\"bar\">柱状图</a-select-option>\r\n <a-select-option value=\"pie\">饼图</a-select-option>\r\n <a-select-option value=\"comboGraph\">组合图表</a-select-option>\r\n <a-select-option value=\"customGraph\">自定义图表</a-select-option>\r\n </a-select>\r\n </a-form-item>\r\n <a-collapse v-model:activeKey=\"activePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <template v-if=\"isRenderForm(detailPropsGroup, type)\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <template #extra>\r\n <a-switch\r\n v-if=\"typeof detailPropsGroup.enableProps === 'boolean'\"\r\n :checked=\"detailPropsGroup.enableProps\"\r\n @change=\"onSwitchChange($event, detailPropsGroup.enablePropsName)\"\r\n @click=\"onSwitchClick\"\r\n />\r\n </template>\r\n <props-to-form\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n </template>\r\n <!-- 只有在选择自定义图表展示 -->\r\n <a-collapse-panel key=\"custom-option\" header=\"自定义option配置\" v-if=\"isShowOptionEditor\">\r\n <editor class=\"option-editor\" language=\"typescript\" :valueData=\"optionCode\" @change=\"onEditorChange\" />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'table'\">\r\n <a-collapse v-model:activeKey=\"tablePanel\">\r\n <template v-for=\"detailPropsGroup in detailPropsGroups\" :key=\"detailPropsGroup.title\">\r\n <!--传递 title 时-->\r\n <a-collapse-panel\r\n v-if=\"detailPropsGroup.title && detailPropsGroup.onlyType?.includes(componentType)\"\r\n :header=\"detailPropsGroup.title\"\r\n :key=\"detailPropsGroup.title\"\r\n >\r\n <props-to-form\r\n :componentType=\"componentType\"\r\n :props=\"detailPropsGroup.props\"\r\n :disabled=\"typeof detailPropsGroup.enableProps === 'boolean' ? !detailPropsGroup.enableProps : false\"\r\n />\r\n </a-collapse-panel>\r\n </template>\r\n <a-collapse-panel key=\"tableColumn\" header=\"表格列配置\">\r\n <table-column-config />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"headerCellStyleMethod\" header=\"表头单元格样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.headerCellStyleMethod\"\r\n @change=\"tableEditorChange($event, 'headerCellStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n <a-collapse-panel key=\"rowStyleMethod\" header=\"行样式\">\r\n <editor\r\n class=\"option-editor\"\r\n language=\"javascript\"\r\n :options=\"{\r\n fontSize: 16,\r\n lineHeight: 18\r\n }\"\r\n :valueData=\"tableOptions.rowStyleMethod\"\r\n @change=\"tableEditorChange($event, 'rowStyleMethod')\"\r\n />\r\n </a-collapse-panel>\r\n </a-collapse>\r\n </template>\r\n <template v-if=\"componentType === 'card'\">\r\n <indicator-container></indicator-container>\r\n </template>\r\n </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport { defineComponent, computed, ref, unref, inject } from 'vue'\r\nimport {\r\n FormItem as AFormItem,\r\n Select as ASelect,\r\n SelectOption as ASelectOption,\r\n Collapse as ACollapse,\r\n CollapsePanel as ACollapsePanel,\r\n Switch as ASwitch\r\n} from 'ant-design-vue'\r\nimport { DetailPropsGroups, DetailPropsGroup, PropsGroup, propsGroups } from './data'\r\nimport propsMap from '@/indicator/indicator-library/data-config/style-config-group/chart-props'\r\nimport PropsToForm from './props-to-form'\r\nimport TableColumnConfig from './table-column-config'\r\nimport IndicatorContainer from './indicator-container'\r\nimport Editor from '@/indicator/editor'\r\nimport {\r\n CHARTS_OPTIONS,\r\n TABLE_OPTIONS,\r\n UPDATE_CHARTS_OPTIONS,\r\n UPDATE_TABLE_OPTIONS,\r\n SELECTED_COMPONENT,\r\n REFRESH_DATA\r\n} from '@/utils/constant'\r\nimport { lowerCaseIncludes } from '@ecan-bi/tools'\r\nimport { pick } from 'lodash-es'\r\nimport 'ant-design-vue/es/collapse/style'\r\nexport default defineComponent({\r\n name: 'StyleConfigGroup',\r\n props: {\r\n componentType: {\r\n // 控件类型\r\n type: String,\r\n default: ''\r\n },\r\n isGroupTable: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n components: {\r\n PropsToForm,\r\n TableColumnConfig,\r\n Editor,\r\n AFormItem,\r\n ASelect,\r\n ASelectOption,\r\n ACollapse,\r\n ACollapsePanel,\r\n ASwitch,\r\n IndicatorContainer\r\n },\r\n setup (compProps) {\r\n const activePanel = ref<string[]>([])\r\n const tablePanel = ref<string[]>(['表格'])\r\n const chartsOptions = inject(CHARTS_OPTIONS) as {\r\n [key: string]: any\r\n }\r\n const tableOptions = inject(TABLE_OPTIONS) as any\r\n const updateChartsOptions = inject(UPDATE_CHARTS_OPTIONS) as Function\r\n const updateTableOptions = inject(UPDATE_TABLE_OPTIONS) as Function\r\n const refreshData = inject(REFRESH_DATA) as Function\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const handleChangeType = (val: string) => {\r\n updateChartsOptions(\r\n {\r\n ...propsMap[val]\r\n },\r\n false\r\n )\r\n unref(selectedComponent).type = unref(type)\r\n refreshData()\r\n }\r\n const type = computed(() => unref(chartsOptions)?.type)\r\n const groupTableProps = ['showTotalBool', 'totalName', 'expandAll']\r\n const detailPropsGroups = computed<DetailPropsGroups>(() => {\r\n return propsGroups\r\n .map((propsGroup: PropsGroup) => {\r\n const { props, title, enableProps, onlyType, excludeType } = propsGroup\r\n const pickProps = [] as string[]\r\n props.forEach((prop) => {\r\n if (typeof prop === 'string') {\r\n if (groupTableProps.includes(prop)) {\r\n if (compProps.isGroupTable) {\r\n pickProps.push(prop)\r\n }\r\n } else {\r\n pickProps.push(prop)\r\n }\r\n }\r\n })\r\n let filterEnableProps, filterProps\r\n if (compProps.componentType === 'table' && onlyType?.includes(compProps.componentType)) {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && tableOptions.value\r\n ? (tableOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(tableOptions), pickProps)\r\n } else {\r\n filterEnableProps =\r\n typeof enableProps === 'string' && chartsOptions.value\r\n ? (chartsOptions.value[enableProps] as boolean)\r\n : undefined\r\n filterProps = pick(unref(chartsOptions), pickProps)\r\n }\r\n return {\r\n title,\r\n enableProps: filterEnableProps,\r\n enablePropsName: enableProps,\r\n onlyType,\r\n excludeType,\r\n props: filterProps\r\n }\r\n }) // 过滤空属性组\r\n .filter(({ props }) => {\r\n return Object.keys(props).length > 0\r\n })\r\n })\r\n const isRenderForm = (detailPropsGroup: DetailPropsGroup, componentType: string) => {\r\n const { onlyType, excludeType } = detailPropsGroup\r\n if (onlyType == null && excludeType == null) {\r\n return true\r\n } else if (onlyType) {\r\n return lowerCaseIncludes(componentType, onlyType)\r\n } else if (excludeType) {\r\n return !lowerCaseIncludes(componentType, excludeType)\r\n }\r\n return false\r\n }\r\n const onSwitchClick = (checked: boolean | string | number, event: Event) => {\r\n event?.stopPropagation()\r\n return checked\r\n }\r\n const onSwitchChange = (value: any, key: string | undefined) => {\r\n if (key != null) {\r\n updateChartsOptions({\r\n [key]: value\r\n })\r\n }\r\n }\r\n const ComponentString = computed(() => JSON.stringify(unref(chartsOptions), null, 2))\r\n const updateComponentOptions = (code: string) => {\r\n try {\r\n const props = JSON.parse(code || '{}')\r\n updateChartsOptions(props, false)\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const optionCode = ref('')\r\n const onEditorChange = (code: string) => {\r\n try {\r\n optionCode.value = code\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const tableEditorChange = (code: string, key) => {\r\n try {\r\n updateTableOptions({\r\n [key]: code\r\n })\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n const isShowOptionEditor = computed(() => ['customGraph'].includes(unref(chartsOptions)?.type))\r\n return {\r\n type,\r\n handleChangeType,\r\n activePanel,\r\n tablePanel,\r\n ComponentString,\r\n updateComponentOptions,\r\n tableOptions,\r\n optionCode,\r\n onEditorChange,\r\n tableEditorChange,\r\n onSwitchClick,\r\n onSwitchChange,\r\n detailPropsGroups,\r\n isRenderForm,\r\n isShowOptionEditor\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.style-group {\r\n padding-right: 5px;\r\n width: 100%;\r\n\r\n .option-editor {\r\n @height: 500px;\r\n min-height: @height;\r\n max-height: @height;\r\n border: 1px solid #e9e9e9;\r\n }\r\n :deep(.ant-collapse-content) {\r\n width: 100%;\r\n .ant-collapse-content-box {\r\n width: 100%;\r\n }\r\n }\r\n}\r\n</style>\r\n<style lang=\"less\">\r\n.attribute-config .ant-collapse-content > .ant-collapse-content-box > editor {\r\n padding: 16px 10px;\r\n}\r\n</style>\r\n","<template>\n <div class=\"control-card\">\n <!-- 绑定键值 -->\n <a-select\n class=\"field-name\"\n :value=\"control.conditionKey\"\n :options=\"conditionOptions\"\n :fieldNames=\"{ value: 'id' }\"\n allow-clear\n show-search\n @change=\"onConditionKeyChange\"\n :filter-option=\"filterOption\"\n />\n <!-- 过滤规则 -->\n <a-select\n class=\"field-name\"\n :value=\"control.rule\"\n :options=\"ruleOption\"\n style=\"max-width: 100px;\"\n @change=\"onRuleChange\"\n />\n <!-- 自定义值或者选择组件 -->\n <a-select\n class=\"field-name\"\n :value=\"control.dataType\"\n :options=\"dataTypeOption\"\n style=\"max-width: 100px;\"\n @change=\"onDataTypeChange\"\n />\n <!-- 填写自定义值 -->\n <template v-if=\"control.dataType === ''\">\n <a-input\n class=\"field-name\"\n :value=\"control.customValue\"\n style=\"max-width: 180px;\"\n @input=\"onCustomValueChange\"\n />\n </template>\n <!-- 组件别名 -->\n <template v-if=\"control.dataType === 'component'\">\n <a-select\n class=\"field-name\"\n :value=\"control.id\"\n :options=\"keyNameOptions\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n show-search\n :filter-option=\"idFilterOption\"\n style=\"max-width: 180px;\"\n @change=\"onIdChange\"\n @click=\"onIdFocus\"\n />\n </template>\n <!-- 选择数据字段 -->\n <template v-if=\"isShowModelProp\">\n <a-input\n class=\"field-name\"\n :value=\"control.modelKey\"\n @input=\"onModelPropChange\"\n :placeholder=\"control.id === 'PARENT' ? '请输入组件别名' : ''\"\n />\n </template>\n <!-- 组件属性 -->\n <template v-if=\"isShowProp\">\n <a-input\n v-if=\"control.id === 'PARENT'\"\n class=\"field-name\"\n :value=\"control.prop\"\n @input=\"onParentPropChange\"\n placeholder=\"请输入属性名\"\n />\n <a-select\n v-else\n class=\"field-name\"\n :value=\"control.prop\"\n :options=\"propOptions\"\n @change=\"onPropChange\"\n />\n </template>\n <!-- 日期格式化 -->\n <template v-if=\"isShowFormat\">\n <a-select\n class=\"field-name\"\n :value=\"control.format\"\n :options=\"formatOptions\"\n @change=\"onFormatChange\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\"/>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, PropType } from 'vue'\nimport { pick } from 'lodash-es'\nimport { getEventName, getConditions } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n MAP_ATTRIBUTE_PROPS,\n GRAPHIC_CONFIG,\n IS_PIVOT_TABLE\n} from '@/utils/constant'\nimport {\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput, Select as ASelect\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Card',\n components: {\n CloseOutlined,\n AInput,\n ASelect,\n MenuOutlined,\n ADropdown,\n AMenu,\n AMenuItem\n },\n props: {\n index: {\n type: Number,\n require: true\n },\n control: {\n type: Object,\n default: () => ({})\n },\n conditionOptions: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n path: {\n type: String,\n default: ''\n }\n },\n emits: ['delete', 'update'],\n setup (props) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const mapAttributeProps = inject(MAP_ATTRIBUTE_PROPS) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const { onUpdateControl, onDeleteControl, onAddMenuControl } = inject('CHANGE_CONTROL', {\n // eslint-disable-next-line no-void\n onUpdateControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onDeleteControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onAddMenuControl: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent) => {\n return usedComponent.keyName !== ''\n })\n })\n const keyNameOptions = computed(() => {\n const parentOption = []\n if (!unref(isPivotTable)) {\n parentOption.push({\n keyName: '父页面',\n id: 'PARENT'\n })\n }\n return [\n ...parentOption,\n ...unref(usedComponentList)\n ]\n })\n const propOptions = computed(() => {\n const options: { label:string, value: string } [] = []\n const component = unref(usedComponentList)?.find(usedComponent => usedComponent.id === props.control?.id)\n if (component) {\n const type = component.type\n const pickProps = pick(component, ['value', 'startTime', 'endTime'])\n if (!Object.keys(pickProps)?.length) {\n pickProps.value = ''\n }\n for (const prop in pickProps) {\n if (Object.prototype.hasOwnProperty.call(pickProps, prop)) {\n const mapAttributeProp = unref(mapAttributeProps)[prop]\n if (Array.isArray(mapAttributeProp)) {\n const propItem = mapAttributeProp.find(item => lowerCaseIncludes(type, item.onlyType))\n if (propItem) {\n options.push({\n label: propItem.label,\n value: prop\n })\n }\n } else {\n options.push({\n label: mapAttributeProp.label,\n value: prop\n })\n }\n }\n }\n }\n return options\n })\n const onDelete = () => {\n onDeleteControl({\n index: props.index,\n path: props.path\n })\n // 删除控件绑定后把相关的交互事件也删除\n deleteEvent(props.control.id)\n }\n\n const clickConditionMenu = ({ key }) => {\n onAddMenuControl(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n // 删除控件的交互事件\n function deleteEvent (id: string) {\n const component = unref(usedComponentList).find(item => item.id === id)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n const index = events.findIndex((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n\n const onIdChange = (value: string) => {\n const control = { ...props.control }\n control.id = value\n control.customValue = ''\n if (value) {\n const component = unref(usedComponentList).find(item => item.id === value)\n if (component) {\n control.keyName = component.keyName\n // 选中控件后,设置所选控件的events\n setEvents(component, value)\n }\n }\n delete control.prop\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const focusId = ref('')\n const onIdFocus = () => {\n focusId.value = props.control.id\n }\n\n const onPropChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onParentPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onRuleChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n rule: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onDataTypeChange = (value: string) => {\n const control = { ...props.control }\n if (control.modelKey) {\n control.modelKey = ''\n }\n if (control.prop) {\n control.prop = ''\n }\n if (control.format) {\n control.format = ''\n }\n onUpdateControl({\n control: {\n ...control,\n dataType: value,\n customValue: '',\n id: '',\n keyName: ''\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onCustomValueChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n customValue: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModeChange = (value: string) => {\n const control = { ...props.control }\n if (value == null) {\n delete control.mode\n } else {\n control.mode = value\n }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n\n function setEvents (component: any, value: string) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n // 如果切换了控件,把之前控件绑定的删除\n if (unref(focusId) && value !== unref(focusId)) {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n if (!controlList.find((v: any) => v.id === unref(focusId))) {\n deleteEvent(unref(focusId))\n }\n }\n if (!events.find((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n }\n\n const onConditionKeyChange = (value: string, option: { [key:string]:any }) => {\n if (value) {\n const { label, name, id, genericType, indexCode, typeGuid, indexCodeNum } = option || {}\n const controlParams: any = {\n ...props.control,\n conditionKey: id,\n conditionLabel: label,\n conditionName: name,\n conditionValueType: genericType,\n indexCode,\n typeGuid,\n indexCodeNum\n }\n if (!hasOwn(controlParams, 'rule')) {\n controlParams.rule = 'EQUAL'\n }\n if (!hasOwn(controlParams, 'dataType')) {\n controlParams.dataType = 'component'\n }\n onUpdateControl({\n control: controlParams,\n index: props.index,\n path: props.path\n })\n } else {\n const control = { ...props.control }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n }\n\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const ruleOption = computed(() => {\n const target = props.conditionOptions.find(v => v.id === props.control.conditionKey)\n let type = ''\n if (target) {\n type = target?.genericType || ''\n }\n if (type === 'TEXT' || type === '0') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n ]\n } else if (type === 'NUMBER' || type === '1') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else if (type === 'DATE' || type === '2') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return []\n }\n })\n\n const dataTypeOption = [{\n label: '自定义值',\n value: ''\n }, {\n label: '组件值',\n value: 'component'\n }]\n\n const isShowModelProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n const modelPropKey = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\n if (lowerCaseIncludes(target?.type, modelPropKey)) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n if (lowerCaseIncludes(target?.type || '', 'range')) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowFormat = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n // if (['ecanDatePicker', 'ecanRangePicker'].includes(target?.type)) {\n if (lowerCaseIncludes(target?.type || '', ['date', 'range'])) {\n result = true\n }\n }\n return result\n })\n\n const formatOptions = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n\n const onFormatChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n format: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModelPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n modelKey: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n return {\n propOptions,\n usedComponentList,\n onDelete,\n onIdChange,\n onIdFocus,\n onPropChange,\n onParentPropChange,\n onModeChange,\n onRuleChange,\n onDataTypeChange,\n onCustomValueChange,\n onConditionKeyChange,\n idFilterOption,\n filterOption,\n onFormatChange,\n onModelPropChange,\n clickConditionMenu,\n ruleOption,\n dataTypeOption,\n isShowProp,\n isShowFormat,\n isShowModelProp,\n formatOptions,\n keyNameOptions\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.control-card {\n width: 100%;\n padding: 10px;\n // margin-bottom: 10px;\n // border: 1px solid #ccc;\n // border-radius: 5px;\n display: flex;\n position: relative;\n .field-name {\n // max-width: 180px;\n margin-right: 20px;\n flex: 1;\n }\n}\n\n// .delete-icon {\n// position: absolute;\n// right: 8px;\n// top: 18px;\n// }\n.more-icon {\n margin-right: 10px;\n}\n</style>\n\n<style lang=\"less\">\n.control-card {\n .ant-form-item {\n &:not(:last-child) {\n margin-bottom: 8px;\n }\n &:last-child {\n margin-bottom: 0;\n }\n }\n}\n</style>\n","<template>\n <div class=\"control-card\">\n <!-- 绑定键值 -->\n <a-select\n class=\"field-name\"\n :value=\"control.conditionKey\"\n :options=\"conditionOptions\"\n :fieldNames=\"{ value: 'id' }\"\n allow-clear\n show-search\n @change=\"onConditionKeyChange\"\n :filter-option=\"filterOption\"\n />\n <!-- 过滤规则 -->\n <a-select\n class=\"field-name\"\n :value=\"control.rule\"\n :options=\"ruleOption\"\n style=\"max-width: 100px;\"\n @change=\"onRuleChange\"\n />\n <!-- 自定义值或者选择组件 -->\n <a-select\n class=\"field-name\"\n :value=\"control.dataType\"\n :options=\"dataTypeOption\"\n style=\"max-width: 100px;\"\n @change=\"onDataTypeChange\"\n />\n <!-- 填写自定义值 -->\n <template v-if=\"control.dataType === ''\">\n <a-input\n class=\"field-name\"\n :value=\"control.customValue\"\n style=\"max-width: 180px;\"\n @input=\"onCustomValueChange\"\n />\n </template>\n <!-- 组件别名 -->\n <template v-if=\"control.dataType === 'component'\">\n <a-select\n class=\"field-name\"\n :value=\"control.id\"\n :options=\"keyNameOptions\"\n :fieldNames=\"{\n label: 'keyName',\n value: 'id'\n }\"\n show-search\n :filter-option=\"idFilterOption\"\n style=\"max-width: 180px;\"\n @change=\"onIdChange\"\n @click=\"onIdFocus\"\n />\n </template>\n <!-- 选择数据字段 -->\n <template v-if=\"isShowModelProp\">\n <a-input\n class=\"field-name\"\n :value=\"control.modelKey\"\n @input=\"onModelPropChange\"\n :placeholder=\"control.id === 'PARENT' ? '请输入组件别名' : ''\"\n />\n </template>\n <!-- 组件属性 -->\n <template v-if=\"isShowProp\">\n <a-input\n v-if=\"control.id === 'PARENT'\"\n class=\"field-name\"\n :value=\"control.prop\"\n @input=\"onParentPropChange\"\n placeholder=\"请输入属性名\"\n />\n <a-select\n v-else\n class=\"field-name\"\n :value=\"control.prop\"\n :options=\"propOptions\"\n @change=\"onPropChange\"\n />\n </template>\n <!-- 日期格式化 -->\n <template v-if=\"isShowFormat\">\n <a-select\n class=\"field-name\"\n :value=\"control.format\"\n :options=\"formatOptions\"\n @change=\"onFormatChange\"\n />\n </template>\n <a-dropdown :trigger=\"['click']\">\n <menu-outlined class=\"more-icon\" />\n <template #overlay>\n <a-menu @click=\"clickConditionMenu\">\n <a-menu-item key=\"1\">添加且条件</a-menu-item>\n <a-menu-item key=\"2\">添加或条件</a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <close-outlined class=\"delete-icon\" @click=\"onDelete\"/>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, PropType } from 'vue'\nimport { pick } from 'lodash-es'\nimport { getEventName, getConditions } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\nimport { CloseOutlined, MenuOutlined } from '@ant-design/icons-vue'\nimport {\n RENDER_USED_COMPONENTS,\n SELECTED_COMPONENT,\n UPDATE_USED_COMPONENT,\n MAP_ATTRIBUTE_PROPS,\n GRAPHIC_CONFIG,\n IS_PIVOT_TABLE\n} from '@/utils/constant'\nimport {\n Dropdown as ADropdown,\n Menu as AMenu,\n MenuItem as AMenuItem,\n Input as AInput, Select as ASelect\n} from 'ant-design-vue'\nexport default defineComponent({\n name: 'Card',\n components: {\n CloseOutlined,\n AInput,\n ASelect,\n MenuOutlined,\n ADropdown,\n AMenu,\n AMenuItem\n },\n props: {\n index: {\n type: Number,\n require: true\n },\n control: {\n type: Object,\n default: () => ({})\n },\n conditionOptions: {\n type: Array as PropType<any[]>,\n default: () => []\n },\n path: {\n type: String,\n default: ''\n }\n },\n emits: ['delete', 'update'],\n setup (props) {\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const updateUsedComponent = inject(UPDATE_USED_COMPONENT) as any\n const mapAttributeProps = inject(MAP_ATTRIBUTE_PROPS) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const { onUpdateControl, onDeleteControl, onAddMenuControl } = inject('CHANGE_CONTROL', {\n // eslint-disable-next-line no-void\n onUpdateControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onDeleteControl: (_data: { [key:string]: any }) => void 0,\n // eslint-disable-next-line no-void\n onAddMenuControl: (_path: string, _index: number, _join: '||' | '&&') => void 0\n })\n const usedComponentList = computed(() => {\n return unref(renderUsedComponents)?.filter((usedComponent) => {\n return usedComponent.keyName !== ''\n })\n })\n const keyNameOptions = computed(() => {\n const parentOption = []\n if (!unref(isPivotTable)) {\n parentOption.push({\n keyName: '父页面',\n id: 'PARENT'\n })\n }\n return [\n ...parentOption,\n ...unref(usedComponentList)\n ]\n })\n const propOptions = computed(() => {\n const options: { label:string, value: string } [] = []\n const component = unref(usedComponentList)?.find(usedComponent => usedComponent.id === props.control?.id)\n if (component) {\n const type = component.type\n const pickProps = pick(component, ['value', 'startTime', 'endTime'])\n if (!Object.keys(pickProps)?.length) {\n pickProps.value = ''\n }\n for (const prop in pickProps) {\n if (Object.prototype.hasOwnProperty.call(pickProps, prop)) {\n const mapAttributeProp = unref(mapAttributeProps)[prop]\n if (Array.isArray(mapAttributeProp)) {\n const propItem = mapAttributeProp.find(item => lowerCaseIncludes(type, item.onlyType))\n if (propItem) {\n options.push({\n label: propItem.label,\n value: prop\n })\n }\n } else {\n options.push({\n label: mapAttributeProp.label,\n value: prop\n })\n }\n }\n }\n }\n return options\n })\n const onDelete = () => {\n onDeleteControl({\n index: props.index,\n path: props.path\n })\n // 删除控件绑定后把相关的交互事件也删除\n deleteEvent(props.control.id)\n }\n\n const clickConditionMenu = ({ key }) => {\n onAddMenuControl(props.path, props.index, key === '2' ? '||' : '&&')\n }\n\n // 删除控件的交互事件\n function deleteEvent (id: string) {\n const component = unref(usedComponentList).find(item => item.id === id)\n if (component) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n const index = events.findIndex((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')\n if (index !== -1) {\n events.splice(index, 1)\n updateUsedComponent({\n id,\n events\n })\n }\n }\n }\n\n const onIdChange = (value: string) => {\n const control = { ...props.control }\n control.id = value\n control.customValue = ''\n if (value) {\n const component = unref(usedComponentList).find(item => item.id === value)\n if (component) {\n control.keyName = component.keyName\n // 选中控件后,设置所选控件的events\n setEvents(component, value)\n }\n }\n delete control.prop\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const focusId = ref('')\n const onIdFocus = () => {\n focusId.value = props.control.id\n }\n\n const onPropChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onParentPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n prop: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onRuleChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n rule: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onDataTypeChange = (value: string) => {\n const control = { ...props.control }\n if (control.modelKey) {\n control.modelKey = ''\n }\n if (control.prop) {\n control.prop = ''\n }\n if (control.format) {\n control.format = ''\n }\n onUpdateControl({\n control: {\n ...control,\n dataType: value,\n customValue: '',\n id: '',\n keyName: ''\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onCustomValueChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n customValue: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModeChange = (value: string) => {\n const control = { ...props.control }\n if (value == null) {\n delete control.mode\n } else {\n control.mode = value\n }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n\n const selectedComponent = inject(SELECTED_COMPONENT) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n\n function setEvents (component: any, value: string) {\n const { type, id, events = [] } = component\n const event = getEventName(type)\n // 如果切换了控件,把之前控件绑定的删除\n if (unref(focusId) && value !== unref(focusId)) {\n const controlList = getConditions(unref(graphicConfig)?.controlList || [])\n if (!controlList.find((v: any) => v.id === unref(focusId))) {\n deleteEvent(unref(focusId))\n }\n }\n if (!events.find((item: any) =>\n item.on === event && item.target === unref(selectedComponent)?.id && item.emit === 'refreshData')) {\n updateUsedComponent({\n id,\n events: [...events, {\n on: event,\n target: unref(selectedComponent)?.id,\n emit: 'refreshData'\n }].reverse()\n })\n }\n }\n\n const onConditionKeyChange = (value: string, option: { [key:string]:any }) => {\n if (value) {\n const { label, name, id, genericType, indexCode, typeGuid, indexCodeNum } = option || {}\n const controlParams: any = {\n ...props.control,\n conditionKey: id,\n conditionLabel: label,\n conditionName: name,\n conditionValueType: genericType,\n indexCode,\n typeGuid,\n indexCodeNum\n }\n if (!hasOwn(controlParams, 'rule')) {\n controlParams.rule = 'EQUAL'\n }\n if (!hasOwn(controlParams, 'dataType')) {\n controlParams.dataType = 'component'\n }\n onUpdateControl({\n control: controlParams,\n index: props.index,\n path: props.path\n })\n } else {\n const control = { ...props.control }\n delete control.conditionLabel\n delete control.conditionName\n delete control.conditionKey\n delete control.conditionValueType\n onUpdateControl({\n control,\n index: props.index,\n path: props.path\n })\n }\n }\n\n const idFilterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.keyName?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n\n const ruleOption = computed(() => {\n const target = props.conditionOptions.find(v => v.id === props.control.conditionKey)\n let type = ''\n if (target) {\n type = target?.genericType || ''\n }\n if (type === 'TEXT' || type === '0') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '包含', value: 'LIKE' },\n { label: '不包含', value: 'NOT_LIKE' },\n { label: '开头是', value: 'LIKE%' },\n { label: '结尾是', value: '%LIKE' },\n { label: '等于', value: 'EQUAL' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' }\n ]\n } else if (type === 'NUMBER' || type === '1') {\n return [\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else if (type === 'DATE' || type === '2') {\n return [\n { label: '属于', value: 'IN' },\n { label: '不属于', value: 'NOT_IN' },\n { label: '小于', value: 'LESS' },\n { label: '小于等于', value: 'LESS_EQUAL' },\n { label: '大于', value: 'GREATER' },\n { label: '大于等于', value: 'GREATER_EQUAL' },\n { label: '等于', value: 'EQUAL' },\n { label: '不等于', value: 'NOT_EQUAL' }\n ]\n } else {\n return []\n }\n })\n\n const dataTypeOption = [{\n label: '自定义值',\n value: ''\n }, {\n label: '组件值',\n value: 'component'\n }]\n\n const isShowModelProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n const modelPropKey = ['table', 'bar', 'combograph', 'line', 'pie', 'radar', 'scatter', 'list', 'circulate']\n if (lowerCaseIncludes(target?.type, modelPropKey)) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowProp = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n if (lowerCaseIncludes(target?.type || '', 'range')) {\n result = true\n }\n }\n if (id === 'PARENT') {\n // 组件名选择父页面后\n result = true\n }\n return result\n })\n\n const isShowFormat = computed(() => {\n let result = false\n const { id = '', dataType = 'component' } = props.control\n if (id && dataType === 'component') {\n const target = unref(usedComponentList).find((v: any) => v.id === id)\n // if (['ecanDatePicker', 'ecanRangePicker'].includes(target?.type)) {\n if (lowerCaseIncludes(target?.type || '', ['date', 'range'])) {\n result = true\n }\n }\n return result\n })\n\n const formatOptions = [\n { label: '年', value: 'YYYY' },\n { label: '年月', value: 'YYYY-MM' },\n { label: '年月日', value: 'YYYY-MM-DD' },\n { label: '年月日时', value: 'YYYY-MM-DD HH' },\n { label: '年月日时分', value: 'YYYY-MM-DD HH:mm' },\n { label: '年月日时分秒', value: 'YYYY-MM-DD HH:mm:ss' }\n ]\n\n const onFormatChange = (value: string) => {\n onUpdateControl({\n control: {\n ...props.control,\n format: value\n },\n index: props.index,\n path: props.path\n })\n }\n\n const onModelPropChange = (e: any) => {\n onUpdateControl({\n control: {\n ...props.control,\n modelKey: e.target.value\n },\n index: props.index,\n path: props.path\n })\n }\n\n return {\n propOptions,\n usedComponentList,\n onDelete,\n onIdChange,\n onIdFocus,\n onPropChange,\n onParentPropChange,\n onModeChange,\n onRuleChange,\n onDataTypeChange,\n onCustomValueChange,\n onConditionKeyChange,\n idFilterOption,\n filterOption,\n onFormatChange,\n onModelPropChange,\n clickConditionMenu,\n ruleOption,\n dataTypeOption,\n isShowProp,\n isShowFormat,\n isShowModelProp,\n formatOptions,\n keyNameOptions\n }\n }\n})\n</script>\n<style scoped lang=\"less\">\n.control-card {\n width: 100%;\n padding: 10px;\n // margin-bottom: 10px;\n // border: 1px solid #ccc;\n // border-radius: 5px;\n display: flex;\n position: relative;\n .field-name {\n // max-width: 180px;\n margin-right: 20px;\n flex: 1;\n }\n}\n\n// .delete-icon {\n// position: absolute;\n// right: 8px;\n// top: 18px;\n// }\n.more-icon {\n margin-right: 10px;\n}\n</style>\n\n<style lang=\"less\">\n.control-card {\n .ant-form-item {\n &:not(:last-child) {\n margin-bottom: 8px;\n }\n &:last-child {\n margin-bottom: 0;\n }\n }\n}\n</style>\n","<template>\r\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\r\n <template\r\n v-for=\"(item, index) in list\"\r\n :key=\"index\"\r\n >\r\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\r\n <div class=\"condition-container\">\r\n <template v-if=\"item.conditions.length > 1\">\r\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\r\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\r\n </template>\r\n <div class=\"conditions\">\r\n <template v-if=\"item.conditions.length > 0\">\r\n <control-list\r\n :level=\"level + 1\"\r\n :path=\"`${path ? path + '-' : ''}${index}`\"\r\n :list=\"item.conditions\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <control-card\r\n class=\"condition\"\r\n :key=\"item.keyValue || `${level}-${index}`\"\r\n :control=\"item\"\r\n :index=\"index\"\r\n :path=\"path || ''\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent } from 'vue'\r\nimport ControlCard from './ControlCard.vue'\r\nexport default defineComponent({\r\n name: 'ControlList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n },\r\n level: {\r\n type: Number,\r\n default: 0\r\n },\r\n path: {\r\n type: String,\r\n default: ''\r\n },\r\n conditionOptions: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n components: {\r\n ControlCard\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.condition-list {\r\n width: 100%;\r\n}\r\n.condition-text {\r\n min-width: 50px;\r\n max-width: 50px;\r\n border: 1px solid #e8e8e8;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.condition-container {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n.conditions {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.condition {\r\n padding: 8px;\r\n border: 1px solid #e8e8e8;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"condition-list\" v-if=\"Array.isArray(list)\">\r\n <template\r\n v-for=\"(item, index) in list\"\r\n :key=\"index\"\r\n >\r\n <template v-if=\"item.join && item.conditions && Array.isArray(item.conditions)\">\r\n <div class=\"condition-container\">\r\n <template v-if=\"item.conditions.length > 1\">\r\n <div class=\"condition-text\" v-if=\"item.join === '||'\">或</div>\r\n <div class=\"condition-text\" v-if=\"item.join === '&&'\">且</div>\r\n </template>\r\n <div class=\"conditions\">\r\n <template v-if=\"item.conditions.length > 0\">\r\n <control-list\r\n :level=\"level + 1\"\r\n :path=\"`${path ? path + '-' : ''}${index}`\"\r\n :list=\"item.conditions\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n </template>\r\n <template v-else>\r\n <control-card\r\n class=\"condition\"\r\n :key=\"item.keyValue || `${level}-${index}`\"\r\n :control=\"item\"\r\n :index=\"index\"\r\n :path=\"path || ''\"\r\n :conditionOptions=\"conditionOptions\"\r\n />\r\n </template>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { PropType, defineComponent } from 'vue'\r\nimport ControlCard from './ControlCard.vue'\r\nexport default defineComponent({\r\n name: 'ControlList',\r\n props: {\r\n list: {\r\n type: Array as PropType<any[]>,\r\n default: () => ([])\r\n },\r\n level: {\r\n type: Number,\r\n default: 0\r\n },\r\n path: {\r\n type: String,\r\n default: ''\r\n },\r\n conditionOptions: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n components: {\r\n ControlCard\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.condition-list {\r\n width: 100%;\r\n}\r\n.condition-text {\r\n min-width: 50px;\r\n max-width: 50px;\r\n border: 1px solid #e8e8e8;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.condition-container {\r\n display: flex;\r\n width: 100%;\r\n}\r\n\r\n.conditions {\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.condition {\r\n padding: 8px;\r\n border: 1px solid #e8e8e8;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\n <div class=\"control-group\">\n <div class=\"control-group-header\">\n <template v-if=\"Array.isArray(controlList) && controlList.length > 0\">\n <a-button @click=\"onAddControl('&&')\">添加且条件</a-button>\n <a-button @click=\"onAddControl('||')\" style=\"margin-left: 15px;\">添加或条件</a-button>\n </template>\n <a-button v-else @click=\"onAddControl()\">添加条件</a-button>\n <a-popover\n v-model:visible=\"isVisible\"\n title=\"选择组件\"\n placement=\"bottomRight\"\n trigger=\"click\"\n >\n <template #content>\n <div class=\"sync-wrap\">\n <div class=\"title\">\n 将此全局过滤条件配置同步至选中组件的指标库配置中。若被选中组件已有全局过滤条件将会被覆盖!\n </div>\n <div class=\"selected-total\" v-if=\"indicatorComponents.length\">\n {{ selectedIds.length }} / {{ indicatorComponents.length }} 项\n </div>\n <div class=\"operate-container\">\n <a-select\n style=\"width: 75%;\"\n v-model:value=\"selectedIds\"\n show-search\n mode=\"multiple\"\n placeholder=\"请选择\"\n :filter-option=\"filterOption\"\n :options=\"indicatorComponents\"\n />\n <a-button\n style=\"margin-left: 10px;\"\n type=\"primary\"\n :disabled=\"!selectedIds?.length\"\n @click=\"handleConfirmSync\"\n >\n 确定\n </a-button>\n </div>\n </div>\n </template>\n <a-button\n type=\"primary\"\n ghost\n style=\"float: right;\"\n v-if=\"Array.isArray(controlList) && controlList.length > 0\"\n >\n 应用到其他组件\n </a-button>\n </a-popover>\n </div>\n <div class=\"control-group-content\">\n <!-- <control-card\n v-for=\"(control, index) in controlList\"\n :key=\"index\"\n :index=\"index\"\n :control=\"control\"\n @delete=\"onDeleteControl\"\n @update=\"onUpdateControl\"\n /> -->\n <control-list\n class=\"condition-list\"\n :list=\"controlList\"\n :level=\"0\"\n :conditionOptions=\"conditionOptions\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, provide, watch } from 'vue'\nimport { Button as AButton, Select as ASelect, Popover as APopover, message } from 'ant-design-vue'\nimport ControlList from './ControlList.vue'\nimport { getSqlConditions } from '@/utils/util'\nimport { hasOwn } from '@ecan-bi/tools'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, UPDATE_COMPONENTS_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'ControlGroup',\n props: {\n conditionOptions: {\n type: Array,\n default: () => []\n }\n },\n components: {\n ControlList,\n AButton,\n ASelect,\n APopover\n },\n setup () {\n const isVisible = ref(false)\n const selectedIds = ref([])\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const updateComponentsConfig = inject(UPDATE_COMPONENTS_CONFIG) as any\n // 组件中 controlList 转为 List<SqlCondition>\n const controlList = computed(() => {\n const list = unref(graphicConfig)?.controlList || []\n for (const item of list) {\n if (item.conditionKey) {\n if (!hasOwn(item, 'rule')) {\n if (item.prop === 'startTime') {\n item.rule = 'GREATER_EQUAL'\n } else if (item.prop === 'endTime') {\n item.rule = 'LESS_EQUAL'\n } else {\n item.rule = 'EQUAL'\n }\n }\n if (!hasOwn(item, 'dataType')) {\n item.dataType = 'component'\n }\n }\n }\n if (list?.length > 1 && !list[0]?.join) {\n return [{\n join: '&&',\n conditions: list\n }]\n }\n return list\n })\n // 绑定id\n const bindComponentId = ref(null)\n const updateConfig = (config: { [key:string]: any }) => {\n const result = {\n ...unref(graphicConfig),\n ...config,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n ...config\n }, unref(renderUsedComponents))\n }\n updateGraphicConfig(result)\n }\n const onAddControl = (join?: '||' | '&&') => {\n const list = unref(controlList)?.slice()\n if (list == null || list?.length === 0) {\n updateConfig({\n controlList: [{\n keyValue: nanoid()\n }]\n })\n } else if (list[0] != null) {\n if (list[0].conditions == null || list[0].join !== join) {\n updateConfig({\n controlList: [{\n join,\n conditions: [\n list[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n })\n } else if (list[0].conditions.length > 1 && list[0].join === join) {\n list[0].conditions.push({\n keyValue: nanoid()\n })\n updateConfig({\n controlList: list\n })\n }\n }\n }\n const onDeleteControl = (data: { [key:string]: any }) => {\n const { index, path } = data\n let sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = sourceList\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n sourceList = []\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const onUpdateControl = (data: { [key:string]: any }) => {\n const { control, index, path } = data\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = control\n }\n updateConfig({\n controlList: sourceList\n })\n }\n\n const onAddMenuControl = (path: string, index: number, join: '||' | '&&') => {\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n const indicatorComponents = computed(() => {\n return unref(renderUsedComponents)\n .filter((v: any) => v.dataType === 'indicator' && v.graphicConfig.source === 'INDICATOR_LIB')\n .map((v: any) => ({\n label: v.keyName,\n value: v.id\n }))\n })\n const handleConfirmSync = () => {\n try {\n if (unref(selectedIds)?.length) {\n updateComponentsConfig(unref(selectedIds), unref(controlList))\n message.success('应用成功')\n }\n isVisible.value = false\n } catch (error) {\n console.error(error)\n }\n }\n watch(isVisible, (val) => {\n if (!val) {\n selectedIds.value = []\n }\n })\n provide('CHANGE_CONTROL', {\n onDeleteControl,\n onUpdateControl,\n onAddMenuControl\n })\n return {\n isVisible,\n selectedIds,\n controlList,\n bindComponentId,\n indicatorComponents,\n onAddControl,\n filterOption,\n handleConfirmSync\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.control-group-header {\n margin: 20px 0;\n}\n.control-group-content {\n display: flex;\n flex-wrap: wrap;\n}\n.sync-wrap {\n width: 350px;\n max-height: 50vh;\n overflow: auto;\n .title {\n font-size: 12px;\n color: #616161;\n margin-bottom: 10px;\n }\n .selected-total {\n font-size: 12px;\n color: #616161;\n margin-bottom: 5px;\n }\n .operate-container {\n display: flex;\n align-items: center;\n }\n}\n</style>\n","<template>\n <div class=\"control-group\">\n <div class=\"control-group-header\">\n <template v-if=\"Array.isArray(controlList) && controlList.length > 0\">\n <a-button @click=\"onAddControl('&&')\">添加且条件</a-button>\n <a-button @click=\"onAddControl('||')\" style=\"margin-left: 15px;\">添加或条件</a-button>\n </template>\n <a-button v-else @click=\"onAddControl()\">添加条件</a-button>\n <a-popover\n v-model:visible=\"isVisible\"\n title=\"选择组件\"\n placement=\"bottomRight\"\n trigger=\"click\"\n >\n <template #content>\n <div class=\"sync-wrap\">\n <div class=\"title\">\n 将此全局过滤条件配置同步至选中组件的指标库配置中。若被选中组件已有全局过滤条件将会被覆盖!\n </div>\n <div class=\"selected-total\" v-if=\"indicatorComponents.length\">\n {{ selectedIds.length }} / {{ indicatorComponents.length }} 项\n </div>\n <div class=\"operate-container\">\n <a-select\n style=\"width: 75%;\"\n v-model:value=\"selectedIds\"\n show-search\n mode=\"multiple\"\n placeholder=\"请选择\"\n :filter-option=\"filterOption\"\n :options=\"indicatorComponents\"\n />\n <a-button\n style=\"margin-left: 10px;\"\n type=\"primary\"\n :disabled=\"!selectedIds?.length\"\n @click=\"handleConfirmSync\"\n >\n 确定\n </a-button>\n </div>\n </div>\n </template>\n <a-button\n type=\"primary\"\n ghost\n style=\"float: right;\"\n v-if=\"Array.isArray(controlList) && controlList.length > 0\"\n >\n 应用到其他组件\n </a-button>\n </a-popover>\n </div>\n <div class=\"control-group-content\">\n <!-- <control-card\n v-for=\"(control, index) in controlList\"\n :key=\"index\"\n :index=\"index\"\n :control=\"control\"\n @delete=\"onDeleteControl\"\n @update=\"onUpdateControl\"\n /> -->\n <control-list\n class=\"condition-list\"\n :list=\"controlList\"\n :level=\"0\"\n :conditionOptions=\"conditionOptions\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, unref, ref, inject, provide, watch } from 'vue'\nimport { Button as AButton, Select as ASelect, Popover as APopover, message } from 'ant-design-vue'\nimport ControlList from './ControlList.vue'\nimport { getSqlConditions } from '@/utils/util'\nimport { hasOwn } from '@ecan-bi/tools'\nimport { GRAPHIC_CONFIG, UPDATE_GRAPHIC_CONFIG, RENDER_USED_COMPONENTS, UPDATE_COMPONENTS_CONFIG } from '@/utils/constant'\nimport { cloneDeep } from 'lodash-es'\nimport { nanoid } from 'nanoid'\nexport default defineComponent({\n name: 'ControlGroup',\n props: {\n conditionOptions: {\n type: Array,\n default: () => []\n }\n },\n components: {\n ControlList,\n AButton,\n ASelect,\n APopover\n },\n setup () {\n const isVisible = ref(false)\n const selectedIds = ref([])\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const updateComponentsConfig = inject(UPDATE_COMPONENTS_CONFIG) as any\n // 组件中 controlList 转为 List<SqlCondition>\n const controlList = computed(() => {\n const list = unref(graphicConfig)?.controlList || []\n for (const item of list) {\n if (item.conditionKey) {\n if (!hasOwn(item, 'rule')) {\n if (item.prop === 'startTime') {\n item.rule = 'GREATER_EQUAL'\n } else if (item.prop === 'endTime') {\n item.rule = 'LESS_EQUAL'\n } else {\n item.rule = 'EQUAL'\n }\n }\n if (!hasOwn(item, 'dataType')) {\n item.dataType = 'component'\n }\n }\n }\n if (list?.length > 1 && !list[0]?.join) {\n return [{\n join: '&&',\n conditions: list\n }]\n }\n return list\n })\n // 绑定id\n const bindComponentId = ref(null)\n const updateConfig = (config: { [key:string]: any }) => {\n const result = {\n ...unref(graphicConfig),\n ...config,\n sqlConditions: getSqlConditions({\n ...unref(graphicConfig),\n ...config\n }, unref(renderUsedComponents))\n }\n updateGraphicConfig(result)\n }\n const onAddControl = (join?: '||' | '&&') => {\n const list = unref(controlList)?.slice()\n if (list == null || list?.length === 0) {\n updateConfig({\n controlList: [{\n keyValue: nanoid()\n }]\n })\n } else if (list[0] != null) {\n if (list[0].conditions == null || list[0].join !== join) {\n updateConfig({\n controlList: [{\n join,\n conditions: [\n list[0],\n {\n keyValue: nanoid()\n }\n ]\n }]\n })\n } else if (list[0].conditions.length > 1 && list[0].join === join) {\n list[0].conditions.push({\n keyValue: nanoid()\n })\n updateConfig({\n controlList: list\n })\n }\n }\n }\n const onDeleteControl = (data: { [key:string]: any }) => {\n const { index, path } = data\n let sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions.splice(index, 1)\n if (conditions.length === 1) {\n if (pathArr.length > 0) {\n const lastIndex = pathArr.length - 1\n const lastPath = pathArr[lastIndex]\n const wrapperPath = pathArr.slice(0, lastIndex)\n let wrapperConditions = sourceList\n let wrapperJoin = ''\n for (const j of wrapperPath) {\n if (wrapperConditions[j]) {\n wrapperJoin = wrapperConditions[j]?.join\n wrapperConditions = wrapperConditions[j]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n // 合并\n if (wrapperJoin === conditions[0].join) {\n if (Array.isArray(conditions[0].conditions)) {\n const temp = cloneDeep(conditions[0].conditions)\n wrapperConditions.splice(+lastPath, 1)\n wrapperConditions.splice(+lastPath, 0, ...temp)\n }\n } else {\n wrapperConditions[lastPath] = conditions[0]\n }\n }\n } else if (conditions.length === 0) {\n sourceList = []\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const onUpdateControl = (data: { [key:string]: any }) => {\n const { control, index, path } = data\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n }\n if (Array.isArray(conditions) && conditions[index]) {\n conditions[index] = control\n }\n updateConfig({\n controlList: sourceList\n })\n }\n\n const onAddMenuControl = (path: string, index: number, join: '||' | '&&') => {\n const sourceList = cloneDeep(unref(controlList)?.slice())\n let conditions = sourceList\n let cdJoin = ''\n const pathArr = path.split('-')\n if (pathArr?.length) {\n for (const i of pathArr) {\n if (conditions[i]) {\n cdJoin = conditions[i]?.join\n conditions = conditions[i]?.conditions as { [key:string]: any } []\n } else {\n break\n }\n }\n if (cdJoin === join) {\n conditions.splice(index + 1, 0, {\n keyValue: nanoid()\n })\n } else {\n const temp = cloneDeep(conditions[index])\n conditions[index] = {\n join,\n conditions: [\n temp,\n {\n keyValue: nanoid()\n }\n ]\n }\n }\n updateConfig({\n controlList: sourceList\n })\n }\n }\n const filterOption = (inputValue: string, option: { [key:string]:any }) => {\n return option?.label?.toLowerCase().includes(inputValue?.toLowerCase())\n }\n const indicatorComponents = computed(() => {\n return unref(renderUsedComponents)\n .filter((v: any) => v.dataType === 'indicator' && v.graphicConfig.source === 'INDICATOR_LIB')\n .map((v: any) => ({\n label: v.keyName,\n value: v.id\n }))\n })\n const handleConfirmSync = () => {\n try {\n if (unref(selectedIds)?.length) {\n updateComponentsConfig(unref(selectedIds), unref(controlList))\n message.success('应用成功')\n }\n isVisible.value = false\n } catch (error) {\n console.error(error)\n }\n }\n watch(isVisible, (val) => {\n if (!val) {\n selectedIds.value = []\n }\n })\n provide('CHANGE_CONTROL', {\n onDeleteControl,\n onUpdateControl,\n onAddMenuControl\n })\n return {\n isVisible,\n selectedIds,\n controlList,\n bindComponentId,\n indicatorComponents,\n onAddControl,\n filterOption,\n handleConfirmSync\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.control-group-header {\n margin: 20px 0;\n}\n.control-group-content {\n display: flex;\n flex-wrap: wrap;\n}\n.sync-wrap {\n width: 350px;\n max-height: 50vh;\n overflow: auto;\n .title {\n font-size: 12px;\n color: #616161;\n margin-bottom: 10px;\n }\n .selected-total {\n font-size: 12px;\n color: #616161;\n margin-bottom: 5px;\n }\n .operate-container {\n display: flex;\n align-items: center;\n }\n}\n</style>\n","<template>\r\n <div class=\"drill-group\">\r\n <div class=\"drill-group-header\">\r\n <a-button @click=\"onAddGroup\">添加组</a-button>\r\n </div>\r\n </div>\r\n <div class=\"all-dimension-wrap\">\r\n <div class=\"row-label\">维度</div>\r\n <draggable\r\n v-model=\"allDimensions\"\r\n class=\"all-dimension-list\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"false\"\r\n >\r\n <template #item=\"{ element }\">\r\n <div class=\"dimension-item\">\r\n {{ element.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n <div class=\"drill-group-content\" v-if=\"groupList?.length\">\r\n <draggable\r\n v-model=\"groupList\"\r\n class=\"group-drag-wrap\"\r\n item-key=\"key\"\r\n :group=\"{\r\n name: 'groupList',\r\n pull: false,\r\n put: false\r\n }\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"group-row\">\r\n <div class=\"row-label\">组{{ index + 1 }}</div>\r\n <draggable\r\n v-model=\"element.dimensions\"\r\n class=\"group-item\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"true\"\r\n >\r\n <template #item=\"{ element: dimension }\">\r\n <div class=\"dimension-item\">\r\n {{ dimension.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n <delete-outlined class=\"delete-icon\" @click=\"onDeleteItem(index)\" />\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, onMounted, ref, unref } from 'vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n SELECTED_COMPONENT,\r\n RENDER_USED_COMPONENTS,\r\n INDICATOR_URL,\r\n REQUEST,\r\n INDICATOR_TOKEN\r\n} from '@/utils/constant'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport Draggable from 'vuedraggable'\r\nimport { formatIndicatorParams } from '@ecan-bi/tools'\r\nimport { DeleteOutlined } from '@ant-design/icons-vue'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n Draggable,\r\n DeleteOutlined\r\n },\r\n setup () {\r\n const request = inject(REQUEST) as any\r\n const indicatorToken = inject(INDICATOR_TOKEN)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const groupList = computed({\r\n get: () => unref(graphicConfig)?.drillGroupList || [],\r\n set (list: any) {\r\n updateConfig(list)\r\n }\r\n })\r\n const allDimensions = ref([])\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n drillGroupList: list\r\n })\r\n }\r\n\r\n const onAddGroup = () => {\r\n const list = cloneDeep(unref(groupList))\r\n list.push({\r\n key: nanoid(),\r\n dimensions: []\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(groupList))\r\n if (list[index].dimensions?.length) {\r\n unref(allDimensions).push(...list[index].dimensions)\r\n }\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const getDimensionData = async () => {\r\n const formatParams: any = formatIndicatorParams({\r\n ...unref(selectedComponent),\r\n allComponentList: unref(renderUsedComponents)\r\n })\r\n let classifications = formatParams?.classification || formatParams?.classifications || []\r\n if (!Array.isArray(classifications)) {\r\n classifications = [classifications]\r\n }\r\n return await request({\r\n url: `${unref(INDICATOR_URL)}/diagram/obtainDrillAbleDimensionOptions`,\r\n method: 'post',\r\n headers: {\r\n // @ts-ignore\r\n Authentication: unref(indicatorToken),\r\n operateContext: 'ygt'\r\n },\r\n data: {\r\n source: unref(graphicConfig)?.source || 'INDICATOR_LIB',\r\n pageId: (window as any)?.config?.pageId,\r\n indicatorList: formatParams?.indicatorList || [],\r\n classifications,\r\n dataSourceId: unref(graphicConfig)?.dataSourceId || '',\r\n drillingMode: 'normalTable'\r\n },\r\n // @ts-ignore\r\n signal: window.controller?.signal || ''\r\n })\r\n }\r\n\r\n onMounted(async () => {\r\n const dimensionOptRes = await getDimensionData()\r\n const dims = dimensionOptRes?.data?.data || []\r\n const selectedDims = [].concat(...unref(groupList).map((v: any) => v.dimensions))\r\n allDimensions.value =\r\n dims\r\n .filter((v: any) => !selectedDims.find((s: any) => s.typeGuid === v.typeGuid))\r\n .map((v: any) => ({ label: v.label, typeGuid: v.typeGuid }))\r\n })\r\n\r\n return {\r\n allDimensions,\r\n groupList,\r\n onAddGroup,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.drill-group-header {\r\n margin: 20px 0;\r\n}\r\n.all-dimension-wrap {\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n .all-dimension-list {\r\n display: flex;\r\n flex: 1;\r\n padding: 10px;\r\n flex-wrap: wrap;\r\n }\r\n}\r\n.dimension-item {\r\n padding: 4px 14px;\r\n background-color: #eee;\r\n margin-right: 10px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n.row-label {\r\n background-color: #eee;\r\n padding: 0 15px;\r\n display: flex;\r\n align-items: center;\r\n min-height: 45px;\r\n}\r\n.drill-group-content {\r\n margin: 15px 0;\r\n .group-drag-wrap {\r\n margin: 10px 0;\r\n .group-row {\r\n width: 100%;\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n margin-bottom: 15px;\r\n .group-item {\r\n padding: 10px;\r\n display: flex;\r\n flex: 1;\r\n flex-wrap: wrap;\r\n }\r\n }\r\n }\r\n}\r\n.delete-icon {\r\n color: red;\r\n margin-right: 10px;\r\n font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"drill-group\">\r\n <div class=\"drill-group-header\">\r\n <a-button @click=\"onAddGroup\">添加组</a-button>\r\n </div>\r\n </div>\r\n <div class=\"all-dimension-wrap\">\r\n <div class=\"row-label\">维度</div>\r\n <draggable\r\n v-model=\"allDimensions\"\r\n class=\"all-dimension-list\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"false\"\r\n >\r\n <template #item=\"{ element }\">\r\n <div class=\"dimension-item\">\r\n {{ element.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n <div class=\"drill-group-content\" v-if=\"groupList?.length\">\r\n <draggable\r\n v-model=\"groupList\"\r\n class=\"group-drag-wrap\"\r\n item-key=\"key\"\r\n :group=\"{\r\n name: 'groupList',\r\n pull: false,\r\n put: false\r\n }\"\r\n >\r\n <template #item=\"{ element, index }\">\r\n <div class=\"group-row\">\r\n <div class=\"row-label\">组{{ index + 1 }}</div>\r\n <draggable\r\n v-model=\"element.dimensions\"\r\n class=\"group-item\"\r\n item-key=\"typeGuid\"\r\n :group=\"{\r\n name: 'dimList',\r\n pull: true,\r\n put: true\r\n }\"\r\n :sort=\"true\"\r\n >\r\n <template #item=\"{ element: dimension }\">\r\n <div class=\"dimension-item\">\r\n {{ dimension.label }}\r\n </div>\r\n </template>\r\n </draggable>\r\n <delete-outlined class=\"delete-icon\" @click=\"onDeleteItem(index)\" />\r\n </div>\r\n </template>\r\n </draggable>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, inject, onMounted, ref, unref } from 'vue'\r\nimport {\r\n GRAPHIC_CONFIG,\r\n UPDATE_GRAPHIC_CONFIG,\r\n SELECTED_COMPONENT,\r\n RENDER_USED_COMPONENTS,\r\n INDICATOR_URL,\r\n REQUEST,\r\n INDICATOR_TOKEN\r\n} from '@/utils/constant'\r\nimport { nanoid } from 'nanoid'\r\nimport { cloneDeep } from 'lodash-es'\r\nimport Draggable from 'vuedraggable'\r\nimport { formatIndicatorParams } from '@ecan-bi/tools'\r\nimport { DeleteOutlined } from '@ant-design/icons-vue'\r\nexport default defineComponent({\r\n name: 'VariableGroup',\r\n components: {\r\n Draggable,\r\n DeleteOutlined\r\n },\r\n setup () {\r\n const request = inject(REQUEST) as any\r\n const indicatorToken = inject(INDICATOR_TOKEN)\r\n const graphicConfig = inject(GRAPHIC_CONFIG) as any\r\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\r\n const selectedComponent = inject(SELECTED_COMPONENT) as any\r\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\r\n const groupList = computed({\r\n get: () => unref(graphicConfig)?.drillGroupList || [],\r\n set (list: any) {\r\n updateConfig(list)\r\n }\r\n })\r\n const allDimensions = ref([])\r\n\r\n const updateConfig = (list: { [key:string]: any }[]) => {\r\n updateGraphicConfig({\r\n ...unref(graphicConfig),\r\n drillGroupList: list\r\n })\r\n }\r\n\r\n const onAddGroup = () => {\r\n const list = cloneDeep(unref(groupList))\r\n list.push({\r\n key: nanoid(),\r\n dimensions: []\r\n })\r\n updateConfig(list)\r\n }\r\n\r\n const onDeleteItem = (index: number) => {\r\n if (index >= 0) {\r\n const list = cloneDeep(unref(groupList))\r\n if (list[index].dimensions?.length) {\r\n unref(allDimensions).push(...list[index].dimensions)\r\n }\r\n list.splice(index, 1)\r\n updateConfig(list)\r\n }\r\n }\r\n\r\n const getDimensionData = async () => {\r\n const formatParams: any = formatIndicatorParams({\r\n ...unref(selectedComponent),\r\n allComponentList: unref(renderUsedComponents)\r\n })\r\n let classifications = formatParams?.classification || formatParams?.classifications || []\r\n if (!Array.isArray(classifications)) {\r\n classifications = [classifications]\r\n }\r\n return await request({\r\n url: `${unref(INDICATOR_URL)}/diagram/obtainDrillAbleDimensionOptions`,\r\n method: 'post',\r\n headers: {\r\n // @ts-ignore\r\n Authentication: unref(indicatorToken),\r\n operateContext: 'ygt'\r\n },\r\n data: {\r\n source: unref(graphicConfig)?.source || 'INDICATOR_LIB',\r\n pageId: (window as any)?.config?.pageId,\r\n indicatorList: formatParams?.indicatorList || [],\r\n classifications,\r\n dataSourceId: unref(graphicConfig)?.dataSourceId || '',\r\n drillingMode: 'normalTable'\r\n },\r\n // @ts-ignore\r\n signal: window.controller?.signal || ''\r\n })\r\n }\r\n\r\n onMounted(async () => {\r\n const dimensionOptRes = await getDimensionData()\r\n const dims = dimensionOptRes?.data?.data || []\r\n const selectedDims = [].concat(...unref(groupList).map((v: any) => v.dimensions))\r\n allDimensions.value =\r\n dims\r\n .filter((v: any) => !selectedDims.find((s: any) => s.typeGuid === v.typeGuid))\r\n .map((v: any) => ({ label: v.label, typeGuid: v.typeGuid }))\r\n })\r\n\r\n return {\r\n allDimensions,\r\n groupList,\r\n onAddGroup,\r\n onDeleteItem\r\n }\r\n }\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.drill-group-header {\r\n margin: 20px 0;\r\n}\r\n.all-dimension-wrap {\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n .all-dimension-list {\r\n display: flex;\r\n flex: 1;\r\n padding: 10px;\r\n flex-wrap: wrap;\r\n }\r\n}\r\n.dimension-item {\r\n padding: 4px 14px;\r\n background-color: #eee;\r\n margin-right: 10px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n.row-label {\r\n background-color: #eee;\r\n padding: 0 15px;\r\n display: flex;\r\n align-items: center;\r\n min-height: 45px;\r\n}\r\n.drill-group-content {\r\n margin: 15px 0;\r\n .group-drag-wrap {\r\n margin: 10px 0;\r\n .group-row {\r\n width: 100%;\r\n display: flex;\r\n border: 1px solid #d9d9d9;\r\n border-radius: 4px;\r\n margin-bottom: 15px;\r\n .group-item {\r\n padding: 10px;\r\n display: flex;\r\n flex: 1;\r\n flex-wrap: wrap;\r\n }\r\n }\r\n }\r\n}\r\n.delete-icon {\r\n color: red;\r\n margin-right: 10px;\r\n font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n</style>\r\n","<template>\r\n <a-table\r\n style=\"width: 100%;\"\r\n :scroll=\"{ y: 280 }\"\r\n :columns=\"tableColumns\"\r\n :data-source=\"tableData\"\r\n size=\"small\"\r\n :pagination=\"pagination\"\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.retentiondigit !== undefined\">\r\n <span>{{ handleFormat(record, column)}}</span>\r\n </template>\r\n </template>\r\n </a-table>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, watch, unref } from 'vue'\r\nimport { Table as ATable } from 'ant-design-vue'\r\nimport useIndicatorData from '@/hooks/useIndicatorData'\r\nimport { handleFormat } from '@/utils/util'\r\n\r\nimport 'ant-design-vue/es/table/style'\r\nimport { REQUEST, INDICATOR_TOKEN, SELECTED_COMPONENT } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'TableGraph',\r\n components: { ATable },\r\n props: {\r\n graphicConfig: {\r\n // 指标库配置\r\n type: Object,\r\n default: () => {}\r\n },\r\n type: {\r\n type: String\r\n },\r\n pagination: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n },\r\n setup (props) {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as {\r\n [key: string]: any\r\n }\r\n const tableData = ref<any[]>([])\r\n const tableColumns = ref<any[]>([])\r\n const request = inject(REQUEST)\r\n const indicatorToken = inject(INDICATOR_TOKEN) || ''\r\n const handleIndicatorData = async () => {\r\n try {\r\n const indicatorData = useIndicatorData({\r\n graphicConfig: props.graphicConfig,\r\n type: props.type,\r\n request,\r\n indicatorToken\r\n })\r\n const res = await indicatorData()\r\n const { columns = [], rows = [] } = res?.data?.data ?? {}\r\n const columnsConfigMap = unref(selectedComponent).columnsConfigMap\r\n tableColumns.value = columns.map((i) => ({ title: i, dataIndex: i, label: i, ...columnsConfigMap[i] }))\r\n tableData.value = rows\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n watch(\r\n [() => props.graphicConfig, () => unref(selectedComponent).columnsConfigMap],\r\n () => {\r\n handleIndicatorData()\r\n },\r\n { deep: true, immediate: true }\r\n )\r\n return {\r\n tableData,\r\n tableColumns,\r\n handleFormat,\r\n columnsConfigMap: unref(selectedComponent).columnsConfigMap\r\n }\r\n }\r\n})\r\n</script>\r\n","<template>\r\n <a-table\r\n style=\"width: 100%;\"\r\n :scroll=\"{ y: 280 }\"\r\n :columns=\"tableColumns\"\r\n :data-source=\"tableData\"\r\n size=\"small\"\r\n :pagination=\"pagination\"\r\n >\r\n <template #bodyCell=\"{ column, record }\">\r\n <template v-if=\"column.retentiondigit !== undefined\">\r\n <span>{{ handleFormat(record, column)}}</span>\r\n </template>\r\n </template>\r\n </a-table>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, ref, inject, watch, unref } from 'vue'\r\nimport { Table as ATable } from 'ant-design-vue'\r\nimport useIndicatorData from '@/hooks/useIndicatorData'\r\nimport { handleFormat } from '@/utils/util'\r\n\r\nimport 'ant-design-vue/es/table/style'\r\nimport { REQUEST, INDICATOR_TOKEN, SELECTED_COMPONENT } from '@/utils/constant'\r\nexport default defineComponent({\r\n name: 'TableGraph',\r\n components: { ATable },\r\n props: {\r\n graphicConfig: {\r\n // 指标库配置\r\n type: Object,\r\n default: () => {}\r\n },\r\n type: {\r\n type: String\r\n },\r\n pagination: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n },\r\n setup (props) {\r\n const selectedComponent = inject(SELECTED_COMPONENT) as {\r\n [key: string]: any\r\n }\r\n const tableData = ref<any[]>([])\r\n const tableColumns = ref<any[]>([])\r\n const request = inject(REQUEST)\r\n const indicatorToken = inject(INDICATOR_TOKEN) || ''\r\n const handleIndicatorData = async () => {\r\n try {\r\n const indicatorData = useIndicatorData({\r\n graphicConfig: props.graphicConfig,\r\n type: props.type,\r\n request,\r\n indicatorToken\r\n })\r\n const res = await indicatorData()\r\n const { columns = [], rows = [] } = res?.data?.data ?? {}\r\n const columnsConfigMap = unref(selectedComponent).columnsConfigMap\r\n tableColumns.value = columns.map((i) => ({ title: i, dataIndex: i, label: i, ...columnsConfigMap[i] }))\r\n tableData.value = rows\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n watch(\r\n [() => props.graphicConfig, () => unref(selectedComponent).columnsConfigMap],\r\n () => {\r\n handleIndicatorData()\r\n },\r\n { deep: true, immediate: true }\r\n )\r\n return {\r\n tableData,\r\n tableColumns,\r\n handleFormat,\r\n columnsConfigMap: unref(selectedComponent).columnsConfigMap\r\n }\r\n }\r\n})\r\n</script>\r\n","<template>\n <div class=\"data-config\" :class=\"isPivotTable ? 'pivot-table-wrap' : ''\">\n <a-tabs v-model:activeKey=\"activeKey\" @change=\"onChange\">\n <a-tab-pane key=\"1\" tab=\"数据配置\" ref=\"dataConfigPaneRef\">\n <template v-if=\"isPivotTable && isIframeMode\">\n <div class=\"ecan-pivot-table\" ref=\"pivotTableWrapRef\">\n <component\n v-if=\"asyncTableComponent\"\n :is=\"asyncTableComponent\"\n ref=\"componentRef\"\n v-bind=\"tableProps\"\n />\n </div>\n </template>\n <template v-else>\n <data-group ref=\"dataGroupRef\" v-if=\"!isPivotTable\" />\n <component\n v-if=\"!isShowStyleConfig\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n :is=\"type\"\n v-bind=\"component\"\n ref=\"componentRef\"\n @tableChange=\"onPivotTableChange\"\n />\n </template>\n </a-tab-pane>\n <a-tab-pane v-if=\"isShowStyleConfig\" key=\"2\" tab=\"样式配置\" force-render>\n <style-group :componentType=\"type\" :isGroupTable=\"isGroupTable\"></style-group>\n </a-tab-pane>\n <a-tab-pane v-if=\"(!isIframeMode || isPivotTable) && renderUsedComponents\" key=\"3\" tab=\"全局过滤\" force-render>\n <control-group ref=\"controlGroup\" :conditionOptions=\"conditionOptions\" />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode\"\n key=\"4\"\n tab=\"全局变量\"\n force-render\n >\n <variable-group />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode && !isPivotTable && pageConfig?.drillingMode === 'normalTable'\"\n key=\"5\"\n tab=\"钻取路径\"\n force-render\n >\n <drill-group />\n </a-tab-pane>\n <template #rightExtra>\n <a-button @click=\"refreshAction\">\n <template #icon>\n <reload-outlined />\n </template>\n 刷新\n </a-button>\n </template>\n </a-tabs>\n <template v-if=\"isShowStyleConfig && !isPivotTable\">\n <div\n v-if=\"type === 'table' && activeKey === '1'\"\n id=\"table-wrap\"\n class=\"chart-component\"\n ref=\"tableWrapRef\"\n style=\"width: 100%; height: 290px\"\n ></div>\n <table-graph v-show=\"activeKey === '1'\" class=\"chart-component\" v-else-if=\"type === 'card'\" v-bind=\"component\"></table-graph>\n <chart-graph\n v-else\n v-show=\"activeKey === '1'\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n ref=\"componentRef\"\n style=\"width: 100%; height: 290px\"\n ></chart-graph>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref, unref, inject, watch, provide, onMounted, defineAsyncComponent } from 'vue'\nimport { Tabs as ATabs, TabPane as ATabPane, Button as AButton } from 'ant-design-vue'\nimport DataGroup from './data-config-group'\nimport StyleGroup from './style-config-group'\nimport ControlGroup from './control-group'\nimport VariableGroup from './variable-group'\nimport DrillGroup from './drill-group'\nimport ChartGraph from '@/indicator/chart-graph/ChartGraph.vue'\nimport TableGraph from '@/indicator/table-graph/TableGraph.vue'\nimport { cloneDeep, pick, without } from 'lodash-es'\nimport { ReloadOutlined } from '@ant-design/icons-vue'\nimport {\n SELECTED_COMPONENT,\n GRAPHIC_CONFIG,\n SHOW_STYLE_CONFIG,\n REFRESH_DATA,\n RENDER_USED_COMPONENTS,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n PAGE_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n IS_PIVOT_TABLE,\n IS_IFRAME_MODE\n} from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\n\nexport default defineComponent({\n name: 'DataConfig',\n components: {\n DataGroup,\n StyleGroup,\n ChartGraph,\n ATabs,\n ATabPane,\n ControlGroup,\n VariableGroup,\n DrillGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n props: {\n sqlConditions: {\n type: Array,\n default: () => []\n }\n },\n setup (props, { expose }) {\n const asyncTableComponent = ref(null)\n const dataConfigPaneRef = ref()\n const activeKey = ref('1')\n const activePanel = ref<number[]>([0, 1, 2])\n const componentRef = ref()\n const pivotTableWrapRef = ref()\n const selectedComponent = inject(SELECTED_COMPONENT) as {\n [key: string]: any\n }\n const isShowStyleConfig = inject(SHOW_STYLE_CONFIG)\n const graphicConfig = inject(GRAPHIC_CONFIG) as { [key: string]: any }\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const pageConfig = inject(PAGE_CONFIG) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const isIframeMode = inject(IS_IFRAME_MODE) as any\n const notGraphicList = ['text', 'proportion', 'select', 'checkbox', 'radio', 'radar', 'circulate']\n const component = computed<{ [key: string]: any }>(() => {\n const cloneComponent = cloneDeep(unref(selectedComponent))\n modifyWhite(cloneComponent)\n const pickComponent = pick(\n cloneComponent,\n without(Object.keys(cloneComponent), 'position', 'top', 'left', 'width', 'height')\n )\n if (lowerCaseIncludes(cloneComponent.type, notGraphicList)) {\n pickComponent.height = cloneComponent.height\n pickComponent.width = cloneComponent.width\n } else {\n pickComponent.height = '290px'\n }\n const config = cloneDeep(unref(graphicConfig))\n // 设计模式\n config.pageMode = 'design'\n // 组件列表\n config.componentList = renderUsedComponents\n // 后台开启预览模式\n config.preview = true\n // 页面配置\n config.pageConfig = pageConfig\n\n if (lowerCaseIncludes(cloneComponent.type, 'pivottable')) {\n if (unref(dataConfigPaneRef)) {\n pickComponent.height = unref(dataConfigPaneRef).$el.clientHeight - 20 + 'px'\n pickComponent.width = unref(dataConfigPaneRef).$el.clientWidth + 'px'\n }\n pickComponent.fullMode = true\n config.preview = false\n delete config.pageMode\n }\n\n return {\n ...pickComponent,\n graphicConfig: {\n ...config,\n sqlConditions: props.sqlConditions\n },\n // 隐藏工具栏\n toolboxShow: false,\n // 保存原有的left和top\n sourceLeft: cloneComponent.left,\n sourceTop: cloneComponent.top\n }\n })\n\n const tableProps = computed(() => {\n const { token, context } = unref(selectedComponent)\n const width = (unref(pivotTableWrapRef)?.clientWidth || 0) + 'px'\n const height = (unref(pivotTableWrapRef)?.clientHeight || 0) + 'px'\n return {\n id: unref(selectedComponent).componentId,\n name: unref(selectedComponent).name,\n keyName: unref(selectedComponent).keyName,\n type: 'pivotTable',\n width,\n height,\n graphicConfig: unref(selectedComponent).graphicConfig,\n dimensionList: unref(selectedComponent).dimensionList || [],\n fullMode: true,\n globalModel: new Map(),\n indicatorUrl: '/api',\n indicatorToken: token,\n context\n }\n })\n\n // 修改组件的部分颜色(只影响指标库配置弹窗中的显示,不影响最终预览效果),比如文本控件如果设置为白色,在指标库配置弹窗中就看不见了\n function modifyWhite (component: { [key: string]: any }) {\n if (['#ffffff', '#fff'].includes(component?.color?.toLowerCase())) {\n component.color = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.variableColor?.toLowerCase())) {\n component.variableColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.increaseColor?.toLowerCase())) {\n component.increaseColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.declineColor?.toLowerCase())) {\n component.declineColor = '#000'\n }\n }\n const fullWidth = computed(() => {\n let result = true\n if (lowerCaseIncludes(unref(component).type, notGraphicList)) {\n result = false\n }\n return result\n })\n const type = computed(() => unref(component)?.type)\n const isGroupTable = computed(() => !!unref(component)?.isGroupTable)\n\n const onChange = (val: string) => {\n const bool = val === '1'\n if (bool && type.value === 'table') {\n refreshData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(bool)\n }\n if (val === '3') {\n // 获取指标中的其他数据\n getOtherData()\n }\n }\n\n const conditionOptions = ref<any>([])\n // 指标的交集数据\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n function getOtherData () {\n const { leftAxisList = [], rightAxisList = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...indicators]\n const idMap: any = {}\n for (const item of otherList) {\n const { id = '', indexCode = '' } = item\n if (id && !hasOwn(item, 'calcType') && !idMap[id]) {\n idMap[id] = indexCode\n }\n }\n if (Object.keys(idMap)?.length) {\n const promistList = []\n for (const id in idMap) {\n promistList.push(\n new Promise((resolve, reject) => {\n request\n .post(\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\n {\n pageId: PAGE_ID,\n indexGuid: id,\n indexCode: idMap[id],\n dataSourceId\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n .then((res: any) => {\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n resolve(data.dataViewColumns)\n } else {\n reject(data)\n }\n })\n .catch((e) => {\n reject(e)\n })\n })\n )\n }\n Promise.all(promistList).then((res) => {\n if (res?.length) {\n // 取交集\n const resultList = res.reduce((a: any, b: any) =>\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\n )\n setConditionOptions(resultList.filter((v: any) => v.typeGuid))\n }\n })\n } else {\n setConditionOptions([])\n }\n }\n\n function setConditionOptions (intersection: any) {\n const {\n classificationList = [],\n seriesList = [],\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n rowHeaderList = [],\n queryColumnList = []\n } = unref(graphicConfig)\n const otherOptions = cloneDeep([\n ...classificationList,\n ...seriesList,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...rowHeaderList,\n ...queryColumnList\n ])\n if (otherOptions?.length) {\n for (const item of otherOptions) {\n item.id = item.name\n }\n }\n\n const options = [\n {\n label: '日期(内置)', // 设值对应 conditionLabel\n name: '日期(内置)', // 设值对应 conditionName\n id: 'the_date', // 设值对应 conditionKey (conditionValue 在关联控件中取)\n genericType: 'DATE', // 设值对应 conditionValueType\n typeGuid: 'the_date',\n indexCode: null\n },\n {\n label: '单位编号(内置)',\n name: '单位编号(内置)',\n id: 'hbdwbh',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh',\n indexCode: null\n },\n {\n label: '单位名称(内置)',\n name: '单位名称(内置)',\n id: 'hbdwbh_name',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh_name',\n indexCode: null\n },\n {\n label: '年(内置)',\n name: '年(内置)',\n id: 'the_year',\n genericType: 'TEXT',\n typeGuid: 'the_year',\n indexCode: null\n },\n {\n label: '月(内置)',\n name: '月(内置)',\n id: 'the_month',\n genericType: 'TEXT',\n typeGuid: 'the_month',\n indexCode: null\n },\n {\n label: '日(内置)',\n name: '日(内置)',\n id: 'the_day',\n genericType: 'TEXT',\n typeGuid: 'the_day',\n indexCode: null\n },\n ...intersection.map((v: any) => {\n return {\n ...v,\n id: v.name,\n label: v.title || v.label\n }\n }),\n ...otherOptions\n ]\n\n // 下拉框组件增加“上级编码”用于级联操作\n if (lowerCaseIncludes(unref(selectedComponent)?.type, 'select')) {\n const { selectFieldOptions = [] } = unref(graphicConfig)\n options.unshift({\n label: '上级编码',\n name: '上级编码',\n id: 'parentCode',\n genericType: 'TEXT'\n })\n if (selectFieldOptions?.length) {\n for (const item of selectFieldOptions) {\n options.unshift({\n label: item.label,\n name: item.value,\n id: item.value,\n genericType: 'TEXT'\n })\n }\n }\n }\n\n // 去重\n const optionsMap = new Map()\n const optionsLen = options.length\n for (let i = 0; i < optionsLen; i++) {\n const option = options[i]\n const { id } = option || {}\n optionsMap.set(id, option)\n }\n const optionsMapArr = [...optionsMap]\n conditionOptions.value = optionsMapArr.map(([_id, option]) => option)\n }\n\n const refreshData = () => {\n let refreshData: any\n if (isShowStyleConfig && type.value === 'table') {\n refreshData = (window as any).updateConfig\n } else {\n refreshData = unref(componentRef)?.refreshData\n }\n if (typeof refreshData === 'function') {\n refreshData()\n }\n }\n\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const syncVariableConditions = () => {\n const variableConditions = handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n if (JSON.stringify(variableConditions) !== JSON.stringify(unref(graphicConfig)?.variableConditions || [])) {\n updateGraphicConfig({ variableConditions })\n return true\n }\n return false\n }\n const refreshAction = () => {\n // 刷新全局变量的最新配置\n updateGraphicConfig({\n variableConditions: handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n })\n }\n\n provide(REFRESH_DATA, refreshData)\n watch(\n graphicConfig,\n () => {\n if (!syncVariableConditions()) {\n refreshData()\n }\n },\n {\n deep: true,\n flush: 'post'\n }\n )\n\n const loadPivotTablePlugin = async () => {\n try {\n const tableModule = await import('@ecan-bi/pivot-table')\n asyncTableComponent.value = defineAsyncComponent({\n loader: () => Promise.resolve(tableModule.EcanPivotTable),\n delay: 0\n })\n } catch (error) {\n console.error('加载插件失败:', error)\n }\n }\n\n onMounted(async () => {\n if (isPivotTable.value) {\n await loadPivotTablePlugin()\n setTimeout(() => {\n refreshData()\n }, 0)\n }\n })\n\n const getSaveData = () => unref(componentRef).getSaveData()\n\n // 透视表操作变化\n const onPivotTableChange = ({ type, data }) => {\n if (type === '10') {\n const { dimensions, indicators } = cloneDeep(data)\n const dimensionList = []\n if (dimensions) {\n for (const item of dimensions) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n dimensionList.push({\n key: item.name,\n label: item.showTitle,\n width: null,\n position: item.positionType || 'rows'\n })\n }\n for (const item of indicators) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n }\n }\n updateGraphicConfig({\n dimensionList,\n queryColumnList: dimensions,\n indicators: indicators\n })\n component.value.dimensionList = dimensionList\n }\n }\n\n expose({\n getSaveData\n })\n\n return {\n isShowStyleConfig,\n activeKey,\n activePanel,\n componentRef,\n pivotTableWrapRef,\n type,\n isGroupTable,\n isPivotTable,\n isIframeMode,\n component,\n fullWidth,\n renderUsedComponents,\n conditionOptions,\n tableProps,\n dataConfigPaneRef,\n asyncTableComponent,\n pageConfig,\n refreshData,\n refreshAction,\n onChange,\n onPivotTableChange\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config {\n background: #fff;\n height: 100%;\n width: 100%;\n padding: 0 15px;\n overflow-y: auto;\n color: #444;\n display: flex;\n flex-flow: column;\n\n :deep(.ant-tabs) {\n // height: calc(100% - 310px);\n flex: 1;\n\n .ant-tabs-nav {\n margin-bottom: 4px;\n }\n\n .ant-tabs-content-holder {\n height: calc(100% - 50px);\n overflow: auto;\n }\n }\n\n &.pivot-table-wrap {\n :deep(.ant-tabs) {\n .ant-tabs-content-holder {\n overflow: hidden;\n .ant-tabs-content {\n height: 100%;\n }\n }\n }\n }\n\n .ecan-pivot-table {\n width: 100%;\n height: 100%;\n position: relative;\n }\n}\n\n.chart-component {\n width: 100%;\n position: relative !important;\n margin: 20px auto 0;\n\n &.full-width {\n width: 100% !important;\n }\n}\n\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 135px;\n display: flex;\n justify-content: center;\n}\n\n.component-wrapper {\n width: calc(100% - 135px);\n}\n\n.color-pick {\n display: flex;\n}\n\n.input {\n margin-right: 10px;\n}\n</style>\n","<template>\n <div class=\"data-config\" :class=\"isPivotTable ? 'pivot-table-wrap' : ''\">\n <a-tabs v-model:activeKey=\"activeKey\" @change=\"onChange\">\n <a-tab-pane key=\"1\" tab=\"数据配置\" ref=\"dataConfigPaneRef\">\n <template v-if=\"isPivotTable && isIframeMode\">\n <div class=\"ecan-pivot-table\" ref=\"pivotTableWrapRef\">\n <component\n v-if=\"asyncTableComponent\"\n :is=\"asyncTableComponent\"\n ref=\"componentRef\"\n v-bind=\"tableProps\"\n />\n </div>\n </template>\n <template v-else>\n <data-group ref=\"dataGroupRef\" v-if=\"!isPivotTable\" />\n <component\n v-if=\"!isShowStyleConfig\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n :is=\"type\"\n v-bind=\"component\"\n ref=\"componentRef\"\n @tableChange=\"onPivotTableChange\"\n />\n </template>\n </a-tab-pane>\n <a-tab-pane v-if=\"isShowStyleConfig\" key=\"2\" tab=\"样式配置\" force-render>\n <style-group :componentType=\"type\" :isGroupTable=\"isGroupTable\"></style-group>\n </a-tab-pane>\n <a-tab-pane v-if=\"(!isIframeMode || isPivotTable) && renderUsedComponents\" key=\"3\" tab=\"全局过滤\" force-render>\n <control-group ref=\"controlGroup\" :conditionOptions=\"conditionOptions\" />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode\"\n key=\"4\"\n tab=\"全局变量\"\n force-render\n >\n <variable-group />\n </a-tab-pane>\n <a-tab-pane\n v-if=\"!isIframeMode && !isPivotTable && pageConfig?.drillingMode === 'normalTable'\"\n key=\"5\"\n tab=\"钻取路径\"\n force-render\n >\n <drill-group />\n </a-tab-pane>\n <template #rightExtra>\n <a-button @click=\"refreshAction\">\n <template #icon>\n <reload-outlined />\n </template>\n 刷新\n </a-button>\n </template>\n </a-tabs>\n <template v-if=\"isShowStyleConfig && !isPivotTable\">\n <div\n v-if=\"type === 'table' && activeKey === '1'\"\n id=\"table-wrap\"\n class=\"chart-component\"\n ref=\"tableWrapRef\"\n style=\"width: 100%; height: 290px\"\n ></div>\n <table-graph v-show=\"activeKey === '1'\" class=\"chart-component\" v-else-if=\"type === 'card'\" v-bind=\"component\"></table-graph>\n <chart-graph\n v-else\n v-show=\"activeKey === '1'\"\n class=\"chart-component\"\n :class=\"fullWidth ? 'full-width' : ''\"\n ref=\"componentRef\"\n style=\"width: 100%; height: 290px\"\n ></chart-graph>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, computed, ref, unref, inject, watch, provide, onMounted, defineAsyncComponent } from 'vue'\nimport { Tabs as ATabs, TabPane as ATabPane, Button as AButton } from 'ant-design-vue'\nimport DataGroup from './data-config-group'\nimport StyleGroup from './style-config-group'\nimport ControlGroup from './control-group'\nimport VariableGroup from './variable-group'\nimport DrillGroup from './drill-group'\nimport ChartGraph from '@/indicator/chart-graph/ChartGraph.vue'\nimport TableGraph from '@/indicator/table-graph/TableGraph.vue'\nimport { cloneDeep, pick, without } from 'lodash-es'\nimport { ReloadOutlined } from '@ant-design/icons-vue'\nimport {\n SELECTED_COMPONENT,\n GRAPHIC_CONFIG,\n SHOW_STYLE_CONFIG,\n REFRESH_DATA,\n RENDER_USED_COMPONENTS,\n REQUEST,\n INDICATOR_URL,\n INDICATOR_TOKEN,\n PAGE_CONFIG,\n UPDATE_GRAPHIC_CONFIG,\n IS_PIVOT_TABLE,\n IS_IFRAME_MODE\n} from '@/utils/constant'\nimport { handleVariableList } from '@/utils/util'\nimport { hasOwn, lowerCaseIncludes } from '@ecan-bi/tools'\n\nexport default defineComponent({\n name: 'DataConfig',\n components: {\n DataGroup,\n StyleGroup,\n ChartGraph,\n ATabs,\n ATabPane,\n ControlGroup,\n VariableGroup,\n DrillGroup,\n AButton,\n ReloadOutlined,\n TableGraph\n },\n props: {\n sqlConditions: {\n type: Array,\n default: () => []\n }\n },\n setup (props, { expose }) {\n const asyncTableComponent = ref(null)\n const dataConfigPaneRef = ref()\n const activeKey = ref('1')\n const activePanel = ref<number[]>([0, 1, 2])\n const componentRef = ref()\n const pivotTableWrapRef = ref()\n const selectedComponent = inject(SELECTED_COMPONENT) as {\n [key: string]: any\n }\n const isShowStyleConfig = inject(SHOW_STYLE_CONFIG)\n const graphicConfig = inject(GRAPHIC_CONFIG) as { [key: string]: any }\n const renderUsedComponents = inject(RENDER_USED_COMPONENTS) as any\n const pageConfig = inject(PAGE_CONFIG) as any\n const isPivotTable = inject(IS_PIVOT_TABLE) as any\n const isIframeMode = inject(IS_IFRAME_MODE) as any\n const notGraphicList = ['text', 'proportion', 'select', 'checkbox', 'radio', 'radar', 'circulate']\n const component = computed<{ [key: string]: any }>(() => {\n const cloneComponent = cloneDeep(unref(selectedComponent))\n modifyWhite(cloneComponent)\n const pickComponent = pick(\n cloneComponent,\n without(Object.keys(cloneComponent), 'position', 'top', 'left', 'width', 'height')\n )\n if (lowerCaseIncludes(cloneComponent.type, notGraphicList)) {\n pickComponent.height = cloneComponent.height\n pickComponent.width = cloneComponent.width\n } else {\n pickComponent.height = '290px'\n }\n const config = cloneDeep(unref(graphicConfig))\n // 设计模式\n config.pageMode = 'design'\n // 组件列表\n config.componentList = renderUsedComponents\n // 后台开启预览模式\n config.preview = true\n // 页面配置\n config.pageConfig = pageConfig\n\n if (lowerCaseIncludes(cloneComponent.type, 'pivottable')) {\n if (unref(dataConfigPaneRef)) {\n pickComponent.height = unref(dataConfigPaneRef).$el.clientHeight - 20 + 'px'\n pickComponent.width = unref(dataConfigPaneRef).$el.clientWidth + 'px'\n }\n pickComponent.fullMode = true\n config.preview = false\n delete config.pageMode\n }\n\n return {\n ...pickComponent,\n graphicConfig: {\n ...config,\n sqlConditions: props.sqlConditions\n },\n // 隐藏工具栏\n toolboxShow: false,\n // 保存原有的left和top\n sourceLeft: cloneComponent.left,\n sourceTop: cloneComponent.top\n }\n })\n\n const tableProps = computed(() => {\n const { token, context } = unref(selectedComponent)\n const width = (unref(pivotTableWrapRef)?.clientWidth || 0) + 'px'\n const height = (unref(pivotTableWrapRef)?.clientHeight || 0) + 'px'\n return {\n id: unref(selectedComponent).componentId,\n name: unref(selectedComponent).name,\n keyName: unref(selectedComponent).keyName,\n type: 'pivotTable',\n width,\n height,\n graphicConfig: unref(selectedComponent).graphicConfig,\n dimensionList: unref(selectedComponent).dimensionList || [],\n fullMode: true,\n globalModel: new Map(),\n indicatorUrl: '/api',\n indicatorToken: token,\n context\n }\n })\n\n // 修改组件的部分颜色(只影响指标库配置弹窗中的显示,不影响最终预览效果),比如文本控件如果设置为白色,在指标库配置弹窗中就看不见了\n function modifyWhite (component: { [key: string]: any }) {\n if (['#ffffff', '#fff'].includes(component?.color?.toLowerCase())) {\n component.color = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.variableColor?.toLowerCase())) {\n component.variableColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.increaseColor?.toLowerCase())) {\n component.increaseColor = '#000'\n }\n if (['#ffffff', '#fff'].includes(component?.declineColor?.toLowerCase())) {\n component.declineColor = '#000'\n }\n }\n const fullWidth = computed(() => {\n let result = true\n if (lowerCaseIncludes(unref(component).type, notGraphicList)) {\n result = false\n }\n return result\n })\n const type = computed(() => unref(component)?.type)\n const isGroupTable = computed(() => !!unref(component)?.isGroupTable)\n\n const onChange = (val: string) => {\n const bool = val === '1'\n if (bool && type.value === 'table') {\n refreshData()\n }\n if ((window as any).changeShowTable) {\n (window as any).changeShowTable(bool)\n }\n if (val === '3') {\n // 获取指标中的其他数据\n getOtherData()\n }\n }\n\n const conditionOptions = ref<any>([])\n // 指标的交集数据\n const request = inject(REQUEST) as any\n const indicatorToken = unref(inject(INDICATOR_TOKEN))\n const PAGE_ID = (window as any)?.config?.pageId\n function getOtherData () {\n const { leftAxisList = [], rightAxisList = [], indicators = [], dataSourceId = '' } = unref(graphicConfig)\n const otherList = [...leftAxisList, ...rightAxisList, ...indicators]\n const idMap: any = {}\n for (const item of otherList) {\n const { id = '', indexCode = '' } = item\n if (id && !hasOwn(item, 'calcType') && !idMap[id]) {\n idMap[id] = indexCode\n }\n }\n if (Object.keys(idMap)?.length) {\n const promistList = []\n for (const id in idMap) {\n promistList.push(\n new Promise((resolve, reject) => {\n request\n .post(\n `${INDICATOR_URL}/diagram/hrpIndexWithComplex`,\n {\n pageId: PAGE_ID,\n indexGuid: id,\n indexCode: idMap[id],\n dataSourceId\n },\n {\n headers: {\n Authentication: indicatorToken,\n operateContext: 'ygt'\n }\n }\n )\n .then((res: any) => {\n const { success, data = [] } = res.data\n if (success && data?.dataViewColumns?.length) {\n resolve(data.dataViewColumns)\n } else {\n reject(data)\n }\n })\n .catch((e) => {\n reject(e)\n })\n })\n )\n }\n Promise.all(promistList).then((res) => {\n if (res?.length) {\n // 取交集\n const resultList = res.reduce((a: any, b: any) =>\n a.filter((c: any) => b.find((v: any) => v.typeGuid === c.typeGuid))\n )\n setConditionOptions(resultList.filter((v: any) => v.typeGuid))\n }\n })\n } else {\n setConditionOptions([])\n }\n }\n\n function setConditionOptions (intersection: any) {\n const {\n classificationList = [],\n seriesList = [],\n leftAxisList = [],\n rightAxisList = [],\n indicators = [],\n rowHeaderList = [],\n queryColumnList = []\n } = unref(graphicConfig)\n const otherOptions = cloneDeep([\n ...classificationList,\n ...seriesList,\n ...leftAxisList,\n ...rightAxisList,\n ...indicators,\n ...rowHeaderList,\n ...queryColumnList\n ])\n if (otherOptions?.length) {\n for (const item of otherOptions) {\n item.id = item.name\n }\n }\n\n const options = [\n {\n label: '日期(内置)', // 设值对应 conditionLabel\n name: '日期(内置)', // 设值对应 conditionName\n id: 'the_date', // 设值对应 conditionKey (conditionValue 在关联控件中取)\n genericType: 'DATE', // 设值对应 conditionValueType\n typeGuid: 'the_date',\n indexCode: null\n },\n {\n label: '单位编号(内置)',\n name: '单位编号(内置)',\n id: 'hbdwbh',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh',\n indexCode: null\n },\n {\n label: '单位名称(内置)',\n name: '单位名称(内置)',\n id: 'hbdwbh_name',\n genericType: 'TEXT',\n typeGuid: 'hbdwbh_name',\n indexCode: null\n },\n {\n label: '年(内置)',\n name: '年(内置)',\n id: 'the_year',\n genericType: 'TEXT',\n typeGuid: 'the_year',\n indexCode: null\n },\n {\n label: '月(内置)',\n name: '月(内置)',\n id: 'the_month',\n genericType: 'TEXT',\n typeGuid: 'the_month',\n indexCode: null\n },\n {\n label: '日(内置)',\n name: '日(内置)',\n id: 'the_day',\n genericType: 'TEXT',\n typeGuid: 'the_day',\n indexCode: null\n },\n ...intersection.map((v: any) => {\n return {\n ...v,\n id: v.name,\n label: v.title || v.label\n }\n }),\n ...otherOptions\n ]\n\n // 下拉框组件增加“上级编码”用于级联操作\n if (lowerCaseIncludes(unref(selectedComponent)?.type, 'select')) {\n const { selectFieldOptions = [] } = unref(graphicConfig)\n options.unshift({\n label: '上级编码',\n name: '上级编码',\n id: 'parentCode',\n genericType: 'TEXT'\n })\n if (selectFieldOptions?.length) {\n for (const item of selectFieldOptions) {\n options.unshift({\n label: item.label,\n name: item.value,\n id: item.value,\n genericType: 'TEXT'\n })\n }\n }\n }\n\n // 去重\n const optionsMap = new Map()\n const optionsLen = options.length\n for (let i = 0; i < optionsLen; i++) {\n const option = options[i]\n const { id } = option || {}\n optionsMap.set(id, option)\n }\n const optionsMapArr = [...optionsMap]\n conditionOptions.value = optionsMapArr.map(([_id, option]) => option)\n }\n\n const refreshData = () => {\n let refreshData: any\n if (isShowStyleConfig && type.value === 'table') {\n refreshData = (window as any).updateConfig\n } else {\n refreshData = unref(componentRef)?.refreshData\n }\n if (typeof refreshData === 'function') {\n refreshData()\n }\n }\n\n const updateGraphicConfig = inject(UPDATE_GRAPHIC_CONFIG) as any\n const syncVariableConditions = () => {\n const variableConditions = handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n if (JSON.stringify(variableConditions) !== JSON.stringify(unref(graphicConfig)?.variableConditions || [])) {\n updateGraphicConfig({ variableConditions })\n return true\n }\n return false\n }\n const refreshAction = () => {\n // 刷新全局变量的最新配置\n updateGraphicConfig({\n variableConditions: handleVariableList(unref(graphicConfig)?.variableList || [], renderUsedComponents)\n })\n }\n\n provide(REFRESH_DATA, refreshData)\n watch(\n graphicConfig,\n () => {\n if (!syncVariableConditions()) {\n refreshData()\n }\n },\n {\n deep: true,\n flush: 'post'\n }\n )\n\n const loadPivotTablePlugin = async () => {\n try {\n const tableModule = await import('@ecan-bi/pivot-table')\n asyncTableComponent.value = defineAsyncComponent({\n loader: () => Promise.resolve(tableModule.EcanPivotTable),\n delay: 0\n })\n } catch (error) {\n console.error('加载插件失败:', error)\n }\n }\n\n onMounted(async () => {\n if (isPivotTable.value) {\n await loadPivotTablePlugin()\n setTimeout(() => {\n refreshData()\n }, 0)\n }\n })\n\n const getSaveData = () => unref(componentRef).getSaveData()\n\n // 透视表操作变化\n const onPivotTableChange = ({ type, data }) => {\n if (type === '10') {\n const { dimensions, indicators } = cloneDeep(data)\n const dimensionList = []\n if (dimensions) {\n for (const item of dimensions) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n dimensionList.push({\n key: item.name,\n label: item.showTitle,\n width: null,\n position: item.positionType || 'rows'\n })\n }\n for (const item of indicators) {\n if (item.showTitle) {\n item.label = item.showTitle\n }\n }\n }\n updateGraphicConfig({\n dimensionList,\n queryColumnList: dimensions,\n indicators: indicators\n })\n component.value.dimensionList = dimensionList\n }\n }\n\n expose({\n getSaveData\n })\n\n return {\n isShowStyleConfig,\n activeKey,\n activePanel,\n componentRef,\n pivotTableWrapRef,\n type,\n isGroupTable,\n isPivotTable,\n isIframeMode,\n component,\n fullWidth,\n renderUsedComponents,\n conditionOptions,\n tableProps,\n dataConfigPaneRef,\n asyncTableComponent,\n pageConfig,\n refreshData,\n refreshAction,\n onChange,\n onPivotTableChange\n }\n }\n})\n</script>\n\n<style scoped lang=\"less\">\n.data-config {\n background: #fff;\n height: 100%;\n width: 100%;\n padding: 0 15px;\n overflow-y: auto;\n color: #444;\n display: flex;\n flex-flow: column;\n\n :deep(.ant-tabs) {\n // height: calc(100% - 310px);\n flex: 1;\n\n .ant-tabs-nav {\n margin-bottom: 4px;\n }\n\n .ant-tabs-content-holder {\n height: calc(100% - 50px);\n overflow: auto;\n }\n }\n\n &.pivot-table-wrap {\n :deep(.ant-tabs) {\n .ant-tabs-content-holder {\n overflow: hidden;\n .ant-tabs-content {\n height: 100%;\n }\n }\n }\n }\n\n .ecan-pivot-table {\n width: 100%;\n height: 100%;\n position: relative;\n }\n}\n\n.chart-component {\n width: 100%;\n position: relative !important;\n margin: 20px auto 0;\n\n &.full-width {\n width: 100% !important;\n }\n}\n\n.prop-item {\n display: flex;\n align-items: center;\n padding: 5px 5px 10px 5px;\n}\n\n.label {\n width: 135px;\n display: flex;\n justify-content: center;\n}\n\n.component-wrapper {\n width: calc(100% - 135px);\n}\n\n.color-pick {\n display: flex;\n}\n\n.input {\n margin-right: 10px;\n}\n</style>\n"],"names":["AppstoreAddOutlined","AppstoreAddOutlinedSvg","_objectSpread","target","i","source","ownKeys","sym","key","_defineProperty","obj","value","props","context","p","_createVNode","AntdIcon","AppstoreAddOutlined$1","CloseOutlined","CloseOutlinedSvg","CloseOutlined$1","CodeOutlined","CodeOutlinedSvg","CodeOutlined$1","CopyOutlined","CopyOutlinedSvg","CopyOutlined$1","DeleteOutlined","DeleteOutlinedSvg","DeleteOutlined$1","DoubleRightOutlined","DoubleRightOutlinedSvg","DoubleRightOutlined$1","InfoCircleOutlined","InfoCircleOutlinedSvg","InfoCircleOutlined$1","MenuOutlined","MenuOutlinedSvg","MenuOutlined$1","MinusCircleOutlined","MinusCircleOutlinedSvg","MinusCircleOutlined$1","PlusCircleOutlined","PlusCircleOutlinedSvg","PlusCircleOutlined$1","PlusOutlined","PlusOutlinedSvg","PlusOutlined$1","QuestionCircleOutlined","QuestionCircleOutlinedSvg","QuestionCircleOutlined$1","ReloadOutlined","ReloadOutlinedSvg","ReloadOutlined$1","SettingOutlined","SettingOutlinedSvg","SettingOutlined$1","focus$1","el","_sfc_main$E","defineComponent","Draggable","AModal","AButton","ASelect","ASelectOption","expose","PAGE_ID","_a","request","inject","REQUEST","renderUsedComponents","RENDER_USED_COMPONENTS","indicatorToken","unref","INDICATOR_TOKEN","graphicConfig","GRAPHIC_CONFIG","updateGraphicConfig","UPDATE_GRAPHIC_CONFIG","computed","dataViewId","customSortList","ref","activeKey","combSortList","usedComponentList","usedComponent","getSortOptions","item","list","v","c","result","handleCustomSortList","res","INDICATOR_URL","success","data","e","updateCustomSortList","label","name","_b","cloneDeep","isDataChange","onChange","visible","showModal","sort","hideModal","onCancel","watch","customOrderColumns","index","columnName","option","_hoisted_1","_hoisted_2","_resolveComponent","_openBlock","_createBlock","_component_a_modal","_ctx","_withCtx","_component_a_tabs","_cache","$event","_component_a_tab_pane","_createElementVNode","_component_a_button","_createElementBlock","_Fragment","_renderList","_component_a_select","_normalizeStyle","_createCommentVNode","_component_a_select_option","_component_delete_outlined","_hoisted_3","_sfc_main$D","focus","AInput","ACheckbox","ACollapse","ACollapsePanel","ATag","ACheckableTag","title","createGroupTitle","createValueTitle","customGroupList","customGroupTitleSet","customGroupTitleList","customGroupEditTitleList","length","selectCount","count","customGroup","onAddGroup","message","onAddValue","isAllow","group","onDeleteGroup","selectGroupIndex","onMoveInGroup","selectList","len","onEditTitle","onFinishEditTitle","onTitleChange","event","useOtherGroup","updateCustomGroup","customGroups","otherGroupName","groupInfoMap","onUseOtherGroup","allLabelSet","handleInitData","handleCustomGroupList","rows","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_resolveDirective","_createTextVNode","_toDisplayString","_hoisted_5","_component_a_input","_hoisted_8","_component_a_collapse","_component_a_collapse_panel","_withDirectives","_component_a_tag","_hoisted_11","_component_a_checkable_tag","nanoid","size","id","bytes","byte","t","n","module","this","r","s","u","o","dayjs","quarterOfYear","_sfc_main$C","ADatePicker","ADropdown","AMenu","AMenuItem","APopover","ATabs","ATabPane","ARadioGroup","ARadio","AInputNumber","dataViewColumns","DATA_VIEW_COLUMNS","renderComponents","isUseCurrentTime","currentTime","controlList","keyName","type","keyNameOptions","showTime","dateRadioStyle","formatList","customTabData","tabDateList","compareList","menuRule","dataTypeList","condition","_c","_d","_e","getDefaultFieldValue","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","fieldType","dataType","fieldValue","dataSetfieldOptions","popoverVisible","isDateType","fieldOptions","dims","otherList","options","updateCondition","deleteCondition","addCondition","CHANGE_CONDITION","_condition","_index","_path","_join","onDelete","onFieldChange","genericType","edvDataSetId","typeGuid","indexCode","indexCodeNum","onChangeComponent","ruleOptions","dateBtnLabel","downIconStyle","style","valueOptions","handleValueOptions","onRuleChange","onDataTypeChange","fieldValues","onFieldValueSelectChange","values","handleMenuClick","keyPath","onMounted","dateCalcTypes","calcWay","vals","tabItem","setTabItemData","fieldName","rule","err","changeTabInitDate","row","changeRadioValue","format","beforeNum","afterNum","getDateValue","getFieldValue","tabIndex","blurCompare","flag","isConfigFlag","calcWays","okDatePickConfig","okCustomConfig","radioValue","filterOption","input","isShowCustomDataType","_hoisted_13","_vShow","_component_a_date_picker","_component_appstore_add_outlined","_component_a_popover","_component_a_checkbox","_component_a_radio_group","_component_a_radio","_component_a_input_number","_hoisted_14","_hoisted_15","_component_a_dropdown","_component_a_menu","_component_a_menu_item","_component_close_outlined","_sfc_main$B","Condition","_component_condition_list","_component_condition","_sfc_main$A","emit","truncationList","val","_withScopeId","_pushScopeId","_popScopeId","_sfc_main$z","ConditionList","TruncationList","handleTitle","dataSourceId","selectedComponent","SELECTED_COMPONENT","updateUsedComponent","UPDATE_USED_COMPONENT","conditionList","SOURCE_TYPE","addKeyValue","conditions","join","provide","path","pathArr","lastIndex","lastPath","wrapperPath","wrapperConditions","wrapperJoin","j","temp","cdJoin","onUpdatetruncation","renderControlList","updateFilter","getConditions","oldConditions","pendingDelete","f","pendingAdd","setEvent","getSqlConditions","deletes","adds","component","events","getEventName","onOk","getHrpIndexWithComplex","indtData","indexGuid","column","_component_truncation_list","_sfc_main$y","showLabel","_sfc_main$x","oldData","sortCpnts","idFilterOption","inputValue","_sfc_main$w","dimensionList","columns","dimByCount","getParentKey","tree","parentKey","node","_sfc_main$v","ARow","ACol","ATextarea","AInputSearch","ATree","ARadioButton","leftAxisList","variableList","rightAxisList","indicators","queryColumnList","indexLibColumns","fieldList","field","varList","myValue","searchFuncValue","insertText","str","tmpStr","sel","startPos","endPos","cursorPos","calculMethods","selectedElem","inputVal","dataList","expandedKeys","autoExpandParent","funcDescsData","setDataList","getFuncDescs","onExpand","keys","expanded","self","_hoisted_16","_component_a_row","_component_a_col","_component_a_radio_button","variabled","_component_a_textarea","_component_a_input_search","_component_a_tree","leaf","describe","exp","_component_a_tooltip","_createSlots","_hoisted_12","_hoisted_18","_sfc_main$u","FormulaCalculation","AForm","AFormItem","ATooltip","componentList","builtInValueSourceList","allValueSourceList","labelCol","wrapperCol","formDefaultValue","defaultConfig","offsetConfig","formRef","formState","calcType","formula","builtInValueSource","builtInFormula","builtInCalcWay","saveIndicator","offset","lowerCaseIncludes","validateLabel","_rule","formRules","onOK","onChangeBuiltInFormula","accessLogic","principle","comefrom","_component_a_form","_component_a_form_item","_component_formula_calculation","_component_question_circle_outlined","_sfc_main$t","typeOption","dataTypeOption","rangeTypeOptions","variableData","curComponent","isShowFormat","isDateRangeComponent","isShowDateOperate","formatOptions","onChangeDataType","onChangeVariableType","isGlobalVariable","normalizeVariableList","createIndicatorVariableList","dataSetParams","indicator","createGlobalVariableList","savedVariableList","types","allParamNames","allParamMap","paramNames","param","commonNames","names","savedGlobalList","saved","_sfc_main$s","VariableItem","updateConfig","allList","mergedList","scopeKeyMap","oldItem","normalizedList","handleVariableList","newItem","specialIndicators","variableValueMap","variableNames","mergeList","filterList","ignoreField","fl","_component_variable_item","_sfc_main$r","VariableGroup","ensureInitialVariables","randomKey","currentList","newVariables","_component_variable_group","_sfc_main$q","CalculationModal","FilterModal","CustomGroupModal","VariableModal","CustomSortModal","ACard","ASubMenu","AMenuDivider","ConfigName","SortByCpnt","DimByCount","indSortList","idxList","dimList","indexSetMap","currentCardItem","compositeIndicator","isAllowAdd","dataSelectIndicators","handleListItemData","listData","reNameSame","varConfig","variates","newVariableList","handleCardItemData","cardData","cardItem","originalList","addItem","sameNums","checkItem","onCheckboxChange","onDropEnd","onDragItemEnd","onDragItemAdd","listItemData","cardItemData","onDragItemSort","newIndex","oldIndex","from","to","fromType","toType","currItem","onDragItemStart","dataViews","dataView","cardItemList","editLabelList","isLabelChange","onEdit","onLabelChange","handleInputKeyDown","onCommitLabelChange","oldLabel","aboutFormulaIds","aboutSourceIds","targetList","DEFAULT","sortList","codeDim","scope","cloneDim","onSort","order","defaultCode","handleSortTitle","text","currentItem","currentIndex","customSortModalRef","customGroupModalRef","showCustomSortModal","handleCustomSortTitle","showCustomGroupModal","handleCustomGroupTitle","showHideList","indTypeList","budgetTypeList","aggregateList","distinctList","onShowHideChange","onIndTypeChange","onBudgetTypeChange","onAggregateChange","onDistinctChange","onDateFormatChange","onIndSortChange","handleDrillTableTitle","handleIndTypeTitle","handleBudgetTypeTitle","handleAggregateTitle","handleIndSortTitle","map","handleDistinctTitle","handleFilterTitle","hasIndicatorVariables","filterModalRef","configNameRef","sortByCpntRef","dimByCountRef","showFilterModal","showConfigNameModal","showSortByCpntModal","showDimByCountModal","variableModalRef","showVariableModal","calculationModalRef","calculationModalMode","onShowCalculationModal","mode","fieldData","getEdvFieldData","currentEdvId","classificationList","columnList","getFieldData","formFields","dimensionType","dataViewMap","onVisibleChange","itemName","hasOwn","onClickSetting","copyDataViewName","isShowConfigName","isShowSortByCpnt","isIndexSet","isShowCalcBtn","getIndexSetRawLabel","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_24","_directive_focus","_component_a_card","_component_plus_outlined","_normalizeClass","_hoisted_17","_withModifiers","_component_info_circle_outlined","_component_a_menu_divider","_component_a_sub_menu","aggregate","shl","il","distinct","_component_copy_outlined","_hoisted_25","_component_setting_outlined","_component_custom_sort_modal","_component_custom_group_modal","_component_filter_modal","_component_config_name","_component_sort_by_cpnt","_component_dim_by_count","_component_calculation_modal","_component_variable_modal","cardTypeMap","_sfc_main$p","DataConfigCard","allMap","selectedComponentType","isGroupTable","cardsMap","cards","reactive","handleGraphicConfigMap","graphicConfigMap","startStr","startIndex","componentMapKeys","componentMapKey","card","_component_data_config_card","_mergeProps","propsGroups","fontFamilyArr","fontFamilyOptions","font","fontFamily","mapAttributeProps","isKeyName","textShadow","width","updateMode","onlyType","suffix","disabled","max","min","height","backgroundImage","backgroundSize","backgroundColor","contextRequestUrl","theme","pageFontFamily","placeholder","imgUrl","show","match","linkUrl","linkMethod","linkPage","fontSize","variableFontSize","percentageSide","optionType","left","top","textAlign","verticalAlign","justifyContent","alignItems","tabFontWeight","isTransformNumber","headerFontWeight","fontWeight","fontStyle","color","colors","centerLeft","centerTop","lineHeight","step","innerRadius","outerRadius","titleText","titleSubtext","tooltipTrigger","tooltipTextStyleColor","tooltipFormatter","legendTextStyleColor","legendTop","legendLeft","legendOrient","labelFormatter","labelColor","isUseLabelColors","labelFontSize","labelPosition","labelLineLength","labelLineLength2","symbolSize","symbolColor","symbolWidth","symbolHeight","smooth","lineStyleWidth","picker","xAxisSplitLineShow","xAxisSplitAreaShow","xAxisLineShow","isBoundaryGap","xAxisSplitLineInterval","xAxisSplitLineStyleColor","xAxisLabelColor","xAxisLineStyleColor","xAxisTickShow","yAxisTickShow","xAxisLabelFormatter","yAxisSplitLineShow","yAxisLeftSplitLineShow","yAxisRightSplitLineShow","yAxisSplitLineType","yAxisLeftSplitLineType","yAxisRightSplitLineType","xAxisSplitLineType","yAxisSplitAreaShow","yAxisLabelShow","yAxisLineAlwaysDisplay","yAxisSplitLineStyleColor","yAxisLabelColor","yAxisLineStyleColor","yAxisLabelFormatter","roseType","fullModal","seqIconConfig","layout","defaultValue","typeValue","bordered","allOverflow","hoverRow","hoverColor","boderList","columnDropEnable","showTotalBool","totalName","expandAll","isUseSeq","centered","columnsFixedNum","scrollX","variableColor","tabColor","activeTabColor","tabBackgroundImage","activeTabBackgroundImage","tabBarGutter","tabFontSize","simple","pageSizeShow","sliceCount","useRanking","headerBackgroundColor","cellBackgroundColor","borderColor","useBorderModify","useTitle","paginationPosition","paginationPageSize","destroyOnClose","position","yAxis","seriesTypes","useLabelIndex","startTime","endTime","limitStartTime","limitEndTime","strokeColor","trailColor","strokeType","strokeLinecap","strokeWidth","strokeTextWidth","geoBackgroundImage","geoItemStyleAreaColor","geoItemStyleBorderColor","geoEmphasisLabelColor","geoEmphasisItemStyleAreaColor","geoEmphasisItemStyleBorderColor","symbolImage","mapJson","barWidth","columnCount","itemHeight","itemColSpan","itemPadding","itemRowSpan","geoLabelColor","geoLabelFontSize","geoItemStyleShadowColor","geoItemStyleBorderWidth","geoItemStyleShadowBlur","geoItemStyleShadowOffsetX","geoItemStyleShadowOffsetY","geoZoom","geoRoam","geoCenter","geoBackgroundImageRepeat","titleColor","titleFontSize","headerFontSize","geoEmphasisDisabled","gridTop","gridBottom","gridLeft","gridRight","gridContainLabel","geoLabelShow","toolboxOrient","toolboxItemSize","toolboxItemGap","toolboxLeft","toolboxTop","toolboxDownloadUrl","toolboxInfoText","shape","danger","href","transParams","indexTip","borderWidth","borderRadius","isUseAction","actionColumnWidth","actionList","barBorderRadius","isUseHorizontalAxis","axisInverse","xAxisInverse","yAxisInverse","decimalFormat","variableDefaultValue","strokeTextShow","areaStyleOpacity","areaGradientShow","areaGradientColor","tabHorizontalPadding","xAxisLabelWidth","xAxisLabelOverflow","xAxisLabelRotate","yAxisLabelWidth","yAxisLabelOverflow","yAxisLabelRotate","isStack","effectVal","updateOptions","stackColumns","effect","hide","clickHighlight","labelShow","isReverse","link","linkType","maxTagCount","tabAlignItems","tabJustifyContent","tabFlexDirection","filterDropdownHeight","stripedShow","useCurrentTime","interval","intervalUnit","operate","prefixValueKey","prefix","suffixValueKey","updateInterval","xAxisMinInterval","yAxisMinInterval","minAngle","autoSwitch","autoSwitchInterval","xAxisLabelInterval","isUseExport","autoClearSearchValue","toolboxLocation","toolboxDownloadShow","toolboxDataZoomShow","toolboxInfoShow","multiple","treeCheckable","selectFirstOption","gradientColor","gradientOffset","legendItemGap","legendItemWidth","legendItemHeight","showBarBackground","gradientColors","increaseColor","declineColor","legendType","minusSignShow","gradientAngle","stripedColor","axisNameColor","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","borderStyle","unitText","unitFontSize","unitFontWeight","unitColor","unitTop","unitLeft","legendFormatter","titleMode","legendFontSize","valueType","xAxisLabelFontSize","yAxisLabelFontSize","tooltipRequestData","tooltipBackgroundColor","seqWidth","isAllowClear","isSummaryFixed","labelWidth","labelOverflow","isPageBottom","optionFontSize","isShowTotal","graphicType","graphic","isAllowSpanYear","tabType","targetRule","targetValue","notExpectColor","buttonBackgroundColor","tabWidth","headerFontColor","cellFontColor","isTransparent","hideTableHeader","closeBtnColor","paginationColor","paginationBgColor","activePaginationColor","activePaginationBgColor","hoverBackgroundColor","tooltipPosition","tabTextAlign","seqName","seqIcon","isShowCloseBtn","markLineType","seqFontSize","isAutoScroll","scrollSpeed","isHoverStyle","isAnimation","animationSource","subTotalColumn","dynamics","subTotalName","isSortByFront","legendWidth","legendHeight","legendTextWidth","legendScroll","boxShadow","limitInterval","xAxisName","yAxisName","yAxisLeftName","yAxisRightName","seqIconWidth","seqIconHeight","seqIconOffsetX","seqIconOffsetY","seqIndexFormatter","unitInterval","keyFieldMap","itemWidth","startValue","endValue","colNum","digits","unitWidth","unitHeight","counterBackgroundImage","showEllipsis","exceedConfig","xAxisMaxValue","yAxisMaxValue","scrollDirection","hideTabs","jumpType","jumpTime","jumpPage","jumpLink","gridTopPx","gridBottomPx","gridLeftPx","gridRightPx","showAnimation","tooltip","showXAxisLineArrow","showYAxisLineArrow","xAxisLineInverse","yAxisLineInverse","xAxisMarkLineValue","yAxisMarkLineValue","axisMarkArea","_sfc_main$o","_sfc_main$n","getPrefixOrSuffixValue","prefixValue","suffixValue","_sfc_main","_sfc_main$l","ASwitch","_component_a_switch","bottom","right","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","element","getWindow","ownerDocument","isElement","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","state","attributes","_ref2","initialStyles","styleProperties","property","attribute","applyStyles$1","getBasePlacement","round","getUAString","uaData","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","x","y","getLayoutRect","contains","parent","child","rootNode","next","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","padding","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","strategy","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","rect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","b","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","modifiers","visited","modifier","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","debounce","fn","pending","resolve","mergeByName","merged","current","existing","DEFAULT_OPTIONS","areValidElements","args","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","m","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref$options","cleanupFn","noopFn","createPopper","N","E","F","L","z","l","M","R","B","d","w","h","S","k","C","O","I","A","P","_","D","T","H","G","$","V","Y","J","W","X","q","U","K","Q","Z","ee","te","re","ne","oe","ae","ie","le","ce","ue","se","fe","de","pe","he","ve","be","we","xe","me","ge","ye","Se","ke","Ce","Oe","Ie","Ae","g","Pe","je","Ne","Ee","Fe","Le","ze","Me","_sfc_main$j","PickColors","colorValue","_component_pick_colors","_sfc_main$i","onColorsChange","_sfc_main$h","InputNumber","firstItem","_component_draggable","_resolveDynamicComponent","_component_minus_circle_outlined","_sfc_main$g","_sfc_main$f","ASlider","_component_a_slider","_sfc_main$e","Input","RadioGroup","Select","Switch","ColorPick","ColorGroupPick","FormGroup","Textarea","Slider","chartsOptions","CHARTS_OPTIONS","updateChartsOptions","UPDATE_CHARTS_OPTIONS","updateTableOptions","UPDATE_TABLE_OPTIONS","setFormProps","setOptions","mapAttributeProp","valueProp","changeValueEventName","updateValue","effectProps","getFunProps","formProps","attrs","reduce","excludeType","nProps","status","calcSingleItemRes","otherProps","prop","$props","$setup","$data","$options","formProp","_sfc_main$d","workerId","JsonWorker","TsWorker","EditorWorker","dom","editor","themeMap","monacoEditor","code","onUnmounted","_sfc_main$c","clickConditionMenu","_sfc_main$b","_sfc_main$a","params","getSameLevelList","handleOk","onUploadChange","imgSrc","imgBaseUrl","iconOptions","_sfc_main$9","ATable","ConditionWrap","conditionsRef","currentData","configColumns","rules","curTableCompColumn","handleConditions","open","tableCompColumn","oldRules","conditionCode","newRules","close","addRule","closeRuleModal","openRuleModal","record","deleteRule","_component_a_table","_component_condition_wrap","_sfc_main$8","Editor","ConditionsTable","tableColumns","configData","saveObj","saveKey","optionCode","editorTitle","editorVisible","handleTableData","rowHeaderList","tableColumn","changeRenderBool","renderSave","onEditorChange","conditionsTableRef","_component_code_outlined","_component_editor","_component_conditions_table","_sfc_main$7","activePanel","columnsConfigMap","newColumnsConfig","_sfc_main$6","PropsToForm","TableColumnConfig","IndicatorContainer","compProps","tablePanel","tableOptions","TABLE_OPTIONS","refreshData","REFRESH_DATA","handleChangeType","propsMap","groupTableProps","detailPropsGroups","propsGroup","enableProps","pickProps","filterEnableProps","filterProps","pick","isRenderForm","detailPropsGroup","componentType","onSwitchClick","checked","onSwitchChange","ComponentString","updateComponentOptions","tableEditorChange","isShowOptionEditor","_component_props_to_form","_component_indicator_container","_sfc_main$5","MAP_ATTRIBUTE_PROPS","isPivotTable","IS_PIVOT_TABLE","onUpdateControl","onDeleteControl","onAddMenuControl","_data","parentOption","propOptions","propItem","deleteEvent","onIdChange","control","setEvents","focusId","onIdFocus","onPropChange","onParentPropChange","onCustomValueChange","onModeChange","onConditionKeyChange","controlParams","ruleOption","isShowModelProp","modelPropKey","isShowProp","_sfc_main$4","ControlCard","_component_control_card","_component_control_list","_sfc_main$3","ControlList","isVisible","selectedIds","updateComponentsConfig","UPDATE_COMPONENTS_CONFIG","bindComponentId","config","onAddControl","sourceList","indicatorComponents","handleConfirmSync","error","_sfc_main$2","groupList","allDimensions","onDeleteItem","getDimensionData","formatParams","formatIndicatorParams","classifications","dimensionOptRes","selectedDims","_sfc_main$1","tableData","handleIndicatorData","useIndicatorData","handleFormat","DataGroup","StyleGroup","ChartGraph","ControlGroup","DrillGroup","TableGraph","asyncTableComponent","dataConfigPaneRef","componentRef","pivotTableWrapRef","isShowStyleConfig","SHOW_STYLE_CONFIG","pageConfig","PAGE_CONFIG","isIframeMode","IS_IFRAME_MODE","notGraphicList","cloneComponent","modifyWhite","pickComponent","without","tableProps","token","fullWidth","bool","getOtherData","conditionOptions","idMap","promistList","reject","resultList","setConditionOptions","intersection","seriesList","otherOptions","selectFieldOptions","optionsMap","optionsLen","optionsMapArr","_id","syncVariableConditions","variableConditions","refreshAction","loadPivotTablePlugin","tableModule","defineAsyncComponent","getSaveData","onPivotTableChange","dimensions","_component_reload_outlined","_component_data_group","_component_style_group","_component_control_group","_component_table_graph","_component_chart_graph"],"mappings":";;;;;;;;;;;;;AACA,IAAIA,KAAsB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAO,GAAI,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,CAAA,GAAI,UAAY,CAAC,EAAE,KAAO,SAAS,OAAS,CAAA,EAAI,CAAA,KAAK,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,wjBAAyjB,EAAA,CAAE,EAAG,GAAE,MAAQ,gBAAgB,OAAS;AACj1B,MAAAC,KAAeD;ACAf,SAASE,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIV,KAAsB,SAA6BY,GAAOC,GAAS;AACrE,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQb;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAoB,cAAc;AAClCA,GAAoB,eAAe;AACnC,MAAAiB,KAAejB;ACpBf,IAAIkB,KAAgB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,aAAa,WAAW,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,8nBAA+nB,CAAA,EAAG,GAAE,MAAQ,SAAS,OAAS,WAAU;AAC31B,MAAAC,KAAeD;ACAf,SAAShB,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIQ,KAAgB,SAAuBN,GAAOC,GAAS;AACzD,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQK;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAc,cAAc;AAC5BA,GAAc,eAAe;AAC7B,MAAAE,KAAeF;ACpBf,IAAIG,KAAe,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,4ZAA2Z,GAAI,EAAC,GAAI,MAAQ,QAAQ,OAAS,WAAU;AACjmB,MAAAC,KAAeD;ACAf,SAASnB,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIW,KAAe,SAAsBT,GAAOC,GAAS;AACvD,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQQ;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAa,cAAc;AAC3BA,GAAa,eAAe;AAC5B,MAAAE,KAAeF;ACpBf,IAAIG,KAAe,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,0XAAyX,GAAI,EAAC,GAAI,MAAQ,QAAQ,OAAS,WAAU;AAC/jB,MAAAC,KAAeD;ACAf,SAAStB,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIc,KAAe,SAAsBZ,GAAOC,GAAS;AACvD,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQW;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAa,cAAc;AAC3BA,GAAa,eAAe;AAC5B,MAAAE,KAAeF;ACpBf,IAAIG,KAAiB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,sVAAqV,GAAI,EAAC,GAAI,MAAQ,UAAU,OAAS,WAAU;AAC/hB,MAAAC,KAAeD;ACAf,SAASzB,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIiB,KAAiB,SAAwBf,GAAOC,GAAS;AAC3D,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQc;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAe,cAAc;AAC7BA,GAAe,eAAe;AAC9B,MAAAE,KAAeF;ACpBf,IAAIG,KAAsB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,mXAAkX,GAAI,EAAC,GAAI,MAAQ,gBAAgB,OAAS,WAAU;AACvkB,MAAAC,KAAeD;ACAf,SAAS5B,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIoB,KAAsB,SAA6BlB,GAAOC,GAAS;AACrE,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQiB;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAoB,cAAc;AAClCA,GAAoB,eAAe;AACnC,MAAAE,KAAeF;ACpBf,IAAIG,KAAqB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,gLAA+K,EAAI,GAAE,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,mIAAoI,EAAA,CAAE,EAAC,GAAI,MAAQ,eAAe,OAAS;AACjiB,MAAAC,KAAeD;ACAf,SAAS/B,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIuB,KAAqB,SAA4BrB,GAAOC,GAAS;AACnE,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQoB;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAmB,cAAc;AACjCA,GAAmB,eAAe;AAClC,MAAAE,KAAeF;ACpBf,IAAIG,KAAe,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,0QAAyQ,GAAI,EAAC,GAAI,MAAQ,QAAQ,OAAS,WAAU;AAC/c,MAAAC,KAAeD;ACAf,SAASlC,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAI0B,KAAe,SAAsBxB,GAAOC,GAAS;AACvD,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQuB;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAa,cAAc;AAC3BA,GAAa,eAAe;AAC5B,MAAAE,KAAeF;ACpBf,IAAIG,KAAsB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,4FAA2F,EAAI,GAAE,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,gLAAiL,EAAA,CAAE,EAAC,GAAI,MAAQ,gBAAgB,OAAS;AAC5f,MAAAC,KAAeD;ACAf,SAASrC,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAI6B,KAAsB,SAA6B3B,GAAOC,GAAS;AACrE,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQ0B;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAoB,cAAc;AAClCA,GAAoB,eAAe;AACnC,MAAAE,KAAeF;ACpBf,IAAIG,KAAqB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,4LAA2L,EAAI,GAAE,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,gLAAiL,EAAA,CAAE,EAAC,GAAI,MAAQ,eAAe,OAAS;AAC1lB,MAAAC,KAAeD;ACAf,SAASxC,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIgC,KAAqB,SAA4B9B,GAAOC,GAAS;AACnE,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQ6B;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAmB,cAAc;AACjCA,GAAmB,eAAe;AAClC,MAAAE,KAAeF;ACpBf,IAAIG,KAAe,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,4DAA2D,EAAI,GAAE,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,4DAA6D,EAAA,CAAE,EAAC,GAAI,MAAQ,QAAQ,OAAS;AACzV,MAAAC,KAAeD;ACAf,SAAS3C,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAImC,KAAe,SAAsBjC,GAAOC,GAAS;AACvD,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQgC;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAa,cAAc;AAC3BA,GAAa,eAAe;AAC5B,MAAAE,KAAeF;ACpBf,IAAIG,KAAyB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,gLAA+K,EAAI,GAAE,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,kaAAma,EAAA,CAAE,EAAC,GAAI,MAAQ,mBAAmB,OAAS;AACx0B,MAAAC,KAAeD;ACAf,SAAS9C,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIsC,KAAyB,SAAgCpC,GAAOC,GAAS;AAC3E,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQmC;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAuB,cAAc;AACrCA,GAAuB,eAAe;AACtC,MAAAE,KAAeF;ACpBf,IAAIG,KAAiB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,mrBAAkrB,GAAI,EAAC,GAAI,MAAQ,UAAU,OAAS,WAAU;AAC53B,MAAAC,KAAeD;ACAf,SAASjD,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAEC,MAAAA,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAIyC,KAAiB,SAAwBvC,GAAOC,GAAS;AAC3D,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQsC;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAe,cAAc;AAC7BA,GAAe,eAAe;AAC9B,MAAAE,KAAeF;ACpBf,IAAIG,KAAkB,EAAE,MAAQ,EAAE,KAAO,OAAO,OAAS,EAAE,SAAW,iBAAiB,WAAa,QAAS,GAAE,UAAY,CAAC,EAAE,KAAO,QAAQ,OAAS,EAAE,GAAK,kxDAAixD,GAAI,EAAC,GAAI,MAAQ,WAAW,OAAS,WAAU;AAC79D,MAAAC,KAAeD;ACAf,SAASpD,GAAcC,GAAQ;AAAE,WAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AAAE,QAAIC,IAAS,UAAUD,CAAC,KAAK,OAAO,OAAO,UAAUA,CAAC,CAAC,IAAI,CAAA,GAAQE,IAAU,OAAO,KAAKD,CAAM;AAAG,IAAI,OAAO,OAAO,yBAA0B,eAAcC,IAAUA,EAAQ,OAAO,OAAO,sBAAsBD,CAAM,EAAE,OAAO,SAAUE,GAAK;AAAE,aAAO,OAAO,yBAAyBF,GAAQE,CAAG,EAAE;AAAA,KAAa,CAAC,IAAKD,EAAQ,QAAQ,SAAUE,GAAK;AAAE,MAAAC,GAAgBN,GAAQK,GAAKH,EAAOG,CAAG,CAAC;AAAA,IAAE,CAAE;AAAA;AAAK,SAAOL;AAAS;AAEze,SAASM,GAAgBC,GAAKF,GAAKG,GAAO;AAAE,SAAIH,KAAOE,IAAO,OAAO,eAAeA,GAAKF,GAAK,EAAE,OAAOG,GAAO,YAAY,IAAM,cAAc,IAAM,UAAU,GAAM,CAAA,IAAYD,EAAIF,CAAG,IAAIG,GAAgBD;AAAM;AAOjN,IAAI4C,KAAkB,SAAyB1C,GAAOC,GAAS;AAC7D,MAAIC,IAAIZ,GAAc,CAAA,GAAIU,GAAOC,EAAQ,KAAK;AAE9C,SAAOE,EAAaC,IAAUd,GAAc,CAAA,GAAIY,GAAG;AAAA,IACjD,MAAQyC;AAAA,EACZ,CAAG,GAAG,IAAI;AACV;AAEAD,GAAgB,cAAc;AAC9BA,GAAgB,eAAe;AAC/B,MAAAE,KAAeF,ICrBAG,KAAA;AAAA,EACb,QAASC,GAAiB;AAExB,IAAAA,EAAG,MAAM;AAAA,EACX;AACF,GCiGAC,KAAeC,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,WAAAC;AAAA,IAAA,QACAC;AAAAA,IAAA,SACAC;AAAAA,IAAA,SACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,gBACAtC;AAAAA,EACF;AAAA,EACA,MAAOf,GAAO,EAAE,QAAAsD,KAAU;;AAElB,UAAAC,KAAUC,KAAA,iCAAQ,WAAR,gBAAAA,GAAgB,QAC1BC,IAAUC,EAAOC,EAAO,GACxBC,IAAuBF,EAAOG,EAAsB,GACpDC,IAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9CC,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClD3E,IAAS4E,EAAS,MAAMN,EAAME,CAAa,EAAE,MAAM,GACnDK,IAAaD,EAAS,MAAMN,EAAME,CAAa,EAAE,UAAU,GAC3DM,IAAiBC,EAAI,CAAA,CAAE,GACvBC,IAAYD,EAAI,GAAG,GACnBE,IAAeF,EAAI,CAAA,CAAE,GAErBG,IAAoBN,EAAS,MAAM;;AACvC,cAAOb,IAAAO,EAAMH,CAAoB,MAA1B,gBAAAJ,EAA6B,OAAO,CAACoB,OAAuBA,GAAc;AAAA,IAAO,CACzF,GAEKC,IAAiB,CAACC,MAAiC;AACvD,YAAMC,KAAO/E,EAAM,SAAS,OAAO,CAAKgF,MAAA,CAACjB,EAAMW,CAAY,EAAE,KAAK,CAAKO,MAAAA,EAAE,eAAeD,EAAE,IAAI,KAAKF,EAAK,eAAeE,EAAE,IAAI,GACvHE,IAAS,CAAA;AACV,aAAAH,GAAA,QAAQ,CAACD,MAAS;AAOjB,QAACI,EAAO,KAAK,CAACF,MAAWA,EAAE,SAASF,EAAK,IAAI,KAC/CI,EAAO,KAAKJ,CAAI;AAAA,MAClB,CACD,GACM;AAAA,QACL;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,GAAGI;AAAA,MAAA;AAAA,IACL,GAGIC,IAAuB,YAAY;AACnC,UAAA;AACF,cAAMC,IAAM,MAAM3B,EAAQ,KAAK,GAAG4B,yBAAoC;AAAA,UACpE,QAAQtB,EAAMtE,CAAM;AAAA,UACpB,YAAYsE,EAAMO,CAAU;AAAA,UAC5B,aAAatE,EAAM,KAAK;AAAA,UACxB,kBAAkBA,EAAM,KAAK;AAAA,UAC7B,QAAQuD;AAAA,UACR,UAAU;AAAA,UACV,cAAcQ,EAAME,CAAa,EAAE,gBAAgB;AAAA,QAAA,GAClD;AAAA,UACD,SAAS;AAAA,YACP,gBAAgBH;AAAA,YAChB,gBAAgB;AAAA,UAClB;AAAA,QAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,IAAO,CAAC,EAAA,IAAMH,EAAI;AACnC,QAAIE,OACFf,EAAe,QAAQgB,KAAA,gBAAAA,EAAM,MAAM,GAAG;AAAA,eAEjCC;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEIC,IAAuB,MAAM;;AAC3B,YAAAV,MAAQvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAmC,YAAW,IACtDsB,KAAOC,EAAK/E,EAAM,KAAK,GACvB,EAAE,OAAA0F,GAAO,MAAAC,MAAS3F,EAAM;AAC1B,MAAA+D,EAAMU,CAAS,MAAM,MAEvBK,GAAK,OAAO;AAAA,QACV,OAAAY;AAAA,QACA,YAAYC;AAAA,QACZ,MAAM;AAAA,QACN,oBAAoB5B,EAAMQ,CAAc;AAAA,MAAA,IAEjCR,EAAMU,CAAS,MAAM,SAE1BmB,IAAA7B,EAAMW,CAAY,MAAlB,QAAAkB,EAAqB,SACvBd,GAAK,OAAOe,GAAU9B,EAAMW,CAAY,CAAC,IAEzC,OAAOI,GAAK,OAGIX,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA;AAGH,QAAIe,IAAe;AACnB,UAAMC,IAAW,MAAM;AACN,MAAAD,IAAA;AAAA,IAAA,GAEXE,IAAUxB,EAAI,EAAK,GACnByB,IAAY,CAACV,MAAiC;;AAC5C,YAAA,EAAE,MAAAW,GAAS,IAAAX;AAEjB,MAAIW,KACE,MAAM,QAAQA,EAAI,KAEpBzB,EAAU,UAAQjB,IAAA0C,GAAK,CAAC,MAAN,gBAAA1C,EAAS,UAAS,WAAW,MAAM,KACjDO,EAAMU,CAAS,MAAM,MACVC,EAAA,QAAQmB,GAAUK,EAAI,IAEnCxB,EAAa,QAAQ,OAIvBD,EAAU,SAAQyB,MAAA,gBAAAA,GAAM,UAAS,WAAW,MAAM,KAC9CnC,EAAMU,CAAS,MAAM,MACvBC,EAAa,QAAQ,CAACmB,GAAUK,EAAI,CAAC,IAErCxB,EAAa,QAAQ,MAIzBA,EAAa,QAAQ,IAEvBsB,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAEZI,IAAW,MAAM;AACjB,MAAArC,EAAMU,CAAS,MAAM,OAEnBqB,KAAmCL,KACxBK,IAAA,MAEML,KAGbU;IAAA;AAEL,WAAA7C,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GAEKI,GAAAL,GAAS,CAACA,MAAY;;AAC1B,UAAIA,GAAS;AACL,cAAAM,KAAqBV,KAAApC,KAAAxD,EAAM,SAAN,gBAAAwD,GAAY,SAAZ,gBAAAoC,EAAkB;AAC7C,QAAIU,KAAsB,OACHnB,MAErBZ,EAAe,QAAQ+B;AAAA;AAIzB,QAAA/B,EAAe,QAAQ;AAEzB,MAAK,OAAe,mBACjB,OAAe,gBAAgB,CAACyB,CAAO;AAAA,IAC1C,GACC;AAAA,MACD,OAAO;AAAA,IAAA,CACR,GAoDM;AAAA,MACL,SAAAA;AAAA,MACA,gBAAAzB;AAAA,MACA,WAAAE;AAAA,MACA,cAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,gBAAAE;AAAA,MACA,UAAAkB;AAAA,MACA,gBA1DqB,MAAM;;AACrB,cAAAhB,MAAQvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAmC,YAAW,IACtDsB,KAAOC,EAAK/E,EAAM,KAAK;AAO7B,eAAO8E,GAAK,MACQX,EAAA;AAAA,UAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,QAAA,CACf,GACSoB;MAAA;AAAA,MA8CV,UAAAC;AAAA,MACA,WA5CgB,MAAM;AAChB,QAAArC,EAAAW,CAAY,EAAE,KAAK;AAAA,UACvB,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,MAAM;AAAA,UACN,OAAO;AAAA,QAAA,CACR;AAAA,MAAA;AAAA,MAsCD,kBAnCuB,CAAC6B,MAAkB;AAC7B,QAAA7B,EAAA,MAAM,OAAO6B,GAAO,CAAC;AAAA,MAAA;AAAA,MAmClC,gBAhCqB,CAACC,MAAuB;AACvC,cAAAjH,KAASwE,EAAMW,CAAY,EAAE,KAAK,CAAKM,MAAAA,EAAE,eAAewB,CAAU;AACxE,YAAIjH,IAAQ;AACV,UAAIiH,MAAe,oBACjBjH,GAAO,QAAQ,KAEfA,GAAO,cAAc;AAEvB,gBAAMkH,IAASzG,EAAM,SAAS,KAAK,CAAKgF,MAAAA,EAAE,SAASwB,CAAU;AAC7D,UAAIC,MACFlH,GAAO,QAAQkH,EAAO,OAClBA,EAAO,cACTlH,GAAO,cAAckH,EAAO,cAE5B,OAAOlH,GAAO;AAAA;AAAA,MAGpB;AAAA,IAeA;AAAA,EAEJ;AACF,CAAC;AChSY,MAAAmH,KAAA,EAAA,OAAM,oBAaFC,KAAA,EAAA,OAAM;;gKA/ErBC,EAsFU,SAAA;AApFP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAA;AAAA,IACA,SAAMC,EAAK;AAAA,IACV,oBAAQ;AAAA,IACR,OAAA;AAAA,IAAA,UAAAA,EAAA;AAAA;;MAIA,UAAA;AAAA,MACA,SAAQ;AAAA,IAAA;AAAA;;aAEOC,EAAW,MAAA;AAAA,MAAA9G,EAAA+G,GAAA;AAAA;QAmDZ,sBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,MAAA,GAAA;AAAA,iBAlDGH,EAAG,MAAA;AAAA,UAAW9G,EAAAkH,GAAA;AAAA,YAAA,KAAA;AAAA;;qBAE1BJ,EAEW,MAAA;AAAA,cAFMK,EAAA,OAAAZ,IAAA;AAAA,gBAAAvG,EAASoH,GAAS;AAAA,kBAAA,SAAA;AAAA;;;;;;gBAIrC,GAAA,GAAA,CAAA,SAAA,CAAA;AAAA,cAAA,CAAA;AAAA,cACED,EAAA,OAAAX,IAAA;AAAA,iBAAAE,EACQ,EAAU,GAAAW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAlC,GAAAyB,OAEVM,EAAK,GAAAW,EAAA,OAAA;AAAA,kBAAA,OAAA;AAAA,kBAEX,KAAAjB;AAAA,gBAAA,GAAA;AAAA,kBACiBpG,EAAAwH,GAAA;AAAA,oBACf,OAAA7C,EAAA;AAAA,oBACA,kBAAY,CAAOsC,MAAAtC,EAAA,aAAAsC;AAAA,oBAClB,OAAO,EAAE,OAAA,QAAA;AAAA,oBACT,aAAY;AAAA,oBAAA,SAAAJ,EAAA,eAAAlC,CAAA;AAAA;sBAGZ,OAAA;AAAA,sBACA,OAAA;AAAA,oBAAA;AAAA,oBAEU,UAAMkC,EAAA;AAAA,kBAAA,GAAA;AAAA,oBACR,QAAAC,EAAK,CAAW,EAAA,OAAAvB,GAAA,MAAAC,EAAA,MAAA;AAAA,sBAAA2B,EAAkD,QAAK;AAAA,wBAAA,OAAAM,GAAA,EAAA,OAAAjC,MAAA,oBAAA,YAAA,IAAA;AAAA;;oBAI1E,GAAI;AAAA,kBAAA,GAAA,MAAA,CAAA,SADZ,kBAWW,WAAA,UAAA,CAAA;AAAA,kBAAAb,EAAA,eAAA,qBAAA+B,EAAA,GATWC,EAAWa,GAAA;AAAA,oBAAA,KAAA;AAAA,oBAC/B,OAAA7C,EAAA;AAAA,oBACA,kBAAY,CAAMsC,MAAAtC,EAAA,cAAAsC;AAAA,oBACjB,OAAO,iBAAE,QAAiB,aAAA,QAAA;AAAA,oBAC1B,aAAY;AAAA,oBAAA,SAAAJ,EAAA;AAAA;sBAGZ,OAAA;AAAA,sBAAA,OAAA;AAAA;kBAGH,GAAA,MAOW,8CANDa,EAAiB,IAAA,EAAA;AAAA,kBAAV1H,EAAAwH,GAAA;AAAA,oBACf,OAAA7C,EAAA;AAAA,oBACA,kBAAY,CAAMsC,MAAAtC,EAAA,QAAAsC;AAAA,oBAAA,OAAA,EAAA,eAAA,QAAA,OAAA,QAAA;AAAA;;oBAEa,SAAAH,EAAA,MAAA;AAAA,sBAAA9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;wBAC/B,GAAA;AAAA,sBAAA,CAAA;AAAA,sBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;oBAElC,GAAA;AAAA,kBAAiB,GAAA,MAAA,CAAA,SAAA,gBAAA,CAAA;AAAA,kBAAA9G,EAA4C4H,GAAE;AAAA,oBAAA,OAAA,EAAA,OAAA,OAAA,eAAA,OAAA;AAAA;;;;;YAIrE,GAAA;AAAA,UAAA,CAAA;AAAA,YAAwBV,GAAO;AAAA,YAAC,KAAA;AAAA,YAAA,KAAA;AAAA;;qBAE5BJ,EAEW,MAAA;AAAA,cAFKK,EAAA,OAAAU,IAAA;AAAA,gBAAA7H,EAASoH,GAAc;AAAA,kBAAA,QAAA;AAAA;;;;;;mBAgB7B,GAAA,CAAA,SAAA,CAAA;AAAA,cAAA,CAAA;AAAA;gBAVV,YAAMP,EAAA;AAAA,gBACN,uBAAaG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,iBAAAI;AAAA,gBACZ,OAAK;AAAA,gBACL,YAAQ;AAAA,gBAAA,KAAA;AAAA,gBAEE,UAAIJ,EACb;AAAA,cAAA,GAAA;AAAA;;;;;;;;;;;;;;;uFCyEZiB,KAAejF,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,OACVkF;AAAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,eACV5H;AAAAA,IAAA,QACA4C;AAAAA,IAAA,SACAE;AAAAA,IAAA,eACAC;AAAAA,IAAA,SACAF;AAAAA,IAAA,QACAgF;AAAAA,IAAA,WACAC;AAAAA,IAAA,WACAC;AAAAA,IAAA,gBACAC;AAAAA,IAAA,MACAC;AAAAA,IAAA,eACAC;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOxI,GAAO,EAAE,QAAAsD,KAAU;;AAClB,UAAAG,IAAUC,EAAOC,EAAO,GAExBJ,KAAUC,IAAA,iCAAQ,WAAR,gBAAAA,EAAgB,QAC1BM,IAAiBC,EAAML,EAAOM,EAAe,CAAC;AACpD,QAAI8B,IAAe;AACnB,UAAM2C,IAAQpE,EAAS,MAAM,SAASrE,EAAM,KAAK,OAAO,GAClD0I,IAAmBlE,EAAmB,IAAI,GAC1CmE,IAAmBnE,EAAmB,IAAI,GAC1CC,IAAYD,EAAI,CAAA,CAAE,GAQlBoE,IAAkBpE,EAAmB,CAAA,CAAE,GACvCqE,IAAsBxE,EAAS,MAAM;AACnC,YAAAyE,IAAuB/E,EAAM6E,CAAe,EAAE;AAAA,QAClD,CAAC9D,MAASA,EAAK;AAAA,MAAA;AAEV,aAAA,IAAI,IAAIgE,CAAoB;AAAA,IAAA,CACpC,GACKC,IAA2BvE,EAAe,CAAA,CAAE;AAClD,IAAA6B;AAAA,MACE,MAAMtC,EAAM6E,CAAe,EAAE;AAAA,MAC7B,CAACI,MAAmB;AAClB,QAAAD,EAAyB,QAAQ,IAAI,MAAMC,CAAM,EAAE,KAAK,EAAK;AAAA,MAC/D;AAAA,IAAA;AAEI,UAAAC,IAAc5E,EAAS,MAAM;AACjC,UAAI6E,IAAQ;AACZ,aAAAnF,EAAM6E,CAAe,EAAE,QAAQ,CAACO,MAAgB;;AAClC,SAAA3F,IAAA2F,EAAA,SAAA,QAAA3F,EAAM,QAAQ,CAACsB,MAAS;AAClC,UAAIA,EAAK,WACPoE;AAAA,QACF;AAAA,MACD,CACF,GACMA;AAAA,IAAA,CACR,GACKE,IAAa,MAAM;AACjBX,YAAAA,IAAQ1E,EAAM2E,CAAgB;AACpC,UAAI,CAACD,GAAO;AACV,QAAAY,GAAQ,MAAM,UAAU;AACxB;AAAA;AAEF,MAAKtF,EAAM8E,CAAmB,EAAE,IAAIJ,CAAK,IAQvCY,GAAQ,MAAM,cAAc,KAPtBtF,EAAA6E,CAAe,EAAE,KAAK;AAAA,QAC1B,OAAAH;AAAAA,QACA,MAAM,CAAC;AAAA,MAAA,CACR,GACc3C,IAAA,IACf4C,EAAiB,QAAQ;AAAA,IAG3B,GAEIY,IAAa,MAAM;;AACjBb,YAAAA,IAAQ1E,EAAM4E,CAAgB;AACpC,UAAI,CAACF,GAAO;AACV,QAAAY,GAAQ,MAAM,QAAQ;AACtB;AAAA;AAEF,UAAIE,IAAU;AACV,WAAA/F,IAAAO,EAAM6E,CAAe,MAArB,QAAApF,EAAwB;AACf,mBAAAgG,KAASzF,EAAM6E,CAAe,GAAG;AACtC,eAAAhD,IAAA4D,KAAA,gBAAAA,EAAO,SAAP,QAAA5D,EAAa;AACJ,uBAAAd,MAAQ0E,EAAM;AACnB,kBAAA1E,GAAK,UAAU2D,GAAO;AACd,gBAAAc,IAAA;AACV;AAAA;AAAA;AAIN,cAAI,CAACA;AACH;AAAA;AAIN,MAAIA,KACFxF,EAAM6E,CAAe,EAAE,CAAC,EAAE,KAAK,KAAK;AAAA,QAClC,OAAOH;AAAAA,QACP,SAAS;AAAA,MAAA,CACV,GACc3C,IAAA,IACf6C,EAAiB,QAAQ,MAEzBU,GAAQ,MAAM,aAAa;AAAA,IAC7B,GAEII,IAAgB,CAAClD,MAAkB;AACvC,MAAAxC,EAAM6E,CAAe,EAAE,OAAOrC,GAAO,CAAC,GACvBT,IAAA;AAAA,IAAA,GAEX4D,IAAmBlF,EAAmB,IAAI,GAC1CmF,IAAgB,MAAM;AACtB,UAAA5F,EAAMkF,CAAW,MAAM,GAAG;AAC5B,QAAAI,GAAQ,MAAM,cAAc;AAC5B;AAAA;AAEI,YAAA9C,IAAQxC,EAAM2F,CAAgB;AACpC,UAAInD,KAAS,MAAM;AACjB,QAAA8C,GAAQ,MAAM,SAAS;AACvB;AAAA;AAEF,UAAI,CAACtF,EAAM6E,CAAe,EAAErC,CAAK,GAAG;AAClC,QAAA8C,GAAQ,MAAM,eAAe;AAC7B;AAAA;AAEF,YAAMO,IAAoD,CAAA,GACpDC,IAAM9F,EAAM6E,CAAe,EAAE;AACnC,eAASpJ,IAAI,GAAGA,IAAIqK,GAAKrK,KAAK;AAC5B,cAAM2J,IAAcpF,EAAM6E,CAAe,EAAEpJ,CAAC;AACtC,QAAAuE,EAAA6E,CAAe,EAAEpJ,CAAC,EAAE,OAAO2J,EAAY,KAAK,OAAO,CAACrE,QACpDA,GAAK,WACP8E,EAAW,KAAK;AAAA,UACd,GAAG9E;AAAA,UACH,SAAS;AAAA,QAAA,CACV,GAEI,CAACA,GAAK,QACd;AAAA;AAEH,MAAAf,EAAM6E,CAAe,EAAErC,CAAK,EAAE,OAAO;AAAA,QACnC,GAAGqD;AAAA,QACH,GAAG7F,EAAM6E,CAAe,EAAErC,CAAK,EAAE;AAAA,MAAA,GAEpBT,IAAA;AAAA,IAAA,GAEXgE,IAAc,CAACvD,MAAkB;AAC/B,MAAAxC,EAAAgF,CAAwB,EAAExC,CAAK,IAAI;AAAA,IAAA,GAErCwD,IAAoB,CAACxD,MAAkB;AACrC,MAAAxC,EAAAgF,CAAwB,EAAExC,CAAK,IAAI;AAAA,IAAA,GAErCyD,IAAgB,CAACC,GAAc1D,MAAkB;AAC/C,YAAAxG,IAASkK,EAAM,OAAe;AACpC,MAAIlG,EAAM8E,CAAmB,EAAE,IAAI9I,CAAK,KACtCsJ,GAAQ,MAAM,YAAY,GAE5BtF,EAAM6E,CAAe,EAAErC,CAAK,EAAE,QAAQxG,GACvB+F,IAAA;AAAA,IAAA,GAEX7B,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClD3E,IAAS4E,EAAS,MAAMN,EAAME,CAAa,EAAE,MAAM,GACnDK,IAAaD,EAAS,MAAMN,EAAME,CAAa,EAAE,UAAU,GAC3DiG,IAAgB1F,EAAI,EAAK,GACzB2F,KAAoB,MAAM;;AACxB,YAAAC,IAAerG,EAAM6E,CAAe;AAC1C,UAAIyB,IAAiB;AACjB,MAAAtG,EAAMmG,CAAa,MACJG,KAAA7G,KAAA4G,EAAa,CAAC,MAAd,gBAAA5G,GAAiB;AAEpC,YAAMqG,IAAMO,KAAA,gBAAAA,EAAc,QACpBE,IAAuC,CAAA;AAC7C,eAAS9K,KAAI,GAAGA,KAAIqK,GAAKrK,MAAK;AAC5B,cAAM2J,KAAciB,EAAa5K,EAAC,KAAK,CAAA,GACjC,EAAE,OAAAiJ,IAAO,MAAAlD,GAAA,IAAS4D;AACXV,QAAAA,EAAAA,EAAK,KAAIlD,MAAA,gBAAAA,GAAM,IAAI,CAACT,OAASA,GAAK,WAAU;;AAErD,YAAAC,MAAOa,KAAA7B,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAA4F,GAAkC,YAAW,IACpDd,KAAOC,EAAK/E,EAAM,KAAK;AAE7B,MAAA8E,GAAK,cAAc;AAAA,QACjB,cAAAwF;AAAA,QACA,gBAAAD;AAAA,MAAA,GAEkBlG,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGiB,IAAUxB,EAAI,EAAK,GACnByB,KAAY,MAAM;AACtB,MAAAD,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAEZI,IAAW,MAAM;AAEX,MAAAD,KAENL,KAAgCqE,MACrBrE,IAAA;AAAA,IAAA,GAEXyE,IAAkB,MAAM;AACb,MAAAzE,IAAA;AAAA,IAAA,GAEX0E,wBAAkB,OAClBC,KAAiB,YAAY;AACjC,YAAMtB,IAAcnJ,EAAM,KAAK,eAAe,CAAA,GACxCqK,IAAiBlB,EAAY,gBAC7BmB,IAAenB,EAAY;AAC7B,OAAAkB,MAAmB,MAAMA,KAAkB,UAC7CH,EAAc,QAAQ,KAElBnG,EAAA6E,CAAe,EAAE,CAAC,IAAI;AAAA,QAC1B,OAAOyB,KAAkB;AAAA,QACzB,MAAM,CAAC;AAAA,MAAA;AAET,UAAI7K,IAAI;AACR,iBAAWI,KAAO0K;AAChB,YAAI,OAAO,UAAU,eAAe,KAAKA,GAAc1K,CAAG,GAAG;AAE3D,gBAAM2F,KADS+E,EAAa1K,CAAG,EACX,IAAI,CAACkF,QACvB0F,EAAY,IAAI1F,EAAI,GACb;AAAA,YACL,OAAOA;AAAA,YACP,SAAS;AAAA,UAAA,EAEZ;AAEK,UAAAf,EAAA6E,CAAe,EAAEpJ,CAAC,IAAI;AAAA,YAC1B,OAAOI;AAAA,YACP,MAAA2F;AAAA,UAAA,GAEF/F;AAAA;AAGJ,YAAMkL,EAAsB;AAAA,IAAA,GAExBA,IAAwB,YAAY;;AACpC,UAAA;AACI,cAAAtF,IAAM,MAAM3B,EAAQ;AAAA,UACxB,GAAG4B;AAAA,UACH;AAAA,YACE,QAAQtB,EAAMtE,CAAM;AAAA,YACpB,YAAYsE,EAAMO,CAAU;AAAA,YAC5B,aAAatE,EAAM,KAAK;AAAA,YACxB,kBAAkBA,EAAM,KAAK;AAAA,YAC7B,QAAQuD;AAAA,YACR,UAAU;AAAA,YACV,cAAcQ,EAAME,CAAa,EAAE,gBAAgB;AAAA,UACrD;AAAA,UACA;AAAA,YACE,SAAS;AAAA,cACP,gBAAgBH;AAAA,cAChB,gBAAgB;AAAA,YAClB;AAAA,UACF;AAAA,QAAA,GAEI,EAAE,SAAAwB,GAAS,MAAAC,IAAO,CAAC,EAAA,IAAMH,EAAI;AACnC,YAAIE,GAAS;AAEX,gBAAMqF,IAA8C,CAAA;AACpD,WAAAnH,IAAA+B,KAAA,gBAAAA,EAAM,MAAM,GAAG,SAAf,QAAA/B,EAAqB,QAAQ,CAACsB,OAAiB;AAC7C,YAAK0F,EAAY,IAAI1F,EAAI,KACvB6F,EAAK,KAAK;AAAA,cACR,OAAO7F;AAAA,cACP,SAAS;AAAA,YAAA,CACV;AAAA,UACH,IAEFf,EAAM6E,CAAe,EAAE,CAAC,EAAE,OAAO+B;AAAA;AAAA,eAE5BnF;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA;AAGF,WAAAa;AAAA,MACEL;AAAA,MACA,CAACA,MAAY;AACX,QAAIA,KACayE,MAEZ,OAAe,mBACjB,OAAe,gBAAgB,CAACzE,CAAO;AAAA,MAE5C;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IAAA,GAGK1C,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,OAAAyC;AAAA,MACA,WAAAhE;AAAA,MACA,iBAAAmE;AAAA,MACA,UAAAxC;AAAA,MACA,eAAA8D;AAAA,MACA,aAAAjB;AAAA,MACA,kBAAAP;AAAA,MACA,kBAAAC;AAAA,MACA,YAAAS;AAAA,MACA,eAAAK;AAAA,MACA,eAAAE;AAAA,MACA,kBAAAD;AAAA,MACA,aAAAI;AAAA,MACA,eAAAE;AAAA,MACA,mBAAAD;AAAA,MACA,iBAAAQ;AAAA,MACA,YAAAjB;AAAA,MACA,0BAAAP;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACvde,MAAArC,KAAA,EAAA,OAAM,yBACFC,KAAA,EAAA,OAAM,qBAwBfqB,KAAA,EAAA,OAAA,gBACE4C,KAAA,EAAA,OAAM,gFASNC,KAAM,EAAc,OAAA,kBAACC,KAAA;AAAA,EAAA,OAAA;AAAA,0BAWzB,OAAM;iBA4BO,0BAoBDC,KAAA,CAAA,SAAA,GAQDC,KAAA,EAAA,OAAM;;wPAvHxBC,GA6HU,OAAA;AA3HP,SAAApE,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAAC,EAAA;AAAA,IACA,SAAMA,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;;MAKX,SAAA;AAAA,MACA,eAAY;AAAA,IACZ;AAAA,IAAA,QAAA;AAAA;;aAGCC,EA0BM,MAAA;AAAA,MAAAK,EAzBJ,OAkBMZ,IAAA;AAAA,QAAAY,EAjBJ,OAGOX,IAHP;AAAA,UACIW,EAAA,OAAA,MAAA;AAAA,YACDA,EAAA,QAAAU,IAAA;AAAA,cACHkD,EAAA,KAAA;AAAA,cAAA5D,EAAA,QAAAsD,IAAAO,GAAAnE,EAAA,WAAA,GAAA,CAAA;AAAA,cACAkE,EAWW,IAAA;AAAA,YAAA,CAAA;AAAA;cATT,OAAMlE,EAAA;AAAA,cACN,kBAAYG,EAAS,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,mBAAAI;AAAA,cAAA,OAAA;AAAA;;;iBAMIP,EAAA,EAAA,GAAAW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,iBAAA,CAAAmC,GAAA5C,OAAHM,EAAA,GAAAC,EAAAgB,GAAA,EAAA,KAAAvB,KAAA;AAAA,kBAAA,SAAAU,EAAA,MAAA;AAAA;;;;;cAGxB,GAAA;AAAA,YAAA,GAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YAAqC9G,EAAAoH,GAAA,EAAA,SAAAP,EAAA,cAAA,GAAA;AAAA,cAAA,SAAAC,EAAA,MAAA;AAAA;;;eAO1B,GAAA,CAAA,SAAA,CAAA;AAAA,UAAA,CAAA;AAAA;YAHV,SAAMD,EAAE;AAAA,YAAA,oBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,gBAAAI;AAAA;;;;;;UAKb,GAAA,GAAA,CAAA,WAmBM,UAnBN,CAAA;AAAA,QAAA,CAAA;AAAA,iBAC4BgE,IAExB;AAAA,UAKE9D,EAAA,OAAAuD,IAAA;AAAA,YAJMK,EAAA,SAAA;AAAA,YAAA/K,EACSkL,GAAgB;AAAA,cAAA,OAAA;AAAA,cAC/B,OAAWrE,EAAA;AAAA,cACV,kBAAYG,EAAU,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,mBAAAI;AAAA,cAAA,aAAA;AAAA;YAWrB,GAAA,MAAA,GAAA,CAAA,SAAA,cAAA,CAAA;AAAA,UAAA,CAAA;AAAA,UADFE,EAAA,OAAAwD,IAAA;AAAA,YAJMI,EAAA,QAAA;AAAA,YAAA/K,EACSkL,GAAgB;AAAA,cAAA,OAAA;AAAA,cAC/B,OAAWrE,EAAA;AAAA,cACV,kBAAYG,EAAU,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,mBAAAI;AAAA,cAAA,aAAA;AAAA;;;QAK/B,CAAA;AAAA,MAAA,CAAA;AAAA,QAEuB,OAASkE,IAAA;AAAA,QAAAnL,EAAAoL,GAAA;AAAA,UAC5B,WAAKvE,EAAA;AAAA,UAAA,sBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA;;;eAMc,EAMT,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,iBAAA,CAAAmC,GAAA5C,OAHGM,EAAA,GAAAC,EAAwB0E,GAAM,EAAA,KAAAjF,KAAA;AAAA,cAFvC,QAAAU,EAAA,MAAA;AAAA,gBAAAD,EAAA,yBAAAT,CAAA,IAeEkF,IARM5E,KAAkBC,EAAAuE,GAAA;AAAA,kBACvB,KAAK;AAAA,kBACN,OAAK;AAAA,kBAGJ,OAAMlC,EAAA;AAAA,kBACN,MAAI;AAAA,kBACJ,UAAA,CAAA/B,MAAUJ,EAAE,cAAAI,GAAkBb,CAAK;AAAA,kBAAA,QAAA,CAAAa,MAAAJ,EAAA,kBAAAT,CAAA;AAAA;;;gBAGxB,CAAA,KAjBdM,EACuB,GAAAW,EAAA,OAAA;AAAA,kBAAA,KAAA;AAAA,qCAKvBR,EASE,YAAAT,CAAA,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,gBAAA,GAAA4E,GAAAhC,EAAA,KAAA,GAAA,GAAA4B,EAAA;AAAA,cAEY,CAAA;AAAA,cAEI,OAAA9D,EAAK,MAAU;AAAA,gBAAAK,EAAA,OAC7B0D,IAKQ;AAAA,kBAAAzE,MAAA,KAAAS,EAAA,iBAAAH,EAJK,GAAAC,EAAA4E,GAAA;AAAA,oBACX,KAAK;AAAA,oBAAA,OAAA;AAAA;;;;;;mBAKT,KAAA7D,EAAA,IAAA,EAAA;AAAA,kBAAAtB,MACE,UACaiB,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,oBAAAtH,EACLuL,GAAO;AAAA,sBAAA,OAAA;AAAA;;;;;sBAIf,GAAA;AAAA,oBAAA,CAAA;AAAA;;;;;;cAKJ,SAAAzE,EAAA,MAAA;AAAA,gBAQkBK,EAAA,OAAAqE,IAAA;AAAA,mBAAA9E,EAPV,EAAK,GAAAW,EAAAC,IAAA,MAAAC,GAAAyB,EAAA,MAAA,CAAArE,GAAAtF,OACHqH,EAAA,GAAqBC,EAAA8E,GAAA;AAAA,oBAAA,OAAA;AAAA,oBAC7B,SAAM9G,EAAA;AAAA,oBAEL,oBAAM,CAAAsC,MAAAtC,EAAA,UAAAsC;AAAA,oBAAA,OAAA;AAAA;;;;;;;;;;;;;;;;;;;;AC1ErB,IAAIyE,KAAS,CAACC,IAAO,OAAO;AAC1B,MAAIC,IAAK,IACLC,IAAQ,OAAO,gBAAgB,IAAI,WAAWF,CAAI,CAAC;AACvD,SAAOA,OAAQ;AACb,QAAIG,IAAOD,EAAMF,CAAI,IAAI;AACzB,IAAIG,IAAO,KACTF,KAAME,EAAK,SAAS,EAAE,IACbA,IAAO,KAChBF,MAAOE,IAAO,IAAI,SAAS,EAAE,EAAE,YAAa,IACnCA,IAAO,KAChBF,KAAM,MAENA,KAAM;AAAA;AAGV,SAAOA;AACT;;;;;;;;;;AC5DA,GAAC,SAASG,GAAEC,GAAE;AAAsD,IAAAC,YAAeD;EAAwI,GAAEE,IAAM,WAAU;AAAc,QAAIH,IAAE,SAAQC,IAAE;AAAU,WAAO,SAAS3G,GAAEhG,GAAE;AAAC,UAAI8M,IAAE9M,EAAE;AAAU,MAAA8M,EAAE,UAAQ,SAASJ,GAAE;AAAC,eAAO,KAAK,OAAM,EAAG,EAAEA,CAAC,IAAE,KAAK,MAAM,KAAK,MAAO,IAAC,KAAG,CAAC,IAAE,KAAK,MAAM,KAAK,MAAK,IAAG,IAAE,KAAGA,IAAE,EAAE;AAAA,MAAC;AAAE,UAAIK,IAAED,EAAE;AAAI,MAAAA,EAAE,MAAI,SAAS9G,GAAEhG,GAAE;AAAC,eAAOgG,IAAE,OAAOA,CAAC,GAAE,KAAK,OAAM,EAAG,EAAEhG,CAAC,MAAI2M,IAAE,KAAK,IAAI,IAAE3G,GAAE0G,CAAC,IAAEK,EAAE,KAAK,IAAI,EAAE/G,GAAEhG,CAAC;AAAA,MAAC;AAAE,UAAIgN,IAAEF,EAAE;AAAQ,MAAAA,EAAE,UAAQ,SAAS9G,GAAEhG,GAAE;AAAC,YAAI8M,IAAE,KAAK,OAAQ,GAACC,IAAE,CAAC,CAACD,EAAE,EAAE9M,CAAC,KAAGA;AAAE,YAAG8M,EAAE,EAAE9G,CAAC,MAAI2G,GAAE;AAAC,cAAIM,IAAE,KAAK,QAAO,IAAG;AAAE,iBAAOF,IAAE,KAAK,MAAM,IAAEE,CAAC,EAAE,QAAQP,CAAC,EAAE,QAAQ,KAAK,IAAE,KAAK,MAAM,IAAEO,IAAE,CAAC,EAAE,MAAMP,CAAC,EAAE,MAAM,KAAK;AAAA;AAAE,eAAOM,EAAE,KAAK,IAAI,EAAEhH,GAAEhG,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;;;ACsRhwBkN,GAAM,OAAOC,EAAa;AAC1B,MAAAC,KAAe5J,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,eACV1C;AAAAA,IAAA,qBACAlB;AAAAA,IAAA,SACAgE;AAAAA,IAAA,QACA+E;AAAAA,IAAA,aACA0E;AAAAA,IAAA,SACA1J;AAAAA,IAAA,WACA2J;AAAAA,IAAA,OACAC;AAAAA,IAAA,WACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,OACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,aACAC;AAAAA,IAAA,QACAC;AAAAA,IAAA,cACAC;AAAAA,IAAA,eACAjK;AAAAA,IAAA,cACA7B;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOxB,GAAO;;AAEN,UAAAuD,KAAUC,KAAA,iCAAQ,WAAR,gBAAAA,GAAgB,QAC1BS,IAAgBP,EAAOQ,EAAc,GACrCT,IAAUC,EAAOC,EAAO,GACxBG,IAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9CuJ,IAAkB7J,EAAO8J,EAAiB,GAC1CC,IAAmB/J,EAAOG,EAAsB,GAChD6J,IAAmBlJ,EAAI,EAAK,GAC5BmJ,IAAcjB,MACdkB,IAAcvJ,EAAS,MAAM;;AACjC,YAAMa,KAAS,CAAA;AACf,cAAA1B,KAAAO,EAAM0J,CAAgB,MAAtB,QAAAjK,GAAyB,QAAQ,CAACsB,OAAc;AAC9C,cAAM,EAAE,SAAA+I,KAAU,IAAI,IAAA9B,KAAK,IAAI,MAAA+B,GAAS,IAAAhJ;AACxC,QAAIgJ,OAAS,oBACX5I,GAAO,KAAK;AAAA,UACV,OAAO,GAAG6G;AAAA,UACV,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,UACvB,IAAAA;AAAA,QAAA,GACC;AAAA,UACD,OAAO,GAAGA;AAAA,UACV,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,UACvB,IAAAA;AAAA,QAAA,CACD,IAED7G,GAAO,KAAK;AAAA,UACV,OAAO6G;AAAA,UACP,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,UACvB,IAAAA;AAAA,QAAA,CACD;AAAA,MACH,IAEK7G;AAAA,IAAA,CACR,GACK6I,IAAiB1J,EAAS,MACvB;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,IAAI;AAAA,QACJ,SAAS;AAAA,MACX;AAAA,MACA,GAAGN,EAAM6J,CAAW;AAAA,IAAA,CAEvB,GACKtJ,IAAaD,EAAS,MAAA;;AAAM,cAAAb,KAAAO,EAAME,CAAa,MAAnB,gBAAAT,GAAsB;AAAA,KAAU,GAC5D/D,IAAS4E,EAAS,MAAA;;AAAM,cAAAb,KAAAO,EAAME,CAAa,MAAnB,gBAAAT,GAAsB;AAAA,KAAM,GAEpDwK,IAAWxJ,EAAI,EAAK,GACpByJ,IAAiB;AAAA,MACrB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,IAAA,GAEPC,IAAa;AAAA,MACjB,EAAE,OAAO,KAAK,OAAO,OAAO;AAAA,MAC5B,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,MAChC,EAAE,OAAO,OAAO,OAAO,aAAa;AAAA,MACpC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,MACxC,EAAE,OAAO,SAAS,OAAO,mBAAmB;AAAA,MAC5C,EAAE,OAAO,UAAU,OAAO,sBAAsB;AAAA,IAAA,GAE5CC,IAAgB3J,EAAI;AAAA,MACxB,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACT,GACK4J,IAAc5J,EAAI;AAAA,MACtB,EAAE,KAAK,GAAG,OAAO,IAAI,OAAO,KAAK,MAAM,SAAS,YAAY,KAAK,WAAW,GAAG,UAAU,GAAG,aAAa,MAAM,YAAY,MAAM,YAAY,MAAM,WAAW,KAAK;AAAA,MACnK,EAAE,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM,MAAM,YAAY,YAAY,KAAK,WAAW,GAAG,UAAU,GAAG,aAAa,QAAQ,YAAY,QAAQ,YAAY,OAAO,WAAW,MAAM;AAAA,MAC7K,EAAE,KAAK,GAAG,OAAO,IAAI,OAAO,KAAK,MAAM,UAAU,YAAY,KAAK,WAAW,GAAG,UAAU,GAAG,aAAa,OAAO,YAAY,OAAO,YAAY,MAAM,WAAW,KAAK;AAAA,MACtK,EAAE,KAAK,GAAG,OAAO,IAAI,OAAO,KAAK,MAAM,SAAS,YAAY,KAAK,WAAW,GAAG,UAAU,GAAG,aAAa,MAAM,YAAY,MAAM,YAAY,IAAI,WAAW,GAAG;AAAA,MAC/J,EAAE,KAAK,GAAG,OAAO,IAAI,OAAO,KAAK,MAAM,QAAQ,YAAY,KAAK,WAAW,GAAG,UAAU,GAAG,aAAa,MAAM,YAAY,MAAM,YAAY,MAAM,WAAW,GAAG;AAAA,IAAA,CACjK,GACK6J,IAAc;AAAA,MAClB,EAAE,OAAO,MAAM,MAAM,KAAK,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,SAAS;AAAA,MAC3F,EAAE,OAAO,QAAQ,MAAM,KAAK,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,SAAS;AAAA,MAC7F,EAAE,OAAO,QAAQ,MAAM,KAAK,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,SAAS;AAAA,MAC7F,EAAE,OAAO,OAAO,MAAM,KAAK,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,SAAS;AAAA,MAC5F,EAAE,OAAO,QAAQ,MAAM,KAAK,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,SAAS;AAAA,IAAA,GAEzFC,IAAW;AAAA,MACf,EAAE,OAAO,OAAO,OAAO,OAAO;AAAA,MAC9B,EAAE,OAAO,SAAS,OAAO,YAAY;AAAA,IAAA,GAEjCC,IAAe;AAAA,MACnB,EAAE,OAAO,QAAQ,OAAO,GAAG;AAAA,MAC3B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,IAAA,GA6B/BC,IAAYhK,EAAe;AAAA,MAC/B,YAAWoB,KAAA5F,EAAM,SAAN,gBAAA4F,GAAY;AAAA,MACvB,YAAW6I,KAAAzO,EAAM,SAAN,gBAAAyO,GAAY;AAAA,MACvB,OAAMC,KAAA1O,EAAM,SAAN,gBAAA0O,GAAY;AAAA,MAClB,KAAIC,KAAA3O,EAAM,SAAN,gBAAA2O,GAAY;AAAA,MAChB,YAAYC,EAAqB;AAAA,MACjC,QAAOC,KAAA7O,EAAM,SAAN,gBAAA6O,GAAY;AAAA;AAAA,MAEnB,cAAc;AAAA,MACd,WAAUC,KAAA9O,EAAM,SAAN,gBAAA8O,GAAY;AAAA,MACtB,YAAWC,KAAA/O,EAAM,SAAN,gBAAA+O,GAAY;AAAA,MACvB,eAAcC,KAAAhP,EAAM,SAAN,gBAAAgP,GAAY;AAAA,MAC1B,YAAUC,KAAAjP,EAAM,SAAN,gBAAAiP,GAAY,aAAY;AAAA,MAClC,eAAaC,KAAAlP,EAAM,SAAN,gBAAAkP,GAAY,gBAAe;AAAA,MACxC,gBAAgB,CAAC,GAACC,KAAAnP,EAAM,SAAN,QAAAmP,GAAY;AAAA,MAC9B,WAAUC,KAAApP,EAAM,SAAN,gBAAAoP,GAAY;AAAA,MACtB,WAAUC,KAAArP,EAAM,SAAN,gBAAAqP,GAAY;AAAA,MACtB,OAAMC,KAAAtP,EAAM,SAAN,gBAAAsP,GAAY;AAAA,IAAA,CACnB;AAED,aAASV,IAAwB;AACzB,YAAA,EAAE,WAAAW,KAAY,IAAI,UAAAC,KAAW,IAAI,YAAAC,KAAa,GAAA,IAAOzP,EAAM;AAC7D,UAAAuP,OAAc,UAAU,CAACC;AACpB,eAAAC,MAAa/C,GAAM+C,EAAU;AACtC,UAAWD,OAAa,aAAa;AAC7B,cAAAjQ,KAASwE,EAAM6J,CAAW,EAAE,KAAK,CAAK5I,OAAAA,GAAE,YAAYyK,EAAU;AACpE,eAAIlQ,KACKA,GAAO,QAEPkQ;AAAA;AAGF,eAAAA;AAAA,IAEX;AACM,UAAAC,IAAsBlL,EAAI,CAAA,CAAE,GAE5BmL,IAAiBnL,EAAI,EAAK,GAC1BoL,IAAavL,EAAS,MAAMmK,EAAU,MAAM,cAAc,MAAM,GAChEqB,IAAexL,EAAS,MAAM;AAClC,YAAMyJ,KAAO9N,EAAM,MACb,EAAE,QAAAP,GAAO,IAAIsE,EAAME,CAAa;AACtC,UAAIiB,KAAS,CAAA;AACb,YAAM4K,KAAO,CAAC,sBAAsB,cAAc,iBAAiB,mBAAmB,eAAe,GAC/FC,KAAY,CAAC,eAAe,iBAAiB,gBAAgB,oBAAoB;AACvF,UAAItQ,OAAW;AAYb,QAAAyF,KAASwK,EAAoB;AAAA,eA8BpBI,GAAK,SAAShC,EAAI,GAAG;AAC9B,YAAIkC,KAAU,CAAA;AACH,mBAAApQ,MAAOmE,EAAME,CAAa;AACnC,cAAI,OAAO,UAAU,eAAe,KAAKF,EAAME,CAAa,GAAGrE,EAAG,KAAK,CAACmQ,GAAU,SAASnQ,EAAG,GAAG;AAC/F,kBAAMG,KAAQgE,EAAME,CAAa,EAAErE,EAAG;AAClC,YAAA,MAAM,QAAQG,EAAK,MACjB+P,GAAK,SAASlQ,EAAG,IACnBoQ,KAAUA,GAAQ,OAAOjQ,GAAM,OAAO,CAAKiF,OAAAA,GAAE,IAAI,CAAC,IAExCgL,KAAAA,GAAQ,OAAOjQ,EAAK;AAAA;AAK7B,QAAAmF,KAAA8K;AAAA;AACX,QAAW,CAAC,gBAAgB,iBAAiB,YAAY,EAAE,SAASlC,EAAI,MAEtE5I,KAASnB,EAAMwJ,CAAe;AAEzB,aAAArI,GAAO,IAAI,CAACF,QACV;AAAA,QACL,GAAGA;AAAA,QACH,OAAOA,GAAE,SAASA,GAAE;AAAA,QACpB,OAAOA,GAAE;AAAA,MAAA,EAEZ;AAAA,IAAA,CACF,GAEK,EAAE,iBAAAiL,IAAiB,iBAAAC,GAAiB,cAAAC,GAAa,IAAIzM,EAAO0M,IAAkB;AAAA;AAAA,MAElF,iBAAiB,CAACC,IAAmCC,IAAgBC,OAAkB;AAAA;AAAA;AAAA,MAEvF,iBAAiB,CAACD,IAAgBC,OAAkB;AAAA;AAAA;AAAA,MAEpD,cAAc,CAACA,IAAeD,IAAgBE,OAAuB;AAAA;AAAA,IAAA,CACtE,GACKC,IAAW,MAAM;AACL,MAAAP,EAAAlQ,EAAM,OAAOA,EAAM,IAAI;AAAA,IAAA;AAEnC,IAAAqG,GAAAmI,GAAW,CAACA,OAAc;AACxB,YAAAtJ,KAASW,GAAU2I,EAAS;AAClC,MAAIA,GAAU,cAAc,UAAUA,GAAU,aAAa,eAAeA,GAAU,eACpFtJ,GAAO,aAAcsJ,GAAU,WAAqB,OAAOA,GAAU,UAAU,IAEjFyB,GAAgB/K,IAAQlF,EAAM,OAAOA,EAAM,IAAI;AAAA,IAAA,GAC9C;AAAA,MACD,MAAM;AAAA,IAAA,CACP,GAEKqG,GAAAqH,GAAkB,CAAC3N,OAAmB;AAC1C,MAAAyO,EAAU,MAAM,aAAa,IAC7BA,EAAU,MAAM,iBAAiBzO;AAAA,IAAA,CAClC;AAEK,UAAA2Q,IAAgB,CAAC3Q,OAAkB;;AACjC,YAAA0G,KAAS1C,EAAM8L,CAAY,EAAE,KAAK,QAAK7K,GAAE,UAAUjF,EAAK,KAAK,CAAA,GAC7D,EAAE,MAAA4F,IAAM,aAAAgL,IAAa,IAAA5E,IAAI,cAAA6E,IAAc,OAAAlL,IAAO,UAAAmL,IAAU,WAAAC,IAAW,cAAAC,GAAiB,IAAAtK;AAC1F,MAAA+H,EAAU,QAAQ;AAAA,QAChB,IAAAzC;AAAA,QACA,WAAWpG;AAAA,QACX,WAAWgL;AAAA,QACX,OAAAjL;AAAA;AAAA,QAEA,MAAM;AAAA,QACN,YAAYiL,OAAgB,SAAS,OAAO;AAAA,QAC5C,cAAc;AAAA,QACd,UAAAE;AAAA,QACA,WAAAC;AAAA,QACA,cAAAF;AAAA,QACA,cAAAG;AAAA,QACA,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,YAAUvN,KAAAO,EAAMyK,CAAS,MAAf,gBAAAhL,GAAkB,aAAYqI,GAAO;AAAA,QAC/C,UAAU;AAAA,QACV,MAAM;AAAA,MAAA;AAAA,IACR,GAEImF,IAAoB,CAACjR,OAAkB;AACrC,YAAA0G,KAAS1C,EAAM6J,CAAW,EAAE,KAAK,QAAK5I,GAAE,UAAUjF,EAAK,KAAK,CAAA;AAClE,MAAAgE,EAAMyK,CAAS,EAAE,cAAc/H,GAAO,MAAM;AAAA,IAAA,GAExCwK,IAAc5M,EAAS,MAAM;AAC3B,YAAAyJ,KAAO/J,EAAMyK,CAAS,EAAE;AAE9B,aAAIV,OAAS,SACJ;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,QAC3B,EAAE,OAAO,OAAO,OAAO,SAAS;AAAA,QAChC,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,OAAO,OAAO,WAAW;AAAA,QAClC,EAAE,OAAO,OAAO,OAAO,QAAQ;AAAA,QAC/B,EAAE,OAAO,OAAO,OAAO,QAAQ;AAAA,QAC/B,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,QACnC,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA;AAAA;AAAA,MAAA,IAIjCA,OAAS,WACX;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA;AAAA;AAAA,MAAA,IAI5BA,OAAS,SACX;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,QAC3B,EAAE,OAAO,OAAO,OAAO,SAAS;AAAA,QAChC,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,MAAA,IAG9B;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,MAAA;AAAA,IAEvC,CACD,GACKoD,KAAe7M,EAAS,MAAM;AAClC,UAAIa,KAAS;AACP,YAAApF,KAAMiE,EAAMkN,CAAW,EAAE,KAAK,CAAQnM,OAAAA,GAAK,UAAUf,EAAMyK,CAAS,EAAE,IAAI;AAChF,aAAI1O,OACFoF,KAASpF,GAAI,QAERoF;AAAA,IAAA,CACR,GACKiM,IAAgB9M,EAAS,MAAM;AACnC,UAAI+M,KAAa;AAAA,QACf,UAAU;AAAA,MAAA;AAER,aAACrN,EAAMmN,EAAY,MACbE,KAAA;AAAA,QACN,GAAGA;AAAA,QACH,UAAU;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,MAAA,IAGFA;AAAA,IAAA,CACR,GACKC,IAAe7M,EAA+B,CAAA,CAAE,GAChD8M,IAAqB,YAAY;;AACjC,UAAA,EAAAvN,EAAMsN,CAAY,EAAE,SAAS;AAC7B,YAAA;AACF,gBAAMjM,KAAM,MAAM3B,EAAQ,KAAK,GAAG4B,yBAAoC;AAAA,YACpE,QAAQtB,EAAMtE,CAAM;AAAA,YACpB,YAAYsE,EAAMO,CAAU;AAAA,YAC5B,aAAaP,EAAMyK,CAAS,EAAE;AAAA,YAC9B,kBAAkBzK,EAAMyK,CAAS,EAAE;AAAA,YACnC,QAAQjL;AAAA,YACR,UAAU;AAAA,YACV,cAAcQ,EAAMyK,CAAS,EAAE,gBAAgB;AAAA,UAAA,GAC9C;AAAA,YACD,SAAS;AAAA,cACP,gBAAgB1K;AAAA,cAChB,gBAAgB;AAAA,YAClB;AAAA,UAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,KAAO,CAAC,EAAA,IAAMH,GAAI;AACnC,UAAIE,OACF+L,EAAa,SAAQ7N,KAAA+B,MAAA,gBAAAA,GAAM,MAAM,GAAG,SAAf,gBAAA/B,GAAqB,IAAI,CAACsB,QAAkB,EAAE,OAAOA,IAAM,OAAOA,GAAO;AAAA,iBAEzFU;AACP,kBAAQ,MAAMA,EAAC;AAAA,QACjB;AAAA,IAAA,GAEI+L,IAAe,CAACxR,OAAkB;AAChC,MAAAgE,EAAAyK,CAAS,EAAE,OAAOzO,IAClBgE,EAAAyK,CAAS,EAAE,aAAazK,EAAMyK,CAAS,EAAE,cAAc,SAAS,OAAO,QACzE,CAAC,MAAM,QAAQ,EAAE,SAASzO,EAAK,KACduR;IACrB,GAEIE,IAAmB,CAACzR,OAAkB;AACpC,MAAAgE,EAAAyK,CAAS,EAAE,WAAWzO,IACtBgE,EAAAyK,CAAS,EAAE,aAAa,IACxBzK,EAAAyK,CAAS,EAAE,WAAW,IACtBzK,EAAAyK,CAAS,EAAE,OAAO;AAAA,IAAA,GAEpBiD,IAAcjN,KACdkN,IAA2B,CAACC,OAAsB;AACtD,MAAAF,EAAY,QAAQE,IACpB5N,EAAMyK,CAAS,EAAE,cAAamD,MAAA,gBAAAA,GAAQ,KAAK,SAAQ;AAAA,IAAA,GAG/CC,KAAkB,CAACrM,OAAc;AAC/B,YAAA,EAAE,SAAAsM,GAAY,IAAAtM;AACpB,MAAAxB,EAAMyK,CAAS,EAAE,OAAOqD,GAAQ,CAAC,GACjC9N,EAAMyK,CAAS,EAAE,WAAWqD,GAAQ,CAAC,GACrC9N,EAAMyK,CAAS,EAAE,aAAaqD,GAAQ,CAAC,GACjC9N,EAAAyK,CAAS,EAAE,aAAa,IACxBzK,EAAAyK,CAAS,EAAE,WAAW,IACtBzK,EAAAyK,CAAS,EAAE,OAAO;AAAA,IAAA;AAG1B,IAAAsD,GAAU,YAAY;;AAMpB,UALAtD,EAAU,MAAM,aAAWhL,KAAAxD,EAAM,SAAN,gBAAAwD,GAAY,aAAY,IACnDgL,EAAU,MAAM,gBAAc5I,KAAA5F,EAAM,SAAN,gBAAA4F,GAAY,gBAAe,IAC/C4I,EAAA,MAAM,YAAWC,KAAAzO,EAAM,SAAN,gBAAAyO,GAAY,UAC7BD,EAAA,MAAM,YAAWE,KAAA1O,EAAM,SAAN,gBAAA0O,GAAY,UAC7BF,EAAA,MAAM,QAAOG,KAAA3O,EAAM,SAAN,gBAAA2O,GAAY,MAC/B5K,EAAMyK,CAAS,EAAE,cAAc,QAAQ;AACnC,cAAA,EAAE,WAAA/J,IAAW,eAAAsN,KAAgB,CAAA,EAAO,IAAA/R,EAAM,QAAQ;AASxD,YARA+D,EAAMyK,CAAS,EAAE,cAAaK,KAAA7O,EAAM,SAAN,gBAAA6O,GAAY,YACpC9K,EAAAyK,CAAS,EAAE,YAAY/J,IAC7BV,EAAMyK,CAAS,EAAE,aAAWM,KAAA9O,EAAM,SAAN,gBAAA8O,GAAY,aAAY,IAC9C/K,EAAAyK,CAAS,EAAE,gBAAgBuD,IAC7BhO,EAAMyK,CAAS,EAAE,kBAAkBzK,EAAMyK,CAAS,EAAE,aAAa,gBAEnEd,EAAiB,QAAQ,KAEvBjJ,OAAc,GAAG;AAEnB,gBAAMuN,KAAUjO,EAAMyK,CAAS,EAAE,SAAS,CAAC;AAC3C,cAAIwD,IAAS;AACL,kBAAAC,KAAOD,GAAQ,MAAM,GAAG;AAC9B,YAAAjO,EAAMoK,CAAa,EAAE,aAAa8D,GAAK,CAAC,GACxClO,EAAMoK,CAAa,EAAE,SAAS8D,GAAK,CAAC;AAAA;AAEtC,UAAAlO,EAAMoK,CAAa,EAAE,OAAO4D,GAAc,CAAC,KAAK;AAAA,eAC3C;AACL,UAAAhO,EAAMyK,CAAS,EAAE,eAAaO,KAAA/O,EAAM,SAAN,gBAAA+O,GAAY,eAAc;AAClD,gBAAAmD,KAAUnO,EAAMqK,CAAW,EAAE,KAAK,QAAQ;;AAAA,mBAAAtJ,GAAK,UAAQtB,KAAAxD,EAAM,SAAN,gBAAAwD,GAAY;AAAA,WAAS;AAClF,UAAI0O,MACaC,GAAAD,IAASlS,EAAM,IAAI;AAAA;AAAA;AAItC,QAAAyR,EAAY,UAAQxC,MAAAD,KAAAhP,EAAM,SAAN,gBAAAgP,GAAY,eAAZ,gBAAAC,GAAwB,MAAM,SAAQ;AAE5D,YAAM,EAAE,WAAAM,IAAW,WAAA6C,IAAW,MAAAC,GAAA,IAAS7D,EAAU;AAC7C,MAAAe,OAAc,UAAU6C,MAAaC,MAAQ,CAAC,MAAM,QAAQ,EAAE,SAASA,EAAI,KAC1Df;AAErB,YAAM,EAAE,QAAA7R,GAAO,IAAIsE,EAAME,CAAa;AACtC,MAAIxE,OAAW,kBACP,MAAAgE,EAAQ,IAAI,GAAG4B,gBAA2BtB,EAAME,CAAa,EAAE,gBAAgB,IAAI;AAAA,QACvF,SAAS;AAAA,UACP,gBAAgBH;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,MAAA,CACD,EAAE,KAAK,CAACsB,OAAa;AAChB,QAAAA,GAAI,KAAK,YAGXsK,EAAoB,QAAQtK,GAAI,KAAK,KAAK,OAAO,IAAI,CAACJ,QAC7C;AAAA,UACL,GAAGA;AAAA,UACH,aAAaA,GAAE,mBAAmB,MAAM,SAASA,GAAE,mBAAmB,MAAM,WAAW;AAAA,UACvF,cAAcI,GAAI,KAAK,KAAK;AAAA,UAC5B,MAAMJ,GAAE;AAAA,UACR,OAAOA,GAAE;AAAA,QAAA,EAGZ;AAAA,MACH,CACD,EAAE,MAAM,CAACsN,OAAQ;AAChB,gBAAQ,MAAMA,EAAG;AAAA,MAAA,CAClB;AAAA,IACH,CACD;AAGK,UAAAC,KAAoB,CAAC9N,OAAmB;AAC5C,UAAIV,EAAMyK,CAAS,EAAE,cAAc/J,IAAW;AAC5C,QAAAV,EAAMqK,CAAW,EAAE3J,EAAS,EAAE,aAAaV,EAAMyK,CAAS,EAAE,YACxDzK,EAAMqK,CAAW,EAAErK,EAAMyK,CAAS,EAAE,SAAS,MACzCzK,EAAAqK,CAAW,EAAErK,EAAMyK,CAAS,EAAE,SAAS,EAAE,aAAazK,EAAMyK,CAAS,EAAE,YACzEzK,EAAMyK,CAAS,EAAE,eAAe,MAC5BzK,EAAAqK,CAAW,EAAE3J,EAAS,EAAE,YAAYV,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAC5DzK,EAAMyK,CAAS,EAAE,eAAe,QACnCzK,EAAAqK,CAAW,EAAE3J,EAAS,EAAE,WAAWV,EAAMyK,CAAS,EAAE,SAAS,CAAC;AAGxE;AAAA;AAEI,MAAAzK,EAAAqK,CAAW,EAAE,QAAQ,CAAOoE,OAAA;AAChC,QAAAA,GAAI,YAAY,GAChBA,GAAI,WAAW,GACfA,GAAI,aAAa,KACjBA,GAAI,QAAQ;AAAA,MAAA,CACb;AAAA,IAAA,GAIGC,KAAmB,CAACjN,IAAQ0M,OAAiB;AACjD,MAAAlE,EAAS,QAAQ;AACX,YAAAjO,KAAQyF,GAAE,OAAO,OACjBsI,KAAOoE,GAAQ,MACfQ,KAAS3O,EAAMyK,CAAS,EAAE,YAC1BmE,KAAY,KAAK,IAAIT,GAAQ,SAAS,GACtCU,KAAWV,GAAQ;AACzB,MAAAA,GAAQ,QAAQW,GAAa9S,IAAO+N,IAAM4E,IAAQC,IAAWC,EAAQ;AAAA,IAAA,GAGjEE,KAAgB,CAACC,OAAqB;AACpC,YAAAtO,KAAYV,EAAMyK,CAAS,EAAE;AACnC,UAAIuE,OAAatO;AACf;AAEF,UAAIqJ,KAAO;AACX,MAAIrJ,OAAc,IACTqJ,KAAA,UACErJ,OAAc,IAChBqJ,KAAA,aACErJ,OAAc,IAChBqJ,KAAA,WACErJ,OAAc,IAChBqJ,KAAA,UACErJ,OAAc,MAChBqJ,KAAA;AAEH,YAAA4E,KAAS3O,EAAMyK,CAAS,EAAE,YAC1BzO,KAAQgE,EAAMyK,CAAS,EAAE;AAC/B,UAAImE,KAAY,GACZC,KAAW;AACf,aAAI7S,OAAU,MACZ4S,KAAY,KAAK,IAAI5O,EAAMyK,CAAS,EAAE,SAAS,CAAC,CAAC,IACxCzO,OAAU,QACnB6S,KAAW7O,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAEjCqE,GAAa9S,IAAO+N,IAAM4E,IAAQC,IAAWC,EAAQ;AAAA,IAAA,GAIxDI,KAAc,CAACxN,IAAQ0M,IAAce,IAAWrT,OAAa;AAE7D,UADJoO,EAAS,QAAQ,IACbkE,GAAQ,eAAetS,IAAK;AACxB,cAAAG,KAAQyF,GAAE,OAAO;AACvB,QAAIyN,OAAS,MACXf,GAAQ,QAAQxF,KAAQ,IAAI3M,IAAOmS,GAAQ,IAAI,EAAE,OAAOnO,EAAMyK,CAAS,EAAE,UAAU,IAEnF0D,GAAQ,QAAQxF,KAAQ,SAAS3M,IAAOmS,GAAQ,IAAI,EAAE,OAAOnO,EAAMyK,CAAS,EAAE,UAAU;AAAA;AAAA,IAE5F,GAGI0E,KAAe7O,EAAS,MAAM;AAClC,UAAIa,KAAS;AACb,YAAM,EAAE,UAAAiO,KAAW,CAAA,EAAG,IAAIpP,EAAMyK,CAAS,GACnCzO,KAAQoT,GAAS,CAAC;AACxB,aAAIpT,MAAS,WAAWA,EAAK,MAAM,MACxBmF,KAAA,KAEJA;AAAA,IAAA,CACR,GAGKkO,KAAmB,CAAClB,IAAca,OAAkB;AAIxD,MAAKhP,EAAMyK,CAAS,EAAE,aACdzK,EAAAyK,CAAS,EAAE,WAAW,KAGxBzK,EAAAyK,CAAS,EAAE,YAAYuE,IACvBhP,EAAAyK,CAAS,EAAE,aAAa0D,GAAQ,YAClCA,GAAQ,eAAe,MACzBnO,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI,MAAM0D,GAAQ,YACpCA,GAAQ,eAAe,MAChCnO,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI0D,GAAQ,WAC9BA,GAAQ,eAAe,MAC5Ba,OAAa,IACfhP,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI,MAE/BzK,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI,UAExB0D,GAAQ,eAAe,QAChCnO,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI,QAE7BuE,OAAa,IACfhP,EAAMyK,CAAS,EAAE,gBAAgB,CAAC,MAAM,IAC/BuE,OAAa,IACtBhP,EAAMyK,CAAS,EAAE,gBAAgB,CAAC,SAAS,IAClCuE,OAAa,IACtBhP,EAAMyK,CAAS,EAAE,gBAAgB,CAAC,OAAO,IAChCuE,OAAa,IACtBhP,EAAMyK,CAAS,EAAE,gBAAgB,CAAC,MAAM,IAC/BuE,OAAa,MACtBhP,EAAMyK,CAAS,EAAE,gBAAgB,CAAC,KAAK,IAEzCmB,EAAe,QAAQ;AAAA,IAAA,GAGnB0D,KAAiB,MAAM;AACrB,MAAAtP,EAAAyK,CAAS,EAAE,YAAY,GAC7BzK,EAAMyK,CAAS,EAAE,gBAAgB,CAACzK,EAAMoK,CAAa,EAAE,IAAI,GAC3DpK,EAAMyK,CAAS,EAAE,SAAS,CAAC,IAAI,GAAGzK,EAAMoK,CAAa,EAAE,cAAcpK,EAAMoK,CAAa,EAAE,UAC1FwB,EAAe,QAAQ;AAAA,IAAA;AAGhB,aAAAwC,GAAgBD,IAAczS,IAAa;AAClD,YAAM,EAAE,YAAA6T,KAAa,IAAI,UAAAH,KAAW,OAAO1T;AAC3C,MAAAyS,GAAQ,aAAaoB,IACjBH,MAAA,QAAAA,GAAU,WACRG,OAAe,MACjBpB,GAAQ,YAAY,KAAK,IAAIiB,GAAS,CAAC,CAAC,IAC/BG,OAAe,QAChBpB,GAAA,WAAWiB,GAAS,CAAC;AAAA,IAGnC;AAGA,aAASN,GAAc9S,IAAY+N,IAAW4E,IAAaC,IAAgBC,IAAe;AACxF,UAAI7S,OAAU;AACZ,eAAO2M,GAAQ,EAAA,SAASiG,IAAW7E,EAAI,EAAE,OAAO4E,EAAM;AACxD,UAAW3S,OAAU;AACnB,eAAO2M,GAAQ,EAAA,IAAIkG,IAAU9E,EAAI,EAAE,OAAO4E,EAAM;AAClD,UAAW3S,OAAU,KAAK;AACxB,YAAI+N,OAAS;AACX,iBAAOpB,GAAQ,EAAA,QAAQ,MAAM,EAAE,OAAOgG,EAAM;AAC9C,YAAW5E,OAAS;AAClB,iBAAOpB,GAAQ,EAAA,QAAQ,SAAS,EAAE,OAAOgG,EAAM;AACjD,YAAW5E,OAAS;AAClB,iBAAOpB,GAAQ,EAAA,QAAQ,OAAO,EAAE,OAAOgG,EAAM;AAC/C,YAAW5E,OAAS;AACX,iBAAApB,GAAQ,EAAA,OAAOgG,EAAM;AAAA,iBAErB3S,OAAU,KAAK;AACxB,YAAI+N,OAAS;AACX,iBAAOpB,GAAQ,EAAA,MAAM,MAAM,EAAE,OAAOgG,EAAM;AAC5C,YAAW5E,OAAS;AAClB,iBAAOpB,GAAQ,EAAA,MAAM,SAAS,EAAE,OAAOgG,EAAM;AAC/C,YAAW5E,OAAS;AAClB,iBAAOpB,GAAQ,EAAA,MAAM,OAAO,EAAE,OAAOgG,EAAM;AAAA;AAGxC,aAAA;AAAA,IACT;AAEM,UAAAa,KAAe,CAACC,IAAe/M,OAC5BA,GAAO,MAAM,YAAY,EAAE,QAAQ+M,GAAM,aAAa,KAAK,GAG9DC,KAAuBpP,EAAS,MAAMN,EAAM6L,CAAU,KAAK,CAAC,CAAC,MAAM,QAAQ,EAAE,SAAS7L,EAAMyK,CAAS,EAAE,IAAI,CAAC;AAM3G,WAAA;AAAA,MACL,cAAAqB;AAAA,MACA,aAAAoB;AAAA,MACA,eAAAP;AAAA,MACA,WAAAlC;AAAA,MACA,cAAA6C;AAAA,MACA,cAAAE;AAAA,MACA,kBAAAC;AAAA,MACA,0BAAAE;AAAA,MACA,aAAAD;AAAA,MACA,UAAAhB;AAAA,MACA,YAAAb;AAAA,MACA,YAAA1B;AAAA,MACA,aAAAE;AAAA,MACA,aAAAC;AAAA,MACA,UAAAC;AAAA,MACA,cAAA4C;AAAA,MACA,eAAAC;AAAA,MACA,gBAAAxB;AAAA,MACA,gBAAA1B;AAAA,MACA,UAAAD;AAAA,MACA,aAAAJ;AAAA,MACA,gBAAAG;AAAA,MACA,cAAAQ;AAAA,MACA,eAAAJ;AAAA,MACA,kBAAAT;AAAA,MACA,aAAAC;AAAA,MACA,sBAAA8F;AAAA,MACA,iBAAA7B;AAAA,MACA,mBAAAW;AAAA,MACA,kBAAAE;AAAA,MACA,eAAAK;AAAA,MACA,aAAAE;AAAA,MACA,kBAAAI;AAAA,MACA,mBAAApC;AAAA,MACA,cAAAuC;AAAA,MACA,gBAAAF;AAAA,MACA,oBAzCyB,CAAC,EAAE,KAAAzT,SAAU;AACtC,QAAAuQ,GAAanQ,EAAM,MAAMA,EAAM,OAAOJ,OAAQ,MAAM,OAAO,IAAI;AAAA,MAAA;AAAA,MAyC/D,qBAAA8P;AAAA,MACA,cAAAwD;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACx/BQ,MAAAxM,KAAA,EAAA,OAAM,eA2CDC,KAAA,CAAA,OAAA,wDAWLyE,KAAM;AAAA,EAAgC,KAA0C;AAAA,EAAA,OAAA;AAAA,4BAsGvE,eAAC,SAAA;2CACJN,KAAM;AAAA,EAAA,KAAA;AAAA;iDAWK,KAIAE,KAAA,EAAA,KAA0B,KAS/BW,KAAA,EAAA,OAAA,EAAA,eAAA,OAAA,EAAA,UAQF,OAAsB,EAAA,eAAA,OAAA,EAAA,GAoBtB+H,KAAA,EAAA,OAAA,EAAA,UAAA,YAAA,QAAA,OAAA;;4XA7NjB9M,EAgPM,gBAAA;AA9OF,SAAAC,EAAkB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EACVwH,GAAmB;AAAA,MAC1B,OAAA;AAAA,MAAA,OAAAX,EAAA,UAAA;AAAA;;;WAEwD,EAAM,GAAAQ,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAP,GAAA6J,OACtCzJ,EAAA,GAAcC,EAAAgB,GAAA;AAAA,UAAA,KAAAwI;AAAA;;UACvB,SAAArJ,EAAS,MAAK;AAAA,YAAAK,EAAK,QAAO;AAAA,cAAA,OAAAb,EAAA;AAAA;;;;;MAI5C,GAAA;AAAA,IAAA,GAmCE,GAMW,CAAA,SAAA,UAAA,CAAA;AAAA,IAAAa,EALT,OAAoBU,IAAA;AAAA,MAAA7H,EACZwH,GAAc;AAAA,QACrB,OAAO,EAAE,OAAA,OAAA;AAAA,QACT,OAAQX,EAAA,UAAA;AAAA,QAAA,SAAAA,EAAA;AAAA;MAIb,GAAA,MAAA,GAAA,CAAA,SAAA,WAAA,UAAA,CAAA;AAAA,IAAA,CAAA;AAAA,OAEIM,EAAoB,OAAAsD,IAAA;AAAA,MAAAzK,EACZwH,GAAkB;AAAA,QACzB,SAAM,OAAE,OAAA;AAAA,QAAA,OAAAX,EAAA,UAAA;AAAA;;;aAEgD,EAAM,GAAAQ,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAP,GAAA6J,OACtCzJ,EAAA,GAAcC,EAAAgB,GAAA;AAAA,YAAA,KAAAwI;AAAA;;;;;;;;;MAPZ,GAAA,GAAA,CAAA,SAAA,UAAA,CAAA;AAAA,IAAA,GAAA,GAAA,GAAA;AAAA,MAWA,CAAUqD,IAAA3M,EAAA,oBAAA;AAAA,IAAA,CAAA;AAAA,2BACvC,OAcWoE,IAAA;AAAA,MAAApE,EAZD,UAKN,YAoBOH,KAXEC,EAAAa,GAAA;AAAA,QAEV,KAAK;AAAA,QAA8B,eAAA;AAAA,QAAA,OAAAC,GAAA;AAAA;UAIrB,aAAA;AAAA,QAAA,CAAA;AAAA,QACd,OAAeZ,EAAA,UAAA;AAAA,QACf,kBAASG,EAAc,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,aAAAI;AAAA,QACvB,iBAAQJ,EAAA;AAAA,QAAA,SAAAA,EAAA;AAAA,QAGK,UAAUA,EAAA;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,SAA1B,SAYW,iBAAA,WAAA,UAAA,CAAA,MAjCPH,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,QAAAT,EAAA,oBAAAH,KAJQC,EAAA8M,GAAA;AAAA,UACR,KAAqD;AAAA,UACpD,UAAO;AAAA,UACP,OAAM,EAAE,OAAoB,sBAAA,gBAAA,OAAA;AAAA,UAAA,OAAA5M,EAAA;AAAA,UAE/B,QAAAA,EAAA,UAAA;AAAA,QAAA,GAEE,MAAA,GAAA,CAAA,SAAA,QAAA,CAAA,MAAAH,EAAA,GAAAC,EAAA8M,GAAA;AAAA,UACQ,KAAK;AAAA,UAAE,OAAA,EAAA,OAAA,sBAAA,gBAAA,OAAA;AAAA,UACd,OAAM5M,EAAE,UAAS;AAAA,UAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,aAAAI;AAAA;iBAGtB,GAYW,CAAA,SAAA,QAAA,CAAA;AAAA,MAAA,GAAA,EAAA;AAAA,MAETJ,EAAA,UAAA,eAKE,iBAJmBQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,QAAAtH,EACJkL,GAAkB;AAAA,UAAA,OAAA;AAAA,UACjC,OAAArE,EAAW,UAAO;AAAA,UAClB,kBAAkBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,WAAAI;AAAA,UAAA,aAAA;AAAA,UAEpB,OAIE,EAAA,QAAA,IAAA;AAAA,QAAA,GAHA,MAAM,GAAA,CAAA,OAAA,CAAA;AAAA,QAAAjH,EACSkL,GAAc;AAAA,UAAA,OAAA;AAAA,UAC7B,OAAArE,EAAW,UAAM;AAAA,UAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,OAAAI;AAAA;;MAGL,GAAA,EAAA,KAAAS,EACd,IASW,EAAA;AAAA,MAAAb,EAAA,cAAAH,KARUC,EAAAa,GAAA;AAAA,QACnB,KAAA;AAAA,QACA,OAAA;AAAA,QACA,eAAY;AAAA,QACJ,OAAO,EAAS,QAAA,KAAA,OAAC,QAAU;AAAA,QAAA,aAAA;AAAA,QAClC,OAAeX,EAAA,UAAA;AAAA,QACf,kBAASG,EAAU,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,aAAAI;AAAA,QAAA,iBAAAJ,EAAA;AAAA;8DAOY,IAAC,EAAA;AAAA,IAAA,CAAA,KAAA,CAAA,MAAA,QAAA,EAAA,SAAAA,EAAA,UAAA,QAAA,EAAA,KAAAH,EAAA,GADlBC,EAAAa,GAAA;AAAA,MAElB,KAAK;AAAA,MACN,OAAK;AAAA,MACJ,OAAOX,EAAE;AAAA,MACT,MAAA;AAAA,MAAA,SAAAA,EAAA;AAAA,MAMU,UAAAA,EAAA;AAAA,IAAA,GAHb,MAAA,GAAA,CAAA,SAAA,WASW,oFARU,GAAAF,EAAAa,GAAA;AAAA,MACnB,KAAA;AAAA,MAEQ,OAAO;AAAA,MAAA,eAAA;AAAA,MACd,OAAeX,EAAA,UAAA;AAAA,MACf,kBAASG,EAAc,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,aAAAI;AAAA,MACvB,iBAAQJ,EAAA;AAAA,MAAA,SAAAA,EAAA;AAAA,MAGX,UAAAA,EAAA;AAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SAAA,iBAAA,WAAA,UAAA,CAAA,MAAAH,KAEqBC,EAAAuE,GAAA;AAAA,MACX,KAAK;AAAA,MAAA,OAAA;AAAA;MAEE,kBAAclE,EAAS,CAAC,MAAUA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,aAAAI;AAAA,IAAnD,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,IACE,CAAAJ,EAAA,cAKEA,4CAJmBQ,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,MAAAtH,EACJkL,GAAkB;AAAA,QAAA,OAAA;AAAA,QACjC,OAAArE,EAAW,UAAO;AAAA,QAClB,kBAAkBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,WAAAI;AAAA,QAAA,aAAA;AAAA,QAEpB,OAIE,EAAA,QAAA,IAAA;AAAA,MAAA,GAHA,MAAM,GAAA,CAAA,OAAA,CAAA;AAAA,MAAAjH,EACSkL,GAAc;AAAA,QAAA,OAAA;AAAA,QAC7B,OAAArE,EAAW,UAAM;AAAA,QAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,OAAAI;AAAA;;IAIb,GAAA,EAAA,KAAAS,EADR,IAOE,EAAA;AAAA,IAAAb,EAAA,cAAAH,KALqBC,EAAA+M,GAAA;AAAA,MACpB,KAAK;AAAA,MAAmB,OAAA;AAAA,MAAA,OAAAjM,GAAA;AAAA,QAGxB,OAAAZ,EAAK,oBAAEA,EAAA,eAAA,YAAA;AAAA,MAAA,CAAA;AAAA;;;OAiEE,MAAA,GAAA,CAAA,OAAA,CAAA,KA/DOa,EAAS,IAAc,EAAA;AAAA,IAAA1H,EAAA2T,GAAA;AAAA,MAAE,SAAQ9M,EAAA;AAAA,MAAQ,oBAAUG,EAAa,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,iBAAAI;AAAA,MAAA,SAAA;AAAA,MACtE,WAAO;AAAA,IAAA,GAAA;AAAA,eAEsBH,EAAU,MAAA;AAAA,QAA9CK,EAAA,OAAAuD,IAAA;AAAA,UACE7D,EAAA,UAAA,aAAkE,eAAvCH,EAAA,GAAEW,EAAgB,OAAAsD,IAAA;AAAA,YAAA3K,EAAA4T,GAAA;AAAA;cAAQ,oBAAA5M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,mBAAAI;AAAA,YAAA,GAAA;AAAA;;;;;UAEvD,CAAA,KAASS,EAAkB,IAAA,EAAA;AAAA,UAA8B1H,EAAA+G,GAAA;AAAA,YAAA,kBAAAF,EAAA,UAAA;AAAA;;;iBACM,EAAQ,GAAAQ,EAAAC,IAAA,MAAAC,GAAAV,EAAA,aAAA,CAAAkL,GAAAa,OAAQlM,EAAA,GAAaC,EAAAO,GAAA;AAAA,gBAAA,KAAA0L;AAAA;;yBAEtF9L,EAiBgB,MAAA;AAAA,kBAAAK,EAjBsB,OAAUgE,IAAA;AAAA,oBAAXnL,EAAA6T,GAAA;AAAA,sBAAc,OAAM9B,EAAA;AAAA,sBAAA,kBAAA,CAAA9K,MAAA8K,EAAA,aAAA9K;AAAA,sBACJ,UAAA,CAAAA,MAAAJ,EAAA,iBAAAI,GAAA8K,CAAA;AAAA,oBAAA,GAAA;AAAA,sBAAnD,SAAAjL,EAAA,MAAA;AAAA,wBAAAD,EAAA,YAEAH,EAGU,GAAAW,EAAA,OAAAuD,IAAA,YAAAI,GAAA+G,EAAA,KAAA,GAAA,CAAA,MAHArL,EAAK,GAAAW,EAAE,OAAcwD,IAAA,YAAAG,GAAAnE,EAAA,cAAA+L,CAAA,CAAA,GAAA,CAAA;AAAA,wBAAW5S,EAAA8T,GAAA;AAAA,0BAAA,OAAArM,GAAAZ,EAAA,cAAA;AAAA;;0BACX,SAAAC,EAAS,MAAC;AAAA,4BAAA9G,EAAA+T,GAAA;AAAA,8BAAY,OAAMhC,EAAA;AAAA,8BAAG,kBAAI,CAAE9K,MAAA8K,EAAY,YAAe9K;AAAA,8BAAA,KAAA;AAAA,8BAC7F,QAA+D,CAAAA,MAAAJ,EAAA,YAA/DI,GAA+D8K,GAA5B,KAAA,GAAA;AAAA,4BAAA,GAAA,MAAA,GAAA,CAAA,SAAA,kBAAA,QAAA,CAAA;AAAA;;0BAErC,GAAA;AAAA,wBAAA,GAAU,MAAK,CAAA,OAAA,CAAA;AAAA,wBAA2B/R,EAAA8T,GAAA;AAAA,0BAAA,OAAArM,GAAAZ,EAAA,cAAA;AAAA;;0BACX,SAAAC,EAAS,MAAC;AAAA,4BAAA9G,EAAA+T,GAAA;AAAA,8BAAW,OAAMhC,EAAA;AAAA,8BAAG,kBAAI,CAAE9K,MAAA8K,EAAY,WAAQ9K;AAAA,8BAAA,KAAA;AAAA,8BACrF,QAA8D,CAAAA,MAAAJ,EAAA,YAA9DI,GAA8D8K,GAA3B,KAAA,GAAA;AAAA,4BAAA,GAAA,MAAA,GAAA,CAAA,SAAA,kBAAA,QAAA,CAAA;AAAA;;0BAEY,GAAA;AAAA,wBAAA,GAAA,MAAA,CAAA,OAAA,CAAA;AAAA,wBAAlCA,EAAA,cAAArL,KAAAC,EAAEmN,GAAc;AAAA,0BAAE,KAAK;AAAA,0BAAA,OAAArM,GAAAZ,EAAA,cAAA;AAAA;;;;;;2BAGmB,MAAA,CAAA,OAAS,QAAlE,IAEU,EAAA;AAAA,wBAAAkL,EAAA,aAAArL,OAFOoN,GAAc;AAAA,0BAAE,KAAK;AAAA,0BAAA,OAAArM,GAAAZ,EAAA,cAAA;AAAA;;;;;;;;sBAIxC,GAAA;AAAA,oBAAA,GACE,MAAkF,CAAA,SAAA,kBAAA,UAAA,CAAA;AAAA,oBAAAM,EAAxE,OAA0BoM,IAAA;AAAA,sBAAOvT,EAAAoH,GAAA;AAAA,wBAAA,OAAA,EAAA,gBAAA,OAAA;AAAA,qCAA0B,MAAEJ,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,iBAAA;AAAA,sBAAA,GAAA;AAAA;;;wBACvE,GAAA;AAAA,sBAAA,CAAA;AAAA;wBAAwD,SAAA,CAAAI,MAAAJ,EAAA,iBAAAkL,GAAAa,CAAA;AAAA,sBAAA,GAAA;AAAA;;;;;;;;;cAK9D,GAAA,MAAA,CAAA,KAAA,CAAA,EAAA,GAAY,GAAI;AAAA,eAAalM,EAAA,GAAAC,EAAAO,GAAA;AAAA,gBAAA,KAAA;AAAA;;yBAEzBJ,EAMW,MAAA;AAAA,kBAAAK,EALM,OAAwB6M,IAAA;AAAA,oBAAAhU,EAAAwH,GAAA;AAAA,sBACvC,OAAUX,EAAA,cAAA;AAAA,sBACV,kBAAwCG,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAA,aAAAI;AAAA,sBAAA,YAAA;AAAA,sBAEkB,OAAA,EAAA,OAAA,SAAA,gBAAA,OAAA;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,aAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;sBAE1C,GAAA;AAAA,oBAAA,GAAkB,IAAK,OAAE,CAAA;AAAA,oBAAA9G,EAAAwH,GAAA;AAAA,sBAAoB,OAAAX,EAAA,cAAA;AAAA,sBAAA,kBAAAG,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAA,OAAAI;AAAA,sBACM,OAAA,EAAA,gBAAA,OAAA;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC/B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAAmC9G,EAAA2H,GAAA,EAAA,OAAA,UAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BACnC,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAChC,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA+B9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC/B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA8B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;sBAEhC,GAAA;AAAA,oBAAA,GAAkB,IAAK,OAAE,CAAA;AAAA,oBAAA9G,EAAAwH,GAAA;AAAA;wCACvBR,EAAmD,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAA,SAAAI;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BACjC,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;oBAGpC,GAAA,GAAA,CAAA,OAAA,CAAA;AAAA,kBAAA,CAAA;AAAA,oBACY,OAA0BmN,IAAA;AAAA,oBAAOjU,EAAAoH,GAAA;AAAA,sBAAA,OAAA,EAAA,gBAAA,OAAA;AAAA,mCAA0B,MAAEJ,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,iBAAA;AAAA,oBAAA,GAAA;AAAA;;;sBACvE,GAAA;AAAA,oBAAA,CAAA;AAAA,oBAAoC7G,EAAAoH,GAAA,EAAA,SAAAP,EAAA,eAAA,GAAA;AAAA,sBAAA,SAAAC,EAAA,MAAA;AAAA;;;;;;;;;;;;;MAOhD,GAAA;AAAA,IAAA,GAEa,GAAO,CAAA,SAAA,CAAA;AAAA,IAChB9G,EAAAkU,GAGS,EAHA,SAAO,CAAA,OAAA,EAAA,GAAA;AAAA,MAC0B,SAAApN,EAAA,MAAA;AAAA,QAAxC9G,EAAAmU,GAAwC,EAA3B,SAAAtN,EAAI,mBAAG,GAAA;AAAA,UAAM,SAAAC,EAAA,MAAA;AAAA,YAAA9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;cAC1B,GAAA;AAAA,YAAA,CAAA;AAAA,YAA0B9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;;;;;wBAJ9B,CAAmC;AAAA,MAAA,CAAA;AAAA;;;MAQrC,GAAA;AAAA,IAAA,CAAA;AAAA,MAA4CuN,GAAQ;AAAA,MAAA,OAAA;AAAA;;;;uFCtMxDC,KAAezR,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,WACV0R;AAAAA,EACF;AACF,CAAC;MChEMhO,KAAM;AAAA,EAAA,KAAA;AAAA;GAMAC,KAAM;AAAA,EAAA,KAAA;AAAA;GAEFqB,KAAM;AAAA,EAAA,KAAA;AAAA;GACN4C,KAAM;AAAA,EAAA,KAAA;AAAA;;;yCAT2BhE,EAAI,WAAA;AAClD,SAAA,MAAA,QAAAI,EAAA,IAAA,KAAAH,KAAAW,EAAA,OAAAd,IAAA;AAAA,KAIuBG,EAAA,EAAI,GAAIW,EAAmBC,IAAa,MAAMC,GAAUV,EAAA,MAAA,CAAAlC,GAAAyB,OAC3EM,EAAA,GAAAW,EAeMC,IAfN,EAeM,KAAAlB,KAAA;AAAA,MAdiBzB,EAAA,QAAAA,EAAA,cAAiB,sCAAtC,OAGW6B,IAAA;AAAA,QAFkC7B,EAAA,WAAA,SAAA,KAAA+B,EAAA,GAAAW,EAA3CC,IAA6D,EAA7D,KAA6D,KAAA;AAAA,UAAA3C,EAAA,SAAA,QACvB+B,EAAtC,GAAAW,EAAA,OAAAQ,IAAA,GAAA,KAAAH,EAAA,IAAA,EAAA;AAAA,UAAA/C,EAAA,SAAA,QAAA+B,EAAA,GAAAW,EAAA,OAAAoD,IAAA,GAAA,KAAA/C,EAAA,IAAA,EAAA;AAAA,QAEF,GAAA,EAAA,KACkBA,EAAgB,IAAM,EAAA;AAAA,QAAAP,EAAA,OACpC8D,IAKE;AAAA,UAAAtG,EAAA,WAAA,SAAA,KAAA+B,EAJa,GAAAC,EAAA6N,GAAA;AAAA,YACZ,KAAI;AAAA,YACJ,OAAM3N,EAAK,QAAA;AAAA,YACX,MAAM,GAAIA,EAAA,OAAAA,EAAA,OAAA,MAAA,KAAAT;AAAA,YAAA,MAAAzB,EAAA;AAAA;;;MASN,CAAA,MAAA+B,EAAA,GAAAC,EAAe8N,GAAc;AAAA,QACvC,OAAM;AAAA,QACN,KAAK9P,EAAE,YAAK,GAAAkC,EAAA,SAAAT;AAAA,QACZ,MAAKzB;AAAA,QACL,OAAMkC,EAAA;AAAA,QACN,OAAAT;AAAA,QAAA,MAAAS,EAAA,QAAA;AAAA;;;;;uFCMX6N,KAAe7R,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,SACVI;AAAAA,IAAA,QACA+E;AAAAA,IAAA,cACAmF;AAAAA,EACF;AAAA,EACA,MAAOtN,GAAO,EAAE,MAAA8U,KAAQ;AACtB,UAAM7D,IAAc;AAAA,MAClB,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,MAC7B,EAAE,OAAO,OAAO,OAAO,SAAS;AAAA,IAAA,GAE5B8D,IAAiBvQ,EAAW,CAAA,CAAE;AAC9B,WAAA6B,GAAA0O,GAAgB,CAACC,MAAQ;AAC7B,MAAIA,KAAA,QAAAA,EAAK,UACPF,EAAK,UAAUE,CAAG;AAAA,IACpB,GACC;AAAA,MACD,MAAM;AAAA,IAAA,CACP,GACDlD,GAAU,MAAM;;AACV,OAAAtO,IAAAxD,EAAM,SAAN,QAAAwD,EAAY,SACCuR,EAAA,QAAQlP,GAAU7F,EAAM,IAAI,IAE3C+U,EAAe,QAAQ,CAAC;AAAA,QACtB,KAAK;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,MAAA,CACP;AAAA,IACH,CACD,GAOM;AAAA,MACL,aAAA9D;AAAA,MACA,gBAAA8D;AAAA,MACA,WARgB,CAACjQ,MAAc;AAC/B,QAAAA,EAAK,OAAO,IACZA,EAAK,MAAM,GACXA,EAAK,OAAO;AAAA,MAAA;AAAA,IAKZ;AAAA,EAEJ;AACF,CAAC;AC/EU,MAAAmQ,KAAA,CAAA9I,OAAK+I,GAAO,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,IAQZzF,KAAA,EAAA,OAAM,wBAIN,OAAM;;oDAnBf2E,IAAAzE,EA0BM,SA1BN;gBAEE,OAuBMF,IAAA;AAAA,KAAAG,EAtBE,EAAM,GAAAW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,gBAAA,CAAAlC,GAAAwL,OAENzJ,EAAM,GAAAW,EAAA,OAAA;AAAA,MAAA,OAAA;AAAA,MAEZ,KAAA8I;AAAA,IAAA,GAAA;AAAA,QAEI,OAAoB3J,IAAA;AAAA,QAAAxG,EACDwH,GAAK;AAAA,UAAA,OAAA,EAAA,OAAA,OAAA;AAAA,UACvB,OAAO7C,EAAE;AAAA,UAAA,kBAAA,CAAAsC,MAAAtC,EAAA,OAAAsC;AAAA;WAOR,MAAA,GAAA,CAAA,SAAA,kBAAA,SAAA,CAAA;AAAA,MAAA,CAAA;AAAA,MADgDE,EAAA,OAAAU,IAAA;AAAA,QAAbkD,EAAA,MAAA;AAAA,QAAA/K,EAAA+T,GAAA;AAAA,UAAG,OAAMpP,EAAA;AAAA,UAAA,kBAAA,CAAAsC,MAAAtC,EAAA,MAAAsC;AAAA;QAM5C,GAAA,MAAA,GAAA,CAAA,SAAA,gBAAA,CAAA;AAAA,MAAA,CAAA;AAAA,MAFqEE,EAAA,OAAAsD,IAAA;AAAA,QAAAQ;AAAAA,QAAjDjL,EAAAkL,GAAA;AAAA,UAAW,OAAAvG,EAAA;AAAA,UAAA,kBAAA,CAAAsC,MAAAtC,EAAA,OAAAsC;AAAA,UACnC,OAA0B,EAAA,OAAA,SAAA,QAAA,SAAA;AAAA,QAAA,GAAA,MAAA,GAAA,CAAA,SAAA,gBAAA,CAAA;AAAA,QAE5ByD;AAAAA,MAAA,CAAA;AAAA,QAAoC,OAAE;AAAA,QAAmB,OAAA;AAAA,QAAA,SAAA,CAAAzD,MAAAJ,EAAA,UAAAlC,CAAA;AAAA;;;;uFCoF/DsQ,KAAepS,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,eACVqS;AAAAA,IACA,gBAAAC;AAAA,IAAA,QACApS;AAAAA,IAAA,SACAC;AAAAA,IAAA,OACA+J;AAAAA,IAAA,UACAC;AAAAA,EACF;AAAA,EACA,MAAOnN,GAAO,EAAE,QAAAsD,KAAU;;AAClB,UAAAmB,IAAYD,EAAI,GAAG,GACnB+Q,IAAc,MAAM;;AAAA,yBAAU/R,IAAAxD,EAAM,SAAN,gBAAAwD,EAAY,UAAS;AAAA,OACnDS,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDR,IAAuBF,EAAOG,EAAsB,GACpD2R,IAAenR,EAAS,MAAA;;AAAM,cAAAb,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB;AAAA,KAAY,GAChEiS,IAAoB/R,EAAOgS,EAAkB,GAC7CC,IAAsBjS,EAAOkS,EAAqB,GAClDC,IAAgBrR,EAA+B,CAAA,CAAE,GACjDuQ,IAAiBvQ,EAA+B,CAAA,CAAE,GAClDwB,IAAUxB,EAAI,EAAK,GACnB/E,IAASiE,EAAOoS,EAAW,GAC3BC,IAAc,CAACC,MAA0C;;AAC7D,iBAAWlR,KAAQkR;AACb,SAAAxS,IAAAsB,EAAK,eAAL,QAAAtB,EAAiB,SACnBuS,EAAYjR,EAAK,UAAU,KAE3BA,EAAK,WAAW+G,MACZ/G,EAAK,aAAa,WACpBA,EAAK,WAAW;AAAA,IAGtB;AAGI,IAAAuB,GAAAL,GAAS,CAACA,MAAY;;AAC1B,UAAIA,GAAS;AACX,YAAI,MAAM,SAAQxC,IAAAxD,EAAM,SAAN,gBAAAwD,EAAY,UAAU,GAAG;AACzC,gBAAMwS,IAAanQ,KAAUD,IAAA5F,EAAM,SAAN,gBAAA4F,EAAY,eAAc,CAAA,CAAE;AACzD,UAAAmQ,EAAYC,CAAU,GACtBH,EAAc,QAAQG;AAAA;AAExB,QAAI,MAAM,SAAQvH,KAAAzO,EAAM,SAAN,gBAAAyO,GAAY,WAAW,IACvCsG,EAAe,QAAQlP,IAAU6I,IAAA1O,EAAM,SAAN,gBAAA0O,EAAY,WAAW,KAAK,KAE7DqG,EAAe,QAAQ,CAAC;AAAA,UACtB,MAAM;AAAA,UACN,KAAK;AAAA,UACL,MAAM;AAAA,QAAA,CACP;AAAA;AAGL,MAAK,OAAe,mBACjB,OAAe,gBAAgB,CAAC/O,CAAO;AAAA,IAC1C,GACC;AAAA,MACD,OAAO;AAAA,IAAA,CACR;AACD,QAAIF,IAAe;AACb,UAAAqK,IAAe,CAAC8F,MAAuB;;AAC5B,MAAAnQ,IAAA,IACX/B,EAAM8R,CAAa,KAAK,UAAQrS,IAAAO,EAAM8R,CAAa,MAAnB,gBAAArS,EAAsB,YAAW,IACrDqS,EAAA,QAAQ,CAAC,CAAA,CAAE,IAChB9R,EAAM8R,CAAa,EAAE,CAAC,KAAK,SAChC9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,cAAc,QAAQ9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,SAASI,IACjFJ,EAAc,QAAQ,CAAC;AAAA,QACrB,MAAAI;AAAA,QACA,YAAY;AAAA,UACVlS,EAAM8R,CAAa,EAAE,CAAC;AAAA,UACtB;AAAA,YACE,UAAUhK,GAAO;AAAA,UACnB;AAAA,QACF;AAAA,MAAA,CACD,IACQ9H,EAAM8R,CAAa,EAAE,CAAC,EAAE,WAAW,SAAS,KAAK9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,SAASI,KAC3FJ,EAAc,MAAM,CAAC,EAAE,WAAW,KAAK;AAAA,QACrC,UAAUhK,GAAO;AAAA,MAAA,CAClB;AAAA,IAEL;AAEF,IAAAqK,GAAQ9F,IAAkB;AAAA,MACxB,gBAAiB5B,GAAiCjI,GAAe4P,GAAc;;AAC9D,QAAArQ,IAAA;AACX,YAAAkQ,KAAajS,EAAM8R,CAAa;AAC9B,cAAAO,IAAUD,EAAK,MAAM,GAAG;AAC9B,YAAIC,KAAA,QAAAA,EAAS;AACX,qBAAW5W,KAAK4W;AACV,gBAAAJ,GAAWxW,CAAC;AACD,cAAAwW,MAAAxS,IAAAwS,GAAWxW,CAAC,MAAZ,gBAAAgE,EAAe;AAAA;AAE5B;AAWN,QAAI,MAAM,QAAQwS,EAAU,KAAKA,GAAWzP,CAAK,MAC/CyP,GAAWzP,CAAK,IAAIiI;AAAA,MAExB;AAAA,MACA,gBAAiBjI,GAAe4P,GAAc;;AAC7B,QAAArQ,IAAA;AACX,YAAAkQ,IAAajS,EAAM8R,CAAa;AAC9B,cAAAO,KAAUD,EAAK,MAAM,GAAG;AAC9B,YAAIC,MAAA,QAAAA,GAAS,QAAQ;AACnB,qBAAW5W,KAAK4W;AACV,gBAAAJ,EAAWxW,CAAC;AACD,cAAAwW,KAAAxS,IAAAwS,EAAWxW,CAAC,MAAZ,gBAAAgE,EAAe;AAAA;AAE5B;AAGJ,cAAI,MAAM,QAAQwS,CAAU,KAAKA,EAAWzP,CAAK;AAE3C,gBADOyP,EAAA,OAAOzP,GAAO,CAAC,GACtByP,EAAW,WAAW;AACpB,kBAAAI,GAAQ,SAAS,GAAG;AAChB,sBAAAC,IAAYD,GAAQ,SAAS,GAC7BE,IAAWF,GAAQC,CAAS,GAC5BE,IAAcH,GAAQ,MAAM,GAAGC,CAAS;AAC1C,oBAAAG,IAAoBzS,EAAM8R,CAAa,GACvCY,KAAc;AAClB,2BAAWC,MAAKH;AACV,sBAAAC,EAAkBE,EAAC;AACP,oBAAAD,MAAA7Q,IAAA4Q,EAAkBE,EAAC,MAAnB,gBAAA9Q,EAAsB,MAChB4Q,KAAA/H,IAAA+H,EAAkBE,EAAC,MAAnB,gBAAAjI,EAAsB;AAAA;AAE1C;AAIJ,oBAAIgI,OAAgBT,EAAW,CAAC,EAAE;AAChC,sBAAI,MAAM,QAAQA,EAAW,CAAC,EAAE,UAAU,GAAG;AAC3C,0BAAMW,KAAO9Q,GAAUmQ,EAAW,CAAC,EAAE,UAAU;AAC7B,oBAAAQ,EAAA,OAAO,CAACF,GAAU,CAAC,GACrCE,EAAkB,OAAO,CAACF,GAAU,GAAG,GAAGK,EAAI;AAAA;AAAA;AAG9B,kBAAAH,EAAAF,CAAQ,IAAIN,EAAW,CAAC;AAAA;AAAA;AAGhD,cAAWA,EAAW,WAAW,MAC/BH,EAAc,QAAQ;;MAoC9B;AAAA,MACA,aAAcM,GAAc5P,GAAe0P,GAAmB;;AAC7C,QAAAnQ,IAAA;AACX,YAAAkQ,KAAajS,EAAM8R,CAAa,GAChCe,IAAS;AACP,cAAAR,IAAUD,EAAK,MAAM,GAAG;AAC9B,YAAIC,KAAA,QAAAA,EAAS,QAAQ;AACnB,qBAAW5W,KAAK4W;AACV,gBAAAJ,GAAWxW,CAAC;AACL,cAAAoX,KAAApT,IAAAwS,GAAWxW,CAAC,MAAZ,gBAAAgE,EAAe,MACXwS,MAAApQ,IAAAoQ,GAAWxW,CAAC,MAAZ,gBAAAoG,EAAe;AAAA;AAE5B;AAGJ,cAAIgR,MAAWX;AACF,YAAAD,GAAA,OAAOzP,IAAQ,GAAG,GAAG;AAAA,cAC9B,UAAUsF,GAAO;AAAA,YAAA,CAClB;AAAA,eACI;AACL,kBAAM8K,IAAO9Q,GAAUmQ,GAAWzP,CAAK,CAAC;AACxC,YAAAyP,GAAWzP,CAAK,IAAI;AAAA,cAClB,MAAA0P;AAAA,cACA,YAAY;AAAA,gBACVU;AAAA,gBACA;AAAA,kBACE,UAAU9K,GAAO;AAAA,gBACnB;AAAA,cACF;AAAA,YAAA;AAAA;AAAA;AAAA,MAIR;AAAA,IAAA,CACD;AACK,UAAAgL,IAAqB,CAAC9R,MAAgB;AAC3B,MAAAe,IAAA,IACfiP,EAAe,QAAQhQ;AAAA,IAAA,GAEnB+R,IAAoBzS,EAAS,MAAM;;AACvC,YAAMa,IAAS,CAAA;AACf,cAAA1B,IAAAO,EAAMH,CAAoB,MAA1B,QAAAJ,EAA6B,QAAQ,CAACsB,MAAc;AAClD,cAAM,EAAE,SAAA+I,KAAU,IAAI,IAAA9B,IAAK,IAAI,MAAA+B,EAAS,IAAAhJ;AACxC,QAAIgJ,MAAS,oBACX5I,EAAO,KAAK;AAAA,UACV,OAAO,GAAG6G;AAAA,UACV,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,QAAA,GACtB;AAAA,UACD,OAAO,GAAGA;AAAA,UACV,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,QAAA,CACxB,IAED7G,EAAO,KAAK;AAAA,UACV,OAAO6G;AAAA,UACP,OAAO,GAAG8B,MAAW9B;AAAA,UACrB,SAAS,GAAG8B,MAAW9B;AAAA,QAAA,CACxB;AAAA,MACH,IAEK7G;AAAA,IAAA,CACR,GACK6R,IAAe,MAAM;;AACzB,YAAMnJ,IAAcoJ,KAAcxT,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,gBAAe,CAAA,CAAE,GACnEuB,MAAQa,IAAA7B,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAA4F,EAAmC,YAAW,IACtDqR,IAAgBD,GAAcnR,GAAUd,EAAK/E,EAAM,KAAK,EAAE,UAAU,CAAC;AAC3E,MAAA+E,EAAK/E,EAAM,KAAK,EAAE,aAAa+D,EAAM8R,CAAa,GAC9C,CAAC,sBAAsB,iBAAiB,eAAe,EAAE,SAAS7V,EAAM,IAAI,OAAKyO,IAAA1K,EAAMgR,CAAc,MAApB,QAAAtG,EAAuB,YAC1G1J,EAAK/E,EAAM,KAAK,EAAE,cAAc+D,EAAMgR,CAAc;AAEtD,YAAMiB,KAAagB,GAAcjT,EAAM8R,CAAa,CAAC;AACrD,iBAAW/Q,KAAQkR;AACjB,YAAIlR,EAAK,aAAa,eAAeA,EAAK,YAAY;AAC9C,gBAAAvF,IAASwE,EAAM+S,CAAiB,EAAE,KAAK,CAAK9R,OAAAA,GAAE,UAAUF,EAAK,UAAU;AAC7E,UAAIvF,MACFuF,EAAK,aAAavF,EAAO;AAAA;AAKzB,YAAA2X,IACJD,EACG,OAAO,CAAKjS,MAAA,CAACgR,GAAW,KAAK,CAAAmB,MAAKA,EAAE,gBAAgBnS,EAAE,WAAW,CAAC,EAClE,OAAO,CAAKA,MAAA,CAAC4I,EAAY,KAAK,OAAKuJ,EAAE,OAAOnS,EAAE,WAAW,CAAC,GAEzDoS,IACJpB,GACG,OAAO,CAAAhR,MAAK,CAACiS,EAAc,KAAK,CAAAE,MAAKA,EAAE,gBAAgBnS,EAAE,WAAW,CAAC;AAC1E,MAAAqS,EAASH,GAAeE,CAAU,GACdjT,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,QACd,eAAeuS,GAAiB;AAAA,UAC9B,GAAGvT,EAAME,CAAa;AAAA,UACtB,CAACjE,EAAM,IAAI,GAAG+E;AAAA,QAAA,GACbhB,EAAMH,CAAoB,CAAC;AAAA,MAAA,CAC/B;AAAA,IAAA;AAIM,aAAAyT,EAAUE,GAAcC,GAAW;;AACpC,YAAAtS,IAASqS,EAAQ,IAAI,CAAKvS,OACvB;AAAA,QACL,GAAGA;AAAA,QACH,QAAQ;AAAA,MAAA,EAEX,EAAE,OAAOwS,EAAK,IAAI,CAAKxS,OACf;AAAA,QACL,GAAGA;AAAA,QACH,KAAK;AAAA,MAAA,EAER,CAAC;AACF,iBAAWF,KAAQI,GAAQ;AACnB,cAAAuS,IAAY1T,EAAMH,CAAoB,EAAE,KAAK,CAAKoB,MAAAA,EAAE,OAAOF,EAAK,WAAW;AACjF,YAAI2S,GAAW;AACb,gBAAM,EAAE,MAAA3J,GAAM,IAAA/B,GAAI,QAAA2L,IAAS,OAAOD,GAC5BxN,IAAQ0N,GAAa7J,CAAI;AAC/B,cAAIhJ,EAAK;AACP,YAAK4S,EAAO,KAAK,CAAClS,MAAA;;AAChB,qBAAAA,EAAE,OAAOyE,KAASzE,EAAE,aAAWhC,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B,OAAMgC,EAAE,SAAS;AAAA,aAAa,KACnEmQ,EAAA;AAAA,cAClB,IAAA5J;AAAA,cACA,QAAQ,CAAC,GAAG2L,GAAQ;AAAA,gBAClB,IAAIzN;AAAA,gBACJ,SAAQzG,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B;AAAA,gBAClC,MAAM;AAAA,cACP,CAAA,EAAE,QAAQ;AAAA,YAAA,CACZ;AAAA,mBAEMsB,EAAK,QAAQ;AACtB,kBAAMyB,IAAQmR,EAAO,UAAU,CAAClS,OAC9B;;AAAA,qBAAAA,GAAE,OAAOyE,KAASzE,GAAE,aAAWhC,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B,OAAMgC,GAAE,SAAS;AAAA,aAAa;AACzF,YAAIe,MAAU,OACLmR,EAAA,OAAOnR,GAAO,CAAC,GACFoP,EAAA;AAAA,cAClB,IAAA5J;AAAA,cACA,QAAA2L;AAAA,YAAA,CACD;AAAA;AAAA;AAAA;AAAA,IAKX;AAEA,UAAMzR,IAAY,MAAM;AACtB,MAAAD,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAA0P,EAAc,QAAQ,IACtB7P,EAAQ,QAAQ;AAAA,IAAA,GAEZ4R,IAAO,MAAM;AACb,MAAA9R,KAA2BiR,KAChBjR,IAAA,IACLK;IAAA,GAENC,IAAW,MAAM;AACX,MAAAD;IAAA,GAEN1C,IAAUC,EAAOC,EAAO,GACxBG,IAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9CT,MAAWC,IAAA,iCAAgB,WAAhB,gBAAAA,EAAwB,QACnC+J,IAAkB/I,EAAI,CAAA,CAAE;AAC9B,IAAA0R,GAAQ1I,IAAmBD,CAAe;AACpC,UAAAsK,KAAyB,OAAOC,MAAkB;;AAClD,UAAC,CAAC,gBAAgB,iBAAiB,cAAc,iBAAiB,EAAE,SAAS9X,EAAM,IAAI;AACvF,YAAA;AACF,gBAAM,EAAE,IAAI+X,GAAW,WAAAjH,GAAA,IAAcgH,GAC/B1S,IAAM,MAAM3B,EAAQ,KAAK,GAAG4B,kCAA6C;AAAA,YAC7E,QAAQ9B;AAAA,YACR,cAAcQ,EAAMyR,CAAY;AAAA;AAAA,YAEhC,WAAAuC;AAAA,YACA,WAAAjH;AAAA,UAAA,GACC;AAAA,YACD,SAAS;AAAA,cACP,gBAAgBhN;AAAA,cAChB,gBAAgB;AAAA,YAClB;AAAA,UAAA,CACD,GACK,EAAE,SAAAwB,GAAS,MAAAC,IAAO,CAAC,EAAA,IAAMH,EAAI;AAC/B,UAAAE,OAAW9B,IAAA+B,KAAA,gBAAAA,EAAM,oBAAN,QAAA/B,EAAuB,YACpC+J,EAAgB,QAAQhI,EAAK,gBAC1B,IAAI,CAACyS,OACG;AAAA,YACL,GAAGA;AAAA,YACH,OAAOA,EAAO,SAASA,EAAO;AAAA,UAAA,EAEjC;AAAA,iBAEExS;AACP,kBAAQ,MAAMA,CAAC;AAAA,QACjB;AAAA,IAAA;AAEF,WAAAa,GAAM,MAAMrG,EAAM,MAAM,CAACuF,MAAc;AACrC,MAAIA,KAAQS,EAAQ,SAASjC,EAAMtE,CAAM,MAAM,kBAC7CoY,GAAuBtS,CAAI;AAAA,IAC7B,CACD,GACMjC,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,MAAA4R;AAAA,MACA,UAAAxR;AAAA,MACA,aAAAmP;AAAA,MACA,eAAAM;AAAA,MACA,gBAAAd;AAAA,MACA,cAAA5E;AAAA,MACA,oBAAA0G;AAAA,MACA,WAAApS;AAAA,MACA,QAAAhF;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;wHCzgBCmH,EA+EU,SAAA;AA7EP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAgBC,EAAA,YAAA;AAAA,IAChB,SAAMA,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;;;;MAOX,UAAA;AAAA,MACA,YAAU;AAAA,IACV;AAAA,IACA,UAAQ;AAAA,IAAA,MAAAA,EAAA;AAAA;;IAET,SAAAC,EAAA,MAAA;AAAA,MAAA,CAAA,sBAAA,iBAAA,eAAA,EAAA,SAAAD,EAAA,IAAA,KAAAH,KAA2BC,EAASI,GAAA;AAAA,QAAA,KAAA;AAAA;QA2BrB,sBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,MAAA,GAAA;AAAA,iBA1BGH,EAAG,MAAA;AAAA,UAAW9G,EAAAkH,GAAA;AAAA,YAAC,KAAuB;AAAA,YAAA,KAAA;AAAA,YAmB9C,OAAA,EAAA,UAAA,OAAA;AAAA,UAAA,GAAA;AAAA,YAjBY,SAAAJ,EAAa,MAAC;AAAA,cAA9BK,EAAA,OAAAZ,IAAA;AAAA,gBACE,MAAA,QAAAM,EAKW,kDAJgB,GAAAQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,kBACnBtH,EAAAoH,GAAA;AAAA,oBAAA,OAAA;AAAA,oBAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,kBAAA,GAAA;AAAA;;;oBACA,GAAA;AAAA,kBAAA,CAAA;AAAA,kBAEQ7G,EAAAoH,GAAA;AAAA,oBAAA,OAAA;AAAA,oBAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,kBAAA,GAAA;AAAA;;;;;gCAEgBF,EAAAS,GAAA;AAAA,kBAAA,KAAA;AAAA,kBAElB,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA;gBAAA,GAAA;AAAA;;;;gBAEF,CAAA;AAAA,cAAA,CAAA;AAAA,gBAES2N,GAAa;AAAA,gBACnB,OAAO;AAAA,gBACP,MAAM3N,EAAA;AAAA,gBAAA,OAAA;AAAA;;;YAGX,GAAA;AAAA,UAAA,CAAA;AAAA,UAA8B7G,EAAAkH,GAAA;AAAA,YAAA,KAAA;AAAA;;qBAErBJ,EAAE,MAAA;AAAA,cAAA9G,EACE8X,GAAkB;AAAA,gBAAA,MAAAjR,EAAA;AAAA;;;;;;;MAK/B,GAAA,GAAA,CAAA,WAAA,CAAA,MAAAH,EAAA,KACgCY,IAAkB,EAAA,KAAA,KAAA;AAAA,QAAhDH,EAAA,OAAAX,IAAA;AAAA,UACE,MAAA,QAAAK,EAKW,kDAJgB,GAAAQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,YACnBtH,EAAAoH,GAAA;AAAA,cAAA,OAAA;AAAA,cAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,YAAA,GAAA;AAAA;;;cACA,GAAA;AAAA,YAAA,CAAA;AAAA,YAEQ7G,EAAAoH,GAAA;AAAA,cAAA,OAAA;AAAA,cAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,YAAA,GAAA;AAAA;;;;;0BAEgBF,EAAAS,GAAA;AAAA,YAAA,KAAA;AAAA,YAElB,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA;UAAA,GAAA;AAAA;;;;UAEF,CAAA;AAAA,QAAA,CAAA;AAAA,UAES2N,GAAa;AAAA,UACnB,OAAO;AAAA,UACP,MAAM3N,EAAA;AAAA,UAAA,OAAA;AAAA;;;;;;;uFC9CfkR,KAAelV,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,QACVmF;AAAAA,IAAA,QACAjF;AAAAA,EACF;AAAA,EACA,MAAOlD,GAAO,EAAE,QAAAsD,KAAU;AAClB,UAAA0C,IAAUxB,EAAI,EAAK,GACnBP,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDgO,IAAY5N,KACZyB,IAAY,CAACnB,MAAc;AAC/B,YAAM,EAAE,WAAAqT,IAAY,IAAI,OAAAzS,IAAQ,OAAOZ;AAC7B,MAAAsN,EAAA,QAAQ+F,KAAazS,KAAS,IACxCM,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAEZ4R,IAAO,MAAM;;AACX,YAAA7S,MAAQvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAmC,YAAW;AAC5D,MAAAuB,EAAK/E,EAAM,KAAK,EAAE,YAAYoS,EAAU,OACpBjO,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf,GACSoB;IAAA,GAENC,IAAW,MAAM;AACX,MAAAD;IAAA;AAEL,WAAA7C,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,MAAA4R;AAAA,MACA,UAAAxR;AAAA,MACA,WAAAgM;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;AChEK,MAAA6C,KAAA,CAAA9I,OAAA+I,GAAA,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ;;8BAjBJvF,EAoBU,SAAA;AAlBP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAA;AAAA,IACA,SAAMC,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;;;MAMX,UAAA;AAAA,MACA,YAAU;AAAA,IACV;AAAA,IACA,UAAQ;AAAA,IAAA,MAAAA,EAAA;AAAA;;aAGPC,EAA4C,MAAA;AAAA,MACPK,EAAA,OAAAZ,IAAA;AAAA,QAAAC;AAAAA;;;;;;;;;uFCgC3CyR,KAAepV,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,SACVI;AAAAA,IAAA,QACAF;AAAAA,EACF;AAAA,EACA,MAAOlD,GAAO,EAAE,QAAAsD,KAAU;AAClB,UAAA0C,IAAUxB,EAAI,EAAK,GACnBP,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDR,IAAuBF,EAAOG,EAAsB,GACpD4R,IAAoB/R,EAAOgS,EAAkB,GAC7CC,IAAsBjS,EAAOkS,EAAqB,GAClDxD,IAAY5N,KACZG,IAAoBN,EAAS,MAAM;;AACvC,cAAOb,IAAAO,EAAMH,CAAoB,MAA1B,gBAAAJ,EAA6B,OAAO,CAACoB,MACnCA,EAAc,YAAY;AAAA,IAClC,CACF;AACD,QAAIyT,IAAU,CAAA;AACR,UAAApS,IAAY,CAACnB,MAAc;AAC/B,YAAM,EAAE,WAAAwT,IAAY,GAAO,IAAAxT;AAC3B,MAAAuT,IAAUxS,GAAUyS,CAAS,GACnBlG,EAAA,QAAQvM,GAAUyS,CAAS,GACrCtS,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAIZqR,IAAW,MAAM;;AACrB,YAAMzJ,IAAcoJ,KAAcxT,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,gBAAe,CAAA,CAAE,GAEnE0T,IACJmB,EACG,OAAO,CAAArT,MAAK,CAACjB,EAAMqO,CAAS,EAAE,SAASpN,CAAC,CAAC,EACzC,OAAO,OAAK,CAAC4I,EAAY,KAAK,CAAKuJ,MAAAA,EAAE,OAAOnS,CAAC,CAAC,GAE7CoS,IACJrT,EAAMqO,CAAS,EACZ,OAAO,CAAKpN,MAAA,CAACqT,EAAQ,SAASrT,CAAC,CAAC,EAChC,OAAO,OAAK,CAAC4I,EAAY,KAAK,CAAKuJ,MAAAA,EAAE,OAAOnS,CAAC,CAAC,GAC7CE,IAAcgS,EAAc,IAAI,CAAKlS,OAClC;AAAA,QACL,aAAaA;AAAA,QACb,QAAQ;AAAA,MAAA,EAEX,EAAE,OAAOoS,EAAW,IAAI,CAAKpS,OACrB;AAAA,QACL,aAAaA;AAAA,QACb,KAAK;AAAA,MAAA,EAER,CAAC;AACF,iBAAWF,KAAQI,GAAQ;AACnB,cAAAuS,IAAY1T,EAAMH,CAAoB,EAAE,KAAK,CAAKoB,MAAAA,EAAE,OAAOF,EAAK,WAAW;AACjF,YAAI2S,GAAW;AACb,gBAAM,EAAE,MAAA3J,GAAM,IAAA/B,GAAI,QAAA2L,KAAS,OAAOD,GAC5BxN,IAAQ0N,GAAa7J,CAAI;AAC/B,cAAIhJ,EAAK;AACP,YAAK4S,GAAO,KAAK,CAAClS,OAAA;;AAChB,qBAAAA,GAAE,OAAOyE,KAASzE,GAAE,aAAWhC,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,OAAMgC,GAAE,SAAS;AAAA,aAAa,KACnEmQ,EAAA;AAAA,cAClB,IAAA5J;AAAA,cACA,QAAQ,CAAC,GAAG2L,IAAQ;AAAA,gBAClB,IAAIzN;AAAA,gBACJ,SAAQrE,IAAA7B,EAAM0R,CAAiB,MAAvB,gBAAA7P,EAA0B;AAAA,gBAClC,MAAM;AAAA,cACP,CAAA,EAAE,QAAQ;AAAA,YAAA,CACZ;AAAA,mBAEMd,EAAK,QAAQ;AACtB,kBAAMyB,KAAQmR,GAAO,UAAU,CAAClS,MAC9B;;AAAA,qBAAAA,EAAE,OAAOyE,KAASzE,EAAE,aAAWhC,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,OAAMgC,EAAE,SAAS;AAAA,aAAa;AACzF,YAAIe,OAAU,OACLmR,GAAA,OAAOnR,IAAO,CAAC,GACFoP,EAAA;AAAA,cAClB,IAAA5J;AAAA,cACA,QAAA2L;AAAA,YAAA,CACD;AAAA;AAAA;AAAA;AAAA,IAIT,GAGIE,IAAO,MAAM;;AACR,MAAAP;AACH,YAAAtS,MAAQvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAmC,YAAW;AAC5D,MAAAuB,EAAK/E,EAAM,KAAK,EAAE,YAAYoS,EAAU,OACpBjO,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf,GACSoB;IAAA,GAENC,IAAW,MAAM;AACX,MAAAD;IAAA,GAENoS,IAAiB,CAACC,GAAoB/R,MAAiC;;AAC3E,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,YAAR,gBAAAjD,EAAiB,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa;AAEnE,WAAAlV,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,MAAA4R;AAAA,MACA,UAAAxR;AAAA,MACA,gBAAAmS;AAAA,MACA,WAAAnG;AAAA,MACA,mBAAAzN;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;AC7JK,MAAAsQ,KAAA,CAAA9I,OAAA+I,GAAA,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ;;+BAjBJvF,EAgCU,SAAA;AA9BP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAA;AAAA,IACA,SAAMC,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;;;MAMX,UAAA;AAAA,MACA,YAAU;AAAA,IACV;AAAA,IACA,UAAQ;AAAA,IAAA,MAAAA,EAAA;AAAA;;aAGPC,EAA4C,MAAA;AAAA,MAa1CK,EAAA,OAAAZ,IAAA;AAAA,QAAAC;AAAAA,UAVegB,GAAS;AAAA,UAAA,OAAA;AAAA,UACxB,OAAKX,EAAA;AAAA,UACL,kBAAoBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,UACnB,MAAA;AAAA,UACA,OAAY,EAAA,OAAA,OAAA;AAAA,UAAA,SAAAJ,EAAA;AAAA;YAGV,OAAA;AAAA,YACH,OAAA;AAAA,UACC;AAAA,UAAA,eAAA;AAAA;;;;;;;uFCYTyR,KAAezV,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,SACVI;AAAAA,IAAA,QACAF;AAAAA,EACF;AAAA,EACA,MAAOlD,GAAO,EAAE,QAAAsD,KAAU;AAClB,UAAA0C,IAAUxB,EAAI,EAAK,GACnBP,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDgO,IAAY5N,KACZkU,IAAgBlU,EAAI,CAAA,CAAE,GAEtByB,IAAY,CAACnB,GAAW6T,MAAiB;AACvC,YAAA,EAAE,YAAAC,IAAa,GAAO,IAAA9T;AAC5B,MAAAsN,EAAU,QAAQwG,GAClBF,EAAc,QAAQC,EACnB,OAAO,CAAC3T,MAAW,CAAC,OAAO,gBAAgB,OAAO,EAAE,SAASA,EAAE,KAAK,CAAC,EACrE,IAAI,CAACA,OAAY;AAAA,QAChB,OAAOA,EAAE,SAASA,EAAE;AAAA,QACpB,OAAOA,EAAE;AAAA,MACT,EAAA,GACJgB,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAGZ4R,IAAO,MAAM;;AACX,YAAA7S,MAAQvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAmC,YAAW;AAC5D,MAAAuB,EAAK/E,EAAM,KAAK,EAAE,aAAaoS,EAAU,OACrBjO,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf,GACSoB;IAAA,GAENC,IAAW,MAAM;AACX,MAAAD;IAAA,GAENoS,IAAiB,CAACC,GAAoB/R,MAAiC;;AAC3E,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,UAAR,gBAAAjD,EAAe,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa;AAEjE,WAAAlV,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,MAAA4R;AAAA,MACA,UAAAxR;AAAA,MACA,gBAAAmS;AAAA,MACA,WAAAnG;AAAA,MACA,eAAAsG;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACzFK,MAAAzD,KAAA,CAAA9I,OAAA+I,GAAA,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ;;+BAjBJvF,EA2BU,SAAA;AAzBP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAA;AAAA,IACA,SAAMC,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;;;MAMX,UAAA;AAAA,MACA,YAAU;AAAA,IACV;AAAA,IACA,UAAQ;AAAA,IAAA,MAAAA,EAAA;AAAA;;aAGPC,EAA4C,MAAA;AAAA,MAQ1CK,EAAA,OAAAZ,IAAA;AAAA,QAAAC;AAAAA,UALegB,GAAS;AAAA,UAAA,OAAA;AAAA,UACxB,OAAAX,EAAA;AAAA,UACC,kBAASG,EAAa,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,UACvB,OAAW,EAAA,OAAA,OAAA;AAAA,UACV,SAAAJ,EAAA;AAAA,UAAA,eAAA;AAAA;;;;;;;uFCwGH6R,KAAe,CACnBjZ,GACAkZ,MACgC;AAC5B,MAAAC;AACJ,WAASvZ,IAAI,GAAGA,IAAIsZ,EAAK,QAAQtZ,KAAK;AAC9B,UAAAwZ,IAAOF,EAAKtZ,CAAC;AACnB,IAAIwZ,EAAK,aACHA,EAAK,SAAS,KAAK,OAAQlU,EAAK,QAAQlF,CAAG,IAC7CmZ,IAAYC,EAAK,MACRH,GAAajZ,GAAKoZ,EAAK,QAAQ,MAC5BD,IAAAF,GAAajZ,GAAKoZ,EAAK,QAAQ;AAAA;AAI1C,SAAAD;AACT,GAEAE,KAAejW,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,MACVkW;AAAAA,IAAA,MACAC;AAAAA,IAAA,WACAC;AAAAA,IAAA,UACAnM;AAAAA,IAAA,cACAoM;AAAAA,IAAA,OACAC;AAAAA,IAAA,aACAlM;AAAAA,IAAA,cACAmM;AAAAA,IAAA,qBACArY;AAAAA,EACF;AAAA,EACA,OAAO,CAAC,gBAAgB,QAAQ;AAAA,EAChC,MAAOlB,GAAO,EAAE,MAAA8U,KAAQ;AAChB,UAAArR,IAAUC,EAAOC,EAAO,GACxBG,IAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9CC,IAAgBP,EAAOQ,EAAc,GACrCsV,IAAenV,EAAS,MAAMN,EAAME,CAAa,EAAE,gBAAgB,CAAA,CAAE,GACrEwV,IAAepV,EAAS,MAAMN,EAAME,CAAa,EAAE,gBAAgB,CAAA,CAAE,GACrEyV,IAAgBrV;AAAA,MACpB,MAAMN,EAAME,CAAa,EAAE,iBAAiB,CAAC;AAAA,IAAA,GAEzC0V,IAAatV,EAAS,MAAMN,EAAME,CAAa,EAAE,cAAc,CAAA,CAAE,GACjE2V,IAAkBvV;AAAA,MACtB,MAAMN,EAAME,CAAa,EAAE,mBAAmB,CAAC;AAAA,IAAA,GAE3C4V,IAAkBxV,EAAS,MAAMN,EAAME,CAAa,EAAE,mBAAmB,CAAA,CAAE,GAC3E6V,IAAYzV,EAAS,MAAM;;AAC/B,UAAIyV,IAAY/V,EAAMyV,CAAY,EAC/B,OAAOzV,EAAM2V,CAAa,CAAC,EAC3B,OAAO3V,EAAM4V,CAAU,CAAC,EACxB,OAAO5V,EAAM6V,CAAe,CAAC;AAO5B,aANA5Z,EAAM,SAAS,uBAAqBwD,KAAAO,EAAM8V,CAAe,MAArB,QAAArW,GAAwB,YAC9DsW,IAAY/V,EAAM6V,CAAe,EAC9B,OAAO7V,EAAM8V,CAAe,CAAC,IAI9B7Z,EAAM,SAAS,UACV8Z,KAAAA,gBAAAA,EAAW,OAAO,CAACC;;AAAU,eAAAA,EAAM,SAAOvW,KAAAxD,EAAM,SAAN,gBAAAwD,GAAY;AAAA,aAAO,KAE/DsW,KAAa,CAAA;AAAA,IAAC,CACtB,GAEKE,IAAU3V,EAAS,MACvBoV,EAAa,MAAM,OAAO,CAACzU,MAAW,CAACA,EAAE,SAAS,CAAC,GAE/CiV,IAAU5V,EAAS;AAAA,MACvB,KAAK,MAAMrE,EAAM,SAAS;AAAA,MAC1B,KAAK,CAACD,MAAU;AACd,QAAA+U,EAAK,gBAAgB/U,CAAK,GAC1B+U,EAAK,UAAU/U,CAAK;AAAA,MACtB;AAAA,IAAA,CACD,GACK0E,IAAYD,EAAI,GAAG,GACnB0V,IAAkB1V,EAAI,EAAE,GACxB2V,IAAa,CAACC,MAAgB;AAC5B,YAAAta,KAAW,SAAS,eAAe,aAAa;AACtD,UAAIua,IAASJ,EAAQ;AACrB,UAAK,SAAiB,WAAW;AACzB,cAAAK,KAAO,SAAiB,UAAU,YAAY;AACpD,QAAAA,GAAI,OAAOF;AAAA,iBAEX,OAAOta,GAAI,kBAAmB,YAC9B,OAAOA,GAAI,gBAAiB,UAC5B;AACA,cAAMya,KAAWza,GAAI,gBACf0a,IAAS1a,GAAI;AACnB,YAAI2a,IAAYF;AAEd,QAAAF,IAAAA,EAAO,UAAU,GAAGE,EAAQ,IAC5BH,IACAC,EAAO,UAAUG,GAAQH,EAAO,MAAM,GACxCI,KAAaL,EAAI,QACbta,GAAA,iBAAiBA,GAAI,eAAe2a;AAAA;AAE9B,QAAAJ,KAAAD;AAEZ,MAAAH,EAAQ,QAAQI;AAAA,IAAA,GAEZK,IAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAC7CC,IAAe,CAAC5a,GAAe+N,OAAiB;AACpD,UAAI8M,IAAW;AACf,cAAQ9M,IAAM;AAAA,QACZ,KAAK,QAAQ;AAEX,UAAA8M,IAAW,OAAO7a,IAAQ;AAC1B;AAAA,QACF;AAAA,QACA,KAAK,YAAY;AAEf,UAAA6a,IAAW7a,IAAQ;AACnB;AAAA,QACF;AAAA,QACA;AAEa,UAAA6a,IAAA7a;AAAA,MAEf;AACA,MAAAoa,EAAWS,CAAQ;AAAA,IAAA,GAEfC,IAAkC,CAAA,GAClCC,IAAetW,EAAyB,CAAA,CAAE,GAC1CuW,IAAmBvW,EAAa,EAAI,GACpCwW,IAAgBxW,EAAI,CAAA,CAAE,GACtByW,IAAc,CAAC1V,MAAc;;AACjC,iBAAWT,KAAQS;AACb,SAAA/B,KAAAsB,KAAA,gBAAAA,EAAM,aAAN,QAAAtB,GAAgB,SAClByX,EAAYnW,EAAK,QAAQ,IAEzB+V,EAAS,KAAK;AAAA,UACZ,KAAK/V,EAAK;AAAA,UACV,OAAOA,EAAK;AAAA,QAAA,CACb;AAAA,IAEL,GAEIoW,IAAe,YAAY;AAC3B,UAAA;AACF,cAAM9V,IAAM,MAAM3B,EAAQ,IAAI,GAAG4B,wBAAmC,IAAI;AAAA,UACtE,SAAS;AAAA,YACP,gBAAgBvB;AAAA,YAChB,gBAAgB;AAAA,UAClB;AAAA,QAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,IAAO,CAAC,EAAA,IAAMH,EAAI;AAC/B,QAAAE,OAAWC,KAAA,QAAAA,EAAM,YACnB0V,EAAY1V,CAAI,GAChByV,EAAc,QAAQzV;AAAA,eAEjBC;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEI2V,IAAW,CAACC,MAAmB;AACnC,MAAAN,EAAa,QAAQM,GACrBL,EAAiB,QAAQ;AAAA,IAAA;AAE3B,WAAA1U,GAAM6T,GAAiB,CAASna,MAAA;AAC9B,YAAMsb,KAAWR,EACd,IAAI,CAAC/V,MACAA,EAAK,MAAM,QAAQ/E,CAAK,IAAI,KACvB8Y,GAAa/T,EAAK,KAAKkW,EAAc,KAAK,IAE5C,IACR,EACA,OAAO,CAAClW,GAAMtF,IAAG8b,MAASxW,KAAQwW,EAAK,QAAQxW,CAAI,MAAMtF,EAAC;AAC7D,MAAAsb,EAAa,QAAQO,IACrBnB,EAAgB,QAAQna,GACxBgb,EAAiB,QAAQ;AAAA,IAAA,CAC1B,GACDjJ,GAAU,MAAM;AACD,MAAAoJ;IAAA,CACd,GACM;AAAA,MACL,WAAApB;AAAA,MACA,SAAAE;AAAA,MACA,SAAAC;AAAA,MACA,eAAAS;AAAA,MACA,eAAAM;AAAA,MACA,iBAAAd;AAAA,MACA,cAAAY;AAAA,MACA,kBAAAC;AAAA,MACA,WAAAtW;AAAA,MACA,cAAAkW;AAAA,MACA,UAAAQ;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;AC3UY,MAAAlG,KAAA,CAAA9I,OAAK+I,GAAa,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,IAChBzF,KAAA,EAAA,OAAA,sHAuCIkE,KAAA,CAAA,SAAA,GACCQ,KAAA,CAAA,SAAA,8CAcD,OAAM,YACEE,KAAA,CAAA,SAAA,iBAOD,8LAqByB2J,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,QAAA,EAAA,OAAA,EAAA,eAAA,OAAA,EAAA,GAAA,OAAA,EAAA,CAAA,uDAejCiU,KAAA,EAAA,KAAK;;gNAtGrBC,IAAA5U,EA8GM,OA9GN;cAEIY,EA6BQ,OAAAd,IAAA;AAAA,IA7BRvG,EAAAqb,GA6BQ,EA7BA,OAAA,EAAI,QAAG,OAAA,KAAA;AAAA,MA4BP,SAAAvU,EAAA,MAAA;AAAA,QAAA9G,EA3BNsb,GA2BM,EAAA,MAAA,EAAA,GAAA;AAAA,UAAA,SA1BJxU,EAKM,MAAA;AAAA,YADYK,EAAA,OAAAX,IAAA;AAAA,cAAAW,EAHc,OAASU,IAAA;AAAA,gBAAA7H,EAAA6T,GAAA;AAAA,kBAAE,OAAKhN,EAAA;AAAA,kBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA;;kBACb,SAAAH,EAAA,MAAA;AAAA,oBAAG9G,EAAAub,GAAA,EAAA,OAAA,IAAA,GAAA;AAAA,sBAAA,SAAAzU,EAAA,MAAA;AAAA;;sBAClC,GAAA;AAAA,oBAAA,CAAA;AAAA,yBAA+B,EAAG,OAAA,IAAA,GAAA;AAAA,sBAAA,SAAAA,EAAA,MAAA;AAAA;;;;;;mBAGb,GAAA,CAAA,OAAA,CAAA;AAAA,cAAA,CAAA;AAAA,uCAEf,EAAO,GAAAO,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAAC,GAAAV,EAAA,WAAA,CAAA+S,GAAAxT,OAEPM,EAAK,GAAAW,EAAA,OAAA;AAAA,gBACV,OAAK;AAAA,gBAAA,KAAAjB;AAAA;qCAMR,GAAA,GAAA,KAAAsB,EAAA,IAAA,EAAA;AAAA,cAAAb,EAAA,cAAA,OAAAH,EACQ,EAAO,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAAC,GAAAV,EAAA,SAAA,CAAA2U,GAAApV,OAEPM,EAAK,GAAAW,EAAA,OAAA;AAAA,gBACV,OAAK;AAAA,gBAAA,KAAAjB;AAAA;;;;UAOd,GAAA;AAAA,QAAA,CAAA;AAAA,UACEkV,GASE,EAAA,MAAA,GAAA,GAAA;AAAA,UAAA,SARKxU,EAAC,MAAU;AAAA,YAAA9G,EACbyb,GAAa;AAAA,cACR,OAAO;AAAA,cAAA,IAAA;AAAA,cACd,OAAU5U,EAAA;AAAA,cAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAAI;AAAA;gBAGV,SAAA;AAAA,gBACD,SAAA;AAAA,cAAA;AAAA,cAEF,aAAA;AAAA,YACE,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YACEE,EAAA,OAAAuD,IAAA;AAAA,cAAAvD,EAAA,MAAAwD,IAAA;AAAA,iBAAAjE,EAEQ,OAAEY,IAAiB,MAAAC,GAAAV,EAAA,eAAA,CAAAlC,GAAAyB,OACnBM,EAAK,GAAAW,EAAA,MAAA;AAAA,kBAAA,SAAA,CAAAJ,MAERJ,EAAI,aAAAlC,GAAA,QAAA;AAAA,kBAAA,KAAAyB;AAAA,iCAGX,GAAA,GAAA;AAAA,cAAA,CAAA;AAAA,gBAEUuN,GAAO;AAAA,gBACf,WAAA;AAAA,gBAAA,SAAA;AAAA,gBACW,kBACT;AAAA,cAAA,GAAA;AAAA,yBACE7M,EAMM,MAAA;AAAA,kBADFK,EAAA,OAAAyD,IAAA;AAAA,oBAAAzD,EAHe,OAAe0D,IAAA;AAAA,sBAAA7K,EAAA0b,GAAA;AAAA,wBAC9B,OAAA7U,EAAA;AAAA,wBACA,kBAAYG,EAAU,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,kBAAAI;AAAA,wBAAA,OAAA,EAAA,iBAAA,MAAA;AAAA;sBAoCpB,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,oBAAA,CAAA;AAAA,oBA/BYE,EAAA,OAAEqE,IAAY;AAAA,sBAAAxL,EAC3B2b,GAAoB;AAAA,wBACpB,iBAAW9U,EAAA;AAAA,wBACX,sBAAQA,EAAQ;AAAA,wBAAA,aAAAA,EAAA;AAAA,wBAEN,UAAKA,EAAA;AAAA,sBAAA,GAAA;AAAA,wBAgBL,OAAAC,EAAA,CAAA,EAAA,OAAAwB,GAAA,MAAAsT,GAAA,UAAAC,GAAA,KAAAC,QAAA;AAAA,0BAAA9b,EAJW+b,GAAQ,EAAe,WAAA,MAAA,GAAAC,GAAA;AAAA,4BAAzC,SAAAlV,EAAA,MAAA;AAAA,8BAAAwB,EAAA,QAAAzB,EAAA,eAAA,IAAA,MAAAH,KAEwDW,EAAA,QAAA2M,IAAA;AAAA,gCAAAjJ,EAAAC,GACtD1C,EAAG,OAAM,GAAAA,EAAO,QAAMzB,EAAQ,qBAAe,KAAI,CAAA;AAAA,gCAAAM,EAAA,QAAA8M,IAAAjJ,GAAAnE,EAAA,eAAA,GAAA,CAAA;AAAA,gCAEnDkE,EAAA,MAAAC,GAA+B1C,qBAAf,eAAK,IAAAzB,EAAA,gBAAA,MAAA,CAAA,GAAA,CAAA;AAAA,8BAAA,YACrBQ,EAIU,QAAA+T,IAAApQ,GAAA1C,CAAA,GAAA,CAAA;AAAA,8BAAAsT,KAAAlV,EAAA,GAFSW,EAAA,QAAA;AAAA,gCAChB,KAAA;AAAA,gCACA,OAAA;AAAA,gCAAA,SAAA,CAAAJ,MAAAJ,EAAA,aAAAyB,GAAA,UAAA;AAAA;;4BApBoB,GAAA;AAAA,0BAAA,GAAA;AAAA;8BACrB,MAAA;AAAA,8BAAA,IACExB,EAA2C,MAAA;AAAA,gCAAAK,EAC3C,OAA2B,MAAA;AAAA,kCAAA8U;AAAAA,kCAE7B9U,EAGM,QAAA,MAAA6D,GAAA6Q,CAAA,GAAA,CAAA;AAAA,gCAAA,CAAA;AAAA,kCADJ,OAAsB,MAAA;AAAA,kCAAAtI;AAAAA;;;;;;;;;;;;gBAoBlB,SAAAzM,EAAA,MAAA;AAAA,kBAEkEK,EAAA,QAAA+U,IAAA;AAAA,oBAAAnR,EAAA,QAAA;AAAA;;;;;;;;;;;;;;uFCsIlGoR,KAAetZ,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,oBAAAuZ;AAAA,IAAA,OACAC;AAAAA,IAAA,QACAtZ;AAAAA,IAAA,WACAuZ;AAAAA,IAAA,QACAtU;AAAAA,IAAA,SACA/E;AAAAA,IAAA,eACAC;AAAAA,IAAA,WACA+V;AAAAA,IAAA,cACA9L;AAAAA,IAAA,UACAoP;AAAAA,IAAA,wBACAta;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOpC,GAAO,EAAE,QAAAsD,KAAU;AAClB,UAAAM,IAAuBF,EAAOG,EAAsB,GACpDI,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDqR,IAAoB/R,EAAOgS,EAAkB,GAC7CiH,IAAgBtY,EAAS,MAAMN,EAAMH,CAAoB,CAAC,GAC1DgZ,IAAyBvY;AAAA,MAC7B,MAAMN,EAAME,CAAa,EAAEjE,EAAM,IAAI,KAAK,CAAC;AAAA,IAAA,GAEvC6c,IAAqBxY,EAAS,MAAM;AACxC,YAAMsN,IAAS,CAAC,gBAAgB,iBAAiB,mBAAmB,YAAY;AAChF,UAAI5M,IAAO,CAAA;AACX,iBAAWD,KAAQ6M;AACb,QAAA,OAAO,UAAU,eAAe,KAAK5N,EAAME,CAAa,GAAGa,CAAI,MACjEC,IAAOA,EAAK,OAAOhB,EAAME,CAAa,EAAEa,CAAI,CAAC;AAG1C,aAAAC;AAAA,IAAA,CACR,GACK+X,IAAW,EAAE,MAAM,KACnBC,IAAa,EAAE,MAAM,MACrBC,IAAmB;AAAA,MACvB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAAA,GAEZC,IAAgB;AAAA,MACpB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,GAEJC,IAAe1Y,EAAS,CAAA,CAAE,GAC1B2Y,IAAU3Y,KACVwB,IAAUxB,EAAI,EAAK,GACnB4Y,IAAY5Y;AAClB,IAAA6B;AAAA,MACEL;AAAA,MACA,CAACjG,MAAmB;AAClB,YAAIA;AACE,cAAAC,EAAM,SAAS,QAAQ;AACnB,kBAAA;AAAA,cACJ,OAAA0F;AAAA,cACA,UAAA2X;AAAA,cACA,SAAAC;AAAA,cACA,oBAAAC;AAAA,cACA,gBAAAC;AAAA,cACA,gBAAAC;AAAA,YAAA,IACEzd,EAAM;AASV,gBARAod,EAAU,QAAQ;AAAA,cAChB,OAAA1X;AAAA,cACA,UAAA2X;AAAA,cACA,SAAAC;AAAA,cACA,oBAAAC;AAAA,cACA,gBAAAC;AAAA,cACA,gBAAAC;AAAA,YAAA,GAEED,MAAmB,eAAe;AAE9B,oBAAAzY,IAAO0Y,EAAe,MAAM,GAAG;AACjC,eAAA1Y,KAAA,gBAAAA,EAAM,YAAW,MACnBmY,EAAa,QAAQ;AAAA,gBACnB,OAAOnY,EAAK,CAAC;AAAA,gBACb,MAAMA,EAAK,CAAC;AAAA,gBACZ,QAAQA,EAAK,CAAC;AAAA,cAAA;AAAA;AAAA;AAItB,YAAW/E,EAAM,SAAS,UACdod,EAAA,QAAQvX,GAAUmX,CAAgB,GAC/BE,EAAA,QAAQrX,GAAUoX,CAAa;AAAA;AAGpC,UAAAG,EAAA,QAAQvX,GAAUmX,CAAgB,GAC/BE,EAAA,QAAQrX,GAAUoX,CAAa;AAE9C,QAAK,OAAe,mBACjB,OAAe,gBAAgB,CAACld,CAAK;AAAA,MAE1C;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,MACR;AAAA,IAAA;AAEF,QAAI+F,IAAe;AACnB,UAAMC,IAAW,MAAM;AACN,MAAAD,IAAA;AAAA,IAAA,GAEXkL,IAAoB,CAACjR,MAAkB;AACrC,YAAA0G,IAAS1C,EAAM4Y,CAAa,EAAE,KAAK,CAAK3X,MAAAA,EAAE,OAAOjF,CAAK;AAC5D,MAAI0G,MACQ2W,EAAA,MAAM,iBAAiB3W,EAAO,UAE3BX,IAAA;AAAA,IAAA,GAGX4X,IAAgB,MAAM;;AACpB,YAAA3Y,MAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW,IACpD,EAAE,OAAAkC,GAAO,gBAAA8X,EAAA,IAAmBzZ,EAAMqZ,CAAS,KAAK,IAChDO,IAAc,CAAA;AAIhB,UAHAH,MAAmB,kBACrBG,EAAO,iBAAiB,GAAG5Z,EAAMmZ,CAAY,EAAE,SAASnZ,EAAMmZ,CAAY,EAAE,QAAQnZ,EAAMmZ,CAAY,EAAE,WAEtGld,EAAM,SAAS,OAAO;AACxB,cAAM+L,IAAKF;AACP,QAAA+R,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,YAAY,CAAC,KAC5D1Q,EAAA,QAAQ,CAACC,MAAW;AACvB,UAAAA,EAAE,OAAO;AAAA,QAAA,CACV,GAEHD,EAAK,KAAK;AAAA,UACR,GAAGhB,EAAMqZ,CAAS;AAAA,UAClB,GAAGO;AAAA,UACH,IAAA5R;AAAA,UACA,MAAM;AAAA,UACN,MAAMrG;AAAA,QAAA,CACP;AAAA;AACH,QAAW1F,EAAM,SAAS,WACnB+E,EAAA/E,EAAM,KAAK,IAAI;AAAA,UAClB,GAAG+E,EAAK/E,EAAM,KAAK;AAAA,UACnB,GAAG+D,EAAMqZ,CAAS;AAAA,UAClB,GAAGO;AAAA,UACH,MAAMjY;AAAA,QAAA;AAGU,MAAAvB,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGkB,IAAY,MAAM;AACtB,MAAAD,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAEZ6X,IAAgB,OAAOC,GAAa/d,MAAkB;AAC1D,UAAIA,MAAU;AACZ,eAAO,QAAQ,OAAO,IAAI,MAAM,QAAQ,CAAC;AACpC;AACC,cAAAN,IAASsE,EAAM8Y,CAAkB,EAAE,KAAK,CAAK7X,MAAAA,EAAE,UAAUjF,CAAK;AACpE,eAAIN,IACEA,EAAO,OAAOO,EAAM,KAAK,KACpB,QAAQ,YAEV,QAAQ,OAAO,IAAI,MAAM,SAAS,CAAC,IAErC,QAAQ;;IACjB,GAEI+d,IAAY1Z,EAAS,MAAM;AAC/B,UAAIa,IAAc;AAAA,QAChB,OAAO;AAAA,UACL;AAAA,YACE,UAAU;AAAA,YACV,WAAW2Y;AAAA,YACX,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MAAA;AAEE,aAAAT,EAAU,MAAM,aAAa,eACtBlY,IAAA;AAAA,QACP,GAAGA;AAAA,QACH,gBAAgB;AAAA,UACd;AAAA,YACE,UAAU;AAAA,YACV,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,oBAAoB;AAAA,UAClB;AAAA,YACE,UAAU;AAAA,YACV,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA,UACd;AAAA,YACE,UAAU;AAAA,YACV,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MAAA,IAGGA;AAAA,IAAA,CACR,GACK8Y,IAAO,MAAM;AACjB,MAAAb,EAAQ,MAAM,SAAW,EAAA,KAAK,MAAM;AAC9B,QAAArX,KAA4B4X,KACjB5X,IAAA,IAELK;MAAA,CACX;AAAA,IAAA,GAEGC,IAAW,MAAM;AAErB,MAAA+W,EAAQ,MAAM,iBACJhX;IAAA,GAGN8X,KAAyB,MAAM;AACpB,MAAAnY,IAAA,IACT/B,EAAAqZ,CAAS,EAAE,iBAAiB;AAAA,IAAA,GAG9Bc,IAAc7Z,EAAS,MAAM;AACjC,UAAIkB,IAAO;AACL,YAAA4Y,IAAYpa,EAAMqZ,CAAS,EAAE,gBAC7BgB,IAAWra,EAAMqZ,CAAS,EAAE;AAC9B,UAAA,CAACgB,KAAY,CAACD;AACT,eAAA5Y;AAED,cAAAxB,EAAMqZ,CAAS,EAAE,gBAAgB;AAAA,QACvC,KAAK,iBAAiB;AAEpB,UAAIe,MAAc,QAEhB5Y,IAAO,MAAM6Y,IAAW,kBAGxB7Y,IAAO,MAAM6Y,IAAW;AAE1B;AAAA,QACF;AAAA,QACA,KAAK,2BAA2B;AAEvB,UAAA7Y,IAAA;AAAA,GACH4Y,MAAc,QAET5Y,IAAAA,IAAO,MAAM6Y,IAAW,gBAGxB7Y,IAAAA,IAAO,MAAM6Y,IAAW;AAEjC;AAAA,QACF;AAAA,QACA,KAAK,sBAAsB;AAEzB,cAAIhE,IAAM;AACV,kBAAQ+D,GAAW;AAAA,YACjB,KAAK,OAAO;AAAQ,cAAA/D,IAAA;AAAM;AAAA,YAAM;AAAA,YAChC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,YAClC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,YAClC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,UACpC;AACO,UAAA7U,IAAA,SAAS6Y,IAAW,MAAMhE;AACjC;AAAA,QACF;AAAA,QACA,KAAK,gCAAgC;AACnC,cAAIA,IAAM;AAEV,kBADO7U,IAAA;AAAA,GACC4Y,GAAW;AAAA,YACjB,KAAK,OAAO;AAAQ,cAAA/D,IAAA;AAAM;AAAA,YAAM;AAAA,YAChC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,YAClC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,YAClC,KAAK,OAAO;AAAQ,cAAAA,IAAA;AAAQ;AAAA,YAAM;AAAA,UACpC;AACO,UAAA7U,IAAAA,IAAO,SAAS6Y,IAAW,MAAMhE;AACxC;AAAA,QACF;AAAA,MACF;AACO,aAAA7U;AAAA,IAAA,CACR,GACKgO,KAAe,CAACC,GAAe/M,MAC5BA,EAAO,QAAQ,YAAY,EAAE,QAAQ+M,EAAM,aAAa,KAAK;AAE/D,WAAAlQ,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GACM;AAAA,MACL,SAAAD;AAAA,MACA,UAAAI;AAAA,MACA,UAAA0W;AAAA,MACA,YAAAC;AAAA,MACA,WAAAK;AAAA,MACA,wBAAAR;AAAA,MACA,MAAAoB;AAAA,MACA,UAAAjY;AAAA,MACA,WAAAgY;AAAA,MACA,aAAAG;AAAA,MACA,SAAAf;AAAA,MACA,wBAAAc;AAAA,MACA,eAAAtB;AAAA,MACA,mBAAA3L;AAAA,MACA,cAAAuC;AAAA,MACA,cAAA2J;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;MC/aWxW,KAAM;AAAA,EAAA,KAAA;AAAA;;;qPAvIhBE,EA+MU,SAAA;AA7MP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAM,GAAKC,EAAA,SAAA,QAAA,OAAA;AAAA,IACV,SAASA,EAAE;AAAA,IAAA,OAAA;AAAA;;;MAKX,SAAA;AAAA,MACA,eAAe;AAAA,IACf;AAAA,IACA,UAAQ;AAAA,IAAA,MAAAA,EAAA;AAAA;;aAEKC,EAAE,MAAA;AAAA,MAAA9G,EAAmBke,GAAS;AAAA,QAAE,OAAIrX,EAAA;AAAA,QAAA,OAAAA,EAAA;AAAA;;iBAEzCC,EAAM,MAAA;AAAA,UAAA9G,EACDme,GAAU;AAAA,YACnB,OAAA;AAAA,YACD,aAAYtX,EAAA;AAAA,YAAA,eAAAA,EAAA;AAAA;;qBAGGC,EAAE,MAAA;AAAA,cAAA9G,EAAAkL,GAAA;AAAA,gBACd,OAAQrE,EAAA,UAAA;AAAA,gBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,QAAAI;AAAA;;;;UAIX,GAAA,GAAA,CAAK,aAAO,aAAA,CAAA;AAAA,UAAAqE,GACAtL,EAAQme,GAAA;AAAA,YACnB,OAAA;AAAA,YAAA,aAAAtX,EAAA;AAAA,YAUU,eAAAA,EAAA;AAAA,UAAA,GAAA;AAAA,qBANIC,EAAE,MAAA;AAAA,cAAA9G,EAAAwH,GAAA;AAAA,gBACd,OAAQX,EAAA,UAAA;AAAA,gBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,WAAAI;AAAA;;gBAE0B,SAAAH,EAAA,MAAA;AAAA,kBAAA9G,EAAA2H,GAAA,EAAA,OAAA,UAAA,GAAA;AAAA,oBAAA,SAAAb,EAAA,MAAA;AAAA;;oBACM,GAAA;AAAA,kBAAA,CAAA;AAAA,iCACCY,EAA1C,IAA2E,EAAA,UAD1Cf,EAAAgB,GAAA;AAAA,oBAAA,KAAA;AAAA;;;;;;kBACS,CAAA;AAAA,kBAAiCd,EAAA,0BAAAH,EAAA,GAAzCC,EAAAgB,GAAA;AAAA,oBAAA,KAAA;AAAA;;;;;;;;;;;;;YAGtB,CAAA6L,IAAA3M,EAAU,SAAQ,iBAAA;AAAA,UAAA,CAAA;AAAA,UAEfA,EAAA,UAAA,aAAA,aAAAH,EAAA,GAAAC,EAAUyX,GAAO;AAAA,YAAA,KAAA;AAAA,YAC/B,OAAMvX,EAAI,UAAA;AAAA,YACV,kBAAUG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,UAAAI;AAAA,YACV,MAAMJ,EAAA;AAAA,YACN,MAAQA,EAAA;AAAA,YAAA,MAAAA,EAAA;AAAA;UAGG,GAAA,MAAA,GAAU,UAAQ,QAAlC,QAAA,QAAA,UAAA,CAAA,KAAAa,EAAA,IAAA,EAAA;AAAA,UACEb,EAAA,UAAA,aAyBc,mBAxBAQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,YAAAtH,EACFme,GAAU;AAAA,cACnB,OAAA;AAAA,cACD,aAAKtX,EAAA;AAAA,cAAA,eAAAA,EAAA;AAAA;;uBAGUC,EAAE,MAAA;AAAA,gBAAA9G,EAAAwH,GAAA;AAAA,kBACd,OAAQX,EAAA,UAAA;AAAA,kBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,iBAAAI;AAAA;;kBAEsC,SAAAH,EAAA,MAAA;AAAA,oBAAA9G,EAAA2H,GAAA,EAAA,OAAA,qBAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAC/C,GAAA;AAAA,oBAAA,CAAA;AAAA,oBACQ9G,EAAA2H,GAAA,EAAA,OAAA,+BAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAER,GAAA;AAAA,oBAAA,CAAA;AAAA,oBAAyC9G,EAAA2H,GAAA,EAAA,OAAA,gBAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBACzC,GAAA;AAAA,oBAAA,CAAA;AAAA,oBACO9G,EAAA2H,GAAA,EAAA,OAAA,0BAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAEP,GAAA;AAAA,oBAAA,CAAA;AAAA,oBACO9G,EAAA2H,GAAA,EAAA,OAAA,iBAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAEP,GAAA;AAAA,oBAAA,CAAA;AAAA,oBACO9G,EAAA2H,GAAA,EAAA,OAAA,cAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;;;cAIX,GAAA;AAAA,YAAA,GACE,IAAK,aAAO,aAAA,CAAA;AAAA,YAAA9G,EACFme,GAAU;AAAA,cACnB,OAAA;AAAA,cACD,aAAKtX,EAAA;AAAA,cAAA,eAAAA,EAAA;AAAA;;uBAGUC,EAAE,MAAA;AAAA,gBAAA9G,EAAAwH,GAAA;AAAA,kBACd,OAAQX,EAAA,UAAA;AAAA,kBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,qBAAAI;AAAA;;;uBAID,EAAK,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,wBAAA,CAAAuW,GAAAhX,OACLM,EAAA,GAA0BC,EAAAgB,GAAA;AAAA,sBAC/B,KAAAvB;AAAA,sBAAA,OAAAgX,EAAA;AAAA,sBAE6B,UAAAvW,EAAA,SAAA,UAAAA,EAAA,KAAA,UAAAuW,EAAA;AAAA,oBAAA,GAAA;AAAA;;;;;;;;;;gCAIpC,aA8Bc,CAAA;AAAA,YAAA,CAAA,kBAAA,aAAA,EAAA,SAAAvW,EAAA,UAAA,cAAA,IAK6Ba,EAJ3C,IAoBc,EAAA,KArBAhB,KA7BAC,EAAAwX,GAAA;AAAA,cACX,KAAA;AAAA,cACA,OAAA;AAAA,cACD,aAAKtX,EAAA;AAAA,cAAA,eAAAA,EAAA;AAAA;;uBAIUC,EAAE,MAAA;AAAA,gBAAA9G,EAAAwH,GAAA;AAAA,kBACd,OAAQX,EAAA,UAAA;AAAA,kBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,iBAAAI;AAAA;;;;;oBAUwB,KAAAP,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,sBAAAtH,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;wBAC/B,GAAA;AAAA,sBAAA,CAAA;AAAA,sBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;wBAChC,GAAA;AAAA,sBAAA,CAAA;AAAA,sBAAiC9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;wBACjC,GAAA;AAAA,sBAAA,CAAA;AAAA,sBAAiC9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;;;uBAIjC,EAA+B,MAAAJ,KAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,sBAAAtH,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;wBAC/B,GAAA;AAAA,sBAAA,CAAA;AAAA,sBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,wBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;;;;;YAQK,GAAA,GAAA,CAAA,aAAA,aAAA,CAAA;AAAA,YAgB7B,CAAA,kBAAA,aAAA,EAAA,SAAAD,EAAA,UAAA,cAAA,iBAAAH,KAnBAC,EAAAwX,GAAA;AAAA,cACX,KAAA;AAAA,cACA,OAAA;AAAA,cAAA,aAAAtX,EAAA;AAAA,cAWK,eAAAA,EAAA;AAAA,YAAA,GAAA;AAAA;;kBANwG;AAAA,kBAAA;AAAA,4FAO9GH,EAIE,GAAAW,EAAA,OAAAd,IAAA,gCAAAyE,GAAAnE,EAAA,UAAA,kBAAA,GAAA,CAAA,KAHCa,EAAO,IAAW,EAAA;AAAA,gBACX1H,EAAAyb,GAAA;AAAA,kBACR,OAAQ5U,EAAA;AAAA,kBAAA,MAAA;AAAA;;;;;UAIE,GAAA,EAAA,KAAAa,EACd,IAcc,EAAA;AAAA,UAAAb,EAAA,UAAA,aAAA,eAAAH,EAbA,GAAAC,EAAAwX,GAAA;AAAA,YACX,KAAA;AAAA,YACA,OAAA;AAAA,YACD,aAAKtX,EAAA;AAAA,YAAA,eAAAA,EAAA;AAAA;;qBAGHC,EAAW,MAAA;AAAA,cAAA9G,EACIwH,GAAU;AAAA,gBAAA,eAAA;AAAA,gBACxB,OAAeX,EAAA,UAAA;AAAA,gBACf,kBAASG,EAAa,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,qBAAAI;AAAA,gBACtB,iBAAYJ,EAAA;AAAA,gBACZ,SAAMA,EAAE;AAAA,gBAAA,YAAA,EAAA,OAAA,MAAA,OAAA,UAAA;AAAA;;;;aAIW,GAAA,CAAA,aAAA,aAAc,QACtC,IAoCc,EAAA;AAAA,UAAAA,EAAA,UAAA,mBAAA,iBAAAH,EAnCA,GAAAC,EAAAwX,GAAA;AAAA,YACX,KAAA;AAAA,YACA,OAAA;AAAA,YAAA,aAAAtX,EAAA;AAAA,YAgCK,eAAAA,EAAA;AAAA,UAAA,GAAA;AAAA,qBA7BJC,EAIkB,MAAA;AAAA,cAAAK,EAHD,OAAkBX,IAAA;AAAA,gBAAAxG,EAAA+T,GAAA;AAAA,kBACjC,OAAAlN,EAAA,aAAA;AAAA,kBACC,kBAAQG,EAAQ,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,QAAAI;AAAA,kBAAA,OAAA,EAAA,OAAA,SAAA,gBAAA,OAAA;AAAA,kBAEnB,UAQWJ,EAAA;AAAA,gBAAA,GAPD,MAAO,GAAiB,CAAA,SAAA,UAAA,CAAA;AAAA,gBAAA7G,EAAAwH,GAAA;AAAA,kBAChC,OAAAX,EAAA,aAAA;AAAA,kBACC,kBAAQG,EAAQ,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,OAAAI;AAAA,kBAAA,OAAA,EAAA,OAAA,SAAA,gBAAA,OAAA;AAAA;;kBAEc,SAAAH,EAAA,MAAA;AAAA,oBAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAC/B,GAAA;AAAA,oBAAA,CAAA;AAAA,oBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBAChC,GAAA;AAAA,oBAAA,CAAA;AAAA,oBAA8B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;kBAEhC,GAAA;AAAA,gBACU,GAAA,GAAA,CAAK,SAAE,UAAY,CAAC;AAAA,gBAAA9G,EAAAwH,GAAA;AAAA,kBAC5B,OAAqBX,EAAA,aAAA;AAAA,kBACpB,kBAAQG,EAAQ,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,SAAAI;AAAA,kBAAA,OAAA,EAAA,OAAA,QAAA;AAAA;;kBAEgB,SAAAH,EAAA,MAAA;AAAA,oBAAA9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;sBACjC,GAAA;AAAA,oBAAA,CAAA;AAAA,oBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,sBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;kBAElC,GAAA;AAAA,gBAAA,GACE,IAAK,SAAC,UAAA,CAAA;AAAA,gBAAA9G,EACN+b,GAAiB;AAAA,kBACjB,OAAM;AAAA,kBAAA,kBAAA;AAAA;;2BAEyBjV,EAAO,MAAA;AAAA,oBAAC9G,EAAAqe,GAAA;AAAA,sBAAA,OAAA;AAAA;;;;;;;;;;;;;;;;uFC/CrDC,KAAezb,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,eACV1C;AAAAA,IAAA,qBACAlB;AAAAA,IAAA,SACAgE;AAAAA,IAAA,eACAC;AAAAA,IAAA,QACA8E;AAAAA,IAAA,UACA8E;AAAAA,IAAA,OACAC;AAAAA,IAAA,UACAC;AAAAA,IAAA,cACAG;AAAAA,EACF;AAAA,EACA,MAAOtN,GAAO,EAAE,MAAA8U,KAAQ;AAChB,UAAAnF,IAAiBnL,EAAI,EAAK,GAC1BZ,IAAuBF,EAAOG,EAAsB,GACpDc,IAAoBN,EAAS,MAAM;;AACvC,cAAOb,IAAAO,EAAMH,CAAoB,MAA1B,gBAAAJ,EAA6B,OAAO,CAACoB,MACnCA,EAAc,YAAY;AAAA,IAClC,CACF,GACK8Z,IAAa,CAAC;AAAA,MAClB,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,CACR,GAEKC,IAAiB,CAAC;AAAA,MACtB,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,CACR,GAEKC,IAAmB,CAAC;AAAA,MACxB,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,CACR,GAaKC,IAAexa,EAAS;AAAA,MAC5B,MAAO;AACL,eAAOrE,EAAM;AAAA,MACf;AAAA,MACA,IAAKuF,GAA8B;AAC5B,QAAAuP,EAAA,UAAUvP,GAAMvF,EAAM,KAAK;AAAA,MAClC;AAAA,IAAA,CACD,GAEK8e,IAAeza,EAAS,MAAM;;AAClC,UAAIa,IAAS;AACb,YAAI1B,IAAAO,EAAM8a,CAAY,MAAlB,gBAAArb,EAAqB,cAAa,aAAa;AAC3C,cAAAjE,IAASwE,EAAMY,CAAiB,EAAE,KAAK,CAAKK;;AAAA,iBAAAA,EAAE,SAAOxB,IAAAO,EAAM8a,CAAY,MAAlB,gBAAArb,EAAqB;AAAA,SAAE;AAClF,QAAIjE,MACO2F,IAAA3F;AAAA;AAGN,aAAA2F;AAAA,IAAA,CACR,GACK6Z,IAAe1a,EAAS,MAAM;;AAClC,UAAIa,IAAS;AAIb,eAAI1B,IAAAO,EAAM8a,CAAY,MAAlB,gBAAArb,EAAqB,kBAAiB,WAC/B0B,IAAA,KAEJA;AAAA,IAAA,CACR,GACK8Z,IAAuB3a,EAAS,MAAM;AAC1C,UAAIa,IAAS;AACT,aAAAnB,EAAM+a,CAAY,MACpB5Z,IAAS0Y,GAAkB7Z,EAAM+a,CAAY,EAAE,MAAM,OAAO,IAEvD5Z;AAAA,IAAA,CACR,GAEK+Z,IAAoB5a,EAAS,MAAM;AACvC,UAAIa,IAAS;AACT,aAAAnB,EAAM+a,CAAY,MAChBlB,GAAkB7Z,EAAM+a,CAAY,EAAE,MAAM,OAAO,IACjD,CAAC,aAAa,SAAS,EAAE,SAAS/a,EAAM8a,CAAY,EAAE,aAAa,MAC5D3Z,IAAA,MAEF0Y,GAAkB7Z,EAAM+a,CAAY,EAAE,MAAM,MAAM,MAClD5Z,IAAA,MAGNA;AAAA,IAAA,CACR,GAEK8L,IAAoB,CAACjR,GAAe0G,MAAiC;AACzE,MAAI1G,MACIgE,EAAA8a,CAAY,EAAE,UAAUpY,EAAO;AAAA,IACvC,GAGIgK,IAAW,MAAM;AAChB,MAAAqE,EAAA,UAAU9U,EAAM,KAAK;AAAA,IAAA,GAGtBkf,IAAgB7a,EAAS,MACzBN,EAAMgb,CAAY,IACb;AAAA,MACL,EAAE,OAAO,KAAK,OAAO,OAAO;AAAA,MAC5B,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,MAChC,EAAE,OAAO,OAAO,OAAO,aAAa;AAAA,MACpC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,MACxC,EAAE,OAAO,SAAS,OAAO,mBAAmB;AAAA,MAC5C,EAAE,OAAO,UAAU,OAAO,sBAAsB;AAAA,IAAA,IAG3C,EAEV,GAEKI,IAAmB,MAAM;AACvB,MAAApb,EAAA8a,CAAY,EAAE,KAAK,MACnB9a,EAAA8a,CAAY,EAAE,UAAU,IAExB9a,EAAA8a,CAAY,EAAE,gBAAgB,MAC9B9a,EAAA8a,CAAY,EAAE,gBAAgB;AAAA,IAAA,GAGhCO,IAAuB,MAAM;AAC3B,MAAArb,EAAA8a,CAAY,EAAE,SAAS;AAAA,IAAA,GAGzBtG,IAAiB,CAACC,GAAoB/R,MAAiC;;AAC3E,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,YAAR,gBAAAjD,EAAiB,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa;AAGpE,WAAAnS,GAAA4Y,GAAmB,CAACjK,MAAiB;AACzC,MAAIA,MACGjR,EAAM8a,CAAY,EAAE,gBACjB9a,EAAA8a,CAAY,EAAE,cAAc,QAE/B9a,EAAM8a,CAAY,EAAE,gBACjB9a,EAAA8a,CAAY,EAAE,cAAc,SAE/B9a,EAAM8a,CAAY,EAAE,iBACjB9a,EAAA8a,CAAY,EAAE,eAAe,IAEhC9a,EAAM8a,CAAY,EAAE,qBACjB9a,EAAA8a,CAAY,EAAE,mBAAmB;AAAA,IAE3C,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ,GAWM;AAAA,MACL,cAAAA;AAAA,MACA,YAAAH;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAha;AAAA,MACA,eAAAua;AAAA,MACA,kBAAAN;AAAA,MACA,cAAAG;AAAA,MACA,sBAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,gBAAAtP;AAAA,MACA,gBAAA4I;AAAA,MACA,mBAAAvH;AAAA,MACA,UAAAP;AAAA,MACA,kBAAA0O;AAAA,MACA,sBAAAC;AAAA,MACA,WAzBgB,CAAC3a,MAAsB;AACjC,QAAAV,EAAA8a,CAAY,EAAE,mBAAmBpa,GACnCA,MAAc,IACVV,EAAA8a,CAAY,EAAE,eAAe,IAC1Bpa,MAAc,MACjBV,EAAA8a,CAAY,EAAE,eAAe;AAAA,MACrC;AAAA,IAmBA;AAAA,EAEJ;AACF,CAAC;ACjRoB,MAAAnY,KAAA,EAAA,OAAA;;8LApGnBE,EAuIM,gBAAA;AApIF,SAAAC,EAAkB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EACHkL,GAAa;AAAA,MAAA,OAAA;AAAA,MAC5B,OAAArE,EAAW,aAAS;AAAA,MACnB,kBAAYG,EAAA,CAAA,MAAaA,EAAS,CAAA,IAAI,CAAYC,MAAAJ,EAAA,aAAA,eAAAI;AAAA,MAAA,aAAA;AAAA,MAGrD,UAQE,CAAA,CAAAJ,EAAA,aAAA,aAAAA,EAAA;AAAA,IAAA,GAPA,MAAM,GAAY,CAAA,SAAA,UAAA,CAAA;AAAA,IAAA7G,EACHwH,GAAa;AAAA,MAAA,OAAA;AAAA,MAC3B,OAAOX,EAAE,aAAU;AAAA,MACpB,kBAAQG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,eAAAI;AAAA,MACR,SAAAJ,EAAA;AAAA,MACA,UAAA;AAAA,MACC,SAAM,aAAE,QAAA;AAAA,MAAA,aAAA;AAAA,MAGX,UAMEA,EAAA;AAAA,IAAA,GALA,MAAM,GAAY,CAAA,SAAA,WAAA,UAAA,CAAA;AAAA,IAAA7G,EACHwH,GAAa;AAAA,MAAA,OAAA;AAAA,MAC3B,OAAOX,EAAE,aAAA;AAAA,MACV,kBAAyBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,WAAAI;AAAA,MACxB,SAAMJ,EAAE;AAAA,MAAA,OAAA,EAAA,aAAA,QAAA;AAAA,MAGK,UAAAA,EAAA;AAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SACd,WAaE,UAAA,CAAA;AAAA,IAAAA,EAAA,aAAA,aAAA,eAAAH,EAZkB,GAAAC,EAAAa,GAAA;AAAA,MACV,KAAK;AAAA,MAAA,OAAA;AAAA,MACZ,OAAOX,EAAE,aAAA;AAAA,MACT,kBAAYG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,KAAAI;AAAA,MAAA,SAAAJ,EAAA;AAAA;QAGZ,OAAA;AAAA,QACD,OAAA;AAAA,MAAA;AAAA,MAEA,eAAA;AAAA,MACA,iBAAYA,EAAO;AAAA,MAClB,SAAM,aAAE,QAAA;AAAA,MAAA,aAAA;AAAA,MAIX,UAAAA,EAAA;AAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SAAA,WAAA,iBAAA,UAAA,CAAA,MAAAH,KACoBC,EAAAuE,GAAA;AAAA,MAClB,KAAyB;AAAA,MACjB,OAAO;AAAA,MAAA,OAAA,EAAA,aAAA,QAAA;AAAA,MACf,OAAArE,EAAW,aAAS;AAAA,MAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,gBAAAI;AAAA,MAIR,aAAA;AAAA,IACd,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,IAAAJ,EAAA,wBAAAH,KACoBC,EAAAa,GAAA;AAAA,MACV,KAAK;AAAA,MAAA,OAAA;AAAA,MACZ,OAAOX,EAAE,aAAA;AAAA,MACV,kBAAYG,EAAS,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,gBAAAI;AAAA,MAAA,SAAAJ,EAAA;AAAA;IAIzB,GAAA,MAKE,4BAJAa,EAAkB,IAAA,EAAA;AAAA,IAAA1H,EACHwH,GAAmB;AAAA,MAAA,OAAA;AAAA,MACjC,OAAOX,EAAE,aAAA;AAAA,MACV,kBAAYG,EAAQ,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,SAAAI;AAAA,MAAA,SAAAJ,EAAA;AAAA,MAGN,aAAA;AAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SACd,SA2DY,CAAA;AAAA,IAAAA,EAAA,qBAAAH,KA3D8BC,EAAAgN,GAAA;AAAA,MAAA,KAAA;AAAA,MAAE,SAAQ9M,EAAA;AAAA,MAAQ,oBAAUG,EAAa,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,iBAAAI;AAAA,MAAA,SAAA;AAAA,MACtE,WAAO;AAAA,IAAA,GAAA;AAAA,eAEdH,EAkDS,MAAA;AAAA,QAAAK,EAlDgB,OAAEX,IAAY;AAAA,UAAAxG,EAA4B+G,GAAS;AAAA,YAAA,kBAAAF,EAAA,aAAA;AAAA;;qBAC1DC,EAAM,MAAA;AAAA,eAAQJ,EAAA,GAAAC,EAAAO,GAAA;AAAA,gBAAA,KAAA;AAAA;;gBAErB,SAAAJ,EAAC,MAAY;AAAA,kBACX9G,EAAA+T,GAAA;AAAA,oBACC,OAAO;AAAA,oBAAA,KAAA;AAAA,oBACf,OAAAlN,EAAA,aAAA;AAAA,oBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,eAAAI;AAAA,oBAEW,OAAA,EAAA,aAAW,SAIT,MAAA,OAAA;AAAA,kBAAA,GAAA;AAAA,iCAHcH,EAAY,MAAA;AAAA,sBAAA9G,EAAAwH,GAAA;AAAA,wBAAc,OAAmBX,EAAA,aAAA;AAAA,wBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,cAAAI;AAAA,wBACpB,OAAA,EAAA,OAAA,OAAA;AAAA,sBAAA,GAAA;AAAA,wBAAlB,SAAAH,EAAA,MAAA;AAAA,0BAAA9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAC9B,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;yBAGf,GAAA,CAAA,OAAA,CAAA;AAAA,oBAAA,CAAA;AAAA,oBACM,YAAAA,EAAA,MAAA;AAAA,sBAAA9G,EAAAwH,GAAA;AAAA,wBAA0B,OAAmBX,EAAA,aAAA;AAAA,wBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,cAAAI;AAAA,wBACnB,OAAA,EAAA,OAAA,OAAA;AAAA,sBAAA,GAAA;AAAA,wBAAlB,SAAAH,EAAA,MAAA;AAAA,0BAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAC/B,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAChC,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAA+B9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAC/B,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAA8B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAC9B,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAA+B9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;4BAC/B,GAAA;AAAA,0BAAA,CAAA;AAAA,0BAAiC9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,4BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;;;;;;gBAMJ,GAAA;AAAA,cAAA,CAAA;AAAA,gBAAzB,wBAAiBJ,KAAAC,EAAAO,GAAA;AAAA,gBAAA,KAAA;AAAA;;yBAEzBJ,EAMW,MAAA;AAAA,kBAAAK,EALM,OAAaU,IAAA;AAAA,oBAAA7H,EAAAwH,GAAA;AAAA,sBAC5B,OAAUX,EAAA,aAAA;AAAA,sBACV,kBAAwCG,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,eAAAI;AAAA,sBAAA,YAAA;AAAA,sBAEkB,OAAA,EAAA,OAAA,SAAA,gBAAA,OAAA;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,aAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;sBAE1C,GAAA;AAAA,oBAAA,GAAkB,IAAK,OAAE,CAAA;AAAA,oBAAA9G,EAAAwH,GAAA;AAAA,sBAA0B,OAAAX,EAAA,aAAA;AAAA,sBAAA,kBAAAG,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,cAAAI;AAAA,sBACA,OAAA,EAAA,gBAAA,OAAA;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC7B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAChC,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA+B9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC/B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA8B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC9B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA+B9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAC/B,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAAiC9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;sBAErC,GAAA;AAAA,oBAAA,GAAkB,IAAK,OAAE,CAAA;AAAA,oBAAA9G,EAAAwH,GAAA;AAAA;wCACvBR,EAAkD,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,cAAAI;AAAA,oBAAA,GAAA;AAAA,sBAAlB,SAAAH,EAAA,MAAA;AAAA,wBAAA9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;0BAChC,GAAA;AAAA,wBAAA,CAAA;AAAA,wBAA8B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,0BAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;;;;;;;;;;;eAOhCA,EAAC,MAAA;AAAA,QAAsBK,EAAA,OAAA;AAAA,UAAA,OAAA;AAAA,UAC/B,SAAyBH,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAC,MAAA;AAAA,YAAAJ,EAAA,iBAAA;AAAA,UAAA;AAAA,QAAA,GAAA;AAAA;;;;OAOb,GAAA,CAAA,SAAA,CAAK,OAHvB,IAIE,EAAA;AAAA,KAAAA,EAAA,eAAA,SAAA,CAAAA,EAAA,aAAA,YAAAA,EAAA,eAAAH,EAAA,GAHmBC,EAAA0N,GAAA;AAAA,MAClB,KAAA;AAAA,MAAA,OAAA;AAAA;;;;uFCnIM6K,KAAmB,CAACva,IAA+B,OACvDA,EAAK,oBAAoB,MAASA,EAAK,mBAAmB,QAAQ,CAACA,EAAK,WAGpEwa,KAAwB,CAAC7F,OAC5BA,KAAgB,CAAA,GAAI,IAAI,CAAC3U,OAAU;AAAA,EACzC,GAAGA;AAAA,EACH,iBAAiBua,GAAiBva,CAAI;AACtC,EAAA,GAGSya,KAA8B,CACzCC,GACAC,GACAhgB,MAC6B;AAC7B,QAAMsF,IAAiC,CAAA;AACvC,MAAI,CAAC,MAAM,QAAQya,CAAa,KAAK,CAACA,EAAc;AAC3C,WAAAza;AAET,aAAWiQ,KAAOwK;AAChB,IAAAza,EAAK,KAAK;AAAA,MACR,GAAGiQ;AAAA,MACH,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,eAAevV,MAAW,iBAAiBuV,EAAI,eAAe;AAAA,MAC9D,eAAe;AAAA,MACf,QAAQA,EAAI,eAAeA,EAAI,YAAY,YAAA,KAAiB;AAAA,MAC5D,cAAcA,EAAI;AAAA,MAClB,cAAcA,EAAI;AAAA,MAClB,OAAOyK,EAAU;AAAA,MACjB,WAAWA,EAAU;AAAA,MACrB,UAAU5T,GAAO;AAAA,MACjB,UAAUpM,MAAW;AAAA,MACrB,iBAAiB;AAAA,IAAA,CAClB;AAEI,SAAAsF;AACT,GAEa2a,KAA2B,CACtCzb,GACA0b,MAC6B;AAC7B,QAAMC,IAAQ,CAAC,gBAAgB,iBAAiB,cAAc,mBAAmB,GAC3EC,IAA4B,CAAA,GAC5BC,wBAAkB;AACxB,aAAWhS,KAAQ8R;AACjB,eAAW9a,MAAQb,KAAA,gBAAAA,EAAgB6J,OAAS,CAAA,GAAI;AACxC,YAAA0R,IAAuB,MAAM,QAAQ1a,KAAA,gBAAAA,EAAM,aAAa,IAAIA,EAAK,gBAAgB;AACvF,UAAI0a,EAAc,QAAQ;AAClB,cAAAO,IAAuBP,EAAc,IAAI,CAACQ,MAAeA,EAAM,IAAI,EAAE,OAAO,OAAO;AACzF,QAAAH,EAAc,KAAK,CAAC,GAAG,IAAI,IAAIE,CAAU,CAAC,CAAC;AAC3C,mBAAWC,KAASR;AAClB,UAAIQ,EAAM,QAAQ,CAACF,EAAY,IAAIE,EAAM,IAAI,KAC/BF,EAAA,IAAIE,EAAM,MAAMA,CAAK;AAAA;AAAA;AAMvC,MAAA,CAACH,EAAc;AACjB,WAAO;AAEL,MAAAI,IAAcJ,EAAc,CAAC;AACjC,aAAWK,KAASL;AAClB,IAAAI,IAAcA,EAAY,OAAO,CAAAta,MAAQua,EAAM,SAASva,CAAI,CAAC;AAE/D,QAAMwa,KAAmBR,KAAqB,CAAC,GAAG,OAAON,EAAgB;AAClE,SAAAY,EAAY,IAAI,CAACta,MAAS;AACzB,UAAAlG,IAASqgB,EAAY,IAAIna,CAAI,GAC7Bya,IAAQD,EAAgB,KAAK,CAAKnb,MAAAA,EAAE,iBAAiBW,CAAI;AAC/D,WAAIya,KAGG;AAAA,MACL,GAAG3gB;AAAA,MACH,cAAckG;AAAA,MACd,cAAclG,KAAA,gBAAAA,EAAQ;AAAA,MACtB,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,gBAAeA,KAAA,gBAAAA,EAAQ,iBAAgB;AAAA,MACvC,eAAe;AAAA,MACf,QAAQA,KAAA,QAAAA,EAAQ,cAAcA,EAAO,YAAY,gBAAgB;AAAA,MACjE,UAAU,UAAUkG;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,UAAU;AAAA,IAAA;AAAA,EACZ,CACD;AACH,GChEA0a,KAAerd,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,cAAAsd;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOtgB,GAAO;AACN,UAAAiE,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDR,IAAuBF,EAAOG,EAAsB,GACpDpE,IAASiE,EAAOoS,EAAW,GAC3B2D,IAAepV,EAAS,MAAM;;AAClC,YAAMU,MAAOvB,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,CAAA;AAC/C,aAAAxD,EAAM,SAAS,cACV+E,EAAK,OAAO,CAACD,MAAcA,EAAK,cAAc9E,EAAM,YAAY,IAElE0f,GAAyB3b,EAAME,CAAa,GAAGc,CAAI;AAAA,IAAA,CAC3D,GAEKwb,IAAe,CAACxb,MAAkC;;AACtD,YAAMyb,IAAU3a,KAAUrC,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,CAAA,CAAE;AAC9D,UAAAid;AACA,UAAAzgB,EAAM,SAAS;AACJ,QAAAygB,IAAAD,EAAQ,OAAO,CAAQ1b,MAAA,CAACua,GAAiBva,CAAI,CAAC,EAAE,OAAOC,CAAI;AAAA,WACnE;AACC,cAAA2b,IAAc,IAAI,IAAI3b,EAAK,IAAI,CAAQD,MAAA,CAACA,EAAK,UAAUA,CAAI,CAAC,CAAC;AACtD,QAAA2b,IAAAD,EAAQ,IAAI,CAAQ1b,MAAA4b,EAAY,IAAI5b,EAAK,QAAQ,KAAKA,CAAI;AACvE,mBAAWA,KAAQC;AACb,UAACyb,EAAQ,KAAK,CAAAG,MAAWA,EAAQ,aAAa7b,EAAK,QAAQ,KAC7D2b,EAAW,KAAK3b,CAAI;AAAA;AAIpB,YAAA8b,IAAiBtB,GAAsBmB,CAAU;AACnC,MAAAtc,EAAA;AAAA,QAClB,GAAGJ,EAAME,CAAa;AAAA,QACtB,oBAAoB4c,GAAmBD,GAAgBhd,CAAoB;AAAA,QAC3E,cAAcgd;AAAA,MAAA,CACf;AAAA,IAAA;AAGH,WAAAva,GAAM,MACArG,EAAM,SAAS,WACVyZ,EAAa,MAAM,IAAI,CAACzU,MAAWA,EAAE,YAAY,EAAE,KAAK,GAAG,IAE7D,IACN,MAAM;AACH,MAAAhF,EAAM,SAAS,YACJugB,EAAA1a,GAAU4T,EAAa,KAAK,CAAC;AAAA,IAC5C,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ,GA4EM;AAAA,MACL,cAAAA;AAAA,MACA,eA5EoB,MAAM;AAC1B,cAAM1U,IAAOc,GAAU9B,EAAM0V,CAAY,CAAC,GACpCqH,IAAkC;AAAA,UACtC,UAAUjV,GAAO;AAAA,UACjB,cAAc;AAAA,UACd,UAAU;AAAA,UACV,IAAI;AAAA,UACJ,eAAe;AAAA,UACf,QAAQ;AAAA,UACR,iBAAiB7L,EAAM,SAAS;AAAA,QAAA;AAE9B,QAAAA,EAAM,SAAS,gBACjB8gB,EAAQ,QAAQ9gB,EAAM,gBACtB8gB,EAAQ,YAAY9gB,EAAM,cAClB8gB,EAAA,WAAW/c,EAAMtE,CAAM,MAAM,iBAEvCsF,EAAK,KAAK+b,CAAO,GACjBP,EAAaxb,CAAI;AAAA,MAAA;AAAA,MA4DjB,gBAzDqB,MAAM;;AACrB,cAAA;AAAA,UACJ,cAAAyU,IAAe,CAAC;AAAA,UAChB,eAAAE,IAAgB,CAAC;AAAA,UACjB,YAAAC,IAAa,CAAC;AAAA,UACd,mBAAAoH,IAAoB,CAAC;AAAA,QAAA,IACnBhd,EAAME,CAAa,KAAK,IACtBc,IAAOc,GAAU9B,EAAM0V,CAAY,CAAC,GACpCuH,wBAAuB,OACvBC,IAAgB,CAAA,GAChBC,IAAY1H,EAAa,OAAOE,CAAa,EAAE,OAAOC,CAAU,EAAE,OAAOoH,CAAiB;AAChG,mBAAWjc,KAAQoc;AACb,eAAA1d,IAAAsB,EAAK,kBAAL,QAAAtB,EAAoB;AACX,uBAAAwc,KAASlb,EAAK;AACvB,cAAKkc,EAAiB,IAAIhB,EAAM,IAAI,MACpBiB,EAAA,KAAKjB,EAAM,IAAI,GACZgB,EAAA,IAAIhB,EAAM,MAAMjb,EAAK,KAAK,CAACC,MAAWA,EAAE,iBAAiBgb,EAAM,IAAI,CAAC;AAK7F,mBAAWlb,KAAQmc,GAAe;AAC1B,gBAAA1b,IAAOyb,EAAiB,IAAIlc,CAAI;AACtC,cAAIS,GAAM;AACF,kBAAA4b,IAAapc,EAAK,OAAO,CAACC,MAAWA,EAAE,iBAAiBF,KAAQS,EAAK,cAAcP,EAAE,SAAS,GAC9Foc,IAAc,CAAC,SAAS,aAAa,UAAU;AACrD,uBAAWC,KAAMF;AACf,yBAAWvhB,KAAO2F;AAChB,gBAAK6b,EAAY,SAASxhB,CAAG,MACxByhB,EAAAzhB,CAAG,IAAI2F,EAAK3F,CAAG;AAAA;AAAA;AAM5B,QAAA2gB,EAAaxb,CAAI;AAAA,MAAA;AAAA,MAuBjB,cApBmB,CAACQ,GAA8BgB,MAAkB;AACpE,YAAIA,KAAS,GAAG;AACd,gBAAMxB,IAAOc,GAAU9B,EAAM0V,CAAY,CAAC;AAC1C,UAAA1U,EAAKwB,CAAK,IAAIhB,GACdgb,EAAaxb,CAAI;AAAA;AAAA,MACnB;AAAA,MAgBA,cAbmB,CAACwB,MAAkB;AACtC,YAAIA,KAAS,GAAG;AACd,gBAAMxB,IAAOc,GAAU9B,EAAM0V,CAAY,CAAC;AACrC,UAAA1U,EAAA,OAAOwB,GAAO,CAAC,GACpBga,EAAaxb,CAAI;AAAA;AAAA,MACnB;AAAA,IAQA;AAAA,EAEJ;AACF,CAAC;AC/KG,MAAAkQ,KAAA,CAAA9I,OAAA+I,GAEM,iBAFK,GAAuB/I,IAAAA,KAAAgJ,MAAAhJ;oBAIzB,OAAwB,EAAA,OAAA,wBAAA,CAAA;;;;SAAnCtF,EAWM,GAAAW,EAAAC,IAAA,MAAA;AAAA,IAAAf;AAAAA,aATFC,IAOE;AAAA,OAAAE,EARkD,EAAK,GAAQW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAlC,GAAAyB,OAExDM,EAAI,GAAAC,EAAAwa,GAAA;AAAA,QACV,KAAKxc,EAAE;AAAA,QACP,MAAAA;AAAA,QACA,OAAe,OAAAyB,CAAA;AAAA,QACf,eAAQ;AAAA,QACR,iBAAQS,EAAY,SAAA;AAAA,QAAA,UAAAA,EAAA;AAAA;;;;;uFCiB7Bua,KAAeve,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,QACVE;AAAAA,IACA,eAAAse;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOxhB,GAAO,EAAE,QAAAsD,KAAU;AAClB,UAAA0C,IAAUxB,EAAI,EAAK,GACnBP,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDR,IAAuBF,EAAOG,EAAsB,GACpDpE,IAASiE,EAAOoS,EAAW,GAE3B2L,IAAyB,MAAM;;AACnC,YAAM,EAAE,WAAAC,GAAW,OAAAhc,GAAO,eAAA8Z,EAAkB,IAAAxf,EAAM,QAAQ;AACtD,UAAA,CAAC0hB,KAAa,CAAC,MAAM,QAAQlC,CAAa,KAAK,CAACA,EAAc;AAChE;AAEF,YAAMmC,MAAcne,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,CAAA;AAC1D,UAAIme,EAAY,KAAK,CAAC7c,MAAcA,EAAK,cAAc4c,CAAS;AAC9D;AAEI,YAAAE,IAAerC,GAA4BC,GAAe,EAAE,OAAA9Z,GAAO,WAAAgc,KAAa3d,EAAMtE,CAAM,CAAC;AAC/F,UAAA,CAACmiB,EAAa;AAChB;AAEF,YAAMnI,IAAe6F,GAAsBzZ,GAAU8b,CAAW,CAAC;AACpD,MAAAlI,EAAA,QAAQ,GAAGmI,CAAY,GAChBzd,EAAA;AAAA,QAClB,cAAAsV;AAAA,QACA,oBAAoBoH,GAAmBpH,GAAc7V,CAAoB;AAAA,MAAA,CAC1E;AAAA,IAAA,GAGGqC,IAAY,MAAM;AACtB,MAAAD,EAAQ,QAAQ;AAAA,IAAA,GAEZG,IAAY,MAAM;AACtB,MAAAH,EAAQ,QAAQ;AAAA,IAAA,GAEZI,IAAW,MAAM;AACX,MAAAD;IAAA;AAGN,WAAAE,GAAAL,GAAS,CAACjG,MAAmB;AACjC,MAAIA,KACqB0hB,KAEpB,OAAe,mBACjB,OAAe,gBAAgB,CAAC1hB,CAAK;AAAA,IACxC,GACC;AAAA,MACD,OAAO;AAAA,IAAA,CACR,GAEKsG,GAAA,MAAMrG,EAAM,MAAM,MAAM;AAC5B,MAAIgG,EAAQ,SACayb;IACzB,CACD,GAEMne,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GAEM;AAAA,MACL,SAAAD;AAAA,MACA,UAAAI;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;qCC9GCQ,EAkBU,SAAA;AAhBP,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IACjB,OAAgB,YAAAvD,IAAAwD,EAAA,SAAA,gBAAAxD,EAAA,UAAA;AAAA,IAChB,SAAMwD,EAAK;AAAA,IACV,oBAAW;AAAA,IAAA,OAAA;AAAA;;MAIX,UAAA;AAAA,MACA,SAAQ;AAAA,IACR;AAAA,IAAA,QAAA;AAAA;;IAGK,SAAAC,EAAC,MAAW;;AAAA;AAAA,QAAA9G,EACf0hB,GAA4B;AAAA,UAC5B,MAAA;AAAA,UAAA,qBAAAre,IAAAwD,EAAA,SAAA,gBAAAxD,EAAA,UAAA;AAAA;;;;;;;qDCqdPse,KAAe9e,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,OACVkF;AAAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,kBAAA6Z;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAC;AAAA,IAAA,iBACAxf;AAAAA,IAAA,gBACA3B;AAAAA,IAAA,cACAH;AAAAA,IAAA,oBACAS;AAAAA,IACA,iBAAA8gB;AAAA,IAAA,cACAlgB;AAAAA,IAAA,OACAmgB;AAAAA,IAAA,WACAha;AAAAA,IAAA,QACAD;AAAAA,IAAA,WACA2E;AAAAA,IAAA,OACAC;AAAAA,IAAA,UACAsV;AAAAA,IAAA,WACArV;AAAAA,IAAA,cACAsV;AAAAA,IAAA,SACAlf;AAAAA,IAAA,UACA6J;AAAAA,IACA,WAAAhK;AAAA,IACA,YAAAsf;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOziB,GAAO;AACZ,UAAMkO,IAAa;AAAA,MACjB,EAAE,OAAO,KAAK,OAAO,OAAO;AAAA,MAC5B,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,MAChC,EAAE,OAAO,OAAO,OAAO,aAAa;AAAA,IAAA,GAEhCwU,IAAc;AAAA,MAClB,EAAE,OAAO,MAAM,OAAO,MAAM;AAAA,MAC5B,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,MAC7B,EAAE,OAAO,KAAK,OAAO,GAAG;AAAA,IAAA,GAEpBjN,IAAoB/R,EAAOgS,EAAkB,GAC7CzR,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDR,IAAuBF,EAAOG,EAAsB,GACpD8e,IAAU,CAAC,gBAAgB,iBAAiB,cAAc,mBAAmB,GAC7EC,IAAU,CAAC,sBAAsB,cAAc,iBAAiB,mBAAmB,eAAe,GAClGC,IAAc;AAAA,MAClB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,IAAI;AAAA,IAAA,GAEApjB,IAASiE,EAAOoS,EAAW,GAC3BgN,IAAkBte,KAMlBue,IAAqB1e,EAAS;AAAA,MAClC,MAAO;;AACE,iBAAAb,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,uBAAsB;AAAA,MACrD;AAAA,MACA,IAAKwR,GAAc;AACG,QAAA7Q,EAAA;AAAA,UAClB,oBAAoB6Q;AAAA,QAAA,CACrB;AAAA,MACH;AAAA,IAAA,CACD,GAEKgO,IAAa,CAACzd,IAAY,OAAO;;AAC/B,YAAA,EAAE,MAAAuI,EAAS,IAAA9N;AACb,UAAA+D,EAAMtE,CAAM,MAAM;AAEb,eAAA;AAEL,MAAAsE,EAAMtE,CAAM,MAAM,kBAEpB0E,EAAoB,EAAE,cAAcoB,EAAK,SAAU,CAAA;AAErD,UAAIL,KAAS;AAiBb,UAhBIK,EAAK,UAAU,YAERL,KAAA,KACJ,CAAC,KAAK,GAAG,EAAE,SAASK,EAAK,WAAW,KAAKod,EAAQ,SAAS7U,CAAI,KAAOvI,EAAK,gBAAgB,OAAOqd,EAAQ,SAAS9U,CAAI,OAChH5I,KAAA,MAGT,CAAC,OAAO,cAAc,EAAE,SAASK,EAAK,KAAK,IACzCod,EAAQ,SAAS7U,CAAI,MACd5I,KAAA,MAEF,CAAC,OAAO,cAAc,EAAE,SAASK,EAAK,KAAK,KAChDqd,EAAQ,SAAS9U,CAAI,MACd5I,KAAA,KAGT4I,MAAS,iBAAiB;AAEtB,cAAA/I,OAAOvB,KAAAO,EAAME,CAAa,EAAE6J,CAAI,MAAzB,gBAAAtK,GAA4B,YAAW;AAChD,SAAAuB,MAAA,gBAAAA,GAAM,YAAW,MACVG,KAAA;AAAA;AAGN,aAAAA;AAAA,IAAA,GAEH+d,IAAuB5e,EAAS,MACpCuZ;;AAAAA,aAAAA,IAAkBpa,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,MAAM,CAAC,YAAY,CAAC,KAAKxD,EAAM,SAAS;AAAA,KAAY,GAC5FkjB,IAAqB,CAACC,IAAmB,SAAS;;AAClD,UAAA;AACI,cAAA5d,KAAO,KAAK,MAAM4d,CAAQ;AAC5B,YAAA,CAACH,EAAWzd,EAAI;AAClB;AAEI,cAAAR,OAAOvB,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAkC,YAAW;AAE1D,SACExD,EAAM,SAAS,gBACfA,EAAM,SAAS,0BACdA,EAAM,SAAS,wBAAwB,CAAC4d,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,QAAQ,aAAa,SAAS,CAAC,KAC1H1R,EAAMkf,CAAoB,KAC1BrF,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,YAAY,CAAC,MAE1D1Q,GAAA,QAAQ,CAACD,OAAiC;AAC7C,UAAAA,GAAK,OAAO;AAAA,QAAA,CACb,GAEHse,EAAWre,IAAMQ,EAAI,GAErBA,GAAK,YAAYsG,MACjB9G,GAAK,KAAKQ,EAAI;AACR,cAAA,EAAE,MAAAuI,GAAS,IAAA9N,GACXqjB,KAAoC,CAAA;AACtC,YAAA,CAAC,OAAO,gBAAgB,OAAO,EAAE,SAAS9d,GAAK,KAAK,GAAG;AACzD,cAAIyU,OAAUpU,KAAA7B,EAAME,CAAa,MAAnB,gBAAA2B,GAAsB,iBAAgB,CAAA,GAChD0d,KAAW,eAAe,QAAQ,oBAAoB;AAI1D,cAHI/d,GAAK,UAAU,WAAW,CAACod,EAAQ,SAAS7U,EAAI,MACvCwV,KAAA,OAETA,IAAU;AACN,kBAAA7J,KAAe,KAAK,MAAM6J,EAAQ;AACxC,gBAAI7J,MAAA,QAAAA,GAAc,QAAQ;AACxB,oBAAM8J,KAAkBhE,GAA4B9F,IAAclU,IAAMxB,EAAMtE,CAAM,CAAC;AACrF,cAAI8jB,MAAA,QAAAA,GAAiB,UACXvJ,GAAA,QAAQ,GAAGuJ,EAAe;AAAA;AAAA;AAIxC,UAAAvJ,KAAUsF,GAAsBtF,EAAO,GACvCqJ,GAAU,eAAerJ,IACfqJ,GAAA,qBAAqBxC,GAAmB7G,IAASpW,CAAoB;AAAA;AAE7D,QAAAO,EAAA;AAAA,UAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,UACd,GAAGse;AAAA,QAAA,CACJ,GACc,eAAA,QAAQ,uBAAuB,EAAE,GACjC,eAAA,QAAQ,sBAAsB,EAAE;AAAA,eACxC7d;AACP,gBAAQ,MAAMA,EAAC;AAAA,MACjB;AAAA,IAAA,GAEIge,IAAqB,CAACC,IAAmB,SAAS;;AAClD,UAAA;AACF,cAAM,EAAE,UAAAC,IAAU,MAAA5V,IAAM,OAAAvH,GAAU,IAAA,KAAK,MAAMkd,CAAQ;AAIrD,YAHI,CAACT,EAAWU,EAAQ,KAGpB5V,OAAS9N,EAAM;AAAM;AAEnB,cAAA2hB,OAAcne,IAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,EAAkC,YAAW;AACjE,QAAA4f,EAAWzB,IAAa+B,EAAQ,GAChC/B,GAAY,KAAK+B,EAAQ;AAEnB,cAAAC,KAAe5f,EAAME,CAAa,EAAE6J,EAAI,EAAE,WAAW;AAC9C,QAAA6V,GAAA,OAAOpd,IAAO,CAAC,GAERpC,EAAA;AAAA,UAClB,CAACnE,EAAM,IAAI,GAAG2hB;AAAA,UACd,CAAC7T,EAAI,GAAG6V;AAAA,QAAA,CACT;AAAA,eACMne;AACP,gBAAQ,MAAMA,EAAC;AAAA,MACjB;AAAA,IAAA;AAEO,aAAA4d,EAAYre,GAAW6e,GAAc;AAC5C,YAAMC,KAAW,CAAA;AAMb,UALC9e,EAAA,QAAQ,CAAC+e,OAAmB;AAC/B,QAAIA,GAAU,MAAM,SAASF,EAAQ,KAAK,KAC/BC,GAAA,KAAKC,GAAU,MAAM,MAAMF,EAAQ,KAAK,EAAE,CAAC,CAAC;AAAA,MACvD,CACD,GACGC,GAAS,UAAU;AACrB,iBAASrkB,KAAI,GAAGA,MAAKqkB,GAAS,QAAQrkB;AACpC,cAAI,CAACqkB,GAAS,SAASrkB,KAAI,EAAE,GAAG;AACtB,YAAAokB,EAAA,QAAQA,EAAQ,QAAQpkB;AAChC;AAAA;AAAA;AAAA,IAIR;AACM,UAAAukB,IAAmB,CAAC9Z,GAAO1D,MAAkB;;AAC3C,YAAAxG,MAASyD,KAAAyG,EAAM,WAAN,gBAAAzG,GAAsB,SAC/BuB,OAAOa,KAAA7B,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAA4F,GAAkC,YAAW;AAE1D,OACE5F,EAAM,SAAS,gBACdA,EAAM,SAAS,wBAAwB,CAAC4d,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,QAAQ,WAAW,CAAC,KAC/G1R,EAAMkf,CAAoB,KAC1BrF,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,YAAY,CAAC,MAE1D1Q,GAAA,QAAQ,CAACD,OAAiC;AAC7C,QAAAA,GAAK,OAAO;AAAA,MAAA,CACb,GAEEC,GAAAwB,CAAK,EAAE,OAAOxG,IACCoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGif,IAAY,CAACzd,MAAkB;;AAC7B,YAAAxB,MAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,EAAA,OAAOwB,GAAO,CAAC,GACApC,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGkf,IAAgB,MAAM;AACX,qBAAA,QAAQ,uBAAuB,EAAE;AAAA,IAAA,GAE5CC,IAAgB,CAAC1e,MAAM;AACrB,YAAA2e,IAAe,eAAe,QAAQ,qBAAqB,GAC3DC,KAAe,eAAe,QAAQ,qBAAqB;AACjE,MAAID,IACFjB,EAAmBiB,CAAY,IACtBC,MACTZ,EAAmBY,EAAY;AAAA,IACjC,GAEIC,IAAiB,CAACpa,MAAe;;AACrC,YAAM,EAAE,UAAAqa,GAAU,UAAAC,IAAU,MAAAC,IAAM,IAAAC,OAAOxa,GACnCya,KAAWF,GAAK,IAChBG,KAASF,GAAG;AACd,UAAAH,KAAY,KAAKC,MAAY;AAC/B,YAAIG,OAAaC,IAAQ;AACjB,gBAAA5f,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW,IACpDohB,KAAW7f,GAAK,OAAOwf,IAAU,CAAC,EAAE,CAAC;AAC3C,UAAIK,OACG7f,GAAA,OAAOuf,GAAU,GAAGM,EAAQ,GAEbzgB,EAAA;AAAA,YAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,UAAA,CACf;AAAA,mBAEM/E,EAAM,SAAS2kB,IAAQ;AAC1B,gBAAA5f,OAAOa,KAAA7B,EAAME,CAAa,EAAE0gB,EAAM,MAA3B,gBAAA/e,GAA8B,YAAW;AACtD,cAAIb,MAAA,QAAAA,GAAM,QAAQ;AACV,kBAAA6f,KAAW7f,GAAK,OAAOA,GAAK,SAAS,GAAG,CAAC,EAAE,CAAC;AAClD,YAAI6f,OACG7f,GAAA,OAAOuf,GAAU,GAAGM,EAAQ,GAEbzgB,EAAA;AAAA,cAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,YAAA,CACf;AAAA;AAAA;AAAA;AAAA,IAIT,GAEI8f,IAAkB,CAAC5a,GAAY6a,MAAwC;AAC3E,YAAMve,KAAQ0D,EAAM,UACd8a,KAAWD,EAAUve,EAAK;AAChC,MAAIwe,MACa,eAAA,QAAQ,uBAAuB,KAAK,UAAU;AAAA,QAC3D,UAAUA;AAAA,QACV,MAAM/kB,EAAM;AAAA,QACZ,OAAAuG;AAAA,MACD,CAAA,CAAC;AAAA,IACJ,GAEIye,IAAe3gB,EAAS,MAAMN,EAAME,CAAa,EAAEjE,EAAM,IAAI,KAAK,CAAA,CAAE,GACpEilB,IAAgBzgB,EAAe,CAAA,CAAE;AACvC,QAAI0gB,IAAgB;AACpB,IAAA7e;AAAA,MACE,MAAMtC,EAAMihB,CAAY,EAAE;AAAA,MAC1B,CAAChc,MAAW;AACV,QAAAic,EAAc,QAAQ,IAAI,MAAMjc,CAAM,EAAE,KAAK,EAAK;AAAA,MACpD;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IAAA;AAEI,UAAAyH,KAAW,CAAClK,MAAkB;;AAC5B,YAAAxB,MAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACtD,WAAAoC,KAAAb,EAAKwB,CAAK,MAAV,QAAAX,GAAa,WAAW;AAE1B,cAAMoU,OAAUvL,KAAA1K,EAAME,CAAa,MAAnB,gBAAAwK,GAAsB,iBAAgB,CAAA;AACtD,iBAASjP,KAAIwa,GAAQ,SAAS,GAAGxa,MAAK,GAAGA;AACvC,UAAIwa,GAAQxa,EAAC,EAAE,cAAcuF,EAAKwB,CAAK,EAAE,aAC/ByT,GAAA,OAAOxa,IAAG,CAAC;AAGjB,cAAAia,KAAe6F,GAAsBtF,EAAO;AAC9B,QAAA7V,EAAA;AAAA,UAClB,oBAAoB0c,GAAmBpH,IAAc7V,CAAoB;AAAA,UACzE,cAAA6V;AAAA,QAAA,CACD;AAAA;AAEE,MAAA1U,EAAA,OAAOwB,GAAO,CAAC,GACApC,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGogB,IAAS,CAAC5e,MAAkB;AAClB,MAAA0e,EAAA,MAAM1e,CAAK,IAAI;AAAA,IAAA,GAEzB6e,KAAgB,MAAM;AACV,MAAAF,IAAA;AAAA,IAAA,GAEZG,IAAqB,CAAC7f,MAAW;AACjC,MAAAA,EAAE,QAAQ,aACZA,EAAE,gBAAgB,GAClBA,EAAE,eAAe;AAAA,IACnB,GAEI8f,IAAsB,CAACrb,GAAc1D,GAAegf,OAAqB;;AAE7E,UADcN,EAAA,MAAM1e,CAAK,IAAI,IACzB2e,GAAe;AACX,cAAAnlB,MAASyD,KAAAyG,EAAM,WAAN,gBAAAzG,GAAsB,OAC/BuB,OAAOa,KAAA7B,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAA4F,GAAkC,YAAW,IAEpD4f,KAAkBzgB,GAAK,OAAO,CAACC;;AAAW,kBAAAxB,KAAAwB,MAAA,gBAAAA,GAAG,YAAH,gBAAAxB,GAAY,SAAS+hB;AAAA,SAAS,EAAE,IAAI,CAACvgB,OAAWA,GAAE,EAAE,GAE9FygB,KAAiB1gB,GAAK,OAAO,CAACC;;AAAW,kBAAAxB,KAAAwB,MAAA,gBAAAA,GAAG,uBAAH,gBAAAxB,GAAuB,SAAS+hB;AAAA,SAAS,EAAE,IAAI,CAACvgB,OAAWA,GAAE,EAAE;AAC9G,YAAIwgB,MAAA,QAAAA,GAAiB;AACnB,qBAAWzZ,MAAMyZ,IAAiB;AAChC,kBAAM1gB,KAAOC,GAAK,KAAK,CAACC,OAAWA,GAAE,OAAO+G,EAAE;AAC9C,YAAAjH,GAAK,UAAUA,GAAK,QAAQ,WAAWygB,IAAUxlB,EAAK;AAAA;AAG1D,YAAI0lB,MAAA,QAAAA,GAAgB;AAClB,qBAAW1Z,MAAM0Z,IAAgB;AAC/B,kBAAM3gB,KAAOC,GAAK,KAAK,CAACC,OAAWA,GAAE,OAAO+G,EAAE;AAC9C,YAAAjH,GAAK,qBAAqBA,GAAK,mBAAmB,WAAWygB,IAAUxlB,EAAK;AAAA;AAM5E,YAFCgF,GAAAwB,CAAK,EAAE,QAAQxG,KAEhB0O,KAAA1J,GAAKwB,CAAK,MAAV,QAAAkI,GAAa,WAAW;AAE1B,gBAAMuL,OAAUtL,KAAA3K,EAAME,CAAa,MAAnB,gBAAAyK,GAAsB,iBAAgB,CAAA,GAChDgX,KAAa1L,GAAQ,OAAO,CAAAhV,OAAKA,GAAE,cAAcD,GAAKwB,CAAK,EAAE,SAAS;AAC5E,UAAImf,MAAA,QAAAA,GAAY,UACHA,GAAA,QAAQ,CAAC5gB,OAAc;AAChC,YAAAA,GAAK,QAAQ/E;AAAA,UAAA,CACd;AAEG,gBAAA0Z,KAAe6F,GAAsBtF,EAAO;AAC9B,UAAA7V,EAAA;AAAA,YAClB,oBAAoB0c,GAAmBpH,IAAc7V,CAAoB;AAAA,YACzE,cAAA6V;AAAA,UAAA,CACD;AAAA;AAGiB,QAAAtV,EAAA;AAAA,UAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,QAAA,CACf;AAAA;AAEa,MAAAmgB,IAAA;AAAA,IAAA,GAEZS,IAAU,WACVC,IAAWvhB,EAAS,MAAM;AAC9B,YAAMwhB,IAAU,CAAA,GACV,EAAE,OAAAC,EAAM,IAAI/hB,EAAM+e,CAAe,KAAK,CAAA,GAEtC/d,KAAOhB,EAAME,CAAa,EAAEjE,EAAM,IAAI,KAAK;AAK7C,UAAA8lB,MAAU,SAAS,CAAC/hB,EAAM+e,CAAe,EAAE,SAAS,SAAS,OAAO,GAAG;AACzE,cAAMiD,KAAWlgB,GAAU9B,EAAM+e,CAAe,CAAC;AACjD,eAAOiD,GAAS,MAChB,OAAOA,GAAS,aAChB,OAAOA,GAAS,YAChBA,GAAS,qBAAqB,SAC9BA,GAAS,MAAM,SACfA,GAAS,YAAY,SACZA,GAAA,QAAQA,GAAS,OAAO,OACjCA,GAAS,OAAOA,GAAS,UACzBA,GAAS,cAAcA,GAAS,UAChCF,EAAQ,KAAKE,EAAQ;AAAA;AAEjB,YAAA;AAAA,QACJ,cAAAvM,KAAe,CAAC;AAAA,QAChB,eAAAE,KAAgB,CAAC;AAAA,QACjB,YAAAC,KAAa,CAAC;AAAA,QACd,mBAAAoH,KAAoB,CAAC;AAAA,MAAA,IACnBhd,EAAME,CAAa,KAAK;AACrB,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAML,GAAGc;AAAA,QACH,GAAG8gB;AAAA,QACH,GAAGrM;AAAA,QACH,GAAGE;AAAA,QACH,GAAGC;AAAA,QACH,GAAGoH;AAAA,MAAA;AAAA,IACL,CACD,GAEKiF,KAAS,CACblhB,IAA+B,CAC/B,GAAAyB,GACA0f,KAAwB,UACrB;;AACH,YAAM,EAAE,OAAAvgB,IAAO,MAAAC,IAAM,IAAAoG,IAAI,aAAAma,OAAgBphB,GACnCC,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AAC1D,MAAIuI,OAAO4Z,IACF,OAAA5gB,GAAKwB,CAAK,EAAE,OAEdxB,GAAAwB,CAAK,EAAE,OAAO;AAAA,QACjB,OAAAb;AAAA,QACA,YAAYC;AAAA,QACZ,MAAM;AAAA,QACN,OAAAsgB;AAAA,QACA,aAAAC;AAAA,MAAA,GAGgB/hB,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGohB,IAAkB,CACtBrhB,IAA+B,CAAA,GAC/BgJ,IAAuB,UACpB;AAKG,YAAAsY,KAJM;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,MAAA,EAEStY,CAAI,GACf,EAAE,MAAA5H,GAAS,IAAApB,GACX,EAAE,OAAAY,IAAO,OAAAugB,OAAU/f,MAAQ,CAAA;AACjC,aAAOR,MAASugB,OAAUnY,IAAO,GAAGsY,MAAQ1gB,QAAW0gB;AAAA,IAAA,GAEnDC,IAAc7hB,KACd8hB,IAAe9hB,KACf+hB,IAAqB/hB,KACrBgiB,IAAsBhiB,KACtBiiB,IAAsB,CAC1B3hB,IAA+B,CAAA,GAC/ByB,MACG;;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,IACf/C,KAAAO,EAAAwiB,CAAkB,MAAlB,QAAA/iB,GAAqB,UAAUsB;AAAA,IAAI,GAErC4hB,IAAwB,CAAC5hB,MAEtB,QAAQA,KAAA,QAAAA,EAAM,OAAO,UAAU,KAElC6hB,KAAuB,CAC3B7hB,IAA+B,CAAA,GAC/ByB,MACG;;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,IACf/C,KAAAO,EAAAyiB,CAAmB,MAAnB,QAAAhjB,GAAsB;AAAA,IAAU,GAElCojB,KAAyB,CAAC9hB,MAAiC;;AAC/D,aAAO,WAAW,EAACA,KAAA,QAAAA,EAAM,gBAAgB,CAAC,OAAO,OAAKtB,IAAAsB,EAAK,gBAAL,gBAAAtB,EAAkB,iBAAgB,EAAE,EAAE,UAAU,GAACoC,KAAAd,EAAK,gBAAL,QAAAc,GAAkB,kBAAkB,KAAK;AAAA,IAAA,GAE5IihB,KAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAEIC,KAAc;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAEIC,KAAiB;AAAA,MACrB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAGIC,KAAgB;AAAA,MACpB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAGIC,KAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAEIC,KAAmB,CAACnnB,GAAewG,MAAkB;;AACnD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,GAAAwB,CAAK,EAAE,mBAAmBxG,GACXoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGoiB,KAAkB,CAACpnB,GAAewG,MAAkB;;AAClD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AAC1D,iBAAWsB,MAAQC;AACb,QAAAD,GAAK,iBAAiB/E,MACxB+E,GAAK,eAAe;AAGnB,MAAAC,GAAAwB,CAAK,EAAE,eAAexG,GACPoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGqiB,KAAqB,CAACrnB,GAAewG,MAAkB;;AACrD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AAC1D,iBAAWsB,MAAQC;AACb,QAAAD,GAAK,kBAAkB/E,MACzB+E,GAAK,gBAAgB;AAGpB,MAAAC,GAAAwB,CAAK,EAAE,gBAAgBxG,GACRoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGsiB,KAAoB,CAACtnB,GAAewG,MAAkB;;AACpD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,GAAAwB,CAAK,EAAE,YAAYxG,GACJoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGuiB,KAAmB,CAACvnB,GAAewG,MAAkB;;AACnD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,GAAAwB,CAAK,EAAE,WAAWxG,GACHoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGwiB,KAAqB,CAACxnB,GAAewG,MAAkB;;AACrD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,GAAAwB,CAAK,EAAE,aAAaxG,GACLoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEGyiB,KAAkB,CAACznB,GAAewG,MAAkB;;AAClD,YAAAxB,OAAOvB,KAAAO,EAAME,CAAa,EAAEjE,EAAM,IAAI,MAA/B,gBAAAwD,GAAkC,YAAW;AACrD,MAAAuB,GAAAwB,CAAK,EAAE,OAAOxG,GACCoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAG+E;AAAA,MAAA,CACf;AAAA,IAAA,GAEG0iB,KAAwB,CAC5B7nB,IAAuB,WAMhB,YAJK;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,EAEeA,CAAG,MAEtB8nB,KAAqB,CACzB9nB,MAMO,QAJK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,EAESA,CAAG,KAAK,QAEvB+nB,KAAwB,CAC5B/nB,MAMO,QAJK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,EAEQA,CAAG,KAAK,QAEvBgoB,KAAuB,CAC3BhoB,IAAyD,UAUlD,QARK;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,EAEUA,CAAG,MAGlBioB,KAAqB,CAACjoB,MAAgB;AAC1C,YAAMkoB,IAAM;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,MAAA;AAER,aAAIloB,IACK,MAAMkoB,EAAIloB,CAAG,OAEb;AAAA,IACT,GAGImoB,KAAsB,CAC1BnoB,MAMO,QAJK;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,EAEcA,CAAG,KAAK,QAGvBooB,KAAoB,CAACljB,IAA+B,OAAO;;AAC/D,aACE,QACCA,KAAA,QAAAA,EAAM,gBAActB,IAAAsB,KAAA,gBAAAA,EAAM,eAAN,gBAAAtB,EAAkB,UAAS,IAAI,UAAU;AAAA,IAAA,GAG5DykB,KAAwB,CAACnjB,IAA+B,OAAO;;AAC/D,aAAAA,EAAK,aAAa,MAAM,QAAQA,EAAK,aAAa,KAAKA,EAAK,cAAc,SACrE,KAEF,CAAC,EAAEA,EAAK,gBAActB,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,CAAC,GAAG,KAAK,CAACwB,OAAWA,GAAE,cAAcF,EAAK,SAAS;AAAA,IAAA,GAElHojB,KAAiB1jB,KACjB2jB,KAAgB3jB,KAChB4jB,KAAgB5jB,KAChB6jB,KAAgB7jB,KAChB8jB,KAAkB,CACtBxjB,IAA+B,CAAA,GAC/ByB,MACG;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,GACfxC,EAAAmkB,EAAc,EAAE;IAAU,GAE5BK,KAAsB,CAC1BzjB,IAA+B,CAAA,GAC/ByB,MACG;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,GACfxC,EAAAokB,EAAa,EAAE,UAAUrjB,CAAI;AAAA,IAAA,GAE/B0jB,KAAsB,CAC1B1jB,IAA+B,CAAA,GAC/ByB,MACG;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,GACfxC,EAAAqkB,EAAa,EAAE,UAAUtjB,CAAI;AAAA,IAAA,GAE/B2jB,KAAsB,CAC1B3jB,IAA+B,CAAA,GAC/ByB,MACG;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,GACrBxC,EAAMskB,EAAa,EAAE,UAAUvjB,GAAMf,EAAMwJ,EAAe,CAAC;AAAA,IAAA,GAEvDmb,KAAmBlkB,KACnBmkB,KAAoB,CACxB7jB,IAA+B,CAAA,GAC/ByB,MACG;;AACH,MAAA8f,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,IACf/C,KAAAO,EAAA2kB,EAAgB,MAAhB,QAAAllB,GAAmB,UAAUsB;AAAA,IAAI,GAEnC8jB,KAAsBpkB,KACtBqkB,KAAuBrkB,EAAoB,KAAK,GAChDskB,KAAyB,CAC7BC,GACAjkB,GACAyB,OACG;;AACH,MAAAsiB,GAAqB,QAAQE,GACzBA,MAAS,WACX1C,EAAY,QAAQvhB,GACpBwhB,EAAa,QAAQ/f,MAEjB/C,KAAAO,EAAA6kB,EAAmB,MAAnB,QAAAplB,GAAsB;AAAA,IAAU,GAGlCC,KAAUC,EAAOC,EAAO,GACxBG,KAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9C6L,KAAerL,EAAW,CAAA,CAAE,GAC5BwkB,KAAY3kB,EAAc,MAAMN,EAAME,CAAa,EAAEjE,EAAM,IAAI,KAAK,CAAA,CAAE;AAC5E,IAAAqG,GAAMpC,GAAe,MAAM;;AACzB,MAAI2Z,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,WAAW,WAAW,CAAC,OAAKjS,IAAAO,EAAME,CAAa,MAAnB,QAAAT,EAAsB,gBACtGqM,GAAa,QAAQ9L,EAAME,CAAa,EAAE,WAAW,IAAI,CAACe,OAAY;AAAA,QACpE,OAAOA,EAAE;AAAA,QACT,OAAOA,EAAE;AAAA,MACT,EAAA;AAAA,IACJ,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ,GAEDqB,GAAM,MAAMpC,EAAc,MAAM,oBAAoB,MAAM;AACxC,MAAAglB;IAAA,CACjB;AAEK,UAAAC,KAAe1kB,EAAI,EAAE,GACrBykB,KAAkB,YAAY;AAClC,YAAM,EAAE,QAAAxpB,EAAO,IAAIsE,EAAME,CAAa;AAItC,UAHIxE,MAAW,kBAGX,CAACme,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,QAAQ;AAC5D;AAEF,YAAM,EAAE,oBAAA0T,IAAqB,CAAA,EAAG,IAAIplB,EAAME,CAAa,GACjD1E,KAAS4pB,EAAmB,KAAK,CAACnkB,OAAWA,GAAE,IAAI;AACzD,UAAIzF,MAAA,QAAAA,GAAQ,UAAU;AACpB,YAAIwE,EAAMmlB,EAAY,MAAM3pB,GAAO;AACjC;AAEA,QAAA2pB,GAAa,QAAQ3pB,GAAO;AAAA,aAEzB;AACC,QAAAwE,EAAAE,CAAa,EAAE,qBAAqB,IAC1C4L,GAAa,QAAQ,IACrBqZ,GAAa,QAAQ;AACrB;AAAA;AAEF,YAAM9jB,KAAM,MAAM3B,GAAQ,IAAI,GAAG4B,gBAA2B9F,GAAO,UAAU;AAAA,QAC3E,SAAS;AAAA,UACP,gBAAgBuE;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,MAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,KAAO,CAAC,EAAA,IAAMH,GAAI;AACnC,UAAIE,IAAS;AACX,cAAM8jB,KAAa7jB,GAAK,OAAO,IAAI,CAAKP,QAC/B;AAAA,UACL,OAAOA,GAAE;AAAA,UACT,OAAOA,GAAE;AAAA,QAAA,EAEZ;AACK,QAAAjB,EAAAE,CAAa,EAAE,qBAAqBmlB,IAC1CvZ,GAAa,QAAQuZ;AAAA;AAAA,IACvB,GAGIC,KAAe,YAAY;AAC/B,YAAM,EAAE,QAAA5pB,EAAO,IAAIsE,EAAME,CAAa;AAClC,UAAA,CAAC2Z,GAAkB7Z,EAAM0R,CAAiB,EAAE,MAAM,CAAC,WAAW,WAAW,CAAC;AACxE,YAAA;AACF,cAAIhW,MAAW;AACb,kBAAMwpB,GAAgB;AAAA,eACjB;AACL,kBAAM7jB,IAAM,MAAM3B,GAAQ,KAAK,GAAG4B,wBAAmC,IAAI;AAAA,cACvE,SAAS;AAAA,gBACP,gBAAgBvB;AAAA,gBAChB,gBAAgB;AAAA,cAClB;AAAA,YAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,KAAO,CAAC,EAAA,IAAMH,EAAI;AACnC,YAAIE,OACFvB,EAAME,CAAa,EAAE,qBAAqBsB,MAAQ,CAAA,GAClDsK,GAAa,QAAQtK;AAAA;AAAA,iBAGlBC;AACP,kBAAQ,MAAMA,CAAC;AAAA,QACjB;AAAA,IACF,GAEIkL,KAAgB,CAAC3Q,GAAY+N,MAAiB;AAClD,YAAMwb,KAAavlB,EAAME,CAAa,EAAEjE,EAAM,IAAI,KAAK;AACvD,MAAAspB,GAAWxb,CAAI,IAAI/N,GACCoE,EAAA;AAAA,QAClB,CAACnE,EAAM,IAAI,GAAGspB;AAAA,MAAA,CACf;AAAA,IAAA,GAEGC,KAAgB,CAAC,sBAAsB,cAAc,iBAAiB,mBAAmB,eAAe,GACxGC,KAAchlB,EAAI,CAAA,CAAE,GACpB+I,KAAkB/I,EAAI,CAAA,CAAE,GACxBilB,KAAkB,OAAOzjB,GAAkB0d,MAAkB;;AAC3D,YAAA,EAAE,MAAMgG,GAAa,IAAAhG;AACvB,UAAA,CAAC6F,GAAc,SAASvpB,EAAM,IAAI,KAAKgG,KAAW2jB,GAAOjG,GAAU,WAAW,GAAG;AACnF,cAAMte,KAAM,MAAM3B,GAAQ,KAAK,GAAG4B,kCAA6C;AAAA,UAC7E,cAAc;AAAA,UACd,WAAWqe,EAAS;AAAA,UACpB,WAAWA,EAAS;AAAA,UACpB,SAASlgB,KAAA,iCAAgB,WAAhB,gBAAAA,GAAwB;AAAA,QAAA,GAChC;AAAA,UACD,SAAS;AAAA,YACP,gBAAgBM;AAAA,YAChB,gBAAgB;AAAA,UAClB;AAAA,QAAA,CACD,GACK,EAAE,SAAAwB,IAAS,MAAAC,OAASH,GAAI;AAC9B,QAAIE,MAAWC,OACGgI,GAAA,SAAQhI,MAAA,gBAAAA,GAAM,oBAAmB,CAAA,GACrCikB,GAAA,MAAME,EAAQ,IAAI;AAAA,UAC5B,MAAMnkB,GAAK;AAAA,UACX,MAAMA,GAAK;AAAA,QAAA;AAAA;AAAA,IAGjB,GAEIqkB,KAAiB,CAAClG,MAAkB;AACxC,MAAAZ,EAAgB,QAAQY;AAAA,IAAA,GAGpBmG,KAAmB,CAACzD,MAAiB;AACnC,YAAA5S,IAAQ,SAAS,cAAc,OAAO;AACnC,eAAA,KAAK,YAAYA,CAAK,GACzBA,EAAA,aAAa,SAAS4S,CAAI,GAChC5S,EAAM,OAAO,GACb,SAAS,YAAY,MAAM,GAClB,SAAA,KAAK,YAAYA,CAAK,GAC/BnK,GAAQ,QAAQ,MAAM;AAAA,IAAA,GAIlBygB,KAAmBzlB,EAAS,MAC5BrE,EAAM,SAAS,gBAAgB+D,EAAM0R,CAAiB,EAAE,SAAS,WAKtE,GAEKsU,KAAmB1lB,EAAS,MAC5B,GAAC,cAAc,sBAAsB,gBAAgB,eAAe,EAAE,SAASrE,EAAM,IAAI,CAK9F,GAEKgqB,KAAa3lB,EAAS,MAAMuZ;;AAAAA,aAAAA,IAAkBpa,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,MAAM,CAAC,OAAO,CAAC,OAAKoC,IAAA7B,EAAME,CAAa,MAAnB,gBAAA2B,EAAsB;AAAA,KAAU,GAG5HqkB,KAAgB5lB,EAAS,MAEtB,CAACklB,GAAc,SAASvpB,EAAM,IAAI,KAAK,CAAC+D,EAAMkf,CAAoB,CAC1E,GAEKiH,KAAsB,CAAC7M,MACvBA,IACKwF,EAAYxF,CAAQ,IAEpB;AAIX,WAAAvL,GAAU,MAAM;AACV,MAAA9R,EAAM,SAAS,iBACb+D,EAAM0R,CAAiB,EAAE,SAAS,mBACpC5F,GAAa,QAAQ;AAAA,QACnB;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MAAA,IAGWwZ;IAEjB,CACD,GACM;AAAA,MACL,kBAAAtF;AAAA,MACA,WAAAC;AAAA,MACA,eAAAC;AAAA,MACA,eAAAC;AAAA,MACA,gBAAAG;AAAA,MACA,iBAAAQ;AAAA,MACA,cAAAG;AAAA,MACA,UAAAvU;AAAA,MACA,QAAA0U;AAAA,MACA,qBAAAG;AAAA,MACA,UAAAM;AAAA,MACA,QAAAI;AAAA,MACA,iBAAAG;AAAA,MACA,qBAAAM;AAAA,MACA,oBAAAF;AAAA,MACA,aAAAF;AAAA,MACA,cAAAC;AAAA,MACA,uBAAAI;AAAA,MACA,wBAAAE;AAAA,MACA,qBAAAJ;AAAA,MACA,sBAAAG;AAAA,MACA,eAAA1B;AAAA,MACA,eAAAG;AAAA,MACA,oBAAAC;AAAA,MACA,eAAA2B;AAAA,MACA,cAAAH;AAAA,MACA,aAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAE;AAAA,MACA,mBAAAI;AAAA,MACA,kBAAAH;AAAA,MACA,iBAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,kBAAAE;AAAA,MACA,oBAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,sBAAAI;AAAA,MACA,uBAAAH;AAAA,MACA,oBAAAC;AAAA,MACA,uBAAAC;AAAA,MACA,qBAAAI;AAAA,MACA,wBAAAe;AAAA,MACA,mBAAAd;AAAA,MACA,gBAAAE;AAAA,MACA,eAAAC;AAAA,MACA,eAAAC;AAAA,MACA,eAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,qBAAAM;AAAA,MACA,sBAAAC;AAAA,MACA,YAAA3a;AAAA,MACA,aAAAwU;AAAA,MACA,cAAA7S;AAAA,MACA,WAAAmZ;AAAA,MACA,eAAAtY;AAAA,MACA,iBAAA+Y;AAAA,MACA,gBAAAG;AAAA,MACA,kBAAAC;AAAA,MACA,aAAAL;AAAA,MACA,kBAAAM;AAAA,MACA,qBAAAvB;AAAA,MACA,eAAAgB;AAAA,MACA,SAAA5G;AAAA,MACA,uBAAAsF;AAAA,MACA,kBAAA8B;AAAA,MACA,qBAAAvB;AAAA,MACA,sBAAAvF;AAAA,MACA,qBAAAwF;AAAA,MACA,kBAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,mBAAAlT;AAAA,MAAA,mBACAmI;AAAAA,MACA,eAAAqM;AAAA,MACA,YAAAD;AAAA,MACA,oBAAAjH;AAAA,MACA,oBAAA8E;AAAA,MACA,qBAAAqC;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACr9CY,MAAAjV,KAAA,CAAA9I,OAAK+I,GAAa,iBAAA,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,WAGtB,OAAM,WACJxF,KAAA,EAAA,OAAM,8CAWNiE,KAAA,EAAA,OAAM,gBACTQ,KAAA6J,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAgC,OAA3B,EAAA,OAAM,gBAAa,OAAE,EAAA,CAAA,6HAWvBgE,KAAM;AAAA,EAAA,KAAA;AAAA;iGAWNN,KAAM;AAAA,EAAA,KAAA;AAAA;GACeW,KAAoBsJ,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,OAAA;AAAA,EAAA,OAAA;AAAA,EAiBzC,OAAA,EAAA,OAAA,OAAA;2EA4C0B2N,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,KAAA,MAAA,wCAAA,EAAA,CAAA,QASK2N,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,QAAA,MAAA,UAAA,EAAA,CAAA,0FAmOT6iB,KAAA,CAAA,SAAA,qBAEDC,KAAA,EAAA,OAAA,EAAA,SAAA,QAAA,eAAA,SAAA,KAY0CC,KAAA,CAAA,OAAA,+GAE1CC,KAAA,EAAA,OAAA,EAAA,SAAA,QAAA,eAAA,SAAA;;ojBA1WlBC,IAAAtf,GAAA,OAAA;sCACc,GAAAnE,EAAA0jB,GAAA;AAAA,IACvB,KAAA;AAAA,IAAA,OAAA;AAAA;;MAIA,QAAA;AAAA,MAAA,SAAA;AAAA;;IAIG,OAAAvjB,EAAA,MAAA;AAAA,MAAAK,EAAA,OAAAZ,IAAA;AAAA;;;aAIFO,EAUM,MAAA;AAAA,MAT6BK,EAAA,OAAAU,IAAA;AAAA,QAQtBV,EAAA,OAAAsD,IAAA;AAAA,UAAAQ;AAAAA,YALHzD,GAAa;AAAA,YAClB,OAAO,EAAS,OAAA,MAAA;AAAA,YAChB,OAAO;AAAA,YACP,OAAMX,EAAA,UAAA;AAAA,YAAA,SAAAA,EAAA;AAAA;UAIX,GAAA,MAAA,GAAA,CAAA,SAWM,SAXN,CAAA;AAAA,QAAA,CAAA;AAAA,QAUaM,EAAA,OAAAuD,IAAA;AAAA,UAAAC;AAAAA,YANHnD,GAAa;AAAA,YAClB,OAAO,EAAS,OAAA,MAAA;AAAA,YAChB,OAAO;AAAA,YACP,OAAMX,EAAA,UAAA;AAAA,YACN,SAAMA,EAAA;AAAA,YAAA,MAAAA,EAAA,kBAAAA,EAAA,kBAAA,MAAA,WAAA,IAAA,aAAA;AAAA;UAImB,GAAA,MAAA,GAAA,CAAA,SAAkB,WAAI,MAAA,CAAA;AAAA,QAAA,CAAA;AAAA,QAClDA,EAAA,kBAAkC,kCAQvBQ,EAAA,OAAA8D,IAAA;AAAA,UAAAP;AAAAA,YALHpD,GAAa;AAAA,YAClB,OAAO,EAAS,OAAA,MAAA;AAAA,YAChB,OAAO;AAAA,YACP,OAAMX,EAAA,UAAA;AAAA,YAAA,SAAAA,EAAA;AAAA;;SAIX,KAAAa,EAAA,IAAA,EAAA;AAAA,QACEb,EAAA,kBAAmD,8BAGtCQ,EAAA,OAAAwD,IAAA;AAAA,UAAAW;AAAAA;;YAAb,oBAAAxE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,eAAAI;AAAA,UAAA,GAAA;AAAA;;;;;;;;;8BAMoB,GAAAN,EAAA0jB,GAAA;AAAA,IACvB,KAAA;AAAA,IAAA,OAAA;AAAA;;MAIA,QAAA;AAAA,MAAA,SAAA;AAAA;;IAIG,OAAAvjB,EAAA,MAAA;AAAA,MACKK,EAAA,OAAA8U,IAAA;AAAA,QACiB9U,EAAA,OAAAoM,IAAA;AAAA,UAMNxI,EAAAC,GAAAnE,EAAA,KAAA,IAAA,KAAA,CAAA;AAAA,UAAAA,EAAA,SAAA,mBAAAH,EAAA,GALSC,EAAAgN,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA,OAAA;AAAA,YACT,WAAO;AAAA,UAAA,GAAA;AAAA;;;;;;;gBAShBjM,EAAa,IAAA,EAAA;AAAA,QAAA,CAAA;AAAA,gCADIL,EAAA,OAAA;AAAA,UAEtB,KAAA;AAAA,UAAA,OAAA;AAAA,UAED,SAAAL,EAA8C,iBAAzB,CAAsBC,MAAAJ,EAAA,uBAAA,KAAA,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,QAAA,GAC3C;AAAA,UAAA7G,EAAAsqB,GAAA,EAAA,OAAA,uBAAA,CAAA;AAAA;QAGM,CAAA,KAAA5iB,EADR,IAIgB,EAAA;AAAA,QAAAb,EAAA,cAAAA,EAAA,SAAA,gBAAAH,EAFqB,GAAAC,EAAAiN,GAAA;AAAA,UAAA,KAAA;AAAA,UACnC,SAAA/M,EAAA;AAAA,UAAA,oBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,qBAAAI;AAAA,UACC,OAAA,EAAA,eAAA,OAAA;AAAA,QAAA,GAAA;AAAA;;;;;;;IAGI,SAAAH,EAAA,MAAA;AAAA,MAAkBK,EAAA,OAAA;AAAA,QAAA,OAAAojB,GAAA1jB,EAAA,OAAA,OAAA;AAAA,QAC3B,OAmSY,EAAA,QAAA,QAAA,SAAA,OAAA;AAAA,MAAA,GAAA;AAAA;UAjSV,YAAMA,EAAA;AAAA,UACL,uBAAQG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,eAAAI;AAAA,UACR,OAAK;AAAA,UAAA,IAAAJ,EAAA;AAAA,UAAgD,OAAA;AAAA,YAA2C,MAAA;AAAA,YAAA,MAAAA,EAAA,SAAA;AAAA,iBAKjGA,EAAS,SAAA;AAAA,UAAA;AAAA,UAER,YAAM;AAAA,UACN,OAAKA,EAAA;AAAA,UACL,QAAKA,EAAA;AAAA,UAAA,OAAAA,EAAA;AAAA,UAEK,SAAIG,EAkRP,CAlRoB,MAAAA,EAAA,CAAA,IAAQ,CAAOC,MAAAJ,EAAA,gBAAAI,GAAAJ,EAAA,YAAA;AAAA,QAAA,GAAA;AAAA,gBAEvCC,EA+Qa,CAAA,EAAA,SAAAyc,GAAA,OAAAnd,EAAA,MAAA;AAAA,YAAAe,EA9QL,OAAWiU,IAAA;AAAA,cAAApb,EACP4T,GAAa;AAAA,gBACtB,OAAA;AAAA,gBAAA,SAAA2P,EAAA;AAAA,gBA2QK,UAAA,CAAAtc,MAAAJ,EAAA,iBAAAI,GAAAb,CAAA;AAAA,cAAA,GAAA;AAAA,yBAnQKU,EAAa,MAAA;AAAA,kBAFtBK,EAAA,OAAAqjB,IAAA;AAAA,oBAAA,CAAA3jB,EAAA,cAAAT,CAAA,KAAAmd,EAAA,SAAA7c,EAAA,GACcW,EAAA,OAAA;AAAA,sBAEX,KAAA;AAAA,sBAAA,OAAA;AAAA;uBAMoB2D,GAAAuY,EAAW,KAAS,GAAA,GAAArH,EAAK,KAFhDxU,EAAA,IAAA,EAAA;AAAA,oBAAA,CAAAb,EAAA,cAAAT,CAAA,KAAA,CAAAmd,EAAA,SAAA7c,EAAA,GAC0BW,EAAA,OAAA;AAAA,sBAEvB,KAAA;AAAA,sBACF,OAAA;AAAA,sBAAA,SAAAojB,GAAA,CAAAxjB,MAAAJ,EAAA,OAAAT,CAAA,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,oBAMO,GAAA,aAAc,GAAK4jB,EAAA,KAAAtiB,EAAA,IAAA,EAAA;AAAA,oBAFXb,EAAA,cAAAT,CAAA,IAAAkF,IAAA5E,EAAgB,GAAAC,EAAAuE,GAAA;AAAA,sBAC9B,KAAI;AAAA,sBAGH,iBAAWqY,EAAA;AAAA,sBACX,MAAA;AAAA,sBACA,eAAIvc,EAAE,CAAA,MAAAA,EAAA,CAAA,IAAAyjB,GAA4B,MAAO;AAAA,sBAAA,GAAA,CAAQ,MAAM,CAAA;AAAA,sBACvD,aAAUzjB,EAAE,CAAA,MAAAA,EAAA,CAAA,IAAAyjB,GAAoB,MAAQ;AAAA,sBAAA,GAAK,CAAE,MAAA,CAAA;AAAA,sBAC/C,QAAM,OAAE5jB,EAAa,oBAAAI,GAAAb,GAAAmd,EAAA,KAAA;AAAA,sBACrB,cAAS,CAAkBtc,MAAAJ,EAAA,oBAAAI,GAAAb,GAAAmd,EAAA,KAAA;AAAA,sBAAA,UAAA1c,EAAA;AAAA;;;oBAE9B,CAAA,IAAAa,EAAA,IAAA,EAAA;AAAA,oBAAA,CAAA,WAAA,YAAA,WAAA,EAAA,SAAA6b,EAAA,QAAA,KAAA7c,KAC0BW,EAAA,QAAA;AAAA,sBACvB,KAAA;AAAA,sBAAyC,OAAA;AAAA,sBAM5C,SAAAojB,GAAA,CAAAxjB,MAAAJ,EAAA,uBAAA,QAAA0c,GAAAnd,CAAA,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,oBACA,GAAA,QAQY,UAPCsB,EACmC,IAAA,EAAA;AAAA,oBAAzC1H,EAAA2T,GAAA,EAAA,OAAA,GAAA,GAAA;AAAA,sBAAA,SAAA7M,EAAA,MAAA;AAAA,wBAKHiE,EAAAC,GAAAnE,EAAA,oBAAA0c,EAAA,QAAA,CAAA,GAAA,CAAA;AAAA,sBAAA,CAAA;AAAA,sBAHF,SAAAzc,EAAA,MAAA;AAAA,wBAAAD,EAAA,SAAA,qBAAA,CAAA,CAAA,WAAA,YAAA,WAAA,EAAA,SAAA0c,EAAA,QAAA,KAAA7c,EAAA,GAEsBC,EAAA+jB,GAAA;AAAA,0BAAA,KAAA;AAAA;;;sBAGkE,GAAA;AAAA,oBAAA,GAAA,IAAA;AAAA,yDAA3D/jB,EAAAuN,GAAA;AAAA,sBAAG,KAAA;AAAA,sBAAA,SAAA,CAAA,OAAA;AAAA,sBAErB,iBAAO,CA+MPjN,MAAAJ,EAAA,gBAAAI,GAAAsc,CAAA;AAAA,oBAAA,GAAA;AAAA,sBAhJI,SAAAzc,EAAA,MAAA;AAAA,wBAAA9G,EA3DHmU,GAAsB,MAAC;AAAA,0BAD/B,SAAArN,EAAA,MAAA;AAAA,4BAAAD,EAiCE,cAEc,SAAAA,EAAA,IAAA,KAAAH,EAFO,GAAAW,EAAAC,IAAA,EAAmB,KAAC,EAAQ,GAAA;AAAA,8BAAAtH,EAAAoU,GAAA;AAAA,gCACV,SAAA,CAAAnN,MAAAJ,EAAA,oBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCAEvC,GAAA;AAAA,8BAAA,GAIc,MAAA,CAAA,SAAA,CAAA;AAAA,8BAAApG,EAFK2qB,CAAE;AAAA,8BAAA3qB,EAAAoU,GAAA;AAAA,gCACmB,SAAA,CAAAnN,MAAAJ,EAAA,qBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCAExC,GAAA;AAAA,8BAAA,GAEgB,MAAQ,CAAC,SAAA,CAAA;AAAA,8BAAzBpG,EAAA2qB,CAAA;AAAA,8BAAApH,EACE,gBAaa,UAVmB7c,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,gCAAAtH,EAAA4qB,GAF9B,EAWc,OAAA,QAAA,GAAA;AAAA,kCAAA,SAAA9jB,EAAA,MAAA;AAAA,uCAVZ,EAA2B,GAAAO,EAAAC,IAAA,MAAAC,GAAAV,EAAA,YAAA,CAAA0L,OAErB7L,EAAY,GAAAC,EAAAyN,GAAA;AAAA,sCACjB,OAAK,EAAE,eAAA,SAAA;AAAA,sCAAA,KAAA7B,EAAA;AAAA,sCAMD,SAAA,CAAAtL,OAAAJ,EAAA,mBAAA0L,EAAA,OAAAnM,CAAA;AAAA,oCAAA,GAAA;AAAA,sCAHC,SAAAU,EAAA,MAAA;AAAA,wCAAmGK,EAAgB,QAAA;AAAA,0CAAA,OAAAM,GAEhH8b,EAAM,eAAAhR,EAAA,SAAA,CAAAgR,EAAA,cAAAhR,EAAA,UAAA,eAAA,oBAAA,EAAA;AAAA;;;;;kCAIrB,GAAA;AAAA,gCAAA,GAAA,IAAA;AAAA;;4BAIJ,GAAA,EAAA,KAAc7K,EAAO,IAAA,EAAA;AAAA,4BAAA1H,EAAAoU,GAAA;AAAA,8BACc,SAAA,CAAAnN,MAAAJ,EAAA,gBAAA0c,GAAAnd,CAAA;AAAA,4BAAA,GAAA;AAAA;;;8BAEnC,GAAA;AAAA,4BAAA,GACiB,MAAa,CAAA,SAAA,CAAA;AAAA,4BAA9BpG,EAAA2qB,CAAA;AAAA,4BAAA9jB,EAEE,cAYa,SAAAA,EAAA,IAAA,IAIfa,EAAA,IAAA,EAAA,KAJehB,EAZ0B,GAAAW,EAAAC,IAAS,EAAI,KAAA,EAAA,GAAA;AAAA,8BAAAtH,EAAA4qB,GAAA;AAAA,gCAGrB,OAAA/jB,EAAA,mBAAA0c,EAAA,IAAA;AAAA,8BAAA,GAAA;AAAA;qCAD3B,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,aAAA,CAAAd,OAErBW,EAAU,GAAAC,EAAAyN,GAAA;AAAA,oCACf,OAAK,EAAE,eAAA,SAAA;AAAA,oCAAA,KAAArO,EAAA;AAAA,oCAKD,SAAA,CAAAkB,OAAAJ,EAAA,gBAAAd,EAAA,OAAAK,CAAA;AAAA,kCAAA,GAAA;AAAA,oCAFC,SAAAU,EAAA,MAAA;AAAA,sCAAAK,EACH,QAAK;AAAA,wCAAA,OAAAM,GAAA8b,EAAA,QAAAA,EAAA,SAAAxd,EAAA,QAAA,oBAAA,EAAA;AAAA;;;;;gCAId,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,OAAA,CAAA;AAAA;4BAGF,GAAA,EAAA;AAAA,4BAae,CAAA,sBAAA,YAAA,EAAA,SAAAc,EAAA,IAAA,IAGfa,EAAA,IAAA,EAAA,KAHehB,EAAA,SATqC,EAAS,KAAA,EAAA,GAAA;AAAA,8BAAA1G,EAAA4qB,GAAA;AAAA,gCAGrB,OAAA/jB,EAAA,qBAAA0c,EAAA,SAAA;AAAA,8BAAA,GAAA;AAAA;qCADlC,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,eAAA,CAAAgkB,OAErBnkB,EAAA,GAAeC,EAAAyN,GAAA;AAAA,oCACpB,OAAK,EAAE,eAAA,SAAA;AAAA,oCAAA,KAAAyW,EAAA;AAAA,oCAEY,SAAA,CAAA5jB,OAAAJ,EAAA,kBAAAgkB,EAAA,OAAAzkB,CAAA;AAAA,kCAAA,GAAA;AAAA;;;;;;gCAGxB,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,OAAA,CAAA;AAAA;4BAEF,GAAA,EAAA;AAAA,4BAAAS,EACE,iBAEcA,EAFK,IAAA,KAAAA,EAAA,sBAAA0c,CAAA,KAAA7c,EAAA,GAAAW,EAAEC,IAAiB,EAAC,UAAU;AAAA,8BAAAtH,EAAAoU,GAAA;AAAA,gCAEjD,SAAA,CAAAnN,MAAAJ,EAAA,kBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCACA,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,SAAA,CAAA;AAAA;4BAGF,GAAA,EAAA,KAAAsB,EAAA,IAAA,EAAA;AAAA,4BAAAb,EACE,oBAAmBH,KAAAW,EAAEC,IAAmB,EAAA,KAAC,KAAQ;AAAA,8BAAAtH,EAAAoU,GAAA;AAAA,gCAEjD,SAAA,CAAAnN,MAAAJ,EAAA,oBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCACA,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,SAAA,CAAA;AAAA;4BAGF,GAAA,EAAA,KAAAsB,EAAA,IAAA,EAAA;AAAA,4BAAAb,EACE,oBAAmBH,KAAAW,EAAEC,IAAmB,EAAA,KAAC,KAAQ;AAAA,8BAAAtH,EAAAoU,GAAA;AAAA,gCAEjD,SAAA,CAAAnN,MAAAJ,EAAA,oBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCACA,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,SAAA,CAAA;AAAA;4BAGF,GAAA,EAAA,KAAasB,EAAO,IAAA,EAAA;AAAA,4BAAA1H,EAAA4qB,GAAA;AAAA,8BAGW,OAAA/jB,EAAA,sBAAA0c,EAAA,gBAAA;AAAA,4BAAA,GAAA;AAAA;mCAD3B,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAikB,OAErBpkB,EAAS,GAAAC,EAAAyN,GAAA;AAAA,kCACd,OAAK,EAAE,eAAA,SAAA;AAAA,kCAAA,KAAA0W,EAAA;AAAA,kCAEM,SAAA,CAAA7jB,OAAAJ,EAAA,iBAAAikB,EAAA,OAAA1kB,CAAA;AAAA,gCAAA,GAAA;AAAA;;;;;;8BAGlB,GAAA;AAAA,4BAAA,GAEqE,MAAA,CAAA,OAAA,CAAA;AAAA,4BASxDpG,EAAA2qB,CAAA;AAAA,4BAAA9jB,EAAA,kBAAA,SAAA,eAAAH,EATmC,GAAAC,EAAAikB,GAAA;AAAA,8BAAA,KAAA;AAAA,8BAGnB,OAAA/jB,EAAA,mBAAA0c,EAAA,YAAA;AAAA,4BAAA,GAAA;AAAA;mCADzB,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,aAAA,CAAAkkB,OAErBrkB,EAAQ,GAAAC,EAAAyN,GAAA;AAAA,kCACb,OAAK,EAAE,eAAA,SAAA;AAAA,kCAAA,KAAA2W,EAAA;AAAA,kCAEK,SAAA,CAAA9jB,OAAAJ,EAAA,gBAAAkkB,EAAA,OAAA3kB,CAAA;AAAA,gCAAA,GAAA;AAAA;;;;;;;4BAIwD,GAAA,MAAA,CAAA,OAAA,CAAA,KAAAsB,EAAzE,IASa,EAAA;AAAA,4BAAAb,EAAA,kBAAA,SAAA,gBAAAA,EAAA,SAAA,gBAAAH,EAAA,GATsCC,EAAAikB,GAAA;AAAA,8BAAA,KAAA;AAAA,8BAGnB,OAAA/jB,EAAA,sBAAA0c,EAAA,aAAA;AAAA,4BAAA,GAAA;AAAA;mCAD5B,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,gBAAA,CAAAkkB,OAErBrkB,EAAQ,GAAAC,EAAAyN,GAAA;AAAA,kCACb,OAAK,EAAE,eAAA,SAAA;AAAA,kCAAA,KAAA2W,EAAA;AAAA,kCAEK,SAAA,CAAA9jB,OAAAJ,EAAA,mBAAAkkB,EAAA,OAAA3kB,CAAA;AAAA,gCAAA,GAAA;AAAA;;;;;;;4BAGjB,GAAA,MAAkB,cAEFsB,EAAa,IAAA,EAAA;AAAA,4BAA7B1H,EAAA2qB,CAAA;AAAA,4BAAApH,EACE,SAEc,eAAA7c,EAFO,GAAAW,EAAAC,IAAA,EAAmB,KAAC,KAAQ;AAAA,8BAAAtH,EAAAoU,GAAA;AAAA,gCAEjD,SAAA,CAAAnN,MAAAJ,EAAA,oBAAA0c,GAAAnd,CAAA;AAAA,8BAAA,GAAA;AAAA;;;gCACA,GAAA;AAAA,8BAAA,GAUa,MAAA,CAAA,SAAA,CAAA;AAAA,8BAAApG,EATO2qB,CAAoB;AAAA,8BAAA3qB,EAAA4qB,GAAA;AAAA,gCAGJ,OAAA/jB,EAAA,oBAAA0c,EAAA,QAAA;AAAA,8BAAA,GAAA;AAAA;qCADhC,EAA2B,GAAAlc,EAAAC,IAAA,MAAAC,GAAAV,EAAA,cAAA,CAAAmkB,OAErBtkB,EAAA,GAAcC,EAAAyN,GAAA;AAAA,oCACnB,OAAK,EAAE,eAAA,SAAA;AAAA,oCAAA,KAAA4W,EAAA;AAAA,oCAEW,SAAA,CAAA/jB,OAAAJ,EAAA,iBAAAmkB,EAAA,OAAA5kB,CAAA;AAAA,kCAAA,GAAA;AAAA;;;;;;gCAGvB,GAAA;AAAA,8BAAA,GAAA,MAAA,CAAA,OAAA,CAAA;AAAA;4BAGF,GAAA,EAAA,KAAAsB,EAAA,IAAA,EAAA;AAAA,4BACkBb,EAAA,cAAA,SAAYA,EAAS,IAAI,iBAYzBH,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,8BAAAT,EAAA,YAAA0c,EAAA,IAAA,KAAA7c,OAXO0N,GAAiB;AAAA,gCAAA,KAAA;AAAA,gCAU9B,SAAA,CAAAnN,MAAAJ,EAAA,iBAAAA,EAAA,YAAA0c,EAAA,IAAA,EAAA,IAAA;AAAA,8BAAA,GAAA;AAAA,yCARJzc,EAGO,MAAA;AAAA,kCAAAK,EAHK,OAAgB8iB,IAAA;AAAA,oCAAA9iB,EAAS,QAAY;AAAA,sCAAA,OAAA;AAAA,sCAC/C,OAA4CN,EAAA,YAAA0c,EAAA,IAAA,EAAA;AAAA,oCAAA,GAAA;AAAA;sCAG9CxY,EAGE,MAAAC,GAAAnE,EAAA,YAAA0c,EAAA,IAAA,EAAA,IAAA,GAAA,CAAA;AAAA,oCAAA,GAFA,GAAA2G,EAAA;AAAA,oCAAAlqB,EACMirB,GAAM;AAAA,sCAAA,OAAA,EAAA,OAAA,WAAA,eAAA,OAAA;AAAA;;;;;8BAKJ,GAAA,MAAA,CAAA,SAAY,QAC1B,IAWc,EAAA;AAAA,8BAAApkB,EAAA,YAAA0c,EAAA,IAAA,KAAA7c,OAXO0N,GAAiB;AAAA,gCAAA,KAAA;AAAA,gCAU9B,SAAA,CAAAnN,MAAAJ,EAAA,iBAAAA,EAAA,YAAA0c,EAAA,IAAA,EAAA,IAAA;AAAA,8BAAA,GAAA;AAAA,yCARJzc,EAGO,MAAA;AAAA,kCAAAK,EAHK,OAAgBgjB,IAAA;AAAA,oCAAAhjB,EAAS,QAAY;AAAA,sCAAA,OAAA;AAAA,sCAC/C,OAA6CN,EAAA,YAAA0c,EAAA,IAAA,EAAA;AAAA,oCAAA,GAAA;AAAA;sCAG/CxY,EAGE,MAAAC,GAAAnE,EAAA,YAAA0c,EAAA,IAAA,EAAA,IAAA,GAAA,CAAA;AAAA,oCAAA,GAFA,GAAA2H,EAAA;AAAA,oCAAAlrB,EACMirB,GAAM;AAAA,sCAAA,OAAA,EAAA,OAAA,WAAA,eAAA,OAAA;AAAA;;;;;;;;;;;+BA1MHnkB,EAAC,MAAA;AAAA,wBAAA9G,EAAqBmrB,GAAiB;AAAA,0BAAA,OAAA;AAAA;;;;oBAoNxD,GAAA,MAAI,0BADZ,IAIE,EAAA;AAAA,oBAAAtkB,EAAA,SAAA,qBAAA0c,EAAA,aAAA,aAAA7c,EAAA,GAFmBC,EAAAiB,GAAA;AAAA,sBAClB,KAAA;AAAA,sBAAA,OAAA;AAAA;;;;;;;;;WAcb,GAAA,CAAA,cAAA,MAAA,SAAA,SAAA,UAAA,OAAA,CAAA;AAAA,MALC,GAAA,CAAA;AAAA,MAAA5H,EACOorB,GAAY;AAAA,QACnB,MAAMvkB,EAAA;AAAA,QACN,OAAUA,EAAA;AAAA,QACX,MAAIA,EAAA;AAAA,QAAA,UAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAM,GAAW,CAAA,QAAA,SAAA,QAAA,UAAA,CAAA;AAAA,MAAA7G,EACVqrB,GAAY;AAAA,QACnB,MAAMxkB,EAAA;AAAA,QACP,OAAIA,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAM,GAAW,CAAA,QAAA,SAAA,MAAA,CAAA;AAAA,MAAA7G,EACVsrB,GAAY;AAAA,QACnB,MAAMzkB,EAAA;AAAA,QACP,OAAIA,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAO,GAAY,CAAA,QAAA,SAAA,MAAA,CAAA;AAAA,MAAA7G,EACburB,GAAI;AAAA,QACX,OAAI1kB,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAO,GAAY,CAAA,SAAA,MAAA,CAAA;AAAA,MAAA7G,EACbwrB,GAAI;AAAA,QACX,OAAI3kB,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAO,GAAY,CAAA,SAAA,MAAA,CAAA;AAAA,MAAA7G,EACbyrB,IAAI;AAAA,QACX,OAAI5kB,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAM,GAAI,CAAA,SAAA,MAAA,CAAA;AAAA,MAAA7G,EACJ0rB,GAAW;AAAA,QACjB,MAAK7kB,EAAE;AAAA,QACP,MAAMA,EAAA;AAAA,QACN,OAAYA,EAAA;AAAA,QACb,MAAIA,EAAA;AAAA,QAAA,YAAAA,EAAA;AAAA,QAEN,KAAA;AAAA,MAAA,GACG,MAAM,GAAW,CAAA,QAAA,QAAA,SAAA,QAAA,YAAA,CAAA;AAAA,MAAA7G,EACX2rB,IAAI;AAAA,QACX,MAAI9kB,EAAA;AAAA,QAAA,MAAAA,EAAA;AAAA;;;;;;uFClbG+kB,KAAc;AAAA,EACzB,oBAAoB;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AACF,GCpBAC,KAAehpB,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,gBAAAipB;AAAA,EACF;AAAA,EACA,QAAS;AACD,UAAAC,IAAS,CAAC,sBAAsB,cAAc,gBAAgB,iBAAiB,cAAc,iBAAiB,iBAAiB,GAC/HzW,IAAoB/R,EAAOgS,EAAkB,GAC7CyW,IAAwB9nB,EAAS,MAAA;;AAAM,cAAAb,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B;AAAA,KAAI,GACrE4oB,IAAe/nB,EAAS,MAAM;;AAAA,cAAC,GAACb,IAAAO,EAAM0R,CAAiB,MAAvB,QAAAjS,EAA0B;AAAA,KAAY,GACtE6oB,IAAW7nB,EAAI,CAAA,CAAE,GACjB8nB,IAAQC,GAAmC,CAAA,CAAE,GAC7CpoB,IAAsBT,EAAOU,EAAqB,GAClDooB,IAAyB,MAAM;;AACnC,YAAMvoB,IAAgB4B,IAAUrC,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,aAAa,GACjEipB,IAAmB;AAAA;AAAA,QAEvB,MAAM,CAAC,iBAAiB,YAAY;AAAA,QACpC,KAAK,CAAC,sBAAsB,YAAY;AAAA,QACxC,WAAW,CAAC,sBAAsB,YAAY;AAAA,QAC9C,KAAK,CAAC,sBAAsB,cAAc,cAAc;AAAA,QACxD,MAAM,CAAC,sBAAsB,cAAc,cAAc;AAAA,QACzD,YAAY,CAAC,sBAAsB,cAAc,gBAAgB,eAAe;AAAA,QAChF,OAAO,CAAC,sBAAsB,cAAc,cAAc;AAAA,QAC1D,OAAOL,EAAa,QAAQ,CAAC,iBAAiB,YAAY,IAAI,CAACnoB,EAAc,aAAa,oBAAoB,mBAAmB,YAAY;AAAA,QAC7I,MAAM,CAAC,iBAAiB,YAAY;AAAA,QACpC,YAAY,CAAC,YAAY;AAAA,QACzB,QAAQ,CAAC,sBAAsB,YAAY;AAAA,QAC3C,YAAY,CAAC,sBAAsB,YAAY;AAAA,QAC/C,YAAY,CAAC,sBAAsB,cAAc,YAAY;AAAA,QAC7D,UAAU,CAAC,sBAAsB,YAAY;AAAA,QAC7C,OAAO,CAAC,sBAAsB,YAAY;AAAA,QAC1C,MAAM,CAAC,sBAAsB,YAAY;AAAA,QACzC,SAAS,CAAC,YAAY;AAAA,QACtB,SAAS,CAAC,sBAAsB,cAAc,YAAY;AAAA,QAC1D,YAAY,CAAC,mBAAmB,YAAY;AAAA,QAC5C,WAAW,CAAC,sBAAsB,cAAc,YAAY;AAAA,QAC5D,YAAY,CAAC,YAAY;AAAA,QACzB,OAAO,CAAC,YAAY;AAAA,QACpB,SAAS,CAAC,sBAAsB,YAAY;AAAA,QAC5C,QAAQ,CAAC,sBAAsB,cAAc,mBAAmB;AAAA,MAAA,GAE5DyoB,IAAW;AACb,UAAA5e,IAAO/J,EAAMooB,CAAqB;AAClC,UAAAre,EAAK,WAAW4e,CAAQ,GAAG;AAC7B,cAAMC,IAAaD,EAAS;AACrB,QAAA5e,MAAAlI,IAAAkI,EAAK,MAAM6e,GAAYA,IAAa,CAAC,MAArC,gBAAA/mB,EAAwC,iBAAgBkI,EAAK,MAAM6e,IAAa,CAAC;AAAA;AAEpF,YAAAC,IAAmBH,EAAiB3e,CAAI,GACxCga,IAAMiE,IACNliB,KAAM+iB,KAAA,gBAAAA,EAAkB,WAAU;AACxC,eAASptB,IAAI,GAAGA,IAAIqK,GAAKrK,KAAK;AACtB,cAAAqtB,IAAmBD,EAAiBptB,CAAC;AAE3C,YAAI,CAACqtB;AAAiB;AACtB,QAAAP,EAAM,KAAK;AAAA,UACT,GAAGxE,EAAI+E,CAAe;AAAA,UACtB,MAAMA;AAAA,QAAA,CACP;AAAA;AAIH,iBAAW/nB,KAAQonB;AACb,QAAAvC,GAAO1lB,GAAea,CAAI,KAAK,CAAC8nB,EAAiB,KAAK,CAAC5nB,MAAcA,MAAMF,CAAI,IACnEb,EAAAa,CAAI,IAAI,KAEtB,OAAOb,EAAca,CAAI;AAG7B,MAAAX,EAAoBF,CAAa;AAAA,IAAA;AAGZ,WAAAuoB,KACjBnmB,GAAA,MAAM8lB,EAAsB,OAAO,MAAM;AAC7C,MAAAG,EAAM,SAAS,GACQE;IAAA,CACxB,GAEM;AAAA,MACL,UAAAH;AAAA,MACA,OAAAC;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;YChGC1lB,EAIM,kBAAA;AAF2E,SAAAC,EAAA,GAAAW,EAAA,OAAAd,IAAA;AAAA,KAAAG,EADzC,EAAK,GAAIW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,OAAA,CAAA8lB,OACtBjmB,EAAmB,GAAAC,EAAAimB,GAAAC,GAAA;AAAA,MAAE,KAAIF,EAAM;AAAA,MAAmB,OAAA;AAAA,MAAA,MAAAA,EAAA;AAAA;;;uFC0BlEG,KAA2B;AAAA,EACtC;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyCA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,QAAQ,YAAY;AAAA,IAC/B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,SAAS;AAAA,IACpB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,OAAO,YAAY;AAAA,IAC9B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,OAAO,eAAe,QAAQ,OAAO,SAAS,SAAS;AAAA,IAClE,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU,CAAC,OAAO,cAAc,UAAU,cAAc,QAAQ,OAAO;AAAA,IACvE,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU,CAAC,QAAQ,OAAO,cAAc,SAAS;AAAA,IACjD,OAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,SAAS;AAAA,IACpB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,SAAS;AAAA,IACpB,OAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU,CAAC,OAAO,YAAY;AAAA,IAC9B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,MAAM;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,MAAM;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,QAAQ,QAAQ,OAAO;AAAA,IAClC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,SAAS,MAAM;AAAA,IAC1B,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,MAAM;AAAA,IACjB,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,UAAU,WAAW;AAAA,IAChC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,IAGF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF,GCvrBMC,KAAgB,CACpB;AAAA,EAAExnB,OAAO;AAAA,EAAQ3F,OAAO;AAAW,GACnC;AAAA,EAAE2F,OAAO;AAAA,EAAM3F,OAAO;AAAqB,GAC3C;AAAA,EAAE2F,OAAO;AAAA,EAAM3F,OAAO;AAAoB,GAC1C;AAAA,EAAE2F,OAAO;AAAA,EAAM3F,OAAO;AAAoB,GAC1C;AAAA,EAAE2F,OAAO;AAAA,EAAM3F,OAAO;AAA0B,CAAC,GAG7CotB,KAAoBD,GAAcpF,IAAKsF,CAAAA,OACpC;AAAA,EACLrtB,OAAOqtB,EAAKrtB;AAAAA,EACZ2F,OAAKvF,EAAA,QAAA;AAAA,IAAA,OAAgB;AAAA,MAAEktB,YAAYD,EAAKrtB;AAAAA,IAAM;AAAA,KAAIqtB,CAAAA,EAAK1nB,KAAK,CAAA;EAE/D,GAGY4nB,KAA4C;AAAA,EACvDzf,SAAS;AAAA,IACPnI,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLutB,WAAW;AAAA,IACb;AAAA,EACD;AAAA,EACDnH,MAAM;AAAA,IACJ1gB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDhP,OAAO;AAAA,IACL/C,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+V,YAAY;AAAA,IACV9nB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDgW,OAAO,CACL;AAAA,IACE/nB,OAAO;AAAA,IACPgoB,YAAY;AAAA,IACZjW,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRC,UAAU;AAAA,IACZ;AAAA,EACF,GACA;AAAA,IACEnoB,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRE,KAAK;AAAA,MACLC,KAAK;AAAA,IACP;AAAA,EACF,GACA;AAAA,IACEroB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACF,CAAC;AAAA,EAEHC,QAAQ,CACN;AAAA,IACEtoB,OAAO;AAAA,IACPgoB,YAAY;AAAA,IACZC,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRC,UAAU;AAAA,IACZ;AAAA,EACF,GACA;AAAA,IACEnoB,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRE,KAAK;AAAA,MACLC,KAAK;AAAA,IACP;AAAA,EACF,GACA;AAAA,IACEroB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACF,CAAC;AAAA,EAEHE,iBAAiB,CACf;AAAA,IACEvoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACb,CAAC;AAAA,EAEHyW,gBAAgB,CACd;AAAA,IACExoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEHouB,iBAAiB,CACf;AAAA,IACEzoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACb,CAAC;AAAA,EAEH2W,mBAAmB;AAAA,IACjB1oB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,EACb;AAAA,EACDW,OAAO;AAAA,IACL3oB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEJ;AAAA,IACD2tB,YAAY;AAAA,EACb;AAAA,EACDY,gBAAgB;AAAA,IACd5oB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACR,GACD,GAAGotB,EAAiB;AAAA,IAExB;AAAA,EACD;AAAA,EACDptB,OAAO,CACL;AAAA,IACE2F,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,GACA;AAAA,IACEjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,EACZ,CAAC;AAAA,EAEHY,aAAa,CACX;AAAA,IACE7oB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACb,CAAC;AAAA,EAEH+W,QAAQ;AAAA,IACN9oB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXgX,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACD4uB,SAAS;AAAA,IACPjpB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmX,YAAY;AAAA,IACVlpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD8uB,UAAU;AAAA,IACRnpB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqX,UAAU;AAAA,IACRppB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDiB,kBAAkB;AAAA,IAChBrpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDkB,gBAAgB;AAAA,IACdtpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDmvB,MAAM;AAAA,IACJxpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDuB,KAAK;AAAA,IACHzpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDwB,WAAW;AAAA,IACT1pB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDsvB,eAAe;AAAA,IACb3pB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDuvB,gBAAgB;AAAA,IACd5pB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDwvB,YAAY;AAAA,IACV7pB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDstB,YAAY;AAAA,IACV3nB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACR,GACD,GAAGotB,EAAiB;AAAA,IAExB;AAAA,EACD;AAAA,EACDqC,eAAe;AAAA,IACb9pB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEH0vB,mBAAmB;AAAA,IACrB;AAAA,EACD;AAAA,EACDC,kBAAkB;AAAA,IAChBhqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEH0vB,mBAAmB;AAAA,IACrB;AAAA,EACD;AAAA,EACDE,YAAY;AAAA,IACVjqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEH0vB,mBAAmB;AAAA,IACrB;AAAA,EACD;AAAA,EACDG,WAAW;AAAA,IACTlqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEH0vB,mBAAmB;AAAA,IACrB;AAAA,EACD;AAAA,EACDI,OAAO;AAAA,IACLnqB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqY,QAAQ;AAAA,IACNpqB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsY,YAAY;AAAA,IACVrqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDkC,WAAW;AAAA,IACTtqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDmC,YAAY;AAAA,IACVvqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLmC,MAAM;AAAA,IACR;AAAA,EACD;AAAA,EACDC,aAAa;AAAA,IACXzqB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDsC,aAAa;AAAA,IACX1qB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDuC,WAAW;AAAA,IACT3qB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6Y,cAAc;AAAA,IACZ5qB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8Y,gBAAgB;AAAA,IACd7qB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDywB,uBAAuB;AAAA,IACrB9qB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDgZ,kBAAkB;AAAA,IAChB/qB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDiZ,sBAAsB;AAAA,IACpBhrB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkZ,WAAW;AAAA,IACTjrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD6wB,YAAY;AAAA,IACVlrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD8wB,cAAc;AAAA,IACZnrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD+wB,gBAAgB;AAAA,IACdprB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsZ,YAAY;AAAA,IACVrrB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDuZ,kBAAkB;AAAA,IAChBtrB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwZ,eAAe;AAAA,IACbvrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDsD,eAAe,CACb;AAAA,IACExrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACE2F,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU,CAAC,OAAO,OAAO;AAAA,IACzB3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEHoxB,iBAAiB;AAAA,IACfzrB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDqD,kBAAkB;AAAA,IAChB1rB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDsD,YAAY;AAAA,IACV3rB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDuD,aAAa;AAAA,IACX5rB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8Z,aAAa;AAAA,IACX7rB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDyD,cAAc;AAAA,IACZ9rB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0D,QAAQ;AAAA,IACN/rB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDia,gBAAgB;AAAA,IACdhsB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD4D,QAAQ;AAAA,IACNjsB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD2S,QAAQ,CACN;AAAA,IACEhN,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACE2F,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU,CAAC,QAAQ,SAAS,MAAM;AAAA,EACpC,CAAC;AAAA,EAEH3f,UAAU;AAAA,IACRtI,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDma,oBAAoB;AAAA,IAClBlsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDoa,oBAAoB;AAAA,IAClBnsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqa,eAAe;AAAA,IACbpsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsa,eAAe;AAAA,IACbrsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDua,wBAAwB;AAAA,IACtBtsB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDkE,0BAA0B;AAAA,IACxBvsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDya,iBAAiB;AAAA,IACfxsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0a,qBAAqB;AAAA,IACnBzsB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2a,eAAe;AAAA,IACb1sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4a,eAAe;AAAA,IACb3sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6a,qBAAqB;AAAA,IACnB5sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8a,oBAAoB;AAAA,IAClB7sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+a,wBAAwB;AAAA,IACtB9sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDgb,yBAAyB;AAAA,IACvB/sB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDib,oBAAoB;AAAA,IAClBhtB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD4yB,wBAAwB;AAAA,IACtBjtB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD6yB,yBAAyB;AAAA,IACvBltB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD8yB,oBAAoB;AAAA,IAClBntB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD+yB,oBAAoB;AAAA,IAClBptB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsb,gBAAgB;AAAA,IACdrtB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDub,wBAAwB;AAAA,IACtBttB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwb,0BAA0B;AAAA,IACxBvtB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyb,iBAAiB;AAAA,IACfxtB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0b,qBAAqB;AAAA,IACnBztB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2b,qBAAqB;AAAA,IACnB1tB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4b,UAAU;AAAA,IACR3tB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDuzB,WAAW;AAAA,IACT5tB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8b,eAAe,CACb;AAAA,IACE7tB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,EACZ,CAAC;AAAA,EAEHhV,SAAS,CACP;AAAA,IACEjT,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACL0S,QAAQ;AAAA,QACN;AAAA,UACEhN,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACEpI,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACEpI,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN9N,OAAO;AAAA,YACL4tB,QAAQ;AAAA,YACRG,KAAK;AAAA,YACLD,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACEpoB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACLgQ,SAAS,CACP;AAAA,cACEtK,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,aACR;AAAA,UAEL;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACLgQ,SAAS,CACP;AAAA,cACEtK,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,aACR;AAAA,UAEL;AAAA,QACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAaD;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACLgQ,SAAS,CACP;AAAA,cACEtK,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,aACR;AAAA,UAEL;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2gB,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACR;AAAA,UACDC,OAAO;AAAA,YACL+tB,KAAK;AAAA,UACP;AAAA,QACF;AAAA,QACA;AAAA,UACEroB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO,CAAC,UAAU,UAAU;AAAA,UAC9B;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdhF,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACL+tB,KAAK;AAAA,UACN;AAAA,UACDU,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACL4tB,QAAQ;AAAA,YACRG,KAAK;AAAA,UACN;AAAA,UACDU,MAAM;AAAA,YACJC,OAAO;AAAA,YACP3uB,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,QAChB;AAAA,QACA;AAAA,UACE/tB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN2lB,cAAc;AAAA,UACdzzB,OAAO;AAAA,YACLgQ,SAAS,CACP;AAAA,cACEtK,OAAO;AAAA,cACP3F,OAAO;AAAA,YACT,GACA;AAAA,cACE2F,OAAO;AAAA,cACP3F,OAAO;AAAA,aACR;AAAA,UAEL;AAAA,QACF;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN4lB,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACEhuB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN4lB,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACEhuB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN4lB,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACEhuB,OAAO;AAAA,UACP3F,OAAO;AAAA,UACP+N,MAAM;AAAA,UACN4lB,WAAW;AAAA;MACZ;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACEhuB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACL0S,QAAQ,CACN;AAAA,QACEhN,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,MACR,GACA;AAAA,QACEpI,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,MACR,GACA;AAAA,QACEpI,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN9N,OAAO;AAAA,UACL4tB,QAAQ;AAAA,UACRG,KAAK;AAAA,QACP;AAAA,MACF,GACA;AAAA,QACEroB,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdzzB,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdzzB,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,MAChB,GACA;AAAA,QACE/tB,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN9N,OAAO;AAAA,UACL4tB,QAAQ;AAAA,UACRG,KAAK;AAAA,QACP;AAAA,MACF,GACA;AAAA,QACEroB,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,MAChB,GACA;AAAA,QACE/tB,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdzzB,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,MAChB,GACA;AAAA,QACE/tB,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdzzB,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdhF,MAAM;AAAA,UACJC,OAAO;AAAA,UACP3uB,OAAO;AAAA,QACT;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdhF,MAAM;AAAA,UACJC,OAAO;AAAA,UACP3uB,OAAO;AAAA,QACT;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdhF,MAAM;AAAA,UACJC,OAAO;AAAA,UACP3uB,OAAO;AAAA,QACT;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdzzB,OAAO;AAAA,UACL4tB,QAAQ;AAAA,UACRG,KAAK;AAAA,QACN;AAAA,QACDU,MAAM;AAAA,UACJC,OAAO;AAAA,UACP3uB,OAAO;AAAA,QACT;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN2lB,cAAc;AAAA,QACdhF,MAAM;AAAA,UACJC,OAAO;AAAA,UACP3uB,OAAO,CAAC,QAAQ;AAAA,QAClB;AAAA,OACD;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEH4zB,UAAU;AAAA,IACRjuB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD3L,MAAM,CACJ;AAAA,IACEpG,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEH6zB,aAAa;AAAA,IACXluB,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD8zB,UAAU;AAAA,IACRlG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqc,YAAY;AAAA,IACVnG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsc,WAAW;AAAA,IACTruB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACL+oB,MAAM;AAAA,MACN/Y,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDi0B,kBAAkB;AAAA,IAChBrG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwc,eAAe;AAAA,IACbtG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyc,WAAW;AAAA,IACTvG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0c,WAAW;AAAA,IACTxG,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2c,UAAU;AAAA,IACR1uB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4c,UAAU;AAAA,IACR3uB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6c,iBAAiB;AAAA,IACf5uB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLmC,MAAM;AAAA,IACR;AAAA,EACD;AAAA,EACDqE,SAAS;AAAA,IACP7uB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLmC,MAAM;AAAA,IACR;AAAA,EACD;AAAA,EACDsE,eAAe;AAAA,IACb9uB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsR,MAAM,CACJ;AAAA,IACErjB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS;AAAA;AAAA,QAEP;AAAA,UACEtK,OAAO;AAAA,UACP3F,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE2F,OAAO;AAAA,UACP3F,OAAO;AAAA;MACR;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACE2F,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACE2F,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXkW,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,GACA;AAAA,IACE2F,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEH00B,UAAU;AAAA,IACR/uB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDid,gBAAgB;AAAA,IACdhvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkd,oBAAoB;AAAA,IAClBjvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmd,0BAA0B;AAAA,IACxBlvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDod,cAAc;AAAA,IACZnvB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD+G,aAAa;AAAA,IACXpvB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDgH,QAAQ;AAAA,IACNrvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDud,cAAc;AAAA,IACZtvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwd,YAAY;AAAA,IACVvvB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDmH,YAAY;AAAA,IACVxvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0d,uBAAuB;AAAA,IACrBzvB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2d,qBAAqB;AAAA,IACnB1vB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4d,aAAa;AAAA,IACX3vB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6d,iBAAiB;AAAA,IACf5vB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8d,UAAU;AAAA,IACR7vB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+d,oBAAoB;AAAA,IAClB9vB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD01B,oBAAoB;AAAA,IAClB/vB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDie,gBAAgB;AAAA,IACdhwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDke,UAAU,CACR;AAAA,IACEjwB,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACF,CAAC;AAAA,EAEH61B,OAAO;AAAA,IACLlwB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACRxzB,OAAO;AAAA,MACL8tB,KAAK;AAAA,MACLpb,QAAQ,CACN;AAAA,QACEhN,OAAO,CAAC,MAAM,IAAI;AAAA,QAClBoI,MAAM;AAAA,QACN/N,OAAO;AAAA,QACPC,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,OACD;AAAA,IAEL;AAAA,EACD;AAAA,EACD81B,aAAa;AAAA,IACXnwB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACRxzB,OAAO;AAAA,MACL0S,QAAQ,CACN;AAAA,QACEhN,OAAO;AAAA,QACPoI,MAAM;AAAA,QACN/N,OAAO;AAAA,QACP+1B,eAAe;AAAA,QACf91B,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACPoI,MAAM;AAAA,QACN/N,OAAO;AAAA,QACPC,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACPoI,MAAM;AAAA,QACN/N,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDg2B,WAAW;AAAA,IACTrwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDue,SAAS;AAAA,IACPtwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwe,gBAAgB;AAAA,IACdvwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDye,cAAc;AAAA,IACZxwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0e,aAAa;AAAA,IACXzwB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2e,YAAY;AAAA,IACV1wB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4e,YAAY;AAAA,IACV3wB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDu2B,eAAe;AAAA,IACb5wB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDw2B,aAAa;AAAA,IACX7wB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDyI,iBAAiB;AAAA,IACf9wB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0I,oBAAoB;AAAA,IAClB/wB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDif,uBAAuB;AAAA,IACrBhxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkf,yBAAyB;AAAA,IACvBjxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmf,uBAAuB;AAAA,IACrBlxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDof,+BAA+B;AAAA,IAC7BnxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqf,iCAAiC;AAAA,IAC/BpxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsf,aAAa;AAAA,IACXrxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDuf,SAAS;AAAA,IACPtxB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwf,UAAU;AAAA,IACRvxB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDmJ,aAAa;AAAA,IACXxxB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDoJ,YAAY;AAAA,IACVzxB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDqJ,aAAa;AAAA,IACX1xB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDsJ,aAAa;AAAA,IACX3xB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDuJ,aAAa;AAAA,IACX5xB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDwJ,eAAe;AAAA,IACb7xB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+f,kBAAkB;AAAA,IAChB9xB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2J,yBAAyB;AAAA,IACvB/xB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDigB,yBAAyB;AAAA,IACvBhyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkgB,wBAAwB;AAAA,IACtBjyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmgB,2BAA2B;AAAA,IACzBlyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDogB,2BAA2B;AAAA,IACzBnyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqgB,SAAS;AAAA,IACPpyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsgB,SAAS;AAAA,IACPryB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDugB,WAAW;AAAA,IACTtyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwgB,0BAA0B;AAAA,IACxBvyB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDm4B,YAAY;AAAA,IACVxyB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0gB,eAAe;AAAA,IACbzyB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDsK,gBAAgB;AAAA,IACd1yB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDuK,qBAAqB;AAAA,IACnB3yB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6gB,SAAS;AAAA,IACP5yB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDyK,YAAY;AAAA,IACV7yB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0K,UAAU;AAAA,IACR9yB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2K,WAAW;AAAA,IACT/yB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD4K,kBAAkB;AAAA,IAChBhzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkhB,cAAc;AAAA,IACZjzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmhB,eAAe;AAAA,IACblzB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD84B,iBAAiB;AAAA,IACfnzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqhB,gBAAgB;AAAA,IACdpzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDshB,aAAa;AAAA,IACXrzB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDi5B,YAAY;AAAA,IACVtzB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDk5B,oBAAoB;AAAA,IAClBvzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyhB,iBAAiB;AAAA,IACfxzB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0hB,OAAO;AAAA,IACLzzB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDq5B,QAAQ;AAAA,IACN1zB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4hB,MAAM;AAAA,IACJ3zB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXgX,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACDR,QAAQ;AAAA,IACNmG,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDu5B,aAAa;AAAA,IACX5zB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACRxzB,OAAO;AAAA,MACLu5B,UAAW;AAAA;AAAA,MAEX1rB,SAAS;AAAA,MACTuE,WAAW;AAAA,MACXohB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDgG,aAAa;AAAA,IACX9zB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACD6L,cAAc;AAAA,IACZ/zB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDhT,WAAW;AAAA,IACTiB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDiiB,aAAa;AAAA,IACXh0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkiB,mBAAmB;AAAA,IACjBj0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmiB,YAAY;AAAA,IACVl0B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACRxzB,OAAO;AAAA,MACL0S,QAAQ,CACN;AAAA,QACEhN,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,MACR,GACA;AAAA,QACEpI,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,MACR,GACA;AAAA,QACEpI,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,QACN9N,OAAO;AAAA,UACLgQ,SAAS,CACP;AAAA,YACEtK,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,UACT,GACA;AAAA,YACE2F,OAAO;AAAA,YACP3F,OAAO;AAAA,WACR;AAAA,QAEL;AAAA,MACF,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,QACP+N,MAAM;AAAA,OACP;AAAA,IAEL;AAAA,EACD;AAAA,EACD+rB,iBAAiB;AAAA,IACfn0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqiB,qBAAqB;AAAA,IACnBp0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsiB,aAAa;AAAA,IACXr0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDuiB,cAAc;AAAA,IACZt0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwiB,cAAc;AAAA,IACZv0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyiB,eAAe;AAAA,IACbx0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0iB,sBAAsB;AAAA,IACpBz0B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2iB,gBAAgB;AAAA,IACd10B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4iB,kBAAkB;AAAA,IAChB30B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLkwB,MAAM;AAAA,MACNnC,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDwM,kBAAkB;AAAA,IAChB50B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8iB,mBAAmB;AAAA,IACjB70B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+iB,sBAAsB;AAAA,IACpB90B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0M,iBAAiB;AAAA,IACf/0B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2M,oBAAoB;AAAA,IAClBh1B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD46B,kBAAkB;AAAA,IAChBj1B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmjB,iBAAiB;AAAA,IACfl1B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD8M,oBAAoB;AAAA,IAClBn1B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD+6B,kBAAkB;AAAA,IAChBp1B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsjB,SAAS;AAAA,IACPr1B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXujB,UAAWp7B,GAAKG,GAAOk7B,GAAeh3B,GAAe;AACnD,YAAM;AAAA,QAAEuV,cAAAA,IAAe,CAAA;AAAA,MAAI,IAAGvV,GACxBi3B,IAAen7B,IAAQyZ,EAAasO,IAAItoB,CAAAA,MAAKA,EAAEkG,KAAK,IAAI;AAC9Du1B,MAAAA,EAAc;AAAA,QAAEC,cAAAA;AAAAA,MAAa,CAAC;AAAA,IAChC;AAAA,EACD;AAAA,EACDA,cAAc;AAAA,IACZx1B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+oB,MAAM;AAAA,MACN/Y,SAAU/L,CAAAA,MAAkB;AAC1B,cAAM;AAAA,UAAEuV,cAAAA,IAAe,CAAA;AAAA,QAAI,IAAGvV;AAC9B,eAAOuV,EAAasO,IAAItoB,CAAAA,OAAM;AAAA,UAAEkG,OAAOlG,EAAEkG;AAAAA,UAAO3F,OAAOP,EAAEkG;AAAAA,QAAO,EAAC;AAAA,MACnE;AAAA,IACD;AAAA,IACDy1B,QAAQ;AAAA,MACNC,MAAM;AAAA,QACJp7B,OAAO,CACL;AAAA,UACEA,OAAO;AAAA,UACPD,OAAO;AAAA,UACPsS,MAAM;AAAA,SACP;AAAA,MAEL;AAAA,IACF;AAAA,EACD;AAAA,EACDgpB,gBAAgB;AAAA,IACd31B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6jB,WAAW;AAAA,IACT51B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8jB,WAAW;AAAA,IACT71B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+jB,MAAM;AAAA,IACJ91B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDgkB,UAAU;AAAA,IACR9N,UAAU;AAAA,IACVjoB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD27B,aAAa;AAAA,IACXh2B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkkB,eAAe;AAAA,IACbj2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD67B,mBAAmB;AAAA,IACjBl2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD87B,kBAAkB;AAAA,IAChBn2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD+7B,sBAAsB;AAAA,IACpBp2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDgO,aAAa;AAAA,IACXr2B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDukB,gBAAgB;AAAA,IACdt2B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwkB,UAAU;AAAA,IACRv2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDmO,cAAc;AAAA,IACZx2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDo8B,SAAS;AAAA,IACPz2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLqO,gBAAgB;AAAA,MAChBC,QAAQ,CACN;AAAA,QACE32B,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEHu8B,gBAAgB;AAAA,MAChB1O,QAAQ,CACN;AAAA,QACEloB,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDw8B,gBAAgB;AAAA,IACd72B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLuO,gBAAgB;AAAA,MAChB1O,QAAQ,CACN;AAAA,QACEloB,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDy8B,kBAAkB;AAAA,IAChB92B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0O,kBAAkB;AAAA,IAChB/2B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2O,UAAU;AAAA,IACRh3B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD6O,YAAY;AAAA,IACVj3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmlB,oBAAoB;AAAA,IAClBl3B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD8O,oBAAoB;AAAA,IAClBn3B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD+O,aAAa;AAAA,IACXp3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDslB,sBAAsB;AAAA,IACpBr3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDulB,iBAAiB;AAAA,IACft3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwlB,qBAAqB;AAAA,IACnBv3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDylB,qBAAqB;AAAA,IACnBx3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0lB,iBAAiB;AAAA,IACfz3B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2lB,UAAU;AAAA,IACR13B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4lB,eAAe;AAAA,IACb33B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6lB,mBAAmB;AAAA,IACjB53B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8lB,eAAe;AAAA,IACb73B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+lB,gBAAgB;AAAA,IACd93B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDgmB,eAAe;AAAA,IACb/3B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2P,iBAAiB;AAAA,IACfh4B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD4P,kBAAkB;AAAA,IAChBj4B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD6P,mBAAmB;AAAA,IACjBl4B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDomB,gBAAgB;AAAA,IACdn4B,OAAO;AAAA,IACPioB,UAAU;AAAA,IACVlW,WAAW;AAAA,EACZ;AAAA,EACDqmB,eAAe;AAAA,IACbp4B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDsmB,cAAc;AAAA,IACZr4B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDumB,YAAY;AAAA,IACVt4B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDkvB,YAAY;AAAA,IACVvpB,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDk+B,eAAe;AAAA,IACbv4B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDymB,eAAe;AAAA,IACbx4B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDuQ,cAAc;AAAA,IACZz4B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2mB,eAAe;AAAA,IACb14B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4mB,aAAa;AAAA,IACX34B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6mB,YAAY;AAAA,IACV54B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDwQ,eAAe;AAAA,IACb74B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDyQ,eAAe;AAAA,IACb94B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0Q,aAAa;AAAA,IACX/4B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD2+B,UAAU;AAAA,IACRh5B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDknB,cAAc;AAAA,IACZj5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD8Q,gBAAgB;AAAA,IACdl5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEH0vB,mBAAmB;AAAA,IACrB;AAAA,EACD;AAAA,EACDoP,WAAW;AAAA,IACTn5B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqnB,SAAS;AAAA,IACPp5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDmR,UAAU;AAAA,IACRr5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDoR,iBAAiB;AAAA,IACft5B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwnB,WAAW;AAAA,IACTv5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDm/B,gBAAgB;AAAA,IACdx5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDuR,WAAW;AAAA,IACTz5B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDqsB,cAAc;AAAA,IACZ1mB,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2nB,oBAAoB;AAAA,IAClB15B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDyR,oBAAoB;AAAA,IAClB35B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACD0R,oBAAoB;AAAA,IAClB55B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8nB,wBAAwB;AAAA,IACtB75B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+nB,UAAU;AAAA,IACR95B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLD,KAAK;AAAA,MACLF,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACD6R,cAAc;AAAA,IACZ/5B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDioB,gBAAgB;AAAA,IACdh6B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkoB,YAAY;AAAA,IACVj6B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD6R,eAAe;AAAA,IACbl6B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLivB,YAAY;AAAA,MACZjf,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD8/B,cAAc;AAAA,IACZn6B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqoB,gBAAgB;AAAA,IACdp6B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDmS,aAAa;AAAA,IACXr6B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDuoB,aAAa;AAAA,IACXt6B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,CAAC;AAAA,MAEHkgC,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACDC,iBAAiB;AAAA,IACfx6B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0oB,SAAS;AAAA,IACPz6B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDqgC,YAAY;AAAA,IACV16B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDsgC,aAAa;AAAA,IACX36B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6oB,gBAAgB;AAAA,IACd56B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8oB,uBAAuB;AAAA,IACrB76B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+oB,UAAU;AAAA,IACR96B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACD6S,iBAAiB;AAAA,IACf/6B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDipB,eAAe;AAAA,IACbh7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkpB,eAAe;AAAA,IACbj7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmpB,iBAAiB;AAAA,IACfl7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDopB,eAAe;AAAA,IACbn7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqpB,iBAAiB;AAAA,IACfp7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDspB,mBAAmB;AAAA,IACjBr7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDupB,uBAAuB;AAAA,IACrBt7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDwpB,yBAAyB;AAAA,IACvBv7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDypB,sBAAsB;AAAA,IACpBx7B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0pB,iBAAiB;AAAA,IACfz7B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDqhC,cAAc;AAAA,IACZ17B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDshC,SAAS;AAAA,IACP37B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6pB,SAAS;AAAA,IACP57B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8pB,gBAAgB;AAAA,IACd77B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+pB,cAAc;AAAA,IACZ97B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD0hC,aAAa;AAAA,IACX/7B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACD8T,cAAc;AAAA,IACZh8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkqB,aAAa;AAAA,IACXj8B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD6T,cAAc;AAAA,IACZl8B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXgX,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACD8hC,aAAa;AAAA,IACXn8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqqB,iBAAiB;AAAA,IACfp8B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXrG,OAAO;AAAA,IACPqd,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACDgiC,gBAAgB;AAAA,IACdr8B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CAAE;AAAA,MACXgyB,UAAU;AAAA,IACZ;AAAA,EACD;AAAA,EACDC,cAAc;AAAA,IACZv8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyqB,eAAe;AAAA,IACbx8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD0qB,aAAa;AAAA,IACXz8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD2qB,cAAc;AAAA,IACZ18B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD4qB,iBAAiB;AAAA,IACf38B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6qB,cAAc;AAAA,IACZ58B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8qB,WAAW;AAAA,IACT78B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+qB,eAAe;AAAA,IACb98B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLuO,gBAAgB;AAAA,MAChB1O,QAAQ,CACN;AAAA,QACEloB,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD0iC,WAAW;AAAA,IACT/8B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDirB,WAAW;AAAA,IACTh9B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDkrB,eAAe;AAAA,IACbj9B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmrB,gBAAgB;AAAA,IACdl9B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDorB,cAAc;AAAA,IACZn9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD+U,eAAe;AAAA,IACbp9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDgV,gBAAgB;AAAA,IACdr9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDoV,gBAAgB;AAAA,IACdt9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,IACV;AAAA,EACD;AAAA,EACDqV,mBAAmB;AAAA,IACjBv9B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDyrB,cAAc;AAAA,IACZx9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDoV,aAAa;AAAA,IACXz9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLu5B,UAAW;AAAA;AAAA,MAEX1rB,SAAS;AAAA,MACTuE,WAAW;AAAA,IACb;AAAA,EACD;AAAA,EACDgxB,WAAW;AAAA,IACT19B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,MACLD,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDuV,YAAY;AAAA,IACV39B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD6rB,UAAU;AAAA,IACR59B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD8rB,QAAQ;AAAA,IACN79B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACD+rB,QAAQ;AAAA,IACN99B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0V,WAAW;AAAA,IACT/9B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2V,YAAY;AAAA,IACVh+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD4V,wBAAwB;AAAA,IACtBj+B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDmsB,cAAc;AAAA,IACZl+B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDosB,cAAc;AAAA,IACZn+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACD+jC,eAAe;AAAA,IACbp+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDgW,eAAe;AAAA,IACbr+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL+tB,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDiW,iBAAiB;AAAA,IACft+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDkkC,UAAU;AAAA,IACRv+B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDysB,UAAU;AAAA,IACRx+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLgQ,SAAS,CACP;AAAA,QACEtK,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDokC,UAAU;AAAA,IACRz+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACL+tB,KAAK;AAAA,MACLH,QAAQ,CACN;AAAA,QACEloB,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,MACT,GACA;AAAA,QACE2F,OAAO;AAAA,QACP3F,OAAO;AAAA,OACR;AAAA,IAEL;AAAA,EACD;AAAA,EACDqkC,UAAU;AAAA,IACR1+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACVc,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACDskC,UAAU;AAAA,IACR3+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXiW,YAAY;AAAA,IACZC,UAAU;AAAA,IACVc,MAAM,CACJ;AAAA,MACEC,OAAO;AAAA,MACP3uB,OAAO;AAAA,KACR;AAAA,EAEJ;AAAA,EACDukC,WAAW;AAAA,IACT5+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDwW,cAAc;AAAA,IACZ7+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACDyW,YAAY;AAAA,IACV9+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD0W,aAAa;AAAA,IACX/+B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXzX,OAAO;AAAA,MACL4tB,QAAQ;AAAA,MACRG,KAAK;AAAA,IACP;AAAA,EACD;AAAA,EACD2W,eAAe;AAAA,IACbh/B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACXrG,OAAO;AAAA,IACPpR,OAAO;AAAA,MACL2kC,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACDC,oBAAoB;AAAA,IAClBl/B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDotB,oBAAoB;AAAA,IAClBn/B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDqtB,kBAAkB;AAAA,IAChBp/B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDstB,kBAAkB;AAAA,IAChBr/B,OAAO;AAAA,IACP+R,WAAW;AAAA,EACZ;AAAA,EACDutB,oBAAoB;AAAA,IAClBt/B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLu5B,UAAW;AAAA;AAAA,IAEb;AAAA,EACD;AAAA,EACD0L,oBAAoB;AAAA,IAClBv/B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLu5B,UAAW;AAAA;AAAA,IAEb;AAAA,EACD;AAAA,EACD2L,cAAc;AAAA,IACZx/B,OAAO;AAAA,IACP+R,WAAW;AAAA,IACX+b,QAAQ;AAAA,IACR7F,UAAU;AAAA,IACV3tB,OAAO;AAAA,MACLu5B,UAAW;AAAA;AAAA;AAAA,IAGb;AAAA,EACF;AACF,GC50HA4L,KAAeniC,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,QACVmF;AAAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOnI,GAAO,EAAE,MAAA8U,KAAQ;AAIf,WAAA;AAAA,MACL,eAJoB,CAACtP,MAAW;AAC3B,QAAAsP,EAAA,UAAUtP,EAAE,OAAO,KAAK;AAAA,MAAA;AAAA,IAG7B;AAAA,EAEJ;AACF,CAAC;;0BCtCC+kB,IAAAtf,GAAA,OAAA;AAEG,SAAAQ,IAAU5E,KAAQC,EAAAuE,GAAA;AAAA,IAClB,OAAQrE,EAAA;AAAA,IAAA,UAAAA,EAAA;AAAA;;;;;qDCoCbo+B,KAAepiC,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,QAAQ,MAAM;AAAA,MAC7B,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,SAAS;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,cACVsK;AAAAA,IAAA,SACAlK;AAAAA,IAAA,eACAC;AAAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOrD,GAAO,EAAE,MAAA8U,KAAQ;AAChB,UAAA0D,IAAanU,EAAS,MAAM;AAChC,YAAMtE,IAAQC,EAAM;AAChB,aAAA,OAAOD,KAAU,WACZ,WAAWA,CAAK,IACd,OAAOA,KAAU,YAAYA,KAAS,OACxCA,EAAMC,EAAM,QAAQ,IAEtBD;AAAA,IAAA,CACR,GACKslC,IAAyB,CAACv3B,MAC1B9N,EAAM,SAAS,QAAQ,OAAOA,EAAM,SAAU,WACzCA,EAAM,MAAMA,EAAM,GAAG8N,WAAc,CAAC,IAClC,MAAM,QAAQ9N,EAAM8N,CAAI,CAAC,IAC3B9N,EAAM8N,CAAI,EAAE,CAAC,KAAM9N,EAAM8N,CAAI,EAAE,CAAC,EAAU,QAE5C,MAEHw3B,IAAc9gC,EAAI6gC,EAAuB,QAAQ,CAAC,GAClDE,IAAc/gC,EAAI6gC,EAAuB,QAAQ,CAAC;AAsDjD,WAAA;AAAA,MACL,YAAA7sB;AAAA,MACA,eAvDoB,CAACzY,MAAkB;AACvC,cAAM6tB,IAAS5tB,EAAM;AAEjB,QAAA,MAAM,QAAQA,EAAM,MAAM,KAAK,MAAM,QAAQA,EAAM,MAAM,IAC3D8U,EAAK,UAAU;AAAA,UACb,CAAC9U,EAAM,QAAQ,GAAGD;AAAA,UAClB,CAACC,EAAM,cAAc,GAAG+D,EAAMuhC,CAAW;AAAA,UACzC,CAACtlC,EAAM,cAAc,GAAG+D,EAAMwhC,CAAW;AAAA,QAAA,CAC1C,IACQ3X,MAAW,MAAM7tB,KAAS,OACnC+U,EAAK,UAAU/U,CAAK,IAEf+U,EAAA,UAAU,GAAG/U,IAAQ6tB,GAAQ;AAAA,MACpC;AAAA,MA2CA,QApBa,CAAC7tB,MACV,OAAOC,EAAM,UAAW,WACnBD,EAAM,QAAQC,EAAM,QAAQ,EAAE,IAErC,MAAM,QAAQA,EAAM,MAAM,KAC1BA,EAAM,SAAS,QACf,OAAOA,EAAM,SAAU,WAEhBD,EAAM,QAAQC,EAAM,MAAMA,EAAM,cAAc,GAAG,EAAE,IAErDD;AAAA,MAWP,aATkB,MAAM;AACxB,QAAIC,EAAM,gBACH8U,EAAA,UAAU,MAAM,EAAK;AAAA,MAC5B;AAAA,MAOA,aAAAwwB;AAAA,MACA,aAAAC;AAAA,MACA,gBA5CqB,MAAM;AAC3B,QAAI,MAAM,QAAQvlC,EAAM,MAAM,KAC5B8U,EAAK,UAAU;AAAA,UACb,CAAC9U,EAAM,QAAQ,GAAG+D,EAAMyU,CAAU;AAAA,UAClC,CAACxY,EAAM,cAAc,GAAG+D,EAAMuhC,CAAW;AAAA,UACzC,CAACtlC,EAAM,cAAc,GAAG+D,EAAMwhC,CAAW;AAAA,QAAA,CAC1C;AAAA,MACH;AAAA,MAsCA,gBAnCqB,MAAM;AAC3B,QAAI,MAAM,QAAQvlC,EAAM,MAAM,KAC5B8U,EAAK,UAAU;AAAA,UACb,CAAC9U,EAAM,QAAQ,GAAG+D,EAAMyU,CAAU;AAAA,UAClC,CAACxY,EAAM,cAAc,GAAG+D,EAAMuhC,CAAW;AAAA,UACzC,CAACtlC,EAAM,cAAc,GAAG+D,EAAMwhC,CAAW;AAAA,QAAA,CAC1C;AAAA,MACH;AAAA,IA4BA;AAAA,EAEJ;AACF,CAAC;;yDC7KC3+B,EAiCiB,gBAAA;SA/BTC,EAAG,GAAAC,EAAAoN,GAAA;AAAA,IACR,OAAKlN,EAAA;AAAA,IACL,KAAIA,EAAE;AAAA,IACN,KAAQA,EAAA;AAAA,IACR,MAAAA,EAAA;AAAA,IACA,QAAWA,EAAA;AAAA,IACX,gBAAQ,MAAa,QAAAA,EAAA,MAAA,IAAA,SAAAA,EAAA;AAAA,IACrB,eAAM,MAAW,QAAAA,EAAA,MAAA,IAAA,SAAAA,EAAA;AAAA,IAAA,UAAAA,EAAA;AAAA,IAEiB,QAAAA,EAAA;AAAA,EAAA,GAAAmV,GAAA,EAAA,GAAA,KAAA;AAAA,kBAAxBnV,EAAW,MAAA,KAAAA,EAAA,OAAA,SAAA,IAAA;AAAA,MACpB,MAAA;AAAA,MAAA,IAAkBC,EAAO,MAAA;AAAA,QAAA9G,EAAAwH,GAAA;AAAA,UAAc,OAAQX,EAAA;AAAA,UAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAAI;AAAA;;;eAGrC,EAAK,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,QAAA,CAAA,EAAA,OAAAtB,GAAA,OAAA3F,EAAA,GAAAwG,OACLM,EAAO,GAAAC,EAAAgB,GAAA;AAAA,cAAA,KAAAvB;AAAA;;;;;;;;;;;;IAMS,IAAA;AAAA,kBAAjBS,EAAU,MAAA,KAAAA,EAAA,OAAA,SAAA,IAAA;AAAA,MACnB,MAAA;AAAA,MAAA,IAAkBC,EAAO,MAAA;AAAA,QAAA9G,EAAAwH,GAAA;AAAA,UAAc,OAAQX,EAAA;AAAA,UAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAAI;AAAA;;;eAGrC,EAAK,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,QAAA,CAAA,EAAA,OAAAtB,GAAA,OAAA3F,EAAA,GAAAwG,OACLM,EAAO,GAAAC,EAAAgB,GAAA;AAAA,cAAA,KAAAvB;AAAA;;;;;;;;;;;;;;;qDCTlBi/B,KAAaxiC,GAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IACjB;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACD,YAAY;AAAA,iBACVoK;AAAAA,kBACAmM;AAAAA,EACD;AAAA,EACD,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOvZ,GAAO,EAAE,MAAA8U,KAAQ;AAItB,WAAO;AAAA,MACL,eAJoB,CAACtP,MAAM;AAC3B,QAAAsP,EAAK,UAAUtP,EAAE,OAAO,KAAK;AAAA,MAC/B;AAAA,IAGA;AAAA,EACF;AACF,CAAC;;;cAnDCsB,EAYgBkN,GAAA;AAAA,IAXb,OAAOhN,EAAK;AAAA,IACZ,YAAYA,EAAU;AAAA,IACtB,UAAQA,EAAa;AAAA;eAGpB,MAAyB;AAAA,cAD3BQ,EAMiBC,IAAA,MAAAC,GALEV,EAAO,SAAA,CAAjBP,YADTK,EAMiB4U,GAAA;AAAA,QAJd,KAAKjV,EAAO;AAAA,QACZ,OAAOA,EAAO;AAAA;mBAEf,MAAkB;AAAA,UAAfyE,EAAAC,GAAA1E,EAAO,KAAK,GAAA,CAAA;AAAA;;;;;;;qDCOrBg/B,KAAeziC,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,QAAQ,OAAe,KAAa;AAAA,MACnD,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,SACVI;AAAAA,IAAA,eACAC;AAAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOrD,GAAO,EAAE,MAAA8U,KAAQ;AAIf,WAAA;AAAA,MACL,gBAJqB,CAAC/U,MAA2B;AACjD,QAAA+U,EAAK,UAAU/U,CAAK;AAAA,MAAA;AAAA,IAGpB;AAAA,EAEJ;AACF,CAAC;;sCC7CC6G,EAWW,UAAA;AATR,SAAAC,EAAA,GAAsBC,EAAAa,GAAA;AAAA,IAAA,OAAAX,EAAA;AAAA;;;OAIfH,EAAA,EAAO,GAAKW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,SAAA,CAAAP,OACZI,EAAA,GAAcC,EAAAgB,GAAA;AAAA,QAAA,KAAArB,EAAA;AAAA;;;;;;;;;;;qDCCrB++B,KAAaxiC,GAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EACD,YAAY;AAAA,IACV,SAAA0iC;AAAAA,EACD;AAAA,EACD,MAAM,CAAC,QAAQ;AAAA,EACf,MAAO1lC,GAAO,EAAE,MAAA8U,KAAQ;AAItB,WAAO;AAAA,MACL,gBAJqB,CAAC/U,MAAU;AAChC,QAAA+U,EAAK,UAAU/U,CAAK;AAAA,MACtB;AAAA,IAGA;AAAA,EACF;AACF,CAAC;;;cApCCyH,EAEM,OAAA;AAAA,IAFA,sBAAmBR,EAAK,WAAA;AAAA;IAC5B7G,EAA0EwlC,GAAA;AAAA,MAA/D,UAAU3+B,EAAQ;AAAA,MAAG,SAASA,EAAK;AAAA,MAAG,UAAQA,EAAc;AAAA;;;;ACFpE,IAAImoB,KAAM,OACNyW,KAAS,UACTC,KAAQ,SACR3W,KAAO,QACP4W,KAAO,QACPC,KAAiB,CAAC5W,IAAKyW,IAAQC,IAAO3W,EAAI,GAC1C8W,KAAQ,SACRC,KAAM,OACNC,KAAkB,mBAClBC,KAAW,YACXC,KAAS,UACTC,KAAY,aACZC,KAAmC,gBAAAP,GAAe,OAAO,SAAUQ,GAAKC,GAAW;AAC5F,SAAOD,EAAI,OAAO,CAACC,IAAY,MAAMR,IAAOQ,IAAY,MAAMP,EAAG,CAAC;AACpE,GAAG,CAAE,CAAA,GACMQ,KAA0B,iBAAA,EAAG,OAAOV,IAAgB,CAACD,EAAI,CAAC,EAAE,OAAO,SAAUS,GAAKC,GAAW;AACtG,SAAOD,EAAI,OAAO,CAACC,GAAWA,IAAY,MAAMR,IAAOQ,IAAY,MAAMP,EAAG,CAAC;AAC/E,GAAG,CAAE,CAAA,GAEMS,KAAa,cACbC,KAAO,QACPC,KAAY,aAEZC,KAAa,cACbC,KAAO,QACPC,KAAY,aAEZC,KAAc,eACdC,KAAQ,SACRC,KAAa,cACbC,KAAiB,CAACT,IAAYC,IAAMC,IAAWC,IAAYC,IAAMC,IAAWC,IAAaC,IAAOC,EAAU;AC9BtG,SAASE,GAAYC,GAAS;AAC3C,SAAOA,KAAWA,EAAQ,YAAY,IAAI,YAAa,IAAG;AAC5D;ACFe,SAASC,GAAUtuB,GAAM;AACtC,MAAIA,KAAQ;AACV,WAAO;AAGT,MAAIA,EAAK,SAAU,MAAK,mBAAmB;AACzC,QAAIuuB,IAAgBvuB,EAAK;AACzB,WAAOuuB,KAAgBA,EAAc,eAAe;AAAA;AAGtD,SAAOvuB;AACT;ACTA,SAASwuB,GAAUxuB,GAAM;AACvB,MAAIyuB,IAAaH,GAAUtuB,CAAI,EAAE;AACjC,SAAOA,aAAgByuB,KAAczuB,aAAgB;AACvD;AAEA,SAAS0uB,GAAc1uB,GAAM;AAC3B,MAAIyuB,IAAaH,GAAUtuB,CAAI,EAAE;AACjC,SAAOA,aAAgByuB,KAAczuB,aAAgB;AACvD;AAEA,SAAS2uB,GAAa3uB,GAAM;AAE1B,MAAI,OAAO,aAAe;AACxB,WAAO;AAGT,MAAIyuB,IAAaH,GAAUtuB,CAAI,EAAE;AACjC,SAAOA,aAAgByuB,KAAczuB,aAAgB;AACvD;AChBA,SAAS4uB,GAAYC,GAAM;AACzB,MAAIC,IAAQD,EAAK;AACjB,SAAO,KAAKC,EAAM,QAAQ,EAAE,QAAQ,SAAUniC,GAAM;AAClD,QAAIyL,IAAQ02B,EAAM,OAAOniC,CAAI,KAAK,CAAA,GAC9BoiC,IAAaD,EAAM,WAAWniC,CAAI,KAAK,CAAA,GACvC0hC,IAAUS,EAAM,SAASniC,CAAI;AAEjC,IAAI,CAAC+hC,GAAcL,CAAO,KAAK,CAACD,GAAYC,CAAO,MAOnD,OAAO,OAAOA,EAAQ,OAAOj2B,CAAK,GAClC,OAAO,KAAK22B,CAAU,EAAE,QAAQ,SAAUpiC,GAAM;AAC9C,UAAI5F,IAAQgoC,EAAWpiC,CAAI;AAE3B,MAAI5F,MAAU,KACZsnC,EAAQ,gBAAgB1hC,CAAI,IAE5B0hC,EAAQ,aAAa1hC,GAAM5F,MAAU,KAAO,KAAKA,CAAK;AAAA,IAE9D,CAAK;AAAA,EACL,CAAG;AACH;AAEA,SAASo7B,GAAO6M,GAAO;AACrB,MAAIF,IAAQE,EAAM,OACdC,IAAgB;AAAA,IAClB,QAAQ;AAAA,MACN,UAAUH,EAAM,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,IACT;AAAA,IACD,OAAO;AAAA,MACL,UAAU;AAAA,IACX;AAAA,IACD,WAAW,CAAE;AAAA,EACjB;AACE,gBAAO,OAAOA,EAAM,SAAS,OAAO,OAAOG,EAAc,MAAM,GAC/DH,EAAM,SAASG,GAEXH,EAAM,SAAS,SACjB,OAAO,OAAOA,EAAM,SAAS,MAAM,OAAOG,EAAc,KAAK,GAGxD,WAAY;AACjB,WAAO,KAAKH,EAAM,QAAQ,EAAE,QAAQ,SAAUniC,GAAM;AAClD,UAAI0hC,IAAUS,EAAM,SAASniC,CAAI,GAC7BoiC,IAAaD,EAAM,WAAWniC,CAAI,KAAK,CAAA,GACvCuiC,IAAkB,OAAO,KAAKJ,EAAM,OAAO,eAAeniC,CAAI,IAAImiC,EAAM,OAAOniC,CAAI,IAAIsiC,EAActiC,CAAI,CAAC,GAE1GyL,IAAQ82B,EAAgB,OAAO,SAAU92B,GAAO+2B,GAAU;AAC5D,eAAA/2B,EAAM+2B,CAAQ,IAAI,IACX/2B;AAAA,MACR,GAAE,CAAE,CAAA;AAEL,MAAI,CAACs2B,GAAcL,CAAO,KAAK,CAACD,GAAYC,CAAO,MAInD,OAAO,OAAOA,EAAQ,OAAOj2B,CAAK,GAClC,OAAO,KAAK22B,CAAU,EAAE,QAAQ,SAAUK,GAAW;AACnD,QAAAf,EAAQ,gBAAgBe,CAAS;AAAA,MACzC,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AACA;AAGA,MAAeC,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIT;AAAA,EACJ,QAAQzM;AAAAA,EACR,UAAU,CAAC,eAAe;AAC5B;AClFe,SAASmN,GAAiB9B,GAAW;AAClD,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;ACHO,IAAI1Y,KAAM,KAAK,KACXC,KAAM,KAAK,KACXwa,KAAQ,KAAK;ACFT,SAASC,KAAc;AACpC,MAAIC,IAAS,UAAU;AAEvB,SAAIA,KAAU,QAAQA,EAAO,UAAU,MAAM,QAAQA,EAAO,MAAM,IACzDA,EAAO,OAAO,IAAI,SAAU3jC,GAAM;AACvC,WAAOA,EAAK,QAAQ,MAAMA,EAAK;AAAA,EACrC,CAAK,EAAE,KAAK,GAAG,IAGN,UAAU;AACnB;ACTe,SAAS4jC,KAAmB;AACzC,SAAO,CAAC,iCAAiC,KAAKF,GAAa,CAAA;AAC7D;ACCe,SAASG,GAAsBtB,GAASuB,GAAcC,GAAiB;AACpF,EAAID,MAAiB,WACnBA,IAAe,KAGbC,MAAoB,WACtBA,IAAkB;AAGpB,MAAIC,IAAazB,EAAQ,yBACrB0B,IAAS,GACTC,IAAS;AAEb,EAAIJ,KAAgBlB,GAAcL,CAAO,MACvC0B,IAAS1B,EAAQ,cAAc,KAAIkB,GAAMO,EAAW,KAAK,IAAIzB,EAAQ,eAAe,GACpF2B,IAAS3B,EAAQ,eAAe,KAAIkB,GAAMO,EAAW,MAAM,IAAIzB,EAAQ,gBAAgB;AAGzF,MAAIQ,IAAOL,GAAUH,CAAO,IAAIC,GAAUD,CAAO,IAAI,QACjD4B,IAAiBpB,EAAK,gBAEtBqB,IAAmB,CAACR,GAAkB,KAAIG,GAC1CM,KAAKL,EAAW,QAAQI,KAAoBD,IAAiBA,EAAe,aAAa,MAAMF,GAC/FK,KAAKN,EAAW,OAAOI,KAAoBD,IAAiBA,EAAe,YAAY,MAAMD,GAC7Fvb,IAAQqb,EAAW,QAAQC,GAC3B/a,IAAS8a,EAAW,SAASE;AACjC,SAAO;AAAA,IACL,OAAOvb;AAAA,IACP,QAAQO;AAAA,IACR,KAAKob;AAAA,IACL,OAAOD,IAAI1b;AAAA,IACX,QAAQ2b,IAAIpb;AAAA,IACZ,MAAMmb;AAAA,IACN,GAAGA;AAAA,IACH,GAAGC;AAAA,EACP;AACA;ACrCe,SAASC,GAAchC,GAAS;AAC7C,MAAIyB,IAAaH,GAAsBtB,CAAO,GAG1C5Z,IAAQ4Z,EAAQ,aAChBrZ,IAASqZ,EAAQ;AAErB,SAAI,KAAK,IAAIyB,EAAW,QAAQrb,CAAK,KAAK,MACxCA,IAAQqb,EAAW,QAGjB,KAAK,IAAIA,EAAW,SAAS9a,CAAM,KAAK,MAC1CA,IAAS8a,EAAW,SAGf;AAAA,IACL,GAAGzB,EAAQ;AAAA,IACX,GAAGA,EAAQ;AAAA,IACX,OAAO5Z;AAAA,IACP,QAAQO;AAAA,EACZ;AACA;ACvBe,SAASsb,GAASC,GAAQC,GAAO;AAC9C,MAAIC,IAAWD,EAAM,eAAeA,EAAM,YAAW;AAErD,MAAID,EAAO,SAASC,CAAK;AACvB,WAAO;AAEJ,MAAIC,KAAY9B,GAAa8B,CAAQ,GAAG;AACzC,QAAIC,IAAOF;AAEX,OAAG;AACD,UAAIE,KAAQH,EAAO,WAAWG,CAAI;AAChC,eAAO;AAIT,MAAAA,IAAOA,EAAK,cAAcA,EAAK;AAAA,aACxBA;AAAA;AAIb,SAAO;AACT;ACrBe,SAASC,GAAiBtC,GAAS;AAChD,SAAOC,GAAUD,CAAO,EAAE,iBAAiBA,CAAO;AACpD;ACFe,SAASuC,GAAevC,GAAS;AAC9C,SAAO,CAAC,SAAS,MAAM,IAAI,EAAE,QAAQD,GAAYC,CAAO,CAAC,KAAK;AAChE;ACFe,SAASwC,GAAmBxC,GAAS;AAElD,WAASG,GAAUH,CAAO,IAAIA,EAAQ;AAAA;AAAA,IACtCA,EAAQ;AAAA,QAAa,OAAO,UAAU;AACxC;ACFe,SAASyC,GAAczC,GAAS;AAC7C,SAAID,GAAYC,CAAO,MAAM,SACpBA;AAAA;AAAA;AAAA;AAAA,IAMPA,EAAQ;AAAA,IACRA,EAAQ;AAAA,KACRM,GAAaN,CAAO,IAAIA,EAAQ,OAAO;AAAA;AAAA,IAEvCwC,GAAmBxC,CAAO;AAAA;AAG9B;ACVA,SAAS0C,GAAoB1C,GAAS;AACpC,SAAI,CAACK,GAAcL,CAAO;AAAA,EAC1BsC,GAAiBtC,CAAO,EAAE,aAAa,UAC9B,OAGFA,EAAQ;AACjB;AAIA,SAAS2C,GAAmB3C,GAAS;AACnC,MAAI4C,IAAY,WAAW,KAAKzB,GAAa,CAAA,GACzC0B,IAAO,WAAW,KAAK1B,GAAa,CAAA;AAExC,MAAI0B,KAAQxC,GAAcL,CAAO,GAAG;AAElC,QAAI8C,IAAaR,GAAiBtC,CAAO;AAEzC,QAAI8C,EAAW,aAAa;AAC1B,aAAO;AAAA;AAIX,MAAIC,IAAcN,GAAczC,CAAO;AAMvC,OAJIM,GAAayC,CAAW,MAC1BA,IAAcA,EAAY,OAGrB1C,GAAc0C,CAAW,KAAK,CAAC,QAAQ,MAAM,EAAE,QAAQhD,GAAYgD,CAAW,CAAC,IAAI,KAAG;AAC3F,QAAIC,IAAMV,GAAiBS,CAAW;AAItC,QAAIC,EAAI,cAAc,UAAUA,EAAI,gBAAgB,UAAUA,EAAI,YAAY,WAAW,CAAC,aAAa,aAAa,EAAE,QAAQA,EAAI,UAAU,MAAM,MAAMJ,KAAaI,EAAI,eAAe,YAAYJ,KAAaI,EAAI,UAAUA,EAAI,WAAW;AAC5O,aAAOD;AAEP,IAAAA,IAAcA,EAAY;AAAA;AAI9B,SAAO;AACT;AAIe,SAASE,GAAgBjD,GAAS;AAI/C,WAHIkD,IAASjD,GAAUD,CAAO,GAC1BmD,IAAeT,GAAoB1C,CAAO,GAEvCmD,KAAgBZ,GAAeY,CAAY,KAAKb,GAAiBa,CAAY,EAAE,aAAa;AACjG,IAAAA,IAAeT,GAAoBS,CAAY;AAGjD,SAAIA,MAAiBpD,GAAYoD,CAAY,MAAM,UAAUpD,GAAYoD,CAAY,MAAM,UAAUb,GAAiBa,CAAY,EAAE,aAAa,YACxID,IAGFC,KAAgBR,GAAmB3C,CAAO,KAAKkD;AACxD;ACpEe,SAASE,GAAyBjE,GAAW;AAC1D,SAAO,CAAC,OAAO,QAAQ,EAAE,QAAQA,CAAS,KAAK,IAAI,MAAM;AAC3D;ACDO,SAASkE,GAAO3c,GAAKhuB,GAAO+tB,GAAK;AACtC,SAAO6c,GAAQ5c,GAAK6c,GAAQ7qC,GAAO+tB,CAAG,CAAC;AACzC;AACO,SAAS+c,GAAe9c,GAAKhuB,GAAO+tB,GAAK;AAC9C,MAAI9oB,IAAI0lC,GAAO3c,GAAKhuB,GAAO+tB,CAAG;AAC9B,SAAO9oB,IAAI8oB,IAAMA,IAAM9oB;AACzB;ACPe,SAAS8lC,KAAqB;AAC3C,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AACA;ACNe,SAASC,GAAmBC,GAAe;AACxD,SAAO,OAAO,OAAO,CAAA,GAAIF,GAAoB,GAAEE,CAAa;AAC9D;ACHe,SAASC,GAAgBlrC,GAAOqb,GAAM;AACnD,SAAOA,EAAK,OAAO,SAAU8vB,GAAStrC,GAAK;AACzC,WAAAsrC,EAAQtrC,CAAG,IAAIG,GACRmrC;AAAA,EACR,GAAE,CAAE,CAAA;AACP;ACKA,IAAIC,KAAkB,SAAyBC,GAAStD,GAAO;AAC7D,SAAAsD,IAAU,OAAOA,KAAY,aAAaA,EAAQ,OAAO,OAAO,CAAA,GAAItD,EAAM,OAAO;AAAA,IAC/E,WAAWA,EAAM;AAAA,EACrB,CAAG,CAAC,IAAIsD,GACCL,GAAmB,OAAOK,KAAY,WAAWA,IAAUH,GAAgBG,GAASrF,EAAc,CAAC;AAC5G;AAEA,SAASsF,GAAMxD,GAAM;AACnB,MAAIyD,GAEAxD,IAAQD,EAAK,OACbliC,IAAOkiC,EAAK,MACZ73B,IAAU63B,EAAK,SACf0D,IAAezD,EAAM,SAAS,OAC9B0D,IAAgB1D,EAAM,cAAc,eACpC2D,IAAgBnD,GAAiBR,EAAM,SAAS,GAChD4D,IAAOjB,GAAyBgB,CAAa,GAC7CE,IAAa,CAACzc,IAAM2W,EAAK,EAAE,QAAQ4F,CAAa,KAAK,GACrD5hC,IAAM8hC,IAAa,WAAW;AAElC,MAAI,GAACJ,KAAgB,CAACC,IAItB;AAAA,QAAIR,IAAgBG,GAAgBn7B,EAAQ,SAAS83B,CAAK,GACtD8D,IAAYvC,GAAckC,CAAY,GACtCM,IAAUH,MAAS,MAAMvc,KAAMD,IAC/B4c,IAAUJ,MAAS,MAAM9F,KAASC,IAClCkG,IAAUjE,EAAM,MAAM,UAAUj+B,CAAG,IAAIi+B,EAAM,MAAM,UAAU4D,CAAI,IAAIF,EAAcE,CAAI,IAAI5D,EAAM,MAAM,OAAOj+B,CAAG,GACjHmiC,IAAYR,EAAcE,CAAI,IAAI5D,EAAM,MAAM,UAAU4D,CAAI,GAC5DO,IAAoB3B,GAAgBiB,CAAY,GAChDW,IAAaD,IAAoBP,MAAS,MAAMO,EAAkB,gBAAgB,IAAIA,EAAkB,eAAe,IAAI,GAC3HE,IAAoBJ,IAAU,IAAIC,IAAY,GAG9Cje,IAAMid,EAAca,CAAO,GAC3B/d,IAAMoe,IAAaN,EAAU/hC,CAAG,IAAImhC,EAAcc,CAAO,GACzDM,IAASF,IAAa,IAAIN,EAAU/hC,CAAG,IAAI,IAAIsiC,GAC/CxuB,IAAS+sB,GAAO3c,GAAKqe,GAAQte,CAAG,GAEhCue,IAAWX;AACf,IAAA5D,EAAM,cAAcniC,CAAI,KAAK2lC,IAAwB,CAAA,GAAIA,EAAsBe,CAAQ,IAAI1uB,GAAQ2tB,EAAsB,eAAe3tB,IAASyuB,GAAQd;AAAA;AAC3J;AAEA,SAASnQ,GAAO6M,GAAO;AACrB,MAAIF,IAAQE,EAAM,OACdh4B,IAAUg4B,EAAM,SAChBsE,IAAmBt8B,EAAQ,SAC3Bu7B,IAAee,MAAqB,SAAS,wBAAwBA;AAEzE,EAAIf,KAAgB,SAKhB,OAAOA,KAAiB,aAC1BA,IAAezD,EAAM,SAAS,OAAO,cAAcyD,CAAY,GAE3D,CAACA,MAKFjC,GAASxB,EAAM,SAAS,QAAQyD,CAAY,MAIjDzD,EAAM,SAAS,QAAQyD;AACzB;AAGA,MAAegB,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIlB;AAAA,EACJ,QAAQlQ;AAAAA,EACR,UAAU,CAAC,eAAe;AAAA,EAC1B,kBAAkB,CAAC,iBAAiB;AACtC;ACzFe,SAASqR,GAAahG,GAAW;AAC9C,SAAOA,EAAU,MAAM,GAAG,EAAE,CAAC;AAC/B;ACOA,IAAIiG,KAAa;AAAA,EACf,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAIA,SAASC,GAAkB7E,GAAM8E,GAAK;AACpC,MAAIxD,IAAItB,EAAK,GACTuB,IAAIvB,EAAK,GACT+E,IAAMD,EAAI,oBAAoB;AAClC,SAAO;AAAA,IACL,GAAGpE,GAAMY,IAAIyD,CAAG,IAAIA,KAAO;AAAA,IAC3B,GAAGrE,GAAMa,IAAIwD,CAAG,IAAIA,KAAO;AAAA,EAC/B;AACA;AAEO,SAASC,GAAY7E,GAAO;AACjC,MAAI8E,GAEA1G,IAAS4B,EAAM,QACf+E,IAAa/E,EAAM,YACnBxB,IAAYwB,EAAM,WAClBgF,IAAYhF,EAAM,WAClBiF,IAAUjF,EAAM,SAChBrS,IAAWqS,EAAM,UACjBkF,IAAkBlF,EAAM,iBACxBmF,IAAWnF,EAAM,UACjBoF,IAAepF,EAAM,cACrBqF,IAAUrF,EAAM,SAChBsF,IAAaL,EAAQ,GACrB9D,IAAImE,MAAe,SAAS,IAAIA,GAChCC,IAAaN,EAAQ,GACrB7D,IAAImE,MAAe,SAAS,IAAIA,GAEhCC,IAAQ,OAAOJ,KAAiB,aAAaA,EAAa;AAAA,IAC5D,GAAGjE;AAAA,IACH,GAAGC;AAAA,EACP,CAAG,IAAI;AAAA,IACH,GAAGD;AAAA,IACH,GAAGC;AAAA,EACP;AAEE,EAAAD,IAAIqE,EAAM,GACVpE,IAAIoE,EAAM;AACV,MAAIC,IAAOR,EAAQ,eAAe,GAAG,GACjCS,IAAOT,EAAQ,eAAe,GAAG,GACjCU,IAAQze,IACR0e,IAAQze,IACRwd,IAAM;AAEV,MAAIQ,GAAU;AACZ,QAAI3C,IAAeF,GAAgBlE,CAAM,GACrCyH,IAAa,gBACbC,IAAY;AAchB,QAZItD,MAAiBlD,GAAUlB,CAAM,MACnCoE,IAAeX,GAAmBzD,CAAM,GAEpCuD,GAAiBa,CAAY,EAAE,aAAa,YAAY7U,MAAa,eACvEkY,IAAa,gBACbC,IAAY,iBAKhBtD,IAAeA,GAEXhE,MAAcrX,OAAQqX,MAActX,MAAQsX,MAAcX,OAAUmH,MAAc/G,IAAK;AACzF,MAAA2H,IAAQhI;AACR,UAAImI,IAAUV,KAAW7C,MAAiBmC,KAAOA,EAAI,iBAAiBA,EAAI,eAAe;AAAA;AAAA,QACzFnC,EAAaqD,CAAU;AAAA;AACvB,MAAAzE,KAAK2E,IAAUhB,EAAW,QAC1B3D,KAAK8D,IAAkB,IAAI;AAAA;AAG7B,QAAI1G,MAActX,OAASsX,MAAcrX,MAAOqX,MAAcZ,OAAWoH,MAAc/G,IAAK;AAC1F,MAAA0H,IAAQ9H;AACR,UAAImI,IAAUX,KAAW7C,MAAiBmC,KAAOA,EAAI,iBAAiBA,EAAI,eAAe;AAAA;AAAA,QACzFnC,EAAasD,CAAS;AAAA;AACtB,MAAA3E,KAAK6E,IAAUjB,EAAW,OAC1B5D,KAAK+D,IAAkB,IAAI;AAAA;AAAA;AAI/B,MAAIe,KAAe,OAAO,OAAO;AAAA,IAC/B,UAAUtY;AAAA,EACd,GAAKwX,KAAYV,EAAU,GAErByB,IAAQd,MAAiB,KAAOV,GAAkB;AAAA,IACpD,GAAGvD;AAAA,IACH,GAAGC;AAAA,EACP,GAAK9B,GAAUlB,CAAM,CAAC,IAAI;AAAA,IACtB,GAAG+C;AAAA,IACH,GAAGC;AAAA,EACP;AAKE,MAHAD,IAAI+E,EAAM,GACV9E,IAAI8E,EAAM,GAENhB,GAAiB;AACnB,QAAIiB;AAEJ,WAAO,OAAO,OAAO,CAAE,GAAEF,KAAeE,KAAiB,CAAE,GAAEA,GAAeP,CAAK,IAAIF,IAAO,MAAM,IAAIS,GAAeR,CAAK,IAAIF,IAAO,MAAM,IAAIU,GAAe,aAAaxB,EAAI,oBAAoB,MAAM,IAAI,eAAexD,IAAI,SAASC,IAAI,QAAQ,iBAAiBD,IAAI,SAASC,IAAI,UAAU+E;;AAGnS,SAAO,OAAO,OAAO,CAAE,GAAEF,KAAenB,IAAkB,CAAE,GAAEA,EAAgBc,CAAK,IAAIF,IAAOtE,IAAI,OAAO,IAAI0D,EAAgBa,CAAK,IAAIF,IAAOtE,IAAI,OAAO,IAAI2D,EAAgB,YAAY,IAAIA,EAAe;AAC7M;AAEA,SAASsB,GAAcC,GAAO;AAC5B,MAAIvG,IAAQuG,EAAM,OACdr+B,IAAUq+B,EAAM,SAChBC,IAAwBt+B,EAAQ,iBAChCk9B,IAAkBoB,MAA0B,SAAS,KAAOA,GAC5DC,IAAoBv+B,EAAQ,UAC5Bm9B,IAAWoB,MAAsB,SAAS,KAAOA,GACjDC,IAAwBx+B,EAAQ,cAChCo9B,IAAeoB,MAA0B,SAAS,KAAOA,GACzDP,IAAe;AAAA,IACjB,WAAW3F,GAAiBR,EAAM,SAAS;AAAA,IAC3C,WAAW0E,GAAa1E,EAAM,SAAS;AAAA,IACvC,QAAQA,EAAM,SAAS;AAAA,IACvB,YAAYA,EAAM,MAAM;AAAA,IACxB,iBAAiBoF;AAAA,IACjB,SAASpF,EAAM,QAAQ,aAAa;AAAA,EACxC;AAEE,EAAIA,EAAM,cAAc,iBAAiB,SACvCA,EAAM,OAAO,SAAS,OAAO,OAAO,CAAA,GAAIA,EAAM,OAAO,QAAQ+E,GAAY,OAAO,OAAO,CAAA,GAAIoB,GAAc;AAAA,IACvG,SAASnG,EAAM,cAAc;AAAA,IAC7B,UAAUA,EAAM,QAAQ;AAAA,IACxB,UAAUqF;AAAA,IACV,cAAcC;AAAA,EACf,CAAA,CAAC,CAAC,IAGDtF,EAAM,cAAc,SAAS,SAC/BA,EAAM,OAAO,QAAQ,OAAO,OAAO,CAAA,GAAIA,EAAM,OAAO,OAAO+E,GAAY,OAAO,OAAO,CAAA,GAAIoB,GAAc;AAAA,IACrG,SAASnG,EAAM,cAAc;AAAA,IAC7B,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAcsF;AAAA,EACf,CAAA,CAAC,CAAC,IAGLtF,EAAM,WAAW,SAAS,OAAO,OAAO,IAAIA,EAAM,WAAW,QAAQ;AAAA,IACnE,yBAAyBA,EAAM;AAAA,EACnC,CAAG;AACH;AAGA,MAAe2G,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIL;AAAA,EACJ,MAAM,CAAE;AACV;ACtKA,IAAIM,KAAU;AAAA,EACZ,SAAS;AACX;AAEA,SAASvT,GAAO0M,GAAM;AACpB,MAAIC,IAAQD,EAAK,OACb8G,IAAW9G,EAAK,UAChB73B,IAAU63B,EAAK,SACf+G,IAAkB5+B,EAAQ,QAC1B6+B,IAASD,MAAoB,SAAS,KAAOA,GAC7CE,IAAkB9+B,EAAQ,QAC1B++B,IAASD,MAAoB,SAAS,KAAOA,GAC7CvE,IAASjD,GAAUQ,EAAM,SAAS,MAAM,GACxCkH,IAAgB,GAAG,OAAOlH,EAAM,cAAc,WAAWA,EAAM,cAAc,MAAM;AAEvF,SAAI+G,KACFG,EAAc,QAAQ,SAAUC,GAAc;AAC5C,IAAAA,EAAa,iBAAiB,UAAUN,EAAS,QAAQD,EAAO;AAAA,EACtE,CAAK,GAGCK,KACFxE,EAAO,iBAAiB,UAAUoE,EAAS,QAAQD,EAAO,GAGrD,WAAY;AACjB,IAAIG,KACFG,EAAc,QAAQ,SAAUC,GAAc;AAC5C,MAAAA,EAAa,oBAAoB,UAAUN,EAAS,QAAQD,EAAO;AAAA,IAC3E,CAAO,GAGCK,KACFxE,EAAO,oBAAoB,UAAUoE,EAAS,QAAQD,EAAO;AAAA,EAEnE;AACA;AAGA,MAAeQ,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAI,WAAc;AAAA,EAAE;AAAA,EACpB,QAAQ/T;AAAA,EACR,MAAM,CAAE;AACV;AChDA,IAAIgU,KAAO;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AACP;AACe,SAASC,GAAqB5I,GAAW;AACtD,SAAOA,EAAU,QAAQ,0BAA0B,SAAU6I,GAAS;AACpE,WAAOF,GAAKE,CAAO;AAAA,EACvB,CAAG;AACH;ACVA,IAAIF,KAAO;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AACP;AACe,SAASG,GAA8B9I,GAAW;AAC/D,SAAOA,EAAU,QAAQ,cAAc,SAAU6I,GAAS;AACxD,WAAOF,GAAKE,CAAO;AAAA,EACvB,CAAG;AACH;ACPe,SAASE,GAAgBv2B,GAAM;AAC5C,MAAI2zB,IAAMrF,GAAUtuB,CAAI,GACpBw2B,IAAa7C,EAAI,aACjB8C,IAAY9C,EAAI;AACpB,SAAO;AAAA,IACL,YAAY6C;AAAA,IACZ,WAAWC;AAAA,EACf;AACA;ACNe,SAASC,GAAoBrI,GAAS;AAQnD,SAAOsB,GAAsBkB,GAAmBxC,CAAO,CAAC,EAAE,OAAOkI,GAAgBlI,CAAO,EAAE;AAC5F;ACRe,SAASsI,GAAgBtI,GAASuI,GAAU;AACzD,MAAIjD,IAAMrF,GAAUD,CAAO,GACvBwI,IAAOhG,GAAmBxC,CAAO,GACjC4B,IAAiB0D,EAAI,gBACrBlf,IAAQoiB,EAAK,aACb7hB,IAAS6hB,EAAK,cACd1G,IAAI,GACJC,IAAI;AAER,MAAIH,GAAgB;AAClB,IAAAxb,IAAQwb,EAAe,OACvBjb,IAASib,EAAe;AACxB,QAAI6G,IAAiBpH;AAErB,KAAIoH,KAAkB,CAACA,KAAkBF,MAAa,aACpDzG,IAAIF,EAAe,YACnBG,IAAIH,EAAe;AAAA;AAIvB,SAAO;AAAA,IACL,OAAOxb;AAAA,IACP,QAAQO;AAAA,IACR,GAAGmb,IAAIuG,GAAoBrI,CAAO;AAAA,IAClC,GAAG+B;AAAA,EACP;AACA;ACvBe,SAAS2G,GAAgB1I,GAAS;AAC/C,MAAI2I,GAEAH,IAAOhG,GAAmBxC,CAAO,GACjC4I,IAAYV,GAAgBlI,CAAO,GACnC6I,KAAQF,IAAwB3I,EAAQ,kBAAkB,OAAO,SAAS2I,EAAsB,MAChGviB,IAAQK,GAAI+hB,EAAK,aAAaA,EAAK,aAAaK,IAAOA,EAAK,cAAc,GAAGA,IAAOA,EAAK,cAAc,CAAC,GACxGliB,IAASF,GAAI+hB,EAAK,cAAcA,EAAK,cAAcK,IAAOA,EAAK,eAAe,GAAGA,IAAOA,EAAK,eAAe,CAAC,GAC7G/G,IAAI,CAAC8G,EAAU,aAAaP,GAAoBrI,CAAO,GACvD+B,IAAI,CAAC6G,EAAU;AAEnB,SAAItG,GAAiBuG,KAAQL,CAAI,EAAE,cAAc,UAC/C1G,KAAKrb,GAAI+hB,EAAK,aAAaK,IAAOA,EAAK,cAAc,CAAC,IAAIziB,IAGrD;AAAA,IACL,OAAOA;AAAA,IACP,QAAQO;AAAA,IACR,GAAGmb;AAAA,IACH,GAAGC;AAAA,EACP;AACA;AC3Be,SAAS+G,GAAe9I,GAAS;AAE9C,MAAI+I,IAAoBzG,GAAiBtC,CAAO,GAC5CgJ,IAAWD,EAAkB,UAC7BE,IAAYF,EAAkB,WAC9BG,IAAYH,EAAkB;AAElC,SAAO,6BAA6B,KAAKC,IAAWE,IAAYD,CAAS;AAC3E;ACLe,SAASE,GAAgBx3B,GAAM;AAC5C,SAAI,CAAC,QAAQ,QAAQ,WAAW,EAAE,QAAQouB,GAAYpuB,CAAI,CAAC,KAAK,IAEvDA,EAAK,cAAc,OAGxB0uB,GAAc1uB,CAAI,KAAKm3B,GAAen3B,CAAI,IACrCA,IAGFw3B,GAAgB1G,GAAc9wB,CAAI,CAAC;AAC5C;ACJe,SAASy3B,GAAkBpJ,GAAStiC,GAAM;AACvD,MAAIirC;AAEJ,EAAIjrC,MAAS,WACXA,IAAO,CAAA;AAGT,MAAIkqC,IAAeuB,GAAgBnJ,CAAO,GACtCqJ,IAASzB,QAAmBe,IAAwB3I,EAAQ,kBAAkB,OAAO,SAAS2I,EAAsB,OACpHrD,IAAMrF,GAAU2H,CAAY,GAC5B1vC,IAASmxC,IAAS,CAAC/D,CAAG,EAAE,OAAOA,EAAI,kBAAkB,CAAA,GAAIwD,GAAelB,CAAY,IAAIA,IAAe,CAAE,CAAA,IAAIA,GAC7G0B,IAAc5rC,EAAK,OAAOxF,CAAM;AACpC,SAAOmxC,IAASC;AAAA;AAAA,IAChBA,EAAY,OAAOF,GAAkB3G,GAAcvqC,CAAM,CAAC,CAAC;AAAA;AAC7D;ACzBe,SAASqxC,GAAiBC,GAAM;AAC7C,SAAO,OAAO,OAAO,CAAE,GAAEA,GAAM;AAAA,IAC7B,MAAMA,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK,IAAIA,EAAK;AAAA,IACrB,QAAQA,EAAK,IAAIA,EAAK;AAAA,EAC1B,CAAG;AACH;ACQA,SAASC,GAA2BzJ,GAASuI,GAAU;AACrD,MAAIiB,IAAOlI,GAAsBtB,GAAS,IAAOuI,MAAa,OAAO;AACrE,SAAAiB,EAAK,MAAMA,EAAK,MAAMxJ,EAAQ,WAC9BwJ,EAAK,OAAOA,EAAK,OAAOxJ,EAAQ,YAChCwJ,EAAK,SAASA,EAAK,MAAMxJ,EAAQ,cACjCwJ,EAAK,QAAQA,EAAK,OAAOxJ,EAAQ,aACjCwJ,EAAK,QAAQxJ,EAAQ,aACrBwJ,EAAK,SAASxJ,EAAQ,cACtBwJ,EAAK,IAAIA,EAAK,MACdA,EAAK,IAAIA,EAAK,KACPA;AACT;AAEA,SAASE,GAA2B1J,GAAS2J,GAAgBpB,GAAU;AACrE,SAAOoB,MAAmB7K,KAAWyK,GAAiBjB,GAAgBtI,GAASuI,CAAQ,CAAC,IAAIpI,GAAUwJ,CAAc,IAAIF,GAA2BE,GAAgBpB,CAAQ,IAAIgB,GAAiBb,GAAgBlG,GAAmBxC,CAAO,CAAC,CAAC;AAC9O;AAKA,SAAS4J,GAAmB5J,GAAS;AACnC,MAAInB,IAAkBuK,GAAkB3G,GAAczC,CAAO,CAAC,GAC1D6J,IAAoB,CAAC,YAAY,OAAO,EAAE,QAAQvH,GAAiBtC,CAAO,EAAE,QAAQ,KAAK,GACzF8J,IAAiBD,KAAqBxJ,GAAcL,CAAO,IAAIiD,GAAgBjD,CAAO,IAAIA;AAE9F,SAAKG,GAAU2J,CAAc,IAKtBjL,EAAgB,OAAO,SAAU8K,GAAgB;AACtD,WAAOxJ,GAAUwJ,CAAc,KAAK1H,GAAS0H,GAAgBG,CAAc,KAAK/J,GAAY4J,CAAc,MAAM;AAAA,EACpH,CAAG,IANQ;AAOX;AAIe,SAASI,GAAgB/J,GAASgK,GAAUC,GAAc1B,GAAU;AACjF,MAAI2B,IAAsBF,MAAa,oBAAoBJ,GAAmB5J,CAAO,IAAI,CAAE,EAAC,OAAOgK,CAAQ,GACvGnL,IAAkB,CAAA,EAAG,OAAOqL,GAAqB,CAACD,CAAY,CAAC,GAC/DE,IAAsBtL,EAAgB,CAAC,GACvCuL,IAAevL,EAAgB,OAAO,SAAUwL,GAASV,GAAgB;AAC3E,QAAIH,IAAOE,GAA2B1J,GAAS2J,GAAgBpB,CAAQ;AACvE,WAAA8B,EAAQ,MAAM5jB,GAAI+iB,EAAK,KAAKa,EAAQ,GAAG,GACvCA,EAAQ,QAAQ3jB,GAAI8iB,EAAK,OAAOa,EAAQ,KAAK,GAC7CA,EAAQ,SAAS3jB,GAAI8iB,EAAK,QAAQa,EAAQ,MAAM,GAChDA,EAAQ,OAAO5jB,GAAI+iB,EAAK,MAAMa,EAAQ,IAAI,GACnCA;AAAA,EACR,GAAEX,GAA2B1J,GAASmK,GAAqB5B,CAAQ,CAAC;AACrE,SAAA6B,EAAa,QAAQA,EAAa,QAAQA,EAAa,MACvDA,EAAa,SAASA,EAAa,SAASA,EAAa,KACzDA,EAAa,IAAIA,EAAa,MAC9BA,EAAa,IAAIA,EAAa,KACvBA;AACT;ACjEe,SAASE,GAAe9J,GAAM;AAC3C,MAAIxB,IAAYwB,EAAK,WACjBR,IAAUQ,EAAK,SACfrB,IAAYqB,EAAK,WACjB4D,IAAgBjF,IAAY8B,GAAiB9B,CAAS,IAAI,MAC1DwG,IAAYxG,IAAYgG,GAAahG,CAAS,IAAI,MAClDoL,IAAUvL,EAAU,IAAIA,EAAU,QAAQ,IAAIgB,EAAQ,QAAQ,GAC9DwK,IAAUxL,EAAU,IAAIA,EAAU,SAAS,IAAIgB,EAAQ,SAAS,GAChE4F;AAEJ,UAAQxB,GAAa;AAAA,IACnB,KAAKtc;AACH,MAAA8d,IAAU;AAAA,QACR,GAAG2E;AAAA,QACH,GAAGvL,EAAU,IAAIgB,EAAQ;AAAA,MACjC;AACM;AAAA,IAEF,KAAKzB;AACH,MAAAqH,IAAU;AAAA,QACR,GAAG2E;AAAA,QACH,GAAGvL,EAAU,IAAIA,EAAU;AAAA,MACnC;AACM;AAAA,IAEF,KAAKR;AACH,MAAAoH,IAAU;AAAA,QACR,GAAG5G,EAAU,IAAIA,EAAU;AAAA,QAC3B,GAAGwL;AAAA,MACX;AACM;AAAA,IAEF,KAAK3iB;AACH,MAAA+d,IAAU;AAAA,QACR,GAAG5G,EAAU,IAAIgB,EAAQ;AAAA,QACzB,GAAGwK;AAAA,MACX;AACM;AAAA,IAEF;AACE,MAAA5E,IAAU;AAAA,QACR,GAAG5G,EAAU;AAAA,QACb,GAAGA,EAAU;AAAA,MACrB;AAAA,EACG;AAED,MAAIyL,IAAWrG,IAAgBhB,GAAyBgB,CAAa,IAAI;AAEzE,MAAIqG,KAAY,MAAM;AACpB,QAAIjoC,IAAMioC,MAAa,MAAM,WAAW;AAExC,YAAQ9E,GAAS;AAAA,MACf,KAAKhH;AACH,QAAAiH,EAAQ6E,CAAQ,IAAI7E,EAAQ6E,CAAQ,KAAKzL,EAAUx8B,CAAG,IAAI,IAAIw9B,EAAQx9B,CAAG,IAAI;AAC7E;AAAA,MAEF,KAAKo8B;AACH,QAAAgH,EAAQ6E,CAAQ,IAAI7E,EAAQ6E,CAAQ,KAAKzL,EAAUx8B,CAAG,IAAI,IAAIw9B,EAAQx9B,CAAG,IAAI;AAC7E;AAAA,IAGH;AAAA;AAGH,SAAOojC;AACT;AC3De,SAAS8E,GAAejK,GAAO93B,GAAS;AACrD,EAAIA,MAAY,WACdA,IAAU,CAAA;AAGZ,MAAIgiC,IAAWhiC,GACXiiC,IAAqBD,EAAS,WAC9BxL,IAAYyL,MAAuB,SAASnK,EAAM,YAAYmK,GAC9DC,IAAoBF,EAAS,UAC7BpC,IAAWsC,MAAsB,SAASpK,EAAM,WAAWoK,GAC3DC,IAAoBH,EAAS,UAC7BX,IAAWc,MAAsB,SAASjM,KAAkBiM,GAC5DC,IAAwBJ,EAAS,cACjCV,IAAec,MAA0B,SAASjM,KAAWiM,GAC7DC,IAAwBL,EAAS,gBACjCM,IAAiBD,MAA0B,SAASjM,KAASiM,GAC7DE,IAAuBP,EAAS,aAChCQ,IAAcD,MAAyB,SAAS,KAAQA,GACxDE,IAAmBT,EAAS,SAC5B5G,IAAUqH,MAAqB,SAAS,IAAIA,GAC5CzH,IAAgBD,GAAmB,OAAOK,KAAY,WAAWA,IAAUH,GAAgBG,GAASrF,EAAc,CAAC,GACnH2M,IAAaJ,MAAmBlM,KAASC,KAAYD,IACrD2G,IAAajF,EAAM,MAAM,QACzBT,IAAUS,EAAM,SAAS0K,IAAcE,IAAaJ,CAAc,GAClEK,IAAqBvB,GAAgB5J,GAAUH,CAAO,IAAIA,IAAUA,EAAQ,kBAAkBwC,GAAmB/B,EAAM,SAAS,MAAM,GAAGuJ,GAAUC,GAAc1B,CAAQ,GACzKgD,IAAsBjK,GAAsBb,EAAM,SAAS,SAAS,GACpE0D,IAAgBmG,GAAe;AAAA,IACjC,WAAWiB;AAAA,IACX,SAAS7F;AAAA,IACT,UAAU;AAAA,IACV,WAAWvG;AAAA,EACf,CAAG,GACGqM,IAAmBjC,GAAiB,OAAO,OAAO,CAAA,GAAI7D,GAAYvB,CAAa,CAAC,GAChFsH,IAAoBR,MAAmBlM,KAASyM,IAAmBD,GAGnEG,IAAkB;AAAA,IACpB,KAAKJ,EAAmB,MAAMG,EAAkB,MAAM9H,EAAc;AAAA,IACpE,QAAQ8H,EAAkB,SAASH,EAAmB,SAAS3H,EAAc;AAAA,IAC7E,MAAM2H,EAAmB,OAAOG,EAAkB,OAAO9H,EAAc;AAAA,IACvE,OAAO8H,EAAkB,QAAQH,EAAmB,QAAQ3H,EAAc;AAAA,EAC9E,GACMgI,KAAalL,EAAM,cAAc;AAErC,MAAIwK,MAAmBlM,MAAU4M,IAAY;AAC3C,QAAIr1B,IAASq1B,GAAWxM,CAAS;AACjC,WAAO,KAAKuM,CAAe,EAAE,QAAQ,SAAUnzC,IAAK;AAClD,UAAIqzC,IAAW,CAACpN,IAAOD,EAAM,EAAE,QAAQhmC,EAAG,KAAK,IAAI,IAAI,IACnD8rC,IAAO,CAACvc,IAAKyW,EAAM,EAAE,QAAQhmC,EAAG,KAAK,IAAI,MAAM;AACnD,MAAAmzC,EAAgBnzC,EAAG,KAAK+d,EAAO+tB,CAAI,IAAIuH;AAAA,IAC7C,CAAK;AAAA;AAGH,SAAOF;AACT;AC5De,SAASG,GAAqBpL,GAAO93B,GAAS;AAC3D,EAAIA,MAAY,WACdA,IAAU,CAAA;AAGZ,MAAIgiC,IAAWhiC,GACXw2B,IAAYwL,EAAS,WACrBX,IAAWW,EAAS,UACpBV,IAAeU,EAAS,cACxB5G,IAAU4G,EAAS,SACnBmB,IAAiBnB,EAAS,gBAC1BoB,IAAwBpB,EAAS,uBACjCqB,IAAwBD,MAA0B,SAASE,KAAgBF,GAC3EpG,IAAYR,GAAahG,CAAS,GAClCC,IAAauG,IAAYmG,IAAiB7M,KAAsBA,GAAoB,OAAO,SAAUE,GAAW;AAClH,WAAOgG,GAAahG,CAAS,MAAMwG;AAAA,EACpC,CAAA,IAAIjH,IACDwN,IAAoB9M,EAAW,OAAO,SAAUD,GAAW;AAC7D,WAAO6M,EAAsB,QAAQ7M,CAAS,KAAK;AAAA,EACvD,CAAG;AAED,EAAI+M,EAAkB,WAAW,MAC/BA,IAAoB9M;AAItB,MAAI+M,IAAYD,EAAkB,OAAO,SAAUhN,GAAKC,GAAW;AACjE,WAAAD,EAAIC,CAAS,IAAIuL,GAAejK,GAAO;AAAA,MACrC,WAAWtB;AAAA,MACX,UAAU6K;AAAA,MACV,cAAcC;AAAA,MACd,SAASlG;AAAA,IACf,CAAK,EAAE9C,GAAiB9B,CAAS,CAAC,GACvBD;AAAA,EACR,GAAE,CAAE,CAAA;AACL,SAAO,OAAO,KAAKiN,CAAS,EAAE,KAAK,SAAUC,GAAGC,GAAG;AACjD,WAAOF,EAAUC,CAAC,IAAID,EAAUE,CAAC;AAAA,EACrC,CAAG;AACH;AClCA,SAASC,GAA8BnN,GAAW;AAChD,MAAI8B,GAAiB9B,CAAS,MAAMV;AAClC,WAAO;AAGT,MAAI8N,IAAoBxE,GAAqB5I,CAAS;AACtD,SAAO,CAAC8I,GAA8B9I,CAAS,GAAGoN,GAAmBtE,GAA8BsE,CAAiB,CAAC;AACvH;AAEA,SAASC,GAAKhM,GAAM;AAClB,MAAIC,IAAQD,EAAK,OACb73B,IAAU63B,EAAK,SACfliC,IAAOkiC,EAAK;AAEhB,MAAI,CAAAC,EAAM,cAAcniC,CAAI,EAAE,OAoC9B;AAAA,aAhCImuC,IAAoB9jC,EAAQ,UAC5B+jC,IAAgBD,MAAsB,SAAS,KAAOA,GACtDE,IAAmBhkC,EAAQ,SAC3BikC,IAAeD,MAAqB,SAAS,KAAOA,GACpDE,IAA8BlkC,EAAQ,oBACtCo7B,IAAUp7B,EAAQ,SAClBqhC,IAAWrhC,EAAQ,UACnBshC,IAAethC,EAAQ,cACvBwiC,IAAcxiC,EAAQ,aACtBmkC,IAAwBnkC,EAAQ,gBAChCmjC,IAAiBgB,MAA0B,SAAS,KAAOA,GAC3Dd,IAAwBrjC,EAAQ,uBAChCokC,IAAqBtM,EAAM,QAAQ,WACnC2D,IAAgBnD,GAAiB8L,CAAkB,GACnDC,IAAkB5I,MAAkB2I,GACpCE,IAAqBJ,MAAgCG,KAAmB,CAAClB,IAAiB,CAAC/D,GAAqBgF,CAAkB,CAAC,IAAIT,GAA8BS,CAAkB,IACvL3N,IAAa,CAAC2N,CAAkB,EAAE,OAAOE,CAAkB,EAAE,OAAO,SAAU/N,GAAKC,GAAW;AAChG,aAAOD,EAAI,OAAO+B,GAAiB9B,CAAS,MAAMV,KAAOoN,GAAqBpL,GAAO;AAAA,QACnF,WAAWtB;AAAA,QACX,UAAU6K;AAAA,QACV,cAAcC;AAAA,QACd,SAASlG;AAAA,QACT,gBAAgB+H;AAAA,QAChB,uBAAuBE;AAAA,MAC7B,CAAK,IAAI7M,CAAS;AAAA,IACf,GAAE,CAAE,CAAA,GACD+N,IAAgBzM,EAAM,MAAM,WAC5BiF,IAAajF,EAAM,MAAM,QACzB0M,IAAY,oBAAI,OAChBC,IAAqB,IACrBC,IAAwBjO,EAAW,CAAC,GAE/BjnC,IAAI,GAAGA,IAAIinC,EAAW,QAAQjnC,KAAK;AAC1C,UAAIgnC,KAAYC,EAAWjnC,CAAC,GAExBm1C,IAAiBrM,GAAiB9B,EAAS,GAE3CoO,KAAmBpI,GAAahG,EAAS,MAAMR,IAC/C2F,IAAa,CAACxc,IAAKyW,EAAM,EAAE,QAAQ+O,CAAc,KAAK,GACtD9qC,IAAM8hC,IAAa,UAAU,UAC7B0E,IAAW0B,GAAejK,GAAO;AAAA,QACnC,WAAWtB;AAAA,QACX,UAAU6K;AAAA,QACV,cAAcC;AAAA,QACd,aAAakB;AAAA,QACb,SAASpH;AAAA,MACf,CAAK,GACGyJ,IAAoBlJ,IAAaiJ,KAAmB/O,KAAQ3W,KAAO0lB,KAAmBhP,KAASzW;AAEnG,MAAIolB,EAAc1qC,CAAG,IAAIkjC,EAAWljC,CAAG,MACrCgrC,IAAoBzF,GAAqByF,CAAiB;AAG5D,UAAIC,KAAmB1F,GAAqByF,CAAiB,GACzDE,IAAS,CAAA;AAUb,UARIhB,KACFgB,EAAO,KAAK1E,EAASsE,CAAc,KAAK,CAAC,GAGvCV,KACFc,EAAO,KAAK1E,EAASwE,CAAiB,KAAK,GAAGxE,EAASyE,EAAgB,KAAK,CAAC,GAG3EC,EAAO,MAAM,SAAUC,GAAO;AAChC,eAAOA;AAAA,MACb,CAAK,GAAG;AACF,QAAAN,IAAwBlO,IACxBiO,IAAqB;AACrB;AAAA;AAGF,MAAAD,EAAU,IAAIhO,IAAWuO,CAAM;AAAA;AAGjC,QAAIN;AAqBF,eAnBIQ,IAAiB9B,IAAiB,IAAI,GAEtC+B,IAAQ,SAAelmC,GAAI;AAC7B,YAAImmC,KAAmB1O,EAAW,KAAK,SAAUD,IAAW;AAC1D,cAAIuO,KAASP,EAAU,IAAIhO,EAAS;AAEpC,cAAIuO;AACF,mBAAOA,GAAO,MAAM,GAAG/lC,CAAE,EAAE,MAAM,SAAUgmC,IAAO;AAChD,qBAAOA;AAAA,YACnB,CAAW;AAAA,QAEX,CAAO;AAED,YAAIG;AACF,iBAAAT,IAAwBS,IACjB;AAAA,MAEf,GAEanmC,IAAKimC,GAAgBjmC,IAAK,GAAGA,KAAM;AAC1C,YAAIomC,IAAOF,EAAMlmC,CAAE;AAEnB,YAAIomC,MAAS;AAAS;AAAA;AAI1B,IAAItN,EAAM,cAAc4M,MACtB5M,EAAM,cAAcniC,CAAI,EAAE,QAAQ,IAClCmiC,EAAM,YAAY4M,GAClB5M,EAAM,QAAQ;AAAA;AAElB;AAGA,MAAeuN,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIxB;AAAA,EACJ,kBAAkB,CAAC,QAAQ;AAAA,EAC3B,MAAM;AAAA,IACJ,OAAO;AAAA,EACR;AACH;AC/IA,SAASyB,GAAejF,GAAUQ,GAAM0E,GAAkB;AACxD,SAAIA,MAAqB,WACvBA,IAAmB;AAAA,IACjB,GAAG;AAAA,IACH,GAAG;AAAA,EACT,IAGS;AAAA,IACL,KAAKlF,EAAS,MAAMQ,EAAK,SAAS0E,EAAiB;AAAA,IACnD,OAAOlF,EAAS,QAAQQ,EAAK,QAAQ0E,EAAiB;AAAA,IACtD,QAAQlF,EAAS,SAASQ,EAAK,SAAS0E,EAAiB;AAAA,IACzD,MAAMlF,EAAS,OAAOQ,EAAK,QAAQ0E,EAAiB;AAAA,EACxD;AACA;AAEA,SAASC,GAAsBnF,GAAU;AACvC,SAAO,CAAClhB,IAAK0W,IAAOD,IAAQ1W,EAAI,EAAE,KAAK,SAAUumB,GAAM;AACrD,WAAOpF,EAASoF,CAAI,KAAK;AAAA,EAC7B,CAAG;AACH;AAEA,SAASra,GAAKyM,GAAM;AAClB,MAAIC,IAAQD,EAAK,OACbliC,IAAOkiC,EAAK,MACZ0M,IAAgBzM,EAAM,MAAM,WAC5BiF,IAAajF,EAAM,MAAM,QACzByN,IAAmBzN,EAAM,cAAc,iBACvC4N,IAAoB3D,GAAejK,GAAO;AAAA,IAC5C,gBAAgB;AAAA,EACpB,CAAG,GACG6N,IAAoB5D,GAAejK,GAAO;AAAA,IAC5C,aAAa;AAAA,EACjB,CAAG,GACG8N,IAA2BN,GAAeI,GAAmBnB,CAAa,GAC1EsB,IAAsBP,GAAeK,GAAmB5I,GAAYwI,CAAgB,GACpFO,IAAoBN,GAAsBI,CAAwB,GAClEG,IAAmBP,GAAsBK,CAAmB;AAChE,EAAA/N,EAAM,cAAcniC,CAAI,IAAI;AAAA,IAC1B,0BAA0BiwC;AAAA,IAC1B,qBAAqBC;AAAA,IACrB,mBAAmBC;AAAA,IACnB,kBAAkBC;AAAA,EACtB,GACEjO,EAAM,WAAW,SAAS,OAAO,OAAO,IAAIA,EAAM,WAAW,QAAQ;AAAA,IACnE,gCAAgCgO;AAAA,IAChC,uBAAuBC;AAAA,EAC3B,CAAG;AACH;AAGA,MAAeC,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,kBAAkB,CAAC,iBAAiB;AAAA,EACpC,IAAI5a;AACN;ACzDO,SAAS6a,GAAwBzP,GAAW0P,GAAOv4B,GAAQ;AAChE,MAAI8tB,IAAgBnD,GAAiB9B,CAAS,GAC1C2P,IAAiB,CAACjnB,IAAMC,EAAG,EAAE,QAAQsc,CAAa,KAAK,IAAI,KAAK,GAEhE5D,IAAO,OAAOlqB,KAAW,aAAaA,EAAO,OAAO,OAAO,CAAE,GAAEu4B,GAAO;AAAA,IACxE,WAAW1P;AAAA,EACZ,CAAA,CAAC,IAAI7oB,GACFy4B,IAAWvO,EAAK,CAAC,GACjBwO,IAAWxO,EAAK,CAAC;AAErB,SAAAuO,IAAWA,KAAY,GACvBC,KAAYA,KAAY,KAAKF,GACtB,CAACjnB,IAAM2W,EAAK,EAAE,QAAQ4F,CAAa,KAAK,IAAI;AAAA,IACjD,GAAG4K;AAAA,IACH,GAAGD;AAAA,EACP,IAAM;AAAA,IACF,GAAGA;AAAA,IACH,GAAGC;AAAA,EACP;AACA;AAEA,SAAS14B,GAAOqqB,GAAO;AACrB,MAAIF,IAAQE,EAAM,OACdh4B,IAAUg4B,EAAM,SAChBriC,IAAOqiC,EAAM,MACbsO,IAAkBtmC,EAAQ,QAC1B2N,IAAS24B,MAAoB,SAAS,CAAC,GAAG,CAAC,IAAIA,GAC/C/wC,IAAOkhC,GAAW,OAAO,SAAUF,GAAKC,GAAW;AACrD,WAAAD,EAAIC,CAAS,IAAIyP,GAAwBzP,GAAWsB,EAAM,OAAOnqB,CAAM,GAChE4oB;AAAA,EACR,GAAE,CAAE,CAAA,GACDgQ,IAAwBhxC,EAAKuiC,EAAM,SAAS,GAC5CqB,IAAIoN,EAAsB,GAC1BnN,IAAImN,EAAsB;AAE9B,EAAIzO,EAAM,cAAc,iBAAiB,SACvCA,EAAM,cAAc,cAAc,KAAKqB,GACvCrB,EAAM,cAAc,cAAc,KAAKsB,IAGzCtB,EAAM,cAAcniC,CAAI,IAAIJ;AAC9B;AAGA,MAAeixC,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU,CAAC,eAAe;AAAA,EAC1B,IAAI74B;AACN;ACnDA,SAAS6tB,GAAc3D,GAAM;AAC3B,MAAIC,IAAQD,EAAK,OACbliC,IAAOkiC,EAAK;AAKhB,EAAAC,EAAM,cAAcniC,CAAI,IAAIgsC,GAAe;AAAA,IACzC,WAAW7J,EAAM,MAAM;AAAA,IACvB,SAASA,EAAM,MAAM;AAAA,IACrB,UAAU;AAAA,IACV,WAAWA,EAAM;AAAA,EACrB,CAAG;AACH;AAGA,MAAe2O,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAIjL;AAAA,EACJ,MAAM,CAAE;AACV;ACxBe,SAASkL,GAAWhL,GAAM;AACvC,SAAOA,MAAS,MAAM,MAAM;AAC9B;ACUA,SAASiL,GAAgB9O,GAAM;AAC7B,MAAIC,IAAQD,EAAK,OACb73B,IAAU63B,EAAK,SACfliC,IAAOkiC,EAAK,MACZiM,IAAoB9jC,EAAQ,UAC5B+jC,IAAgBD,MAAsB,SAAS,KAAOA,GACtDE,IAAmBhkC,EAAQ,SAC3BikC,IAAeD,MAAqB,SAAS,KAAQA,GACrD3C,IAAWrhC,EAAQ,UACnBshC,IAAethC,EAAQ,cACvBwiC,IAAcxiC,EAAQ,aACtBo7B,IAAUp7B,EAAQ,SAClB4mC,IAAkB5mC,EAAQ,QAC1B6mC,IAASD,MAAoB,SAAS,KAAOA,GAC7CE,IAAwB9mC,EAAQ,cAChC+mC,IAAeD,MAA0B,SAAS,IAAIA,GACtDzG,IAAW0B,GAAejK,GAAO;AAAA,IACnC,UAAUuJ;AAAA,IACV,cAAcC;AAAA,IACd,SAASlG;AAAA,IACT,aAAaoH;AAAA,EACjB,CAAG,GACG/G,IAAgBnD,GAAiBR,EAAM,SAAS,GAChDkF,IAAYR,GAAa1E,EAAM,SAAS,GACxCuM,IAAkB,CAACrH,GACnB8E,IAAWrH,GAAyBgB,CAAa,GACjDuL,IAAUN,GAAW5E,CAAQ,GAC7BtG,IAAgB1D,EAAM,cAAc,eACpCyM,IAAgBzM,EAAM,MAAM,WAC5BiF,IAAajF,EAAM,MAAM,QACzBmP,IAAoB,OAAOF,KAAiB,aAAaA,EAAa,OAAO,OAAO,CAAA,GAAIjP,EAAM,OAAO;AAAA,IACvG,WAAWA,EAAM;AAAA,EACrB,CAAG,CAAC,IAAIiP,GACFG,IAA8B,OAAOD,KAAsB,WAAW;AAAA,IACxE,UAAUA;AAAA,IACV,SAASA;AAAA,EACb,IAAM,OAAO,OAAO;AAAA,IAChB,UAAU;AAAA,IACV,SAAS;AAAA,EACV,GAAEA,CAAiB,GAChBE,KAAsBrP,EAAM,cAAc,SAASA,EAAM,cAAc,OAAOA,EAAM,SAAS,IAAI,MACjGviC,IAAO;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AAEE,MAAKimC,GAIL;AAAA,QAAIuI,GAAe;AACjB,UAAIqD,IAEAC,IAAWvF,MAAa,MAAM3iB,KAAMD,IACpCooB,IAAUxF,MAAa,MAAMlM,KAASC,IACtCh8B,IAAMioC,MAAa,MAAM,WAAW,SACpCn0B,IAAS6tB,EAAcsG,CAAQ,GAC/B/jB,KAAMpQ,IAAS0yB,EAASgH,CAAQ,GAChCvpB,IAAMnQ,IAAS0yB,EAASiH,CAAO,GAC/BC,IAAWV,IAAS,CAAC9J,EAAWljC,CAAG,IAAI,IAAI,GAC3C2tC,IAASxK,MAAchH,KAAQuO,EAAc1qC,CAAG,IAAIkjC,EAAWljC,CAAG,GAClE4tC,IAASzK,MAAchH,KAAQ,CAAC+G,EAAWljC,CAAG,IAAI,CAAC0qC,EAAc1qC,CAAG,GAGpE0hC,IAAezD,EAAM,SAAS,OAC9B8D,IAAYiL,KAAUtL,IAAelC,GAAckC,CAAY,IAAI;AAAA,QACrE,OAAO;AAAA,QACP,QAAQ;AAAA,MACd,GACQmM,IAAqB5P,EAAM,cAAc,kBAAkB,IAAIA,EAAM,cAAc,kBAAkB,EAAE,UAAUgD,GAAkB,GACnI6M,KAAkBD,EAAmBL,CAAQ,GAC7CO,KAAkBF,EAAmBJ,CAAO,GAM5CO,KAAWnN,GAAO,GAAG6J,EAAc1qC,CAAG,GAAG+hC,EAAU/hC,CAAG,CAAC,GACvDiuC,KAAYzD,IAAkBE,EAAc1qC,CAAG,IAAI,IAAI0tC,IAAWM,KAAWF,KAAkBT,EAA4B,WAAWM,IAASK,KAAWF,KAAkBT,EAA4B,UACxMa,KAAY1D,IAAkB,CAACE,EAAc1qC,CAAG,IAAI,IAAI0tC,IAAWM,KAAWD,KAAkBV,EAA4B,WAAWO,IAASI,KAAWD,KAAkBV,EAA4B,UACzMjL,KAAoBnE,EAAM,SAAS,SAASwC,GAAgBxC,EAAM,SAAS,KAAK,GAChFkQ,KAAe/L,KAAoB6F,MAAa,MAAM7F,GAAkB,aAAa,IAAIA,GAAkB,cAAc,IAAI,GAC7HgM,MAAuBb,KAAwBD,MAAuB,OAAO,SAASA,GAAoBrF,CAAQ,MAAM,OAAOsF,KAAwB,GACvJc,KAAYv6B,IAASm6B,KAAYG,KAAsBD,IACvDG,KAAYx6B,IAASo6B,KAAYE,IACjCG,KAAkB1N,GAAOmM,IAASjM,GAAQ7c,IAAKmqB,EAAS,IAAInqB,IAAKpQ,GAAQk5B,IAASlM,GAAQ7c,GAAKqqB,EAAS,IAAIrqB,CAAG;AACnH,MAAA0d,EAAcsG,CAAQ,IAAIsG,IAC1B7yC,EAAKusC,CAAQ,IAAIsG,KAAkBz6B;AAAA;AAGrC,QAAIs2B,GAAc;AAChB,UAAIoE,IAEAC,KAAYxG,MAAa,MAAM3iB,KAAMD,IAErCqpB,KAAWzG,MAAa,MAAMlM,KAASC,IAEvC2S,KAAUhN,EAAcwL,CAAO,GAE/ByB,KAAOzB,MAAY,MAAM,WAAW,SAEpC0B,KAAOF,KAAUnI,EAASiI,EAAS,GAEnCK,KAAOH,KAAUnI,EAASkI,EAAQ,GAElCK,KAAe,CAACzpB,IAAKD,EAAI,EAAE,QAAQuc,CAAa,MAAM,IAEtDoN,MAAwBR,KAAyBlB,MAAuB,OAAO,SAASA,GAAoBH,CAAO,MAAM,OAAOqB,KAAyB,GAEzJS,KAAaF,KAAeF,KAAOF,KAAUjE,EAAckE,EAAI,IAAI1L,EAAW0L,EAAI,IAAII,KAAuB3B,EAA4B,SAEzI6B,KAAaH,KAAeJ,KAAUjE,EAAckE,EAAI,IAAI1L,EAAW0L,EAAI,IAAII,KAAuB3B,EAA4B,UAAUyB,IAE5IK,KAAmBnC,KAAU+B,KAAe/N,GAAeiO,IAAYN,IAASO,EAAU,IAAIrO,GAAOmM,IAASiC,KAAaJ,IAAMF,IAAS3B,IAASkC,KAAaJ,EAAI;AAExK,MAAAnN,EAAcwL,CAAO,IAAIgC,IACzBzzC,EAAKyxC,CAAO,IAAIgC,KAAmBR;AAAA;AAGrC,IAAA1Q,EAAM,cAAcniC,CAAI,IAAIJ;AAAA;AAC9B;AAGA,MAAe0zC,KAAA;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,IAAItC;AAAA,EACJ,kBAAkB,CAAC,QAAQ;AAC7B;AC7Ie,SAASuC,GAAqB7R,GAAS;AACpD,SAAO;AAAA,IACL,YAAYA,EAAQ;AAAA,IACpB,WAAWA,EAAQ;AAAA,EACvB;AACA;ACDe,SAAS8R,GAAcngC,GAAM;AAC1C,SAAIA,MAASsuB,GAAUtuB,CAAI,KAAK,CAAC0uB,GAAc1uB,CAAI,IAC1Cu2B,GAAgBv2B,CAAI,IAEpBkgC,GAAqBlgC,CAAI;AAEpC;ACDA,SAASogC,GAAgB/R,GAAS;AAChC,MAAIwJ,IAAOxJ,EAAQ,yBACf0B,IAASR,GAAMsI,EAAK,KAAK,IAAIxJ,EAAQ,eAAe,GACpD2B,IAAST,GAAMsI,EAAK,MAAM,IAAIxJ,EAAQ,gBAAgB;AAC1D,SAAO0B,MAAW,KAAKC,MAAW;AACpC;AAIe,SAASqQ,GAAiBC,GAAyB9O,GAAc6C,GAAS;AACvF,EAAIA,MAAY,WACdA,IAAU;AAGZ,MAAIkM,IAA0B7R,GAAc8C,CAAY,GACpDgP,IAAuB9R,GAAc8C,CAAY,KAAK4O,GAAgB5O,CAAY,GAClFiP,IAAkB5P,GAAmBW,CAAY,GACjDqG,IAAOlI,GAAsB2Q,GAAyBE,GAAsBnM,CAAO,GACnFwB,IAAS;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,EACf,GACM5B,IAAU;AAAA,IACZ,GAAG;AAAA,IACH,GAAG;AAAA,EACP;AAEE,UAAIsM,KAA2B,CAACA,KAA2B,CAAClM,QACtDjG,GAAYoD,CAAY,MAAM;AAAA,EAClC2F,GAAesJ,CAAe,OAC5B5K,IAASsK,GAAc3O,CAAY,IAGjC9C,GAAc8C,CAAY,KAC5ByC,IAAUtE,GAAsB6B,GAAc,EAAI,GAClDyC,EAAQ,KAAKzC,EAAa,YAC1ByC,EAAQ,KAAKzC,EAAa,aACjBiP,MACTxM,EAAQ,IAAIyC,GAAoB+J,CAAe,KAI5C;AAAA,IACL,GAAG5I,EAAK,OAAOhC,EAAO,aAAa5B,EAAQ;AAAA,IAC3C,GAAG4D,EAAK,MAAMhC,EAAO,YAAY5B,EAAQ;AAAA,IACzC,OAAO4D,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACjB;AACA;ACvDA,SAAS5qB,GAAMyzB,GAAW;AACxB,MAAI5xB,IAAM,oBAAI,OACV6xB,IAAU,oBAAI,OACdz0C,IAAS,CAAA;AACb,EAAAw0C,EAAU,QAAQ,SAAUE,GAAU;AACpC,IAAA9xB,EAAI,IAAI8xB,EAAS,MAAMA,CAAQ;AAAA,EACnC,CAAG;AAED,WAAS1zC,EAAK0zC,GAAU;AACtB,IAAAD,EAAQ,IAAIC,EAAS,IAAI;AACzB,QAAIC,IAAW,GAAG,OAAOD,EAAS,YAAY,CAAA,GAAIA,EAAS,oBAAoB,CAAA,CAAE;AACjF,IAAAC,EAAS,QAAQ,SAAUC,GAAK;AAC9B,UAAI,CAACH,EAAQ,IAAIG,CAAG,GAAG;AACrB,YAAIC,IAAcjyB,EAAI,IAAIgyB,CAAG;AAE7B,QAAIC,KACF7zC,EAAK6zC,CAAW;AAAA;AAAA,IAG1B,CAAK,GACD70C,EAAO,KAAK00C,CAAQ;AAAA,EACrB;AAED,SAAAF,EAAU,QAAQ,SAAUE,GAAU;AACpC,IAAKD,EAAQ,IAAIC,EAAS,IAAI,KAE5B1zC,EAAK0zC,CAAQ;AAAA,EAEnB,CAAG,GACM10C;AACT;AAEe,SAAS80C,GAAeN,GAAW;AAEhD,MAAIO,IAAmBh0B,GAAMyzB,CAAS;AAEtC,SAAOvS,GAAe,OAAO,SAAUZ,GAAK2T,GAAO;AACjD,WAAO3T,EAAI,OAAO0T,EAAiB,OAAO,SAAUL,GAAU;AAC5D,aAAOA,EAAS,UAAUM;AAAA,IAC3B,CAAA,CAAC;AAAA,EACH,GAAE,CAAE,CAAA;AACP;AC3Ce,SAASC,GAASC,GAAI;AACnC,MAAIC;AACJ,SAAO,WAAY;AACjB,WAAKA,MACHA,IAAU,IAAI,QAAQ,SAAUC,GAAS;AACvC,cAAQ,UAAU,KAAK,WAAY;AACjC,QAAAD,IAAU,QACVC,EAAQF,EAAE,CAAE;AAAA,MACtB,CAAS;AAAA,IACT,CAAO,IAGIC;AAAA,EACX;AACA;ACde,SAASE,GAAYb,GAAW;AAC7C,MAAIc,IAASd,EAAU,OAAO,SAAUc,GAAQC,GAAS;AACvD,QAAIC,IAAWF,EAAOC,EAAQ,IAAI;AAClC,WAAAD,EAAOC,EAAQ,IAAI,IAAIC,IAAW,OAAO,OAAO,CAAA,GAAIA,GAAUD,GAAS;AAAA,MACrE,SAAS,OAAO,OAAO,CAAA,GAAIC,EAAS,SAASD,EAAQ,OAAO;AAAA,MAC5D,MAAM,OAAO,OAAO,CAAA,GAAIC,EAAS,MAAMD,EAAQ,IAAI;AAAA,IACpD,CAAA,IAAIA,GACED;AAAA,EACR,GAAE,CAAE,CAAA;AAEL,SAAO,OAAO,KAAKA,CAAM,EAAE,IAAI,SAAU56C,GAAK;AAC5C,WAAO46C,EAAO56C,CAAG;AAAA,EACrB,CAAG;AACH;ACJA,IAAI+6C,KAAkB;AAAA,EACpB,WAAW;AAAA,EACX,WAAW,CAAE;AAAA,EACb,UAAU;AACZ;AAEA,SAASC,KAAmB;AAC1B,WAASnC,IAAO,UAAU,QAAQoC,IAAO,IAAI,MAAMpC,CAAI,GAAGqC,IAAO,GAAGA,IAAOrC,GAAMqC;AAC/E,IAAAD,EAAKC,CAAI,IAAI,UAAUA,CAAI;AAG7B,SAAO,CAACD,EAAK,KAAK,SAAUxT,GAAS;AACnC,WAAO,EAAEA,KAAW,OAAOA,EAAQ,yBAA0B;AAAA,EACjE,CAAG;AACH;AAEO,SAAS0T,GAAgBC,GAAkB;AAChD,EAAIA,MAAqB,WACvBA,IAAmB,CAAA;AAGrB,MAAIC,IAAoBD,GACpBE,IAAwBD,EAAkB,kBAC1CE,IAAmBD,MAA0B,SAAS,CAAE,IAAGA,GAC3DE,IAAyBH,EAAkB,gBAC3CI,IAAiBD,MAA2B,SAAST,KAAkBS;AAC3E,SAAO,SAAsB/U,GAAWD,GAAQp2B,GAAS;AACvD,IAAIA,MAAY,WACdA,IAAUqrC;AAGZ,QAAIvT,IAAQ;AAAA,MACV,WAAW;AAAA,MACX,kBAAkB,CAAE;AAAA,MACpB,SAAS,OAAO,OAAO,CAAA,GAAI6S,IAAiBU,CAAc;AAAA,MAC1D,eAAe,CAAE;AAAA,MACjB,UAAU;AAAA,QACR,WAAWhV;AAAA,QACX,QAAQD;AAAA,MACT;AAAA,MACD,YAAY,CAAE;AAAA,MACd,QAAQ,CAAE;AAAA,IAChB,GACQkV,IAAmB,CAAA,GACnBC,IAAc,IACd5M,IAAW;AAAA,MACb,OAAO7G;AAAA,MACP,YAAY,SAAoB0T,GAAkB;AAChD,YAAIxrC,IAAU,OAAOwrC,KAAqB,aAAaA,EAAiB1T,EAAM,OAAO,IAAI0T;AACzF,QAAAC,KACA3T,EAAM,UAAU,OAAO,OAAO,CAAA,GAAIuT,GAAgBvT,EAAM,SAAS93B,CAAO,GACxE83B,EAAM,gBAAgB;AAAA,UACpB,WAAWN,GAAUnB,CAAS,IAAIoK,GAAkBpK,CAAS,IAAIA,EAAU,iBAAiBoK,GAAkBpK,EAAU,cAAc,IAAI,CAAE;AAAA,UAC5I,QAAQoK,GAAkBrK,CAAM;AAAA,QAC1C;AAGQ,YAAI6T,IAAmBD,GAAeO,GAAY,GAAG,OAAOY,GAAkBrT,EAAM,QAAQ,SAAS,CAAC,CAAC;AAEvG,eAAAA,EAAM,mBAAmBmS,EAAiB,OAAO,SAAUyB,GAAG;AAC5D,iBAAOA,EAAE;AAAA,QACnB,CAAS,GACDC,KACOhN,EAAS;MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,aAAa,WAAuB;AAClC,YAAI,CAAA4M,GAIJ;AAAA,cAAIK,IAAkB9T,EAAM,UACxBzB,IAAYuV,EAAgB,WAC5BxV,IAASwV,EAAgB;AAG7B,cAAKhB,GAAiBvU,GAAWD,CAAM,GAKvC;AAAA,YAAA0B,EAAM,QAAQ;AAAA,cACZ,WAAWuR,GAAiBhT,GAAWiE,GAAgBlE,CAAM,GAAG0B,EAAM,QAAQ,aAAa,OAAO;AAAA,cAClG,QAAQuB,GAAcjD,CAAM;AAAA,YACtC,GAMQ0B,EAAM,QAAQ,IACdA,EAAM,YAAYA,EAAM,QAAQ,WAKhCA,EAAM,iBAAiB,QAAQ,SAAU8R,GAAU;AACjD,qBAAO9R,EAAM,cAAc8R,EAAS,IAAI,IAAI,OAAO,OAAO,CAAE,GAAEA,EAAS,IAAI;AAAA,YACrF,CAAS;AAED,qBAASrzC,IAAQ,GAAGA,IAAQuhC,EAAM,iBAAiB,QAAQvhC,KAAS;AAClE,kBAAIuhC,EAAM,UAAU,IAAM;AACxB,gBAAAA,EAAM,QAAQ,IACdvhC,IAAQ;AACR;AAAA;AAGF,kBAAIs1C,IAAwB/T,EAAM,iBAAiBvhC,CAAK,GACpD6zC,IAAKyB,EAAsB,IAC3BC,IAAyBD,EAAsB,SAC/C7J,IAAW8J,MAA2B,SAAS,CAAE,IAAGA,GACpDn2C,IAAOk2C,EAAsB;AAEjC,cAAI,OAAOzB,KAAO,eAChBtS,IAAQsS,EAAG;AAAA,gBACT,OAAOtS;AAAA,gBACP,SAASkK;AAAA,gBACT,MAAMrsC;AAAA,gBACN,UAAUgpC;AAAA,cACX,CAAA,KAAK7G;AAAA;AAAA;AAAA;AAAA,MAGX;AAAA;AAAA;AAAA,MAGD,QAAQqS,GAAS,WAAY;AAC3B,eAAO,IAAI,QAAQ,SAAUG,GAAS;AACpC,UAAA3L,EAAS,YAAW,GACpB2L,EAAQxS,CAAK;AAAA,QACvB,CAAS;AAAA,MACT,CAAO;AAAA,MACD,SAAS,WAAmB;AAC1B,QAAA2T,KACAF,IAAc;AAAA,MACf;AAAA,IACP;AAEI,QAAI,CAACX,GAAiBvU,GAAWD,CAAM;AACrC,aAAOuI;AAGT,IAAAA,EAAS,WAAW3+B,CAAO,EAAE,KAAK,SAAU83B,GAAO;AACjD,MAAI,CAACyT,KAAevrC,EAAQ,iBAC1BA,EAAQ,cAAc83B,CAAK;AAAA,IAEnC,CAAK;AAMD,aAAS6T,IAAqB;AAC5B,MAAA7T,EAAM,iBAAiB,QAAQ,SAAUD,GAAM;AAC7C,YAAIliC,IAAOkiC,EAAK,MACZkU,IAAelU,EAAK,SACpB73B,IAAU+rC,MAAiB,SAAS,CAAE,IAAGA,GACzC5gB,IAAS0M,EAAK;AAElB,YAAI,OAAO1M,KAAW,YAAY;AAChC,cAAI6gB,IAAY7gB,EAAO;AAAA,YACrB,OAAO2M;AAAA,YACP,MAAMniC;AAAA,YACN,UAAUgpC;AAAA,YACV,SAAS3+B;AAAA,UACrB,CAAW,GAEGisC,IAAS,WAAkB;AAAA;AAE/B,UAAAX,EAAiB,KAAKU,KAAaC,CAAM;AAAA;AAAA,MAEnD,CAAO;AAAA,IACF;AAED,aAASR,IAAyB;AAChC,MAAAH,EAAiB,QAAQ,SAAUlB,GAAI;AACrC,eAAOA,EAAE;AAAA,MACjB,CAAO,GACDkB,IAAmB,CAAA;AAAA,IACpB;AAED,WAAO3M;AAAA,EACX;AACA;ACzLA,IAAIwM,KAAmB,CAACjM,IAAgB1D,IAAe4C,IAAexG,IAAajqB,IAAQk2B,IAAM8C,IAAiBtL,IAAOjQ,EAAI,GACzH8gB,KAA4B,gBAAAnB,GAAgB;AAAA,EAC9C,kBAAkBI;AACpB,CAAC;ACb0iB,SAASgB,GAAE,GAAE,GAAE;AAAC,GAAO,KAAN,QAAS,IAAE,EAAE,YAAU,IAAE,EAAE;AAAQ,WAAQ7vC,IAAE,GAAEH,IAAE,IAAI,MAAM,CAAC,GAAEG,IAAE,GAAEA;AAAI,IAAAH,EAAEG,CAAC,IAAE,EAAEA,CAAC;AAAE,SAAOH;AAAC;AAAC,SAASiwC,GAAE,GAAE,GAAE;AAAC,MAAG,GAAE;AAAC,QAAa,OAAO,KAAjB;AAAmB,aAAOD,GAAE,GAAE,CAAC;AAAE,QAAI7vC,IAAE,OAAO,UAAU,SAAS,KAAK,CAAC,EAAE,MAAM,GAAE,EAAE;AAAE,WAAiBA,MAAX,YAAc,EAAE,gBAAcA,IAAE,EAAE,YAAY,OAAcA,MAAR,SAAmBA,MAAR,QAAU,MAAM,KAAK,CAAC,IAAgBA,MAAd,eAAiB,2CAA2C,KAAKA,CAAC,IAAE6vC,GAAE,GAAE,CAAC,IAAE;AAAA;AAAO;AAAC,SAASE,GAAE,GAAE;AAAC,SAAO,SAAS72C,GAAE;AAAC,QAAG,MAAM,QAAQA,CAAC;AAAE,aAAO22C,GAAE32C,CAAC;AAAA,EAAC,EAAE,CAAC,KAAG,SAASA,GAAE;AAAC,QAAgB,OAAO,SAApB,OAAkCA,EAAE,OAAO,QAAQ,KAAvB,QAAgCA,EAAE,YAAY,KAApB;AAAsB,aAAO,MAAM,KAAKA,CAAC;AAAA,EAAC,EAAE,CAAC,KAAG42C,GAAE,CAAC,KAAG,WAAU;AAAC,UAAM,IAAI,UAAU;AAAA,mFAAsI;AAAA,EAAC,EAAC;AAAE;AAAC,SAASE,GAAE,GAAE;AAAC,SAAOA,KAAc,OAAO,UAAnB,cAAqC,OAAO,OAAO,YAAxB,WAAiC,SAAS92C,GAAE;AAAC,WAAO,OAAOA;AAAA,EAAC,IAAE,SAASA,GAAE;AAAC,WAAOA,KAAe,OAAO,UAAnB,cAA2BA,EAAE,gBAAc,UAAQA,MAAI,OAAO,YAAU,WAAS,OAAOA;AAAA,EAAC,GAAE82C,GAAE,CAAC;AAAC;AAAC,SAASC,GAAE,GAAE,GAAEjwC,GAAEH,GAAEM,GAAEgnC,GAAEj0C,GAAE;AAAC,MAAG;AAAC,QAAIg9C,IAAE,EAAE/I,CAAC,EAAEj0C,CAAC,GAAEyF,IAAEu3C,EAAE;AAAA,EAAK,SAAOh3C,GAAN;AAAS,WAAO,KAAK8G,EAAE9G,CAAC;AAAA,EAAC;AAAC,EAAAg3C,EAAE,OAAK,EAAEv3C,CAAC,IAAE,QAAQ,QAAQA,CAAC,EAAE,KAAKkH,GAAEM,CAAC;AAAC;AAAC,SAASgwC,GAAE,GAAE;AAAC,SAAO,WAAU;AAAC,QAAI,IAAE,MAAKnwC,IAAE;AAAU,WAAO,IAAI,QAAS,SAASH,GAAEM,GAAE;AAAC,UAAIgnC,IAAE,EAAE,MAAM,GAAEnnC,CAAC;AAAE,eAAS9M,EAAEgG,GAAE;AAAC,QAAA+2C,GAAE9I,GAAEtnC,GAAEM,GAAEjN,GAAEg9C,GAAE,QAAOh3C,CAAC;AAAA,MAAC;AAAC,eAASg3C,EAAEh3C,GAAE;AAAC,QAAA+2C,GAAE9I,GAAEtnC,GAAEM,GAAEjN,GAAEg9C,GAAE,SAAQh3C,CAAC;AAAA,MAAC;AAAC,MAAAhG,EAAE,MAAM;AAAA,IAAC,CAAG;AAAA,EAAA;AAAC;AAAC,IAAIk9C,KAAE,EAAC,SAAQ,CAAE,EAAA,GAAEC,KAAE,EAAC,SAAQ,CAAE,EAAA;AAAA,CAAG,SAAS,GAAE;AAAC,WAAS,EAAErwC,GAAE;AAAC,WAAO,EAAE,UAAQ,IAAc,OAAO,UAAnB,cAAqC,OAAO,OAAO,YAAxB,WAAiC,SAAS9G,GAAE;AAAC,aAAO,OAAOA;AAAA,IAAC,IAAE,SAASA,GAAE;AAAC,aAAOA,KAAe,OAAO,UAAnB,cAA2BA,EAAE,gBAAc,UAAQA,MAAI,OAAO,YAAU,WAAS,OAAOA;AAAA,IAAC,GAAE,EAAE,QAAQ,aAAW,IAAG,EAAE,QAAQ,UAAQ,EAAE,SAAQ,EAAE8G,CAAC;AAAA,EAAC;AAAC,IAAE,UAAQ,GAAE,EAAE,QAAQ,aAAW,IAAG,EAAE,QAAQ,UAAQ,EAAE;AAAO,GAAEqwC,EAAC,GAAE,SAAS,GAAE;AAAC,MAAI,IAAEA,GAAE,QAAQ;AAAQ,WAASrwC,IAAG;AAAC,MAAE,UAAQA,IAAE,WAAU;AAAC,aAAOG;AAAA,IAAC,GAAE,EAAE,QAAQ,aAAW,IAAG,EAAE,QAAQ,UAAQ,EAAE;AAAQ,QAAIN,GAAEM,IAAE,CAAA,GAAGgnC,IAAE,OAAO,WAAUj0C,IAAEi0C,EAAE,gBAAe+I,IAAE,OAAO,kBAAgB,SAASh3C,GAAE0G,GAAEI,GAAE;AAAC,MAAA9G,EAAE0G,CAAC,IAAEI,EAAE;AAAA,IAAK,GAAErH,IAAc,OAAO,UAAnB,aAA0B,SAAO,CAAE,GAACuH,IAAEvH,EAAE,YAAU,cAAasH,IAAEtH,EAAE,iBAAe,mBAAkBkS,IAAElS,EAAE,eAAa;AAAgB,aAAS23C,EAAEp3C,GAAE0G,GAAEI,GAAE;AAAC,aAAO,OAAO,eAAe9G,GAAE0G,GAAE,EAAC,OAAMI,GAAE,YAAW,IAAG,cAAa,IAAG,UAAS,GAAE,CAAC,GAAE9G,EAAE0G,CAAC;AAAA,IAAC;AAAC,QAAG;AAAC,MAAA0wC,EAAE,CAAE,GAAC,EAAE;AAAA,IAAC,QAAC;AAAS,MAAAA,IAAE,SAASp3C,GAAE0G,GAAEI,GAAE;AAAC,eAAO9G,EAAE0G,CAAC,IAAEI;AAAA,MAAC;AAAA,IAAC;AAAC,aAASpM,EAAEsF,GAAE0G,GAAEI,GAAEH,GAAE;AAAC,UAAIM,IAAEP,KAAGA,EAAE,qBAAqB2wC,IAAE3wC,IAAE2wC,GAAEpJ,IAAE,OAAO,OAAOhnC,EAAE,SAAS,GAAEjN,IAAE,IAAI68C,EAAElwC,KAAG,CAAE,CAAA;AAAE,aAAOqwC,EAAE/I,GAAE,WAAU,EAAC,OAAM/8B,GAAElR,GAAE8G,GAAE9M,CAAC,EAAC,CAAC,GAAEi0C;AAAA,IAAC;AAAC,aAASqJ,EAAEt3C,GAAE0G,GAAEI,GAAE;AAAC,UAAG;AAAC,eAAM,EAAC,MAAK,UAAS,KAAI9G,EAAE,KAAK0G,GAAEI,CAAC,EAAC;AAAA,MAAC,SAAO9G,GAAN;AAAS,eAAM,EAAC,MAAK,SAAQ,KAAIA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,IAAAiH,EAAE,OAAKvM;AAAE,QAAI8E,IAAE,kBAAiB02C,IAAE,kBAAiB,IAAE,aAAYtS,IAAE,aAAYsK,IAAE,CAAE;AAAC,aAASmJ,IAAG;AAAA,IAAE;AAAA,aAAS1T,IAAG;AAAA,IAAE;AAAA,aAAS4T,IAAG;AAAA,IAAA;AAAE,QAAIC,IAAE,CAAA;AAAG,IAAAJ,EAAEI,GAAExwC,GAAG,WAAU;AAAC,aAAO;AAAA,IAAI,CAAC;AAAG,QAAIywC,IAAE,OAAO,gBAAeC,IAAED,KAAGA,EAAEA,EAAEX,GAAE,CAAE,CAAA,CAAC,CAAC;AAAE,IAAAY,KAAGA,MAAIzJ,KAAGj0C,EAAE,KAAK09C,GAAE1wC,CAAC,MAAIwwC,IAAEE;AAAG,QAAIC,IAAEJ,EAAE,YAAUF,EAAE,YAAU,OAAO,OAAOG,CAAC;AAAE,aAASI,GAAE53C,GAAE;AAAC,OAAC,QAAO,SAAQ,QAAQ,EAAE,QAAS,SAAS0G,GAAE;AAAC,QAAA0wC,EAAEp3C,GAAE0G,GAAG,SAAS1G,GAAE;AAAC,iBAAO,KAAK,QAAQ0G,GAAE1G,CAAC;AAAA,QAAC,CAAG;AAAA,MAAA,CAAG;AAAA,IAAA;AAAC,aAAS63C,EAAE73C,GAAE8G,GAAE;AAAC,eAASH,EAAEM,GAAEgnC,GAAE+I,GAAEv3C,IAAE;AAAC,YAAIuH,KAAEswC,EAAEt3C,EAAEiH,CAAC,GAAEjH,GAAEiuC,CAAC;AAAE,YAAajnC,GAAE,SAAZ,SAAiB;AAAC,cAAID,KAAEC,GAAE,KAAI2K,KAAE5K,GAAE;AAAM,iBAAO4K,MAAa,EAAEA,EAAC,KAAb,YAAgB3X,EAAE,KAAK2X,IAAE,SAAS,IAAE7K,EAAE,QAAQ6K,GAAE,OAAO,EAAE,KAAM,SAAS3R,IAAE;AAAC,YAAA2G,EAAE,QAAO3G,IAAEg3C,GAAEv3C,EAAC;AAAA,UAAC,GAAI,SAASO,IAAE;AAAC,YAAA2G,EAAE,SAAQ3G,IAAEg3C,GAAEv3C,EAAC;AAAA,UAAC,CAAG,IAACqH,EAAE,QAAQ6K,EAAC,EAAE,KAAM,SAAS3R,IAAE;AAAC,YAAA+G,GAAE,QAAM/G,IAAEg3C,EAAEjwC,EAAC;AAAA,UAAC,GAAI,SAAS/G,IAAE;AAAC,mBAAO2G,EAAE,SAAQ3G,IAAEg3C,GAAEv3C,EAAC;AAAA,UAAC,CAAG;AAAA;AAAC,QAAAA,GAAEuH,GAAE,GAAG;AAAA,MAAC;AAAC,UAAIC;AAAE,MAAA+vC,EAAE,MAAK,WAAU,EAAC,OAAM,SAASh3C,GAAE0G,GAAE;AAAC,iBAASunC,IAAG;AAAC,iBAAO,IAAInnC,EAAG,SAASA,IAAEG,IAAE;AAAC,YAAAN,EAAE3G,GAAE0G,GAAEI,IAAEG,EAAC;AAAA,UAAC,CAAC;AAAA,QAAE;AAAC,eAAOA,IAAEA,IAAEA,EAAE,KAAKgnC,GAAEA,CAAC,IAAEA,EAAG;AAAA,MAAA,EAAC,CAAC;AAAA,IAAC;AAAC,aAAS/8B,GAAElR,GAAE0G,GAAEI,GAAE;AAAC,UAAIG,IAAEzH;AAAE,aAAO,SAASyuC,GAAEj0C,GAAE;AAAC,YAAGiN,MAAI;AAAE,gBAAM,IAAI,MAAM,8BAA8B;AAAE,YAAGA,MAAI28B,GAAE;AAAC,cAAaqK,MAAV;AAAY,kBAAMj0C;AAAE,iBAAM,EAAC,OAAM2M,GAAE,MAAK,GAAE;AAAA;AAAE,aAAIG,EAAE,SAAOmnC,GAAEnnC,EAAE,MAAI9M,OAAI;AAAC,cAAIg9C,IAAElwC,EAAE;AAAS,cAAGkwC,GAAE;AAAC,gBAAIv3C,KAAEq4C,EAAEd,GAAElwC,CAAC;AAAE,gBAAGrH,IAAE;AAAC,kBAAGA,OAAIyuC;AAAE;AAAS,qBAAOzuC;AAAA;AAAA;AAAG,cAAYqH,EAAE,WAAX;AAAkB,YAAAA,EAAE,OAAKA,EAAE,QAAMA,EAAE;AAAA,mBAAsBA,EAAE,WAAZ,SAAmB;AAAC,gBAAGG,MAAIzH;AAAE,oBAAMyH,IAAE28B,GAAE98B,EAAE;AAAI,YAAAA,EAAE,kBAAkBA,EAAE,GAAG;AAAA;AAAM,YAAWA,EAAE,WAAb,YAAqBA,EAAE,OAAO,UAASA,EAAE,GAAG;AAAE,UAAAG,IAAE;AAAE,cAAID,KAAEswC,EAAEt3C,GAAE0G,GAAEI,CAAC;AAAE,cAAcE,GAAE,SAAb,UAAkB;AAAC,gBAAGC,IAAEH,EAAE,OAAK88B,IAAEsS,GAAElvC,GAAE,QAAMknC;AAAE;AAAS,mBAAM,EAAC,OAAMlnC,GAAE,KAAI,MAAKF,EAAE,KAAI;AAAA;AAAE,UAAUE,GAAE,SAAZ,YAAmBC,IAAE28B,GAAE98B,EAAE,SAAO,SAAQA,EAAE,MAAIE,GAAE;AAAA;AAAA,MAAK;AAAA,IAAC;AAAC,aAAS8wC,EAAE93C,GAAE0G,GAAE;AAAC,UAAII,IAAEJ,EAAE,QAAOO,IAAEjH,EAAE,SAAS8G,CAAC;AAAE,UAAGG,MAAIN;AAAE,eAAOD,EAAE,WAAS,MAAeI,MAAV,WAAa9G,EAAE,SAAS,WAAS0G,EAAE,SAAO,UAASA,EAAE,MAAIC,GAAEmxC,EAAE93C,GAAE0G,CAAC,GAAYA,EAAE,WAAZ,YAAgCI,MAAX,aAAeJ,EAAE,SAAO,SAAQA,EAAE,MAAI,IAAI,UAAU,sCAAoCI,IAAE,UAAU,IAAGonC;AAAE,UAAID,IAAEqJ,EAAErwC,GAAEjH,EAAE,UAAS0G,EAAE,GAAG;AAAE,UAAaunC,EAAE,SAAZ;AAAiB,eAAOvnC,EAAE,SAAO,SAAQA,EAAE,MAAIunC,EAAE,KAAIvnC,EAAE,WAAS,MAAKwnC;AAAE,UAAIl0C,IAAEi0C,EAAE;AAAI,aAAOj0C,IAAEA,EAAE,QAAM0M,EAAE1G,EAAE,UAAU,IAAEhG,EAAE,OAAM0M,EAAE,OAAK1G,EAAE,SAAmB0G,EAAE,WAAb,aAAsBA,EAAE,SAAO,QAAOA,EAAE,MAAIC,IAAGD,EAAE,WAAS,MAAKwnC,KAAGl0C,KAAG0M,EAAE,SAAO,SAAQA,EAAE,MAAI,IAAI,UAAU,kCAAkC,GAAEA,EAAE,WAAS,MAAKwnC;AAAA,IAAE;AAAC,aAASyI,EAAE32C,GAAE;AAAC,UAAI0G,IAAE,EAAC,QAAO1G,EAAE,CAAC,EAAC;AAAE,WAAKA,MAAI0G,EAAE,WAAS1G,EAAE,CAAC,IAAG,KAAKA,MAAI0G,EAAE,aAAW1G,EAAE,CAAC,GAAE0G,EAAE,WAAS1G,EAAE,CAAC,IAAG,KAAK,WAAW,KAAK0G,CAAC;AAAA,IAAC;AAAC,aAASkwC,EAAE52C,GAAE;AAAC,UAAI0G,IAAE1G,EAAE,cAAY,CAAE;AAAC,MAAA0G,EAAE,OAAK,UAAS,OAAOA,EAAE,KAAI1G,EAAE,aAAW0G;AAAA,IAAC;AAAC,aAASmwC,EAAE72C,GAAE;AAAC,WAAK,aAAW,CAAC,EAAC,QAAO,OAAM,CAAC,GAAEA,EAAE,QAAQ22C,GAAE,IAAI,GAAE,KAAK,MAAM,EAAE;AAAA,IAAC;AAAC,aAASG,GAAE92C,GAAE;AAAC,UAAGA,KAAQA,MAAL,IAAO;AAAC,YAAI8G,IAAE9G,EAAEgH,CAAC;AAAE,YAAGF;AAAE,iBAAOA,EAAE,KAAK9G,CAAC;AAAE,YAAe,OAAOA,EAAE,QAArB;AAA0B,iBAAOA;AAAE,YAAG,CAAC,MAAMA,EAAE,MAAM,GAAE;AAAC,cAAIiH,IAAE,IAAGgnC,IAAE,SAASvnC,IAAG;AAAC,mBAAK,EAAEO,IAAEjH,EAAE;AAAQ,kBAAGhG,EAAE,KAAKgG,GAAEiH,CAAC;AAAE,uBAAOP,EAAE,QAAM1G,EAAEiH,CAAC,GAAEP,EAAE,OAAK,IAAGA;AAAE,mBAAOA,EAAE,QAAMC,GAAED,EAAE,OAAK,IAAGA;AAAA,UAAC;AAAE,iBAAOunC,EAAE,OAAKA;AAAA;AAAA;AAAG,YAAM,IAAI,UAAU,EAAEjuC,CAAC,IAAE,kBAAkB;AAAA,IAAC;AAAC,WAAO2jC,EAAE,YAAU4T,GAAEP,EAAEW,GAAE,eAAc,EAAC,OAAMJ,GAAE,cAAa,GAAE,CAAC,GAAEP,EAAEO,GAAE,eAAc,EAAC,OAAM5T,GAAE,cAAa,GAAE,CAAC,GAAEA,EAAE,cAAYyT,EAAEG,GAAE5lC,GAAE,mBAAmB,GAAE1K,EAAE,sBAAoB,SAASjH,GAAE;AAAC,UAAI0G,IAAc,OAAO1G,KAAnB,cAAsBA,EAAE;AAAY,aAAM,CAAC,CAAC0G,MAAIA,MAAIi9B,MAA0Bj9B,EAAE,eAAaA,EAAE,UAAxC;AAAA,IAA8C,GAAEO,EAAE,OAAK,SAASjH,GAAE;AAAC,aAAO,OAAO,iBAAe,OAAO,eAAeA,GAAEu3C,CAAC,KAAGv3C,EAAE,YAAUu3C,GAAEH,EAAEp3C,GAAE2R,GAAE,mBAAmB,IAAG3R,EAAE,YAAU,OAAO,OAAO23C,CAAC,GAAE33C;AAAA,IAAC,GAAEiH,EAAE,QAAM,SAASjH,GAAE;AAAC,aAAM,EAAC,SAAQA,EAAC;AAAA,IAAC,GAAE43C,GAAEC,EAAE,SAAS,GAAET,EAAES,EAAE,WAAU9wC,GAAG,WAAU;AAAC,aAAO;AAAA,IAAI,CAAG,GAACE,EAAE,gBAAc4wC,GAAE5wC,EAAE,QAAM,SAASjH,GAAE0G,GAAEI,GAAEH,GAAEsnC,GAAE;AAAC,MAASA,MAAT,WAAaA,IAAE;AAAS,UAAIj0C,IAAE,IAAI69C,EAAEn9C,EAAEsF,GAAE0G,GAAEI,GAAEH,CAAC,GAAEsnC,CAAC;AAAE,aAAOhnC,EAAE,oBAAoBP,CAAC,IAAE1M,IAAEA,EAAE,KAAM,EAAC,KAAM,SAASgG,GAAE;AAAC,eAAOA,EAAE,OAAKA,EAAE,QAAMhG,EAAE;MAAM,CAAC;AAAA,IAAE,GAAE49C,GAAED,CAAC,GAAEP,EAAEO,GAAEhmC,GAAE,WAAW,GAAEylC,EAAEO,GAAE3wC,GAAG,WAAU;AAAC,aAAO;AAAA,IAAI,CAAG,GAACowC,EAAEO,GAAE,YAAY,WAAU;AAAC,aAAM;AAAA,IAAoB,CAAC,GAAG1wC,EAAE,OAAK,SAASjH,GAAE;AAAC,UAAI0G,IAAE,OAAO1G,CAAC,GAAE8G,IAAE,CAAE;AAAC,eAAQH,KAAKD;AAAE,QAAAI,EAAE,KAAKH,CAAC;AAAE,aAAOG,EAAE,QAAO,GAAG,SAAS9G,IAAG;AAAC,eAAK8G,EAAE,UAAQ;AAAC,cAAIH,IAAEG,EAAE,IAAK;AAAC,cAAGH,KAAKD;AAAE,mBAAO1G,EAAE,QAAM2G,GAAE3G,EAAE,OAAK,IAAGA;AAAA;AAAE,eAAOA,EAAE,OAAK,IAAGA;AAAA,MAAC;AAAA,IAAC,GAAEiH,EAAE,SAAO6vC,IAAED,EAAE,YAAU,EAAC,aAAYA,GAAE,OAAM,SAAS72C,GAAE;AAAC,UAAG,KAAK,OAAK,GAAE,KAAK,OAAK,GAAE,KAAK,OAAK,KAAK,QAAM2G,GAAE,KAAK,OAAK,IAAG,KAAK,WAAS,MAAK,KAAK,SAAO,QAAO,KAAK,MAAIA,GAAE,KAAK,WAAW,QAAQiwC,CAAC,GAAE,CAAC52C;AAAE,iBAAQ0G,KAAK;AAAK,UAAMA,EAAE,OAAO,CAAC,MAAhB,OAAmB1M,EAAE,KAAK,MAAK0M,CAAC,KAAG,CAAC,MAAM,CAACA,EAAE,MAAM,CAAC,CAAC,MAAI,KAAKA,CAAC,IAAEC;AAAA,IAAE,GAAE,MAAK,WAAU;AAAC,WAAK,OAAK;AAAG,UAAI3G,IAAE,KAAK,WAAW,CAAC,EAAE;AAAW,UAAaA,EAAE,SAAZ;AAAiB,cAAMA,EAAE;AAAI,aAAO,KAAK;AAAA,IAAI,GAAE,mBAAkB,SAASA,GAAE;AAAC,UAAG,KAAK;AAAK,cAAMA;AAAE,UAAI0G,IAAE;AAAK,eAASI,EAAEA,IAAEG,IAAE;AAAC,eAAO+vC,EAAE,OAAK,SAAQA,EAAE,MAAIh3C,GAAE0G,EAAE,OAAKI,IAAEG,OAAIP,EAAE,SAAO,QAAOA,EAAE,MAAIC,IAAG,CAAC,CAACM;AAAA,MAAC;AAAC,eAAQA,IAAE,KAAK,WAAW,SAAO,GAAEA,KAAG,GAAE,EAAEA,GAAE;AAAC,YAAIgnC,IAAE,KAAK,WAAWhnC,CAAC,GAAE+vC,IAAE/I,EAAE;AAAW,YAAYA,EAAE,WAAX;AAAkB,iBAAOnnC,EAAE,KAAK;AAAE,YAAGmnC,EAAE,UAAQ,KAAK,MAAK;AAAC,cAAIxuC,IAAEzF,EAAE,KAAKi0C,GAAE,UAAU,GAAEjnC,KAAEhN,EAAE,KAAKi0C,GAAE,YAAY;AAAE,cAAGxuC,KAAGuH,IAAE;AAAC,gBAAG,KAAK,OAAKinC,EAAE;AAAS,qBAAOnnC,EAAEmnC,EAAE,UAAS,EAAE;AAAE,gBAAG,KAAK,OAAKA,EAAE;AAAW,qBAAOnnC,EAAEmnC,EAAE,UAAU;AAAA,qBAAUxuC;AAAG,gBAAG,KAAK,OAAKwuC,EAAE;AAAS,qBAAOnnC,EAAEmnC,EAAE,UAAS,EAAE;AAAA,iBAAM;AAAC,gBAAG,CAACjnC;AAAE,oBAAM,IAAI,MAAM,wCAAwC;AAAE,gBAAG,KAAK,OAAKinC,EAAE;AAAW,qBAAOnnC,EAAEmnC,EAAE,UAAU;AAAA;AAAA;AAAA;AAAA,IAAI,GAAE,QAAO,SAASjuC,GAAE0G,GAAE;AAAC,eAAQI,IAAE,KAAK,WAAW,SAAO,GAAEA,KAAG,GAAE,EAAEA,GAAE;AAAC,YAAIH,IAAE,KAAK,WAAWG,CAAC;AAAE,YAAGH,EAAE,UAAQ,KAAK,QAAM3M,EAAE,KAAK2M,GAAE,YAAY,KAAG,KAAK,OAAKA,EAAE,YAAW;AAAC,cAAIM,IAAEN;AAAE;AAAA;AAAA;AAAO,MAAAM,MAAcjH,MAAV,WAA0BA,MAAb,eAAiBiH,EAAE,UAAQP,KAAGA,KAAGO,EAAE,eAAaA,IAAE;AAAM,UAAIgnC,IAAEhnC,IAAEA,EAAE,aAAW,CAAE;AAAC,aAAOgnC,EAAE,OAAKjuC,GAAEiuC,EAAE,MAAIvnC,GAAEO,KAAG,KAAK,SAAO,QAAO,KAAK,OAAKA,EAAE,YAAWinC,KAAG,KAAK,SAASD,CAAC;AAAA,IAAC,GAAE,UAAS,SAASjuC,GAAE0G,GAAE;AAAC,UAAa1G,EAAE,SAAZ;AAAiB,cAAMA,EAAE;AAAI,aAAgBA,EAAE,SAAZ,WAA+BA,EAAE,SAAf,aAAoB,KAAK,OAAKA,EAAE,MAAeA,EAAE,SAAb,YAAmB,KAAK,OAAK,KAAK,MAAIA,EAAE,KAAI,KAAK,SAAO,UAAS,KAAK,OAAK,SAAkBA,EAAE,SAAb,YAAmB0G,MAAI,KAAK,OAAKA,IAAGwnC;AAAA,IAAC,GAAE,QAAO,SAASluC,GAAE;AAAC,eAAQ0G,IAAE,KAAK,WAAW,SAAO,GAAEA,KAAG,GAAE,EAAEA,GAAE;AAAC,YAAII,IAAE,KAAK,WAAWJ,CAAC;AAAE,YAAGI,EAAE,eAAa9G;AAAE,iBAAO,KAAK,SAAS8G,EAAE,YAAWA,EAAE,QAAQ,GAAE8vC,EAAE9vC,CAAC,GAAEonC;AAAA;AAAA,IAAE,GAAE,OAAM,SAASluC,GAAE;AAAC,eAAQ0G,IAAE,KAAK,WAAW,SAAO,GAAEA,KAAG,GAAE,EAAEA,GAAE;AAAC,YAAII,IAAE,KAAK,WAAWJ,CAAC;AAAE,YAAGI,EAAE,WAAS9G,GAAE;AAAC,cAAI2G,IAAEG,EAAE;AAAW,cAAaH,EAAE,SAAZ,SAAiB;AAAC,gBAAIM,IAAEN,EAAE;AAAI,YAAAiwC,EAAE9vC,CAAC;AAAA;AAAE,iBAAOG;AAAA;AAAA;AAAG,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAAC,GAAE,eAAc,SAASjH,GAAE0G,GAAEI,GAAE;AAAC,aAAO,KAAK,WAAS,EAAC,UAASgwC,GAAE92C,CAAC,GAAE,YAAW0G,GAAE,SAAQI,EAAC,GAAW,KAAK,WAAd,WAAuB,KAAK,MAAIH,IAAGunC;AAAA,IAAC,EAAC,GAAEjnC;AAAA,EAAC;AAAC,IAAE,UAAQH,GAAE,EAAE,QAAQ,aAAW,IAAG,EAAE,QAAQ,UAAQ,EAAE;AAAO,EAAEowC,EAAC;AAAE,IAAIa,KAAEb,GAAE,QAAS,GAACc,KAAED;AAAE,IAAG;AAAC,uBAAmBA;AAAC,QAAC;AAAS,EAAU,OAAO,cAAjB,WAA4B,WAAW,qBAAmBA,KAAE,SAAS,KAAI,wBAAwB,EAAEA,EAAC;AAAC;AAAC,SAASE,GAAE,GAAE;AAAC,MAAI,IAAE,SAASj4C,GAAE0G,GAAE;AAAC,QAAcowC,GAAE92C,CAAC,MAAd,YAAwBA,MAAP;AAAS,aAAOA;AAAE,QAAI8G,IAAE9G,EAAE,OAAO,WAAW;AAAE,QAAY8G,MAAT,QAAW;AAAC,UAAIH,IAAEG,EAAE,KAAK9G,GAAE0G,KAAG,SAAS;AAAE,UAAcowC,GAAEnwC,CAAC,MAAd;AAAgB,eAAOA;AAAE,YAAM,IAAI,UAAU,8CAA8C;AAAA;AAAE,YAAkBD,MAAX,WAAa,SAAO,QAAQ1G,CAAC;AAAA,EAAC,EAAE,GAAE,QAAQ;AAAE,SAAiB82C,GAAE,CAAC,MAAd,WAAgB,IAAE,OAAO,CAAC;AAAC;AAAC,SAASoB,GAAE,GAAE,GAAEpxC,GAAE;AAAC,UAAO,IAAEmxC,GAAE,CAAC,MAAK,IAAE,OAAO,eAAe,GAAE,GAAE,EAAC,OAAMnxC,GAAE,YAAW,IAAG,cAAa,IAAG,UAAS,GAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,GAAE;AAAC;AAAC,IAAIqxC,KAAEn4C,GAAE,EAAC,MAAK,cAAa,OAAM,EAAC,MAAK,EAAC,MAAK,QAAO,SAAQ,IAAG,GAAE,KAAI,EAAC,MAAK,QAAO,SAAQ,EAAC,GAAE,YAAW,EAAC,MAAK,QAAO,SAAQ,EAAC,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,EAAC,EAAC,GAAE,OAAM,CAAC,QAAQ,GAAE,OAAM,SAAS,GAAE8G,GAAE;AAAC,MAAI,IAAEA,EAAE,MAAK,IAAEJ,EAAG,WAAU;AAAC,WAAM,EAAC,OAAM,GAAG,OAAO,EAAE,MAAK,IAAI,GAAE,QAAO,GAAG,OAAO,EAAE,MAAK,IAAI,GAAE,YAAW,OAAO,OAAO,EAAE,KAAI,cAAc,EAAC;AAAA,EAAC,CAAG;AAAC,SAAM,EAAC,iBAAgB,GAAE,aAAYA,EAAG,WAAU;AAAC,WAAM,EAAC,KAAI,GAAG,QAAQ,MAAI,EAAE,SAAO,MAAI,EAAE,OAAK,GAAE,IAAI,GAAE,MAAK,GAAG,OAAO,EAAE,aAAW,EAAE,OAAK,MAAI,GAAE,IAAI,GAAE,OAAM,GAAG,OAAO,IAAG,IAAI,GAAE,QAAO,GAAG,OAAO,IAAG,IAAI,EAAC;AAAA,EAAC,CAAC,GAAG,UAAS,SAASA,GAAE;AAAC,QAAI,IAAEA,EAAE,OAAO,sBAAuB,GAACO,IAAE,EAAE,MAAKgnC,IAAE,EAAE,KAAI,IAAE,SAASvnC,GAAE;AAAC,UAAII,IAAEJ,EAAE,SAAQ1M,IAAE0M,EAAE,SAAQswC,IAAElwC,IAAEG,GAAExH,IAAEzF,IAAEi0C;AAAE,MAAA+I,IAAE,MAAIA,IAAE,IAAGv3C,IAAE,MAAIA,IAAE,IAAGu3C,IAAE,EAAE,SAAOA,IAAE,EAAE,OAAMv3C,IAAE,EAAE,SAAOA,IAAE,EAAE;AAAM,UAAIuH,IAAEgwC,IAAE,EAAE,OAAK,KAAIjwC,IAAE,MAAItH,IAAE,EAAE,OAAK;AAAI,QAAE,UAASuH,GAAED,CAAC;AAAA,IAAC;AAAE,MAAEL,CAAC,GAAE,SAAS,iBAAiB,aAAY,CAAC,GAAE,SAAS,iBAAiB,WAAW,SAAS1G,IAAG;AAAC,eAAS,oBAAoB,aAAY,CAAC,GAAE,SAAS,oBAAoB,WAAUA,CAAC;AAAA,IAAC,CAAG;AAAA,EAAA,EAAC;AAAC,EAAC,CAAC,GAAEo4C,KAAE,SAAS,GAAE;AAAC,SAAOpB,GAAE,iBAAiB,GAAE,IAAE,EAAG,GAACv3C,GAAC,GAAG;AAAC,GAAE44C,KAAED,GAAG,WAAU;AAAC,SAAOp+C,EAAE,OAAM,EAAC,OAAM,mBAAkB,GAAE,MAAK,EAAE;AAAC,CAAG,GAACs+C,KAAEF,GAAG,WAAU;AAAC,SAAOp+C,EAAE,OAAM,EAAC,OAAM,mBAAkB,GAAE,MAAK,EAAE;AAAC,CAAC;AAAG,SAASu+C,GAAE,GAAE,GAAE;AAAC,EAAS,MAAT,WAAa,IAAE,CAAE;AAAE,MAAIzxC,IAAE,EAAE;AAAS,MAAG,KAAgB,OAAO,WAApB,KAA6B;AAAC,QAAIH,IAAE,SAAS,QAAM,SAAS,qBAAqB,MAAM,EAAE,CAAC,GAAEM,IAAE,SAAS,cAAc,OAAO;AAAE,IAAAA,EAAE,OAAK,YAAmBH,MAAR,SAAWH,EAAE,aAAWA,EAAE,aAAaM,GAAEN,EAAE,UAAU,IAAEA,EAAE,YAAYM,CAAC,GAAEA,EAAE,aAAWA,EAAE,WAAW,UAAQ,IAAEA,EAAE,YAAY,SAAS,eAAe,CAAC,CAAC;AAAA;AAAE;AAACsxC,GAAE,ihBAAihB,GAAEJ,GAAE,SAAO,SAAS,GAAE,GAAEnB,GAAEv3C,GAAEuH,GAAED,GAAE;AAAC,SAAOD,EAAC,GAAGH,EAAE,OAAM,EAAC,OAAM,cAAa,OAAMM,GAAE,EAAE,eAAe,GAAE,aAAY,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEgnC,GAAG,WAAU;AAAC,WAAO,EAAE,YAAU,EAAE,SAAS,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,WAAU,MAAM,CAAC,GAAE,GAAE,CAACoK,IAAEC,IAAEt+C,EAAE,OAAM,EAAC,OAAM,UAAS,OAAMiN,GAAE,EAAE,WAAW,EAAC,GAAE,MAAK,CAAC,CAAC,GAAE,EAAE;AAAC,GAAEkxC,GAAE,YAAU,mBAAkBA,GAAE,SAAO;AAA4B,IAAIK,KAAEx4C,GAAE,EAAC,MAAK,OAAM,OAAM,EAAC,OAAM,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,QAAO,EAAC,MAAK,QAAO,SAAQ,IAAG,GAAE,KAAI,EAAC,MAAK,QAAO,SAAQ,EAAC,EAAC,GAAE,OAAM,CAAC,QAAQ,GAAE,OAAM,SAAS,GAAE8G,GAAE;AAAC,MAAI,IAAEA,EAAE,MAAK,IAAEJ,EAAG,WAAU;AAAC,WAAM,EAAC,KAAI,GAAG,QAAQ,IAAE,EAAE,MAAI,OAAK,EAAE,SAAO,GAAE,IAAI,GAAE,QAAO,GAAG,OAAO,GAAE,IAAI,EAAC;AAAA,EAAC,CAAG,GAACunC,IAAEjnC,EAAC;AAAGD,SAAAA,GAAG,WAAU;AAAC,KAAC,WAAU;AAAC,MAAAknC,EAAE,MAAM,QAAM,EAAE,OAAMA,EAAE,MAAM,SAAO,EAAE;AAAO,UAAIvnC,IAAEunC,EAAE,MAAM,WAAW,IAAI,GAAEnnC,IAAEJ,EAAE,qBAAqB,GAAE,GAAE,GAAE,EAAE,MAAM;AAAE,MAAAI,EAAE,aAAa,GAAE,SAAS,GAAEA,EAAE,aAAa,MAAI,SAAS,GAAEA,EAAE,aAAa,MAAI,SAAS,GAAEA,EAAE,aAAa,MAAI,SAAS,GAAEA,EAAE,aAAa,MAAI,SAAS,GAAEA,EAAE,aAAa,OAAI,GAAE,SAAS,GAAEA,EAAE,aAAa,GAAE,SAAS,GAAEJ,EAAE,YAAUI,GAAEJ,EAAE,SAAS,GAAE,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,IAAC;EAAG,CAAC,GAAS,EAAC,QAAOunC,GAAE,aAAY,GAAE,UAAS,SAASvnC,GAAE;AAAC,QAAII,IAAEJ,EAAE,OAAO,sBAAqB,EAAG,KAAIO,IAAE,SAASP,GAAE;AAAC,UAAIO,IAAEP,EAAE,UAAQI;AAAE,MAAAG,IAAE,MAAIA,IAAE,IAAGA,IAAE,EAAE,WAASA,IAAE,EAAE;AAAQ,UAAIgnC,IAAE,OAAKhnC,IAAE,EAAE,SAAO;AAAI,QAAE,UAAS,MAAIgnC,IAAE,GAAG;AAAA,IAAC;AAAE,IAAAhnC,EAAEP,CAAC,GAAE,SAAS,iBAAiB,aAAYO,CAAC,GAAE,SAAS,iBAAiB,WAAW,SAASjH,IAAG;AAAC,eAAS,oBAAoB,aAAYiH,CAAC,GAAE,SAAS,oBAAoB,WAAUjH,CAAC;AAAA,IAAC,CAAC;AAAA,EAAE,EAAC;AAAC,EAAC,CAAC,GAAEy4C,KAAE,EAAC,KAAI,SAAQ;AAAEF,GAAE,yLAAyL,GAAEC,GAAE,SAAO,SAAS,GAAE,GAAExB,GAAEv3C,GAAEuH,GAAED,GAAE;AAAC,SAAOD,EAAC,GAAGH,EAAE,OAAM,EAAC,OAAM,OAAM,aAAY,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEsnC,GAAG,WAAU;AAAC,WAAO,EAAE,YAAU,EAAE,SAAS,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,WAAU,MAAM,CAAC,GAAE,GAAE,CAACj0C,EAAE,UAASy+C,IAAE,MAAK,GAAG,GAAEz+C,EAAE,OAAM,EAAC,OAAM,UAAS,OAAMiN,GAAE,EAAE,WAAW,EAAC,GAAE,MAAK,CAAC,CAAC,GAAE,EAAE;AAAC,GAAEuxC,GAAE,YAAU,mBAAkBA,GAAE,SAAO;AAAqB,IAAIE,KAAE14C,GAAE,EAAC,MAAK,SAAQ,OAAM,EAAC,OAAM,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,QAAO,EAAC,MAAK,QAAO,SAAQ,IAAG,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,UAAS,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,EAAC,EAAC,GAAE,OAAM,SAAS,GAAE8G,GAAE;AAAC,MAAI,IAAEA,EAAE,MAAK,IAAEJ,EAAG,WAAU;AAAC,WAAM,EAAC,KAAI,GAAG,OAAO,EAAE,QAAM,EAAE,SAAO,GAAE,IAAI,GAAE,QAAO,GAAG,OAAO,GAAE,IAAI,EAAC;AAAA,EAAC,CAAC,GAAGunC,IAAEjnC,EAAG,GAAChN,IAAE,WAAU;AAAC,QAAI0M,IAAEunC,EAAE,MAAM,WAAW,IAAI;AAAE,IAAAA,EAAE,MAAM,QAAM,EAAE,OAAMA,EAAE,MAAM,SAAO,EAAE;AAAO,QAAInnC,IAAE,SAAS9G,GAAE;AAAC,UAAI0G,IAAE,SAAS,cAAc,QAAQ,GAAEI,IAAEJ,EAAE,WAAW,IAAI,GAAEC,IAAE,IAAE3G;AAAE,aAAO0G,EAAE,QAAMC,GAAED,EAAE,SAAOC,GAAEG,EAAE,YAAU,WAAUA,EAAE,SAAS,GAAE,GAAEH,GAAEA,CAAC,GAAEG,EAAE,YAAU,WAAUA,EAAE,SAAS,GAAE,GAAE9G,GAAEA,CAAC,GAAE8G,EAAE,SAAS9G,GAAEA,GAAEA,GAAEA,CAAC,GAAE0G;AAAA,IAAC,EAAE,CAAC;AAAE,IAAAA,EAAE,YAAUA,EAAE,cAAcI,GAAE,QAAQ,GAAEJ,EAAE,SAAS,GAAE,GAAE,EAAE,OAAM,EAAE,MAAM;AAAE,QAAIC,IAAED,EAAE,qBAAqB,GAAE,GAAE,GAAE,EAAE,MAAM;AAAE,IAAAC,EAAE,aAAa,MAAI,qBAAqB,GAAEA,EAAE,aAAa,MAAI,EAAE,KAAK,GAAED,EAAE,YAAUC,GAAED,EAAE,SAAS,GAAE,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAEiL,SAAAA,GAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAK,GAAI,WAAU;AAAC,IAAA3X,EAAG;AAAA,EAAA,CAAG,GAAC+M,GAAG,WAAU;AAAC,IAAA/M,EAAG;AAAA,EAAA,CAAG,GAAO,EAAC,QAAOi0C,GAAE,aAAY,GAAE,UAAS,SAASvnC,GAAE;AAAC,QAAII,IAAEJ,EAAE,OAAO,sBAAqB,EAAG,KAAIO,IAAE,SAASP,GAAE;AAAC,UAAIO,IAAEP,EAAE,UAAQI;AAAE,MAAAG,IAAE,MAAIA,IAAE,IAAGA,IAAE,EAAE,WAASA,IAAE,EAAE;AAAQ,UAAIgnC,IAAE,YAAYhnC,IAAE,EAAE,QAAQ,QAAQ,CAAC,CAAC;AAAE,QAAE,UAASgnC,CAAC;AAAA,IAAC;AAAE,IAAAhnC,EAAEP,CAAC,GAAE,SAAS,iBAAiB,aAAYO,CAAC,GAAE,SAAS,iBAAiB,WAAW,SAASjH,IAAG;AAAC,eAAS,oBAAoB,aAAYiH,CAAC,GAAE,SAAS,oBAAoB,WAAUjH,CAAC;AAAA,IAAC,CAAG;AAAA,EAAA,EAAC;AAAC,EAAC,CAAC,GAAE24C,KAAE,EAAC,KAAI,SAAQ;AAAEJ,GAAE,2LAA2L,GAAEG,GAAE,SAAO,SAAS,GAAE,GAAE1B,GAAEv3C,GAAEuH,GAAED,GAAE;AAAC,SAAOD,EAAG,GAACH,EAAE,OAAM,EAAC,OAAM,SAAQ,aAAY,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEsnC,GAAG,WAAU;AAAC,WAAO,EAAE,YAAU,EAAE,SAAS,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,WAAU,MAAM,CAAC,GAAE,GAAE,CAACj0C,EAAE,UAAS2+C,IAAE,MAAK,GAAG,GAAE3+C,EAAE,OAAM,EAAC,OAAM,UAAS,OAAMiN,GAAE,EAAE,WAAW,EAAC,GAAE,MAAK,CAAC,CAAC,GAAE,EAAE;AAAC,GAAEyxC,GAAE,YAAU,mBAAkBA,GAAE,SAAO;AAAuB,IAAIE,KAAE54C,GAAE,EAAC,MAAK,SAAQ,OAAM,EAAC,OAAM,EAAC,MAAK,QAAO,SAAQ,OAAM,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,IAAG,EAAC,GAAE,OAAM,CAAC,UAAS,SAAQ,QAAO,OAAO,GAAE,OAAM,SAAS,GAAE8G,GAAE;AAAC,MAAI,IAAEA,EAAE;AAAK,SAAM,EAAC,SAAQ,SAAS9G,GAAE;AAAC,QAAI0G;AAAE,MAAE,WAAiBA,IAAE1G,EAAE,YAAZ,QAA8B0G,MAAT,SAAW,SAAOA,EAAE,KAAK;AAAA,EAAC,GAAE,YAAWA,EAAG,WAAU;AAAC,WAAM,EAAC,UAAS,GAAG,OAAO,EAAE,OAAM,IAAI,GAAE,UAAS,GAAG,OAAO,EAAE,OAAM,IAAI,GAAE,OAAM,GAAG,OAAO,EAAE,OAAM,IAAI,EAAC;AAAA,EAAC,CAAC,GAAG,SAAQ,WAAU;AAAC,MAAE,OAAO;AAAA,EAAC,GAAE,QAAO,WAAU;AAAC,MAAE,MAAM;AAAA,EAAC,GAAE,SAAQ,WAAU;AAAC,MAAE,OAAO;AAAA,EAAC,EAAC;AAAC,EAAC,CAAC,GAAEmyC,KAAE,EAAC,OAAM,QAAO,GAAEC,KAAG,EAAC,OAAM,QAAO,GAAEC,KAAG,CAAC,QAAQ;AAAE,SAASC,GAAG,GAAE,GAAE;AAAC,SAAO,SAASh5C,GAAE;AAAC,QAAG,MAAM,QAAQA,CAAC;AAAE,aAAOA;AAAA,EAAC,EAAE,CAAC,KAAG,SAASA,GAAE0G,GAAE;AAAC,QAAII,IAAQ9G,KAAN,OAAQ,OAAkB,OAAO,SAApB,OAA4BA,EAAE,OAAO,QAAQ,KAAGA,EAAE,YAAY;AAAE,QAAS8G,KAAN,MAAQ;AAAC,UAAIH,GAAEM,GAAEgnC,GAAE,GAAE+I,IAAE,CAAA,GAAG,IAAE,IAAGhwC,IAAE;AAAG,UAAG;AAAC,YAAGinC,KAAGnnC,IAAEA,EAAE,KAAK9G,CAAC,GAAG,MAAS0G,MAAJ,GAAM;AAAC,cAAG,OAAOI,CAAC,MAAIA;AAAE;AAAO,cAAE;AAAA;AAAQ,iBAAK,EAAE,KAAGH,IAAEsnC,EAAE,KAAKnnC,CAAC,GAAG,UAAQkwC,EAAE,KAAKrwC,EAAE,KAAK,GAAEqwC,EAAE,WAAStwC,IAAG,IAAE;AAAG;AAAA,MAAC,SAAO1G,GAAN;AAAS,QAAAgH,IAAE,IAAGC,IAAEjH;AAAA,MAAC,UAAC;AAAQ,YAAG;AAAC,cAAG,CAAC,KAAS8G,EAAE,UAAR,SAAiB,IAAEA,EAAE,OAAQ,GAAC,OAAO,CAAC,MAAI;AAAG;AAAA,QAAM,UAAC;AAAQ,cAAGE;AAAE,kBAAMC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO+vC;AAAA;AAAA,EAAE,EAAE,GAAE,CAAC,KAAGJ,GAAE,GAAE,CAAC,KAAG,WAAU;AAAC,UAAM,IAAI,UAAU;AAAA,mFAA2I;AAAA,EAAC,EAAG;AAAA;AAAC,SAASqC,GAAG,GAAE,GAAE;AAAC,MAAInyC,IAAE,OAAO,KAAK,CAAC;AAAE,MAAG,OAAO,uBAAsB;AAAC,QAAIH,IAAE,OAAO,sBAAsB,CAAC;AAAE,UAAIA,IAAEA,EAAE,OAAQ,SAASD,GAAE;AAAC,aAAO,OAAO,yBAAyB,GAAEA,CAAC,EAAE;AAAA,IAAU,CAAC,IAAII,EAAE,KAAK,MAAMA,GAAEH,CAAC;AAAA;AAAE,SAAOG;AAAC;AAAC,SAASoyC,GAAG,GAAE;AAAC,WAAQ,IAAE,GAAE,IAAE,UAAU,QAAO,KAAI;AAAC,QAAIpyC,IAAQ,UAAU,CAAC,KAAjB,OAAmB,UAAU,CAAC,IAAE;AAAG,QAAE,IAAEmyC,GAAG,OAAOnyC,CAAC,GAAE,EAAE,EAAE,QAAS,SAASJ,GAAE;AAAC,MAAAwxC,GAAE,GAAExxC,GAAEI,EAAEJ,CAAC,CAAC;AAAA,IAAC,CAAC,IAAG,OAAO,4BAA0B,OAAO,iBAAiB,GAAE,OAAO,0BAA0BI,CAAC,CAAC,IAAEmyC,GAAG,OAAOnyC,CAAC,CAAC,EAAE,QAAS,SAASJ,GAAE;AAAC,aAAO,eAAe,GAAEA,GAAE,OAAO,yBAAyBI,GAAEJ,CAAC,CAAC;AAAA,IAAC;;AAAI,SAAO;AAAC;AAAC6xC,GAAE,kmBAAkmB,GAAEK,GAAE,SAAO,SAAS,GAAE,GAAE3K,GAAE+I,GAAEv3C,GAAEuH,GAAE;AAAC,SAAOF,EAAG,GAACH,EAAE,OAAMkyC,IAAE,CAAC7+C,EAAE,QAAO8+C,IAAG1B,GAAE,EAAE,KAAK,GAAE,CAAC,GAAEp9C,EAAE,SAAQ,EAAC,OAAM,SAAQ,OAAMiN,GAAE,EAAE,UAAU,GAAE,UAAS,EAAE,OAAM,SAAQ,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,WAAU;AAAC,WAAO,EAAE,WAAS,EAAE,QAAQ,MAAM,GAAE,SAAS;AAAA,EAAC,IAAG,SAAQ,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,WAAU;AAAC,WAAO,EAAE,WAAS,EAAE,QAAQ,MAAM,GAAE,SAAS;AAAA,EAAC,IAAG,QAAO,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,WAAU;AAAC,WAAO,EAAE,UAAQ,EAAE,OAAO,MAAM,GAAE,SAAS;AAAA,EAAC,IAAG,WAAU,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEvM,GAAG,WAAU;AAAC,WAAO,EAAE,WAAS,EAAE,QAAQ,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,OAAO,CAAC,GAAE,GAAE,MAAK,IAAGq+C,EAAE,CAAC,CAAC;AAAC,GAAEH,GAAE,YAAU,mBAAkBA,GAAE,SAAO;AAA4B,IAAIO,KAAG,SAAS,GAAE,GAAEryC,GAAE;AAAC,SAAM,CAAC,GAAE,IAAEA,MAAI,KAAG,IAAE,KAAGA,KAAG,IAAE,IAAE,IAAE,MAAI,GAAE,IAAE,CAAC;AAAC,GAAEsyC,KAAG,EAAC,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAEC,KAAG,SAAS,GAAE;AAAC,MAAE,KAAK,IAAI,KAAK,MAAM,CAAC,GAAE,GAAG;AAAE,MAAI,IAAE,KAAK,MAAM,IAAE,EAAE,GAAEvyC,IAAE,IAAE;AAAG,SAAM,GAAG,OAAOsyC,GAAG,CAAC,KAAG,CAAC,EAAE,OAAOA,GAAGtyC,CAAC,KAAGA,CAAC;AAAC,GAAEwyC,KAAG,SAAS,GAAE;AAAC,MAAI,IAAE,EAAE,GAAExyC,IAAE,EAAE,GAAEH,IAAE,EAAE;AAAE,SAAO,MAAM,CAAC,KAAG,MAAMG,CAAC,KAAG,MAAMH,CAAC,IAAE,KAAG,IAAI,OAAO0yC,GAAG,CAAC,CAAC,EAAE,OAAOA,GAAGvyC,CAAC,CAAC,EAAE,OAAOuyC,GAAG1yC,CAAC,CAAC;AAAC,GAAE4yC,KAAG,SAAS,GAAE,GAAE;AAAC,MAAIzyC;AAAE,EAAU,QAAOA,IAAE,MAAnB,YAA4BA,EAAE,QAAQ,GAAG,MAAlB,MAAyB,WAAWA,CAAC,MAAhB,MAAoB,IAAE;AAAQ,MAAIH,IAAE,SAAS3G,GAAE;AAAC,WAAgB,OAAOA,KAAjB,YAAyBA,EAAE,QAAQ,GAAG,MAAlB;AAAA,EAAmB,EAAE,CAAC;AAAE,SAAO,IAAE,KAAK,IAAI,GAAE,KAAK,IAAI,GAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAE2G,MAAI,IAAE,SAAS,GAAG,OAAO,IAAE,CAAC,GAAE,EAAE,IAAE,MAAK,KAAK,IAAI,IAAE,CAAC,IAAE,OAAK,IAAE,IAAE,IAAE,WAAW,CAAC;AAAC,GAAE6yC,KAAG,SAAS,GAAE,GAAE1yC,GAAE;AAAC,MAAE,IAAEyyC,GAAG,GAAE,GAAG,GAAE,IAAEA,GAAG,GAAE,GAAG,GAAEzyC,IAAEyyC,GAAGzyC,GAAE,GAAG;AAAE,MAAIH,IAAE,KAAK,MAAM,CAAC,GAAEM,IAAE,IAAEN,GAAEsnC,IAAEnnC,KAAG,IAAE,IAAG9M,IAAE8M,KAAG,IAAEG,IAAE,IAAG+vC,IAAElwC,KAAG,KAAG,IAAEG,KAAG,IAAGxH,IAAEkH,IAAE,GAAEK,IAAE,CAACF,GAAE9M,GAAEi0C,GAAEA,GAAE+I,GAAElwC,CAAC,EAAErH,CAAC,GAAEsH,IAAE,CAACiwC,GAAElwC,GAAEA,GAAE9M,GAAEi0C,GAAEA,CAAC,EAAExuC,CAAC,GAAEkS,IAAE,CAACs8B,GAAEA,GAAE+I,GAAElwC,GAAEA,GAAE9M,CAAC,EAAEyF,CAAC;AAAE,SAAM,EAAC,GAAE,KAAK,MAAM,MAAIuH,CAAC,GAAE,GAAE,KAAK,MAAM,MAAID,CAAC,GAAE,GAAE,KAAK,MAAM,MAAI4K,CAAC,EAAC;AAAC,GAAE8nC,KAAG,SAAS,GAAE,GAAE3yC,GAAE;AAAC,MAAIH,IAAE,EAAE,GAAEM,IAAE,EAAE,GAAEgnC,IAAE,EAAE,GAAEj0C,IAAE,EAAE;AAAE,MAAG8M;AAAE,YAAO,GAAC;AAAA,MAAE,KAAI;AAAM,YAAIkwC,IAAEmC,GAAGxyC,GAAEM,IAAE,KAAIgnC,IAAE,GAAG;AAAE,eAAM,QAAQ,OAAOtnC,EAAE,QAAQ,CAAC,GAAE,IAAI,EAAE,OAAO,KAAK,MAAM,MAAIqwC,EAAE,CAAC,CAAC,GAAE,KAAK,EAAE,OAAO,KAAK,MAAM,MAAIA,EAAE,CAAC,CAAC,GAAE,KAAK,EAAE,OAAOh9C,GAAE,GAAG;AAAA,MAAE,KAAI;AAAM,eAAM,QAAQ,OAAO2M,EAAE,QAAQ,CAAC,GAAE,IAAI,EAAE,OAAO,KAAK,MAAMM,CAAC,GAAE,KAAK,EAAE,OAAO,KAAK,MAAMgnC,CAAC,GAAE,KAAK,EAAE,OAAOj0C,GAAE,GAAG;AAAA,MAAE,KAAI;AAAM,YAAIyF,IAAE+5C,GAAG7yC,GAAEM,GAAEgnC,CAAC,GAAEjnC,IAAEvH,EAAE,GAAEsH,IAAEtH,EAAE,GAAEkS,IAAElS,EAAE;AAAE,eAAM,QAAQ,OAAOuH,GAAE,IAAI,EAAE,OAAOD,GAAE,IAAI,EAAE,OAAO4K,GAAE,IAAI,EAAE,OAAO3X,GAAE,GAAG;AAAA,MAAE;AAAQ,eAAM,GAAG,OAAOs/C,GAAGE,GAAG7yC,GAAEM,GAAEgnC,CAAC,CAAC,CAAC,EAAE,OAAOoL,GAAG,MAAIr/C,CAAC,CAAC;AAAA,IAAC;AAAA;AAAM,YAAO,GAAG;AAAA,MAAA,KAAI;AAAM,YAAIo9C,IAAE+B,GAAGxyC,GAAEM,IAAE,KAAIgnC,IAAE,GAAG;AAAE,eAAM,OAAO,OAAOtnC,EAAE,QAAQ,CAAC,GAAE,IAAI,EAAE,OAAO,KAAK,MAAM,MAAIywC,EAAE,CAAC,CAAC,GAAE,KAAK,EAAE,OAAO,KAAK,MAAM,MAAIA,EAAE,CAAC,CAAC,GAAE,IAAI;AAAA,MAAE,KAAI;AAAM,eAAM,OAAO,OAAOzwC,EAAE,QAAQ,CAAC,GAAE,IAAI,EAAE,OAAO,KAAK,MAAMM,CAAC,GAAE,KAAK,EAAE,OAAO,KAAK,MAAMgnC,CAAC,GAAE,IAAI;AAAA,MAAE,KAAI;AAAM,YAAIvzC,IAAE8+C,GAAG7yC,GAAEM,GAAEgnC,CAAC,GAAEqJ,IAAE58C,EAAE,GAAE8E,IAAE9E,EAAE,GAAEw7C,IAAEx7C,EAAE;AAAE,eAAM,OAAO,OAAO48C,GAAE,IAAI,EAAE,OAAO93C,GAAE,IAAI,EAAE,OAAO02C,GAAE,GAAG;AAAA,MAAE;AAAQ,eAAOoD,GAAGE,GAAG7yC,GAAEM,GAAEgnC,CAAC,CAAC;AAAA,IAAC;AAAC,GAAEyL,KAAG,SAAS,GAAE;AAAC,MAAI,IAAE,EAAE,GAAE5yC,IAAE,EAAE,GAAEH,IAAE,EAAE;AAAE,MAAE4yC,GAAG,GAAE,GAAG,GAAEzyC,IAAEyyC,GAAGzyC,GAAE,GAAG,GAAEH,IAAE4yC,GAAG5yC,GAAE,GAAG;AAAE,MAAIM,GAAEgnC,IAAE,KAAK,IAAI,GAAEnnC,GAAEH,CAAC,GAAE3M,IAAE,KAAK,IAAI,GAAE8M,GAAEH,CAAC,GAAEqwC,IAAE/I,GAAExuC,IAAEwuC,IAAEj0C,GAAEgN,IAAMinC,MAAJ,IAAM,IAAExuC,IAAEwuC;AAAE,MAAGA,MAAIj0C;AAAE,IAAAiN,IAAE;AAAA,OAAM;AAAC,YAAOgnC,GAAG;AAAA,MAAA,KAAK;AAAE,QAAAhnC,KAAGH,IAAEH,KAAGlH,KAAGqH,IAAEH,IAAE,IAAE;AAAG;AAAA,MAAM,KAAKG;AAAE,QAAAG,KAAGN,IAAE,KAAGlH,IAAE;AAAE;AAAA,MAAM,KAAKkH;AAAE,QAAAM,KAAG,IAAEH,KAAGrH,IAAE;AAAA,IAAC;AAAC,IAAAwH,KAAG;AAAA;AAAE,SAAM,EAAC,GAAE,MAAIA,GAAE,GAAE,MAAID,GAAE,GAAE,MAAIgwC,EAAC;AAAC,GAAE2C,KAAG,SAAS,GAAE;AAAC,MAAI,IAAE,EAAE,GAAE7yC,IAAE,EAAE,GAAEH,IAAE,EAAE;AAAE,EAAAA,KAAG;AAAI,MAAIM,IAAEH,KAAG,KAAImnC,IAAE,KAAK,IAAItnC,GAAE,IAAG;AAAE,SAAOG,MAAIH,KAAG,MAAI,IAAEA,IAAE,IAAEA,GAAEM,KAAGgnC,KAAG,IAAEA,IAAE,IAAEA,GAAE,EAAC,GAAE,CAAC,GAAE,GAAE,OAAStnC,MAAJ,IAAM,IAAEM,KAAGgnC,IAAEhnC,KAAG,IAAEH,KAAGH,IAAEG,KAAI,GAAE,QAAMH,IAAEG,KAAG,GAAE;AAAC,GAAE8yC,KAAG,SAAS,GAAE;AAAC,MAAI,IAAE;AAAG,MAAG,EAAE,MAAM,wBAAwB;AAAE,aAAQ9yC,IAAE,GAAEA,IAAE,EAAE,QAAOA;AAAI,QAAE,KAAK,SAAS,OAAK,EAAEA,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,WAAU,EAAE,MAAM,qCAAqC;AAAE,aAAQH,IAAE,GAAEA,IAAE,EAAE,QAAOA,KAAG;AAAE,QAAE,KAAK,SAAS,OAAK,EAAE,MAAMA,GAAEA,IAAE,CAAC,CAAC,CAAC;AAAE,SAAM,EAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,EAAC;AAAC,GAAEkzC,KAAG,SAAS,GAAE,GAAE/yC,GAAE;AAAC,MAAa,OAAO,KAAjB,YAAyB,MAAL,IAAO;AAAC,QAAIH,IAAEmzC,GAAG,GAAEC,GAAG,CAAC,GAAEjzC,CAAC,GAAEG,IAAE+yC,GAAGrzC,CAAC;AAAE,WAAO8yC,GAAGxyC,GAAE,GAAEH,CAAC;AAAA;AAAE,SAAM;AAAE,GAAEmzC,KAAG,SAAS,GAAE;AAAC,MAAI,IAAEjB,GAAG,EAAE,MAAM,gBAAgB,GAAE,CAAC;AAAE,SAAM,EAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,EAAC;AAAC,GAAEkB,KAAG,SAAS,GAAE;AAAC,MAAI,IAAElB,GAAG,EAAE,MAAM,gBAAgB,GAAE,CAAC,GAAElyC,IAAE,EAAE,CAAC,GAAEH,IAAE,EAAE,CAAC,GAAEM,IAAE,EAAE,CAAC,GAAEgnC,IAAE,EAAE,CAAC;AAAE,SAAM,EAAC,GAAEnnC,GAAE,GAAE,WAAWH,CAAC,GAAE,GAAE,WAAWM,CAAC,GAAE,GAAEgnC,EAAC;AAAC,GAAEkM,KAAG,SAAS,GAAE;AAAC,MAAI,IAAEnB,GAAG,EAAE,MAAM,gBAAgB,GAAE,CAAC,GAAElyC,IAAE,EAAE,CAAC,GAAEH,IAAE,EAAE,CAAC,GAAEM,IAAE,EAAE,CAAC,GAAEgnC,IAAE,EAAE,CAAC;AAAE,SAAM,EAAC,GAAE,WAAWnnC,CAAC,GAAE,GAAE,WAAWH,CAAC,GAAE,GAAE,WAAWM,CAAC,GAAE,GAAE,WAAWgnC,CAAC,EAAC;AAAC,GAAE6L,KAAG,SAAS,GAAE,GAAE;AAAC,MAAG,EAAE,UAAU,SAAO,KAAY,UAAU,CAAC,MAApB,WAAwB,UAAU,CAAC;AAAE,YAAO,GAAC;AAAA,MAAE,KAAI;AAAM,YAAIhzC,IAAEmzC,GAAG,CAAC,GAAEtzC,IAAEG,EAAE,GAAEG,IAAEH,EAAE,GAAEmnC,IAAEnnC,EAAE,GAAE9M,IAAE8M,EAAE;AAAE,eAAOoyC,GAAGA,GAAG,CAAE,GAACQ,GAAG,EAAC,GAAE/yC,GAAE,GAAEM,GAAE,GAAEgnC,EAAC,CAAC,CAAC,GAAE,CAAE,GAAC,EAAC,GAAE,CAACj0C,EAAC,CAAC;AAAA,MAAE,KAAI;AAAM,YAAIg9C,IAAEmD,GAAG,CAAC;AAAE,eAAM,EAAC,GAAEnD,EAAE,GAAE,GAAEA,EAAE,GAAE,GAAEA,EAAE,GAAE,GAAEA,EAAE,EAAC;AAAA,MAAE,KAAI;AAAM,YAAIv3C,IAAEy6C,GAAG,CAAC,GAAElzC,IAAEvH,EAAE,GAAEsH,IAAEtH,EAAE,GAAEkS,IAAElS,EAAE,GAAE23C,IAAE33C,EAAE;AAAE,eAAOy5C,GAAGA,GAAG,CAAA,GAAGS,GAAG,EAAC,GAAE3yC,GAAE,GAAED,GAAE,GAAE4K,EAAC,CAAC,CAAC,GAAE,CAAE,GAAC,EAAC,GAAE,CAACylC,EAAC,CAAC;AAAA,MAAE;AAAQ,YAAI18C,IAAEk/C,GAAG,CAAC,GAAEtC,IAAE58C,EAAE,GAAE8E,IAAE9E,EAAE,GAAEw7C,IAAEx7C,EAAE,GAAE,IAAEA,EAAE;AAAE,eAAOw+C,GAAGA,GAAG,CAAA,GAAGQ,GAAG,EAAC,GAAEpC,GAAE,GAAE93C,GAAE,GAAE02C,EAAC,CAAC,CAAC,GAAE,CAAA,GAAG,EAAC,GAAE,IAAE,IAAG,CAAC;AAAA,IAAC;AAAA;AAAM,YAAO,GAAG;AAAA,MAAA,KAAI;AAAM,eAAOgD,GAAGA,GAAG,CAAE,GAACQ,GAAGO,GAAG,CAAC,CAAC,CAAC,GAAE,CAAE,GAAC,EAAC,GAAE,EAAC,CAAC;AAAA,MAAE,KAAI;AAAM,YAAIrW,IAAEuW,GAAG,CAAC;AAAE,eAAM,EAAC,GAAEvW,EAAE,GAAE,GAAEA,EAAE,GAAE,GAAEA,EAAE,GAAE,GAAE,EAAC;AAAA,MAAE,KAAI;AAAM,eAAOsV,GAAGA,GAAG,CAAE,GAACS,GAAGO,GAAG,CAAC,CAAC,CAAC,GAAE,IAAG,EAAC,GAAE,EAAC,CAAC;AAAA,MAAE;AAAQ,eAAOhB,GAAGA,GAAG,CAAA,GAAGQ,GAAGE,GAAG,CAAC,CAAC,CAAC,GAAE,CAAA,GAAG,EAAC,GAAE,EAAC,CAAC;AAAA,IAAC;AAAE,GAAEG,KAAG,SAAS,GAAE;AAAC,SAAO,EAAE,MAAM,IAAI,IAAE,QAAM,EAAE,MAAM,MAAM,IAAE,QAAM,EAAE,MAAM,MAAM,IAAE,QAAM,EAAE,MAAM,MAAM,IAAE,QAAM;AAAK,GAAEC,KAAG,SAAS,GAAE;AAAC,MAAI,IAAE,EAAE,GAAElzC,IAAE,EAAE,GAAEH,IAAE,EAAE,GAAEM,IAAE,EAAE;AAAE,SAAO,MAAM,CAAC,MAAI,IAAE,IAAG,MAAMH,CAAC,MAAIA,IAAE,IAAG,MAAMH,CAAC,MAAIA,IAAE,IAAG,MAAMM,CAAC,MAAIA,IAAE,IAAG,EAAC,GAAE,GAAE,GAAEH,GAAE,GAAEH,GAAE,GAAEM,EAAC;AAAC,GAAEmzC,KAAGp6C,GAAE,EAAC,MAAK,aAAY,OAAM,EAAC,MAAK,EAAC,MAAK,CAAC,QAAO,MAAM,GAAE,SAAQ,GAAE,GAAE,OAAM,EAAC,MAAK,CAAC,QAAO,MAAM,EAAC,GAAE,QAAO,EAAC,MAAK,CAAC,QAAO,MAAM,EAAC,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,QAAO,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,cAAa,EAAC,MAAK,QAAO,SAAQ,EAAC,GAAE,UAAS,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,WAAU,EAAC,MAAK,SAAQ,SAAQ,GAAE,EAAC,GAAE,OAAM,CAAC,QAAQ,GAAE,OAAM,SAAS,GAAE;AAAC,MAAI8G,IAAEE,EAAG,GAAC,IAAEswC,EAAE,SAAQ,EAAC,OAAM,QAAO,CAAC,EAAE,OAAM,IAAE5wC,EAAG,WAAU;AAAC,WAAO,YAAY,EAAE,SAAO,EAAE,QAAM,EAAE;AAAA,EAAC,CAAC,GAAGunC,IAAEvnC,EAAG,WAAU;AAAC,WAAO,YAAY,EAAE,UAAQ,EAAE,QAAM,EAAE;AAAA,EAAC,CAAG,GAAC1M,IAAE0M,EAAG,WAAU;AAAC,WAAM,EAAC,OAAM,GAAG,OAAOlH,EAAE,CAAC,GAAE,IAAI,GAAE,QAAO,GAAG,OAAOA,EAAEyuC,CAAC,GAAE,IAAI,GAAE,QAAO,EAAE,SAAO,aAAa,OAAgBzuC,EAAE,CAAC,MAAZ,SAAc,YAAU,SAAS,IAAE,IAAG,cAAa,GAAG,OAAO,EAAE,cAAa,IAAI,GAAE,WAAU,EAAE,WAAS,eAAe,OAAgBA,EAAE,CAAC,MAAZ,SAAc,YAAU,SAAS,IAAE,GAAE;AAAA,EAAC,CAAC,GAAGw3C,IAAE,WAAU;AAAC,QAAItwC,IAAEI,EAAE,MAAM,WAAW,IAAI;AAAE,IAAAA,EAAE,MAAM,QAAMtH,EAAE,CAAC,GAAEsH,EAAE,MAAM,SAAOtH,EAAEyuC,CAAC;AAAE,QAAItnC,IAAE,SAAS3G,GAAE;AAAC,UAAI0G,IAAE,SAAS,cAAc,QAAQ,GAAEI,IAAEJ,EAAE,WAAW,IAAI,GAAEC,IAAE,IAAE3G;AAAE,aAAO0G,EAAE,QAAMC,GAAED,EAAE,SAAOC,GAAEG,EAAE,YAAU,WAAUA,EAAE,SAAS,GAAE,GAAEH,GAAEA,CAAC,GAAEG,EAAE,YAAU,WAAUA,EAAE,SAAS,GAAE,GAAE9G,GAAEA,CAAC,GAAE8G,EAAE,SAAS9G,GAAEA,GAAEA,GAAEA,CAAC,GAAE0G;AAAA,IAAC,EAAE,CAAC;AAAE,IAAAA,EAAE,YAAUA,EAAE,cAAcC,GAAE,QAAQ,GAAED,EAAE,SAAS,GAAE,GAAElH,EAAE,CAAC,GAAEA,EAAEyuC,CAAC,CAAC,GAAEvnC,EAAE,YAAU,EAAE,OAAMA,EAAE,SAAS,GAAE,GAAElH,EAAE,CAAC,GAAEA,EAAEyuC,CAAC,CAAC;AAAA,EAAC;AAAE,SAAOt8B,GAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAK,GAAI,WAAU;AAAC,IAAAqlC,EAAG;AAAA,EAAA,CAAG,GAACjwC,GAAG,WAAU;AAAC,IAAAiwC,EAAG;AAAA,EAAA,CAAG,GAAC,EAAC,QAAOlwC,GAAE,gBAAe9M,EAAC;AAAC,EAAC,CAAC,GAAEqgD,KAAG,CAAC,WAAW;AAAE9B,GAAE,uEAAuE,GAAE6B,GAAG,SAAO,SAAS,GAAE,GAAEnM,GAAEj0C,GAAE,GAAEyF,GAAE;AAAC,SAAOqH,EAAC,GAAGH,EAAE,UAAS,EAAC,OAAM,cAAa,OAAMM,GAAE,EAAE,cAAc,GAAE,KAAI,UAAS,WAAU,EAAE,UAAS,GAAE,MAAK,IAAGozC,EAAE;AAAC,GAAED,GAAG,YAAU,mBAAkBA,GAAG,SAAO;AAA+B,IAAIE,KAAGt6C,GAAE,EAAC,MAAK,UAAS,YAAW,EAAC,WAAUo6C,GAAE,GAAE,OAAM,EAAC,QAAO,EAAC,MAAK,OAAM,SAAQ,WAAU;AAAC,SAAM,CAAA;AAAE,EAAC,GAAE,eAAc,EAAC,MAAK,QAAO,SAAQ,GAAE,EAAC,GAAE,OAAM,CAAC,QAAQ,GAAE,OAAM,SAAS,GAAEtzC,GAAE;AAAC,MAAI,IAAEA,EAAE;AAAK,SAAM,EAAC,eAAc,SAAS9G,GAAE0G,GAAE;AAAC,MAAE,UAAS1G,GAAE0G,CAAC;AAAA,EAAC,GAAE,WAAUA,EAAG,WAAU;AAAC,WAAO,EAAE,OAAO,IAAK,SAAS1G,GAAE;AAAC,aAAO65C,GAAG75C,GAAE,OAAM,EAAE;AAAA,IAAC,CAAC;AAAA,EAAE,CAAC,EAAE;AAAC,EAAC,CAAC,GAAEu6C,KAAG,EAAC,OAAM,SAAQ;AAAE,SAASC,GAAG,GAAE,GAAE;AAAC,MAAI1zC,IAAE,OAAO,KAAK,CAAC;AAAE,MAAG,OAAO,uBAAsB;AAAC,QAAIH,IAAE,OAAO,sBAAsB,CAAC;AAAE,UAAIA,IAAEA,EAAE,OAAQ,SAASD,GAAE;AAAC,aAAO,OAAO,yBAAyB,GAAEA,CAAC,EAAE;AAAA,IAAU,CAAG,IAAEI,EAAE,KAAK,MAAMA,GAAEH,CAAC;AAAA;AAAE,SAAOG;AAAC;AAAC,SAAS2zC,GAAG,GAAE;AAAC,WAAQ,IAAE,GAAE,IAAE,UAAU,QAAO,KAAI;AAAC,QAAI3zC,IAAQ,UAAU,CAAC,KAAjB,OAAmB,UAAU,CAAC,IAAE,CAAA;AAAG,QAAE,IAAE0zC,GAAG,OAAO1zC,CAAC,GAAE,EAAE,EAAE,QAAS,SAASJ,GAAE;AAAC,MAAAwxC,GAAE,GAAExxC,GAAEI,EAAEJ,CAAC,CAAC;AAAA,IAAC,CAAG,IAAC,OAAO,4BAA0B,OAAO,iBAAiB,GAAE,OAAO,0BAA0BI,CAAC,CAAC,IAAE0zC,GAAG,OAAO1zC,CAAC,CAAC,EAAE,QAAS,SAASJ,GAAE;AAAC,aAAO,eAAe,GAAEA,GAAE,OAAO,yBAAyBI,GAAEJ,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA;AAAG,SAAO;AAAC;AAAC6xC,GAAE,iIAAiI,GAAE+B,GAAG,SAAO,SAAS,GAAE,GAAErzC,GAAEjN,GAAE,GAAEyF,GAAE;AAAC,MAAIuH,IAAEkvC,EAAE,YAAY;AAAE,SAAOpvC,EAAG,GAACH,EAAE,OAAM4zC,IAAG,EAAEzzC,EAAE,EAAE,GAAEH,EAAE+zC,IAAE,MAAK9W,GAAE,EAAE,WAAW,SAASl9B,GAAEC,GAAE;AAAC,WAAOG,KAAIonC,EAAElnC,GAAE,EAAC,KAAIL,GAAE,OAAM,cAAa,MAAK,IAAG,OAAMD,GAAE,QAAO,IAAG,iBAAgB,GAAE,UAAS,EAAE,kBAAgBC,GAAE,SAAQsnC,GAAG,SAASnnC,GAAE;AAAC,aAAO,EAAE,cAAcJ,GAAE,CAACC,CAAC;AAAA,IAAC,GAAG,CAAC,QAAO,SAAS,CAAC,EAAC,GAAE,MAAK,GAAE,CAAC,SAAQ,YAAW,SAAS,CAAC;AAAA,EAAC,IAAI,GAAG,EAAC,CAAE;AAAC,GAAE2zC,GAAG,YAAU,mBAAkBA,GAAG,SAAO;AAAwB,IAAIK,KAAG36C,GAAE,EAAC,MAAK,UAAS,YAAW,EAAC,QAAOs6C,IAAG,YAAWnC,IAAE,KAAIK,IAAE,OAAME,IAAE,YAAWE,GAAC,GAAE,OAAM,EAAC,QAAO,EAAC,MAAK,QAAO,SAAQ,MAAK,GAAE,WAAU,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,QAAO,EAAC,MAAK,OAAM,SAAQ,WAAU;AAAC,SAAM,CAAA;AAAE,EAAC,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,WAAU;AAAC,SAAM,CAAA;AAAE,EAAC,EAAC,GAAE,OAAM,CAAC,UAAS,cAAc,GAAE,OAAM,SAAS,GAAE9xC,GAAE;AAAC,MAAI,IAAEA,EAAE,MAAK,IAAEJ,EAAG,WAAU;AAAC,WAAO+zC,GAAGA,GAAG,CAAE,GAAC,EAAE,KAAK,GAAE,CAAE,GAAC,EAAC,OAAM,EAAE,YAAU,UAAQ,QAAO,CAAC;AAAA,EAAC,CAAC,GAAGxM,IAAEvnC,EAAG,WAAU;AAAC,WAAO,EAAE,YAAU,MAAI;AAAA,EAAG,CAAC,GAAG1M,IAAEgN,EAAG,GAACgwC,IAAEhwC,EAAC,GAAGvH,IAAEuH,EAAC,GAAGD,IAAE,WAAU;AAAC,QAAIL,GAAEI,KAAUJ,IAAE,EAAE,WAAZ,QAA6BA,MAAT,SAAW,SAAOA,EAAE,KAAI;AAAG,QAASI,KAAN,QAAcA,MAAL,IAAO;AAAC,UAAIH,IAAEozC,GAAGjzC,CAAC;AAAE,aAAOkzC,GAAGF,GAAGhzC,GAAEH,GAAE,EAAE,SAAS,CAAC;AAAA;AAAE,WAAO;AAAA,EAAI;AAAEgL,EAAAA,GAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAK,GAAI,WAAU;AAAC,MAAE,UAAQnS,EAAEC,CAAC,MAAIzF,EAAE,QAAM+M,EAAG;AAAA,EAAC,GAAG,EAAC,WAAU,GAAE,CAAC,GAAE4K,GAAE3X,GAAG,SAAS0M,GAAEI,GAAE;AAAC,QAAIG,IAAE;AAAG,IAAMP,KAAN,QAASO,IAAEwyC,GAAGgB,GAAG,CAAA,GAAG/zC,CAAC,GAAE,EAAE,QAAO,EAAE,SAAS,GAAEswC,EAAE,QAAMyD,GAAG,CAAA,GAAG/zC,CAAC,KAAGswC,EAAE,QAAM,MAAKv3C,EAAE,QAAMwH;AAAE,QAAIgnC,IAAElnC,EAAC;AAAG,SAAK,UAAUL,CAAC,MAAI,KAAK,UAAUunC,CAAC,KAAG,KAAK,UAAUvnC,CAAC,MAAI,KAAK,UAAUI,CAAC,KAAG,EAAE,UAASG,CAAC;AAAA,EAAC,GAAG,EAAC,WAAU,GAAE,CAAC;AAAE,MAAI,IAAEP,EAAG,WAAU;AAAC,QAAI1G;AAAE,aAAeA,IAAER,EAAExF,CAAC,OAAb,QAA0BgG,MAAT,SAAW,SAAOA,EAAE,MAAI;AAAA,EAAC,CAAG,GAACtF,IAAEgM,EAAG,WAAU;AAAC,QAAI1G;AAAE,aAAeA,IAAER,EAAExF,CAAC,OAAb,QAA0BgG,MAAT,SAAW,SAAOA,EAAE,MAAI;AAAA,EAAC,CAAC,GAAGs3C,IAAE5wC,EAAG,WAAU;AAAC,QAAI1G;AAAE,aAAeA,IAAER,EAAExF,CAAC,OAAb,QAA0BgG,MAAT,SAAW,SAAOA,EAAE,MAAI;AAAA,EAAC,CAAC,GAAGk2C,IAAExvC,EAAG,WAAU;AAAC,QAAI1G,GAAE0G;AAAE,aAAsB1G,IAAER,EAAExF,CAAC,OAAb,QAA0BgG,MAAT,SAAW,SAAOA,EAAE,MAA5C,QAAuD0G,IAAElH,EAAExF,CAAC,OAAb,QAA0B0M,MAAT,SAAW,SAAOA,EAAE,IAAE;AAAA,EAAC,CAAC,GAAGg0C,IAAEh0C,EAAG,WAAU;AAAC,WAAO8yC,GAAGh6C,EAAE,CAAC,GAAEA,EAAE9E,CAAC,GAAE8E,EAAE83C,CAAC,CAAC;AAAA,EAAC,CAAC,GAAG1T,IAAEl9B,EAAG,WAAU;AAAC,WAAM,OAAO,OAAOlH,EAAEk7C,CAAC,EAAE,GAAE,IAAI,EAAE,OAAOl7C,EAAEk7C,CAAC,EAAE,GAAE,IAAI,EAAE,OAAOl7C,EAAEk7C,CAAC,EAAE,GAAE,GAAG;AAAA,EAAC,CAAG,GAACxM,IAAExnC,EAAG,WAAU;AAAC,QAAIA,IAAE,EAAE;AAAO,QAAG,EAAE;AAAU,cAAOA,GAAG;AAAA,QAAA,KAAI;AAAM,iBAAM;AAAA,QAAO,KAAI;AAAM,iBAAM;AAAA,QAAO,KAAI;AAAM,iBAAM;AAAA,QAAO;AAAQ,iBAAM;AAAA,MAAK;AAAA;AAAM,cAAOA,GAAC;AAAA,QAAE,KAAI;AAAM,iBAAM;AAAA,QAAM,KAAI;AAAM,iBAAM;AAAA,QAAM,KAAI;AAAM,iBAAM;AAAA,QAAM;AAAQ,iBAAM;AAAA,MAAK;AAAA,EAAC,CAAC,GAAG2wC,IAAErwC,EAAE,EAAE,GAAE28B,IAAE,SAAS3jC,GAAE0G,GAAEI,GAAE;AAAC,QAAO9G,EAAE,WAAN,GAAa;AAAC,UAAI2G,IAAEmzC,GAAG95C,GAAE0G,GAAEI,CAAC,GAAEG,IAAEN,EAAE,GAAEsnC,IAAEtnC,EAAE,GAAEqwC,IAAErwC,EAAE;AAAE,UAAG,EAAE,MAAMM,CAAC,KAAG,MAAMgnC,CAAC,KAAG,MAAM+I,CAAC,IAAG;AAAC,YAAIv3C,IAAE,GAAEuH,IAAEL,EAAE;AAAE,cAAMK,CAAC,MAAIvH,IAAEuH,IAAGhN,EAAE,QAAM,EAAC,GAAEiN,GAAE,GAAEgnC,GAAE,GAAE+I,GAAE,GAAEv3C,EAAC;AAAA;AAAA;AAAA,EAAG;AAAE,SAAM,EAAC,GAAE,GAAE,GAAE/E,GAAE,GAAE48C,GAAE,GAAEpB,GAAE,QAAOtS,GAAE,oBAAmB,SAAS5jC,GAAE0G,GAAE;AAAC,IAAA2wC,EAAE,QAAM,IAAS73C,EAAExF,CAAC,KAAT,OAAWA,EAAE,QAAM,EAAC,GAAEwF,EAAE,CAAC,GAAE,GAAEQ,GAAE,GAAE0G,GAAE,GAAElH,EAAE02C,CAAC,EAAC,IAAEl8C,EAAE,QAAMygD,GAAGA,GAAG,CAAE,GAACj7C,EAAExF,CAAC,CAAC,GAAE,CAAA,GAAG,EAAC,GAAEgG,GAAE,GAAE0G,EAAC,CAAC;AAAA,EAAC,GAAE,aAAY,SAAS1G,GAAE;AAAC,IAAAq3C,EAAE,QAAM,IAAS73C,EAAExF,CAAC,KAAT,SAAaA,EAAE,QAAM,EAAC,GAAEgG,GAAE,GAAER,EAAE9E,CAAC,GAAE,GAAE8E,EAAE83C,CAAC,GAAE,GAAE93C,EAAE02C,CAAC,EAAC,IAAGl8C,EAAE,QAAMygD,GAAGA,GAAG,CAAE,GAACj7C,EAAExF,CAAC,CAAC,GAAE,CAAA,GAAG,EAAC,GAAEgG,EAAC,CAAC;AAAA,EAAC,GAAE,eAAc,SAASA,GAAE;AAAC,IAAAq3C,EAAE,QAAM,IAAS73C,EAAExF,CAAC,KAAT,OAAWA,EAAE,QAAM,EAAC,GAAEwF,EAAE,CAAC,GAAE,GAAEA,EAAE9E,CAAC,GAAE,GAAE8E,EAAE83C,CAAC,GAAE,GAAEt3C,EAAC,IAAEhG,EAAE,QAAMygD,GAAGA,GAAG,CAAE,GAACj7C,EAAExF,CAAC,CAAC,GAAE,CAAE,GAAC,EAAC,GAAEgG,EAAC,CAAC;AAAA,EAAC,GAAE,OAAMkuC,GAAE,YAAWzuC,GAAE,aAAY,GAAE,YAAWwuC,GAAE,eAAc,SAASjuC,GAAE;AAAC,IAAAq3C,EAAE,QAAM,IAAG53C,EAAE,QAAMO;AAAA,EAAC,GAAE,cAAa,WAAU;AAAC,QAAI0G,GAAEI,KAAUJ,IAAElH,EAAEC,CAAC,OAAb,QAA0BiH,MAAT,SAAW,SAAOA,EAAE,KAAI;AAAG,QAAQI,MAAL,IAAO;AAAC,UAAIH,IAAE,EAAE,WAAUM,IAAE,EAAE,QAAOgnC,IAAE,SAASjuC,GAAE0G,GAAEI,GAAE;AAAC,YAAGA;AAAE,kBAAOJ,GAAC;AAAA,YAAE,KAAI;AAAM,qBAAM,4HAA4H,KAAK1G,CAAC;AAAA,YAAE,KAAI;AAAM,qBAAM,sKAAsK,KAAKA,CAAC;AAAA,YAAE,KAAI;AAAM,qBAAM,sKAAsK,KAAKA,CAAC;AAAA,YAAE;AAAQ,qBAAM,sCAAsC,KAAKA,CAAC;AAAA,UAAC;AAAA;AAAM,kBAAO0G,GAAG;AAAA,YAAA,KAAI;AAAM,qBAAM,uHAAuH,KAAK1G,CAAC;AAAA,YAAE,KAAI;AAAM,qBAAM,uJAAuJ,KAAKA,CAAC;AAAA,YAAE,KAAI;AAAM,qBAAM,uJAAuJ,KAAKA,CAAC;AAAA,YAAE;AAAQ,qBAAM,sCAAsC,KAAKA,CAAC;AAAA,UAAC;AAAA,MAAC,EAAE8G,GAAEG,GAAEN,CAAC;AAAE,MAAAsnC,IAAEtK,EAAE78B,GAAEG,GAAEN,CAAC,IAAQnH,EAAEw3C,CAAC,KAAT,OAAWh9C,EAAE,QAAMwF,EAAEw3C,CAAC,IAAEv3C,EAAE,QAAM;AAAA;AAAQ,MAAAzF,EAAE,QAAM;AAAA,EAAI,GAAE,kBAAiBq9C,GAAE,eAAc,SAASr3C,GAAE0G,GAAE;AAAC,QAAG2wC,EAAE,QAAM3wC,IAAQ1G,IAAEA,EAAE,KAAM,OAAhB;AAAkB,MAAAhG,EAAE,QAAM;AAAA,SAAS;AAAC,UAAI8M,IAAEizC,GAAG/5C,CAAC;AAAE,MAAA8G,IAAE68B,EAAE3jC,GAAE8G,GAAE,EAAE,IAAE9M,EAAE,QAAM;AAAA;AAAA,EAAK,EAAC;AAAC,EAAC,CAAC,GAAE4gD,KAAG,EAAC,OAAM,eAAc,GAAEzxC,KAAG,EAAC,OAAM,gBAAe;AAAEovC,GAAE,yaAAya,GAAEoC,GAAG,SAAO,SAAS,GAAE,GAAE1M,GAAE+I,GAAEv3C,GAAEuH,GAAE;AAAC,MAAI,IAAEkvC,EAAE,YAAY,GAAEvkC,IAAEukC,EAAE,KAAK,GAAEkB,IAAElB,EAAE,OAAO,GAAEx7C,IAAEw7C,EAAE,aAAa,GAAEoB,IAAEpB,EAAE,QAAQ;AAAE,SAAOpvC,KAAIH,EAAE,OAAM,EAAC,OAAM,UAAS,OAAMM,GAAE,EAAE,WAAW,EAAC,GAAE,CAACjN,EAAE,OAAM4gD,IAAG,CAAC5gD,EAAE,OAAMmP,IAAG,CAACkuC,EAAE,GAAE,EAAC,OAAM,cAAa,KAAI,EAAE,GAAE,YAAW,EAAE,GAAE,OAAM,EAAE,GAAE,UAAS,EAAE,mBAAkB,GAAE,MAAK,GAAE,CAAC,OAAM,cAAa,SAAQ,UAAU,CAAC,GAAEA,EAAE1lC,GAAE,EAAC,OAAM,OAAM,KAAI,EAAE,GAAE,UAAS,EAAE,YAAW,GAAE,MAAK,GAAE,CAAC,OAAM,UAAU,CAAC,GAAE,EAAE,aAAW7K,EAAG,GAAConC,EAAEkJ,GAAE,EAAC,KAAI,GAAE,OAAM,SAAQ,OAAM,EAAE,GAAE,OAAM,EAAE,QAAO,UAAS,EAAE,cAAa,GAAE,MAAK,GAAE,CAAC,SAAQ,SAAQ,UAAU,CAAC,KAAGzT,EAAE,QAAO,EAAE,CAAC,CAAC,GAAE0T,EAAE38C,GAAE,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,YAAW,OAAM,EAAE,YAAW,UAAS,EAAE,eAAc,QAAO,EAAE,cAAa,SAAQ,EAAE,aAAY,GAAE,MAAK,GAAE,CAAC,SAAQ,SAAQ,SAAQ,YAAW,UAAS,SAAS,CAAC,GAAE,EAAE,OAAO,SAAO,KAAGoM,EAAG,GAAConC,EAAEoJ,GAAE,EAAC,KAAI,GAAE,OAAM,UAAS,QAAO,EAAE,QAAO,kBAAiB,EAAE,kBAAiB,UAAS,EAAE,cAAa,GAAE,MAAK,GAAE,CAAC,UAAS,kBAAiB,UAAU,CAAC,KAAG3T,EAAE,QAAO,EAAE,CAAC,CAAC,CAAC,GAAE,CAAC;AAAC,GAAEgX,GAAG,YAAU,mBAAkBA,GAAG,SAAO;AAAwB,IAAIE,KAAG76C,GAAE,EAAC,MAAK,gBAAe,OAAM,EAAC,MAAK,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,UAAS,EAAC,MAAK,SAAQ,SAAQ,GAAE,EAAC,GAAE,OAAM,SAAS,GAAE;AAAC,MAAI8G,IAAEwwC,EAAE,SAAQ,EAAC,OAAM,QAAO,CAAC,EAAE;AAAM,SAAM,EAAC,mBAAkB5wC,EAAG,WAAU;AAAC,WAAM,EAAC,OAAM,GAAG,OAAO,EAAE,MAAK,IAAI,GAAE,QAAO,GAAG,OAAO,EAAE,MAAK,IAAI,GAAE,YAAW,GAAG,OAAO,EAAE,MAAK,IAAI,GAAE,WAAU,EAAE,WAAS,eAAe,OAAgBlH,EAAEsH,CAAC,MAAZ,SAAc,YAAU,SAAS,IAAE,GAAE;AAAA,EAAC,CAAG,EAAA;AAAC,EAAC,CAAC,GAAEg0C,KAAG,CAAC,SAAS,GAAE;AAAC,SAAO9D,GAAE,iBAAiB,GAAE,IAAE,EAAG,GAACv3C,GAAC,GAAG;AAAC,EAAG,WAAU;AAAC,SAAOzF,EAAE,KAAI,EAAC,OAAM,YAAW,GAAE,CAACA,EAAE,QAAO,EAAC,GAAE,sDAAqD,CAAC,CAAC,GAAE,EAAE;AAAC,CAAG,CAAA;AAAE,SAAS+gD,GAAG,GAAE,GAAE;AAAC,MAAIj0C,IAAE,OAAO,KAAK,CAAC;AAAE,MAAG,OAAO,uBAAsB;AAAC,QAAIH,IAAE,OAAO,sBAAsB,CAAC;AAAE,UAAIA,IAAEA,EAAE,OAAQ,SAASD,GAAE;AAAC,aAAO,OAAO,yBAAyB,GAAEA,CAAC,EAAE;AAAA,IAAU,CAAG,IAAEI,EAAE,KAAK,MAAMA,GAAEH,CAAC;AAAA;AAAE,SAAOG;AAAC;AAAC,SAASk0C,GAAG,GAAE;AAAC,WAAQ,IAAE,GAAE,IAAE,UAAU,QAAO,KAAI;AAAC,QAAIl0C,IAAQ,UAAU,CAAC,KAAjB,OAAmB,UAAU,CAAC,IAAE,CAAE;AAAC,QAAE,IAAEi0C,GAAG,OAAOj0C,CAAC,GAAE,EAAE,EAAE,QAAS,SAASJ,GAAE;AAAC,MAAAwxC,GAAE,GAAExxC,GAAEI,EAAEJ,CAAC,CAAC;AAAA,IAAC,KAAI,OAAO,4BAA0B,OAAO,iBAAiB,GAAE,OAAO,0BAA0BI,CAAC,CAAC,IAAEi0C,GAAG,OAAOj0C,CAAC,CAAC,EAAE,QAAS,SAASJ,GAAE;AAAC,aAAO,eAAe,GAAEA,GAAE,OAAO,yBAAyBI,GAAEJ,CAAC,CAAC;AAAA,IAAC,CAAG;AAAA;AAAC,SAAO;AAAC;AAAC6xC,GAAE,4YAA4Y,GAAEsC,GAAG,SAAO,SAAS,GAAE,GAAE5M,GAAEj0C,GAAE,GAAEyF,GAAE;AAAC,SAAOqH,EAAC,GAAGH,EAAE,OAAM,EAAC,OAAMM,GAAE,EAAE,iBAAiB,GAAE,OAAM,kBAAiB,SAAQ,iBAAgB,OAAM,6BAA4B,GAAE,CAAE,EAAC,OAAO6zC,EAAE,GAAE,CAAC;AAAC,GAAED,GAAG,YAAU,mBAAkBA,GAAG,SAAO;AAAsC,IAAII,KAAG,MAAKC,KAAGl7C,GAAE,EAAC,MAAK,eAAc,YAAW,EAAC,WAAUo6C,IAAG,QAAOO,IAAG,cAAaE,GAAE,GAAE,OAAM,EAAC,OAAM,EAAC,MAAK,CAAC,QAAO,KAAK,EAAC,GAAE,OAAM,EAAC,MAAK,QAAO,SAAQ,QAAO,GAAE,MAAK,EAAC,MAAK,CAAC,QAAO,MAAM,GAAE,SAAQ,GAAE,GAAE,OAAM,EAAC,MAAK,CAAC,QAAO,MAAM,EAAC,GAAE,QAAO,EAAC,MAAK,CAAC,QAAO,MAAM,EAAC,GAAE,QAAO,EAAC,MAAK,QAAO,SAAQ,MAAK,GAAE,YAAW,EAAC,MAAK,SAAQ,SAAQ,OAAM,GAAE,WAAU,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,UAAS,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,aAAY,EAAC,MAAK,SAAQ,SAAQ,GAAE,GAAE,KAAI,EAAC,MAAK,QAAO,SAAQ,GAAE,GAAE,gBAAe,EAAC,MAAK,CAAC,QAAO,QAAO,OAAO,EAAC,GAAE,QAAO,EAAC,MAAK,QAAO,SAAQ,IAAG,GAAE,QAAO,EAAC,MAAK,OAAM,SAAQ,WAAU;AAAC,SAAM,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,SAAS;AAAC,EAAC,EAAC,GAAE,OAAM,CAAC,UAAS,gBAAe,qBAAoB,eAAc,aAAa,GAAE,OAAM,SAAS,GAAE/zC,GAAE;AAAC,MAAI,IAAEA,EAAE,MAAK,IAAEE,EAAE,CAAA,CAAE,GAAEinC,IAAEvnC,EAAG,WAAU;AAAC,WAAOlH,EAAE,CAAC,EAAE,IAAK,SAASkH,GAAE;AAAC,aAAOmzC,GAAGnzC,GAAE,OAAM,EAAE,SAAS;AAAA,IAAC,CAAG;AAAA,EAAA,CAAG;AAACiL,EAAAA,GAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAK,GAAI,WAAU;AAAC,QAAIjL,IAAE,EAAE,SAAO,IAAGI,IAAE,MAAM,QAAQJ,CAAC,IAAEA,IAAE,CAACA,CAAC;AAAE,MAAE,QAAMI,EAAE,IAAK,SAASJ,GAAE;AAAC,aAAOmzC,GAAGnzC,GAAE,EAAE,QAAO,EAAE,SAAS;AAAA,IAAC,CAAG;AAAA,EAAA,GAAG,EAAC,WAAU,GAAE,CAAC;AAAE,MAAI1M,IAAEgN,EAAE,MAAM,GAAEgwC,IAAEtwC,EAAG,WAAU;AAAC,WAAOlH,EAAE,CAAC,EAAEA,EAAExF,CAAC,CAAC;AAAA,EAAC,CAAG,GAACyF,IAAEuH,EAAE,EAAE;AAAE2K,EAAAA,GAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAU,GAAI,WAAU;AAAC,IAAAlS,EAAE,QAAM,EAAE;AAAA,EAAU,GAAG,EAAC,WAAU,GAAE,CAAC;AAAE,MAAI23C,GAAE18C,GAAE48C,GAAE,GAAEoD,GAAE9W,GAAEsK,GAAEmJ,IAAErwC,EAAE,IAAI,GAAE28B,IAAE38B,EAAE,IAAI,GAAE4wC,KAAGR,IAAEC,GAAE38C,IAAEipC,GAAE2T,IAAE,EAAC,QAAO,EAAE,OAAM,GAAE,IAAEtwC,EAAE,CAAA,CAAE,GAAE0zC,IAAE,EAAC,UAAS,YAAW,WAAU,QAAO,eAAc,WAAU;AAAC,IAAAO,GAAG,OAAQ;AAAA,EAAA,GAAE,WAAU,CAAC,EAAC,MAAK,UAAS,SAAQ,EAAC,QAAO,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,MAAK,iBAAgB,SAAQ,EAAC,iBAAgB,IAAG,UAAS,GAAE,EAAC,GAAE,EAAC,MAAK,QAAO,SAAQ,EAAC,oBAAmB,CAAC,KAAK,GAAE,uBAAsB,CAAC,OAAM,QAAQ,EAAC,EAAC,GAAE,EAAC,MAAK,eAAc,SAAQ,GAAE,GAAE,EAAC,MAAK,eAAc,SAAQ,IAAG,OAAM,SAAQ,UAAS,CAAC,eAAe,GAAE,IAAG,SAASj7C,GAAE;AAAC,QAAI0G,IAAE1G,EAAE,OAAM8G,IAAEJ,EAAE,QAAOC,IAAED,EAAE,WAAUO,KAAEH,EAAE;AAAO,MAAE,QAAMk0C,GAAGA,GAAGA,GAAG,CAAE,GAAC/zC,EAAC,GAAEqwC,CAAC,GAAE,CAAA,GAAG,EAAC,iBAAwB3wC,MAAR,QAAU,kBAAgB,GAAE,CAAC;AAAA,EAAC,EAAC,CAAC,EAAC,GAAEgL,GAAG,WAAU;AAAC,WAAM,CAACnS,EAAE43C,CAAC,GAAE53C,EAAE9E,CAAC,CAAC;AAAA,EAAC,GAAI,SAASsF,GAAE0G,GAAE;AAAC,QAAII,GAAEH,IAAEqyC,GAAGh5C,GAAE,CAAC,GAAEiH,KAAEN,EAAE,CAAC,GAAEsnC,IAAEtnC,EAAE,CAAC,GAAE3M,IAAEg/C,GAAGtyC,GAAE,CAAC,GAAEswC,IAAEh9C,EAAE,CAAC,GAAEyF,IAAEzF,EAAE,CAAC;AAAE,QAAGiN,MAAGgnC,MAAI+I,MAAI/vC,MAAGxH,MAAIu3C,IAAG;AAAC,OAAQlwC,IAAEm0C,QAAV,QAAwBn0C,MAAT,UAAYA,EAAE,QAAO;AAAG,UAAIE,IAAEC,GAAE,OAAKA,IAAEF,IAAEknC,EAAE,OAAKA;AAAEsJ,MAAAA,GAAG,WAAU;AAAC,QAAA0D,KAAGnD,GAAE9wC,GAAED,GAAE2zC,CAAC;AAAA,MAAC;;EAAI,CAAG,GAAClD,GAAG,WAAU;AAAC,QAAIx3C;AAAE,IAAAi7C,QAAaj7C,IAAEi7C,QAAV,QAAwBj7C,MAAT,UAAYA,EAAE,WAAUi7C,KAAG;AAAA,EAAK,CAAG,GAAC,EAAC,UAASA,IAAG,OAAM,EAAC,IAAGpD,IAAED,EAAE,OAAM1mC,IAAE,WAAU;AAAC,IAAM1R,EAAE63C,CAAC,KAAT,SAAaA,EAAE,QAAM73C,EAAE44C,EAAC,EAAE,CAAC,GAAEp+C,EAAE,QAAM,IAAY,EAAE,eAAX,SAAsByF,EAAE,QAAM,KAAG,EAAE,qBAAoB,EAAE;AAAA,EAAC,GAAEk3C,IAAE,WAAU;AAAC,IAAA38C,EAAE,QAAM,QAAgB,EAAE,eAAX,SAAsByF,EAAE,QAAM,KAAG,EAAE,qBAAoB,EAAE,GAAE,EAAE,eAAck4C,GAAE,MAAM,QAAQ,EAAE,KAAK,KAAG,EAAE,WAASn4C,EAAE,CAAC,IAAEA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,EAAC,GAAEo3C,IAAE5vC,EAAC,GAAG+vC,IAAE,WAAU;AAAC,QAAI/2C,IAAEi3C,GAAEe,GAAE,KAAM,SAASh4C,EAAE0G,GAAE;AAAC,UAAII,GAAEH,IAAEM,GAAEgnC;AAAE,aAAO+J,GAAE,KAAM,SAASh4C,GAAE;AAAC;AAAO,kBAAOA,EAAE,OAAKA,EAAE,MAAM;AAAA,YAAA,KAAK;AAAE,kBAAG2G,KAAED,EAAE,SAAcO,KAAUH,IAAEH,GAAE,aAAZ,QAA+BG,MAAT,SAAW,SAAOA,EAAE,UAAnD,QAAgEG,MAAL,IAAO;AAAC,gBAAAjH,EAAE,OAAK;AAAE;AAAA;AAAM,qBAAOA,EAAE,OAAO,QAAQ;AAAA,YAAE,KAAK;AAAE,kBAAGiuC,IAAE,CAAChnC,GAAEzH,EAAExF,CAAC,MAAIi0C,GAAE;AAAC,gBAAAjuC,EAAE,OAAK;AAAE;AAAA;AAAM,qBAAOA,EAAE,OAAO,QAAQ;AAAA,YAAE,KAAK;AAAE,cAAMR,EAAExF,CAAC,KAAT,QAAYwF,EAAExF,CAAC,MAAIi0C,KAAG0I,KAAI/S,KAAG,aAAaA,CAAC,GAAEA,IAAE,WAAY,WAAU;AAAC,gBAAA1yB,EAAC,GAAG,aAAa0yB,CAAC;AAAA,cAAC,GAAG,GAAG,KAAG1yB,EAAC,GAAGlX,EAAE,QAAMi0C,GAAEoJ,EAAE,QAAM1wC;AAAA,YAAE,KAAK;AAAA,YAAG,KAAI;AAAM,qBAAO3G,EAAE,KAAM;AAAA,UAAA;AAAA,MAAC,GAAGA,CAAC;AAAA,IAAC,CAAG,CAAA;AAAE,WAAO,SAAS0G,GAAE;AAAC,aAAO1G,EAAE,MAAM,MAAK,SAAS;AAAA,IAAC;AAAA,EAAC,EAAC,GAAG,IAAE,WAAU;AAAC,QAAIA,IAAEi3C,GAAEe,GAAE,KAAM,SAASh4C,EAAE0G,GAAE;AAAC,UAAII,GAAEH,IAAEM,GAAEgnC,GAAEj0C;AAAE,aAAOg+C,GAAE,KAAM,SAASh4C,GAAE;AAAC;AAAO,kBAAOA,EAAE,OAAKA,EAAE,MAAM;AAAA,YAAA,KAAK;AAAE,kBAAGiuC,IAAEvnC,EAAE,QAAO,EAAE,GAAUI,IAAEtH,EAAEo3C,CAAC,OAAb,QAA0B9vC,MAAT,UAAYA,EAAE,YAAYmnC,CAAC,OAAK,GAAQtnC,KAAEnH,EAAEo3C,CAAC,OAAb,QAA0BjwC,OAAT,WAAkBA,GAAE,SAASsnC,CAAC,KAAI;AAAC,gBAAAjuC,EAAE,OAAK;AAAE;AAAA;AAAM,qBAAOA,EAAE,OAAO,QAAQ;AAAA,YAAE,KAAK;AAAE,kBAAGhG,KAAUiN,IAAEzH,EAAEmkC,CAAC,OAAb,QAA0B18B,MAAT,SAAW,SAAOA,EAAE,KAAI,EAASjN,KAAN,QAAeA,EAAE,SAASi0C,CAAC,IAAQ;AAAC,gBAAAjuC,EAAE,OAAK;AAAE;AAAA;AAAM,qBAAOA,EAAE,OAAO,QAAQ;AAAA,YAAE,KAAK;AAAE,cAAAkuC,KAAG,aAAaA,CAAC,GAAEA,IAAE,WAAY,WAAU;AAAC1uC,gBAAAA,EAAEC,CAAC,KAAGk3C,EAAC;AAAA,cAAE,GAAG,CAAC;AAAA,YAAE,KAAK;AAAA,YAAG,KAAI;AAAM,qBAAO32C,EAAE,KAAI;AAAA,UAAE;AAAA,MAAC,GAAGA,CAAC;AAAA,IAAC,CAAG,CAAA;AAAE,WAAO,SAAS0G,GAAE;AAAC,aAAO1G,EAAE,MAAM,MAAK,SAAS;AAAA,IAAC;AAAA,EAAC,EAAG;AAAC2R,EAAAA,GAAElS,GAAG,WAAU;AAACD,IAAAA,EAAEC,CAAC,MAAIyR,EAAC,GAAG,aAAag9B,CAAC;AAAA,EAAE,CAAG;AAAC,MAAIiJ,GAAEY,IAAE/wC,EAAE,EAAE,MAAIxH,EAAE,CAAC,EAAE,MAAM,GAAEy4C,IAAEvxC,EAAG,WAAU;AAAC,WAAgB,OAAO,EAAE,kBAAnB,YAA8CowC,GAAE,EAAE,cAAc,MAA7B,YAAsC,EAAE,kBAAR,OAAuB,EAAE,iBAAe;AAAA,EAAM,CAAG,GAACoB,KAAExxC,EAAG,WAAU;AAAC,WAAiB,OAAO,EAAE,kBAApB,aAAyC,EAAE,mBAAP;AAAA,EAAqB,CAAC,GAAGyxC,IAAEzxC,EAAG,WAAU;AAAC,WAAO,EAAE;AAAA,EAAK;AAAIiL,EAAAA,GAAG,WAAU;AAAC,WAAM,CAAC,EAAE,OAAMnS,EAAEmkC,CAAC,CAAC;AAAA,EAAC,GAAI,WAAU;AAAC4T,IAAAA,GAAG,WAAU;AAAC,UAAIv3C,GAAE0G;AAAE,OAAQ1G,IAAER,EAAEo3C,CAAC,OAAb,QAA0B52C,MAAT,UAAYA,EAAE,aAAa,qBAAoBR,EAAE24C,CAAC,CAAC,IAAUzxC,IAAElH,EAAEmkC,CAAC,OAAb,QAA0Bj9B,MAAT,WAAoBA,IAAEA,EAAE,SAAZ,QAA2BA,MAAT,UAAYA,EAAE,aAAa,qBAAoBlH,EAAE24C,CAAC,CAAC;AAAA,IAAC,CAAG;AAAA,EAAA,GAAG,EAAC,WAAU,GAAE,CAAC,GAAEV,GAAE,SAAQ,EAAC,OAAMU,EAAC,CAAC;AAAE,MAAIC,KAAEpxC,EAAE,CAAE,CAAA;AAAE,SAAOD,GAAG,WAAU;AAAC,aAAS,iBAAiB,WAAU,GAAE,EAAE,GAAE,EAAE,cAAYmK,EAAG;AAAA,EAAA,CAAG,GAACwmC,GAAG,WAAU;AAAC,aAAS,oBAAoB,WAAU,GAAE,EAAE,GAAE9T,MAAI,aAAaA,CAAC,GAAEA,IAAE,OAAMsK,MAAI,aAAaA,CAAC,GAAEA,IAAE;AAAA,EAAK,CAAG,GAAC,EAAC,WAAU,GAAE,mBAAkB,SAASxnC,GAAE;AAAC,YAAO,EAAE,WAASlH,EAAE,CAAC,EAAE,SAAO,IAAEA,EAAE,CAAC,EAAE,SAAO,MAAIA,EAAExF,CAAC,MAAI0M;AAAA,EAAC,GAAE,eAAcswC,GAAE,eAAch9C,GAAE,cAAayF,GAAE,kBAAiBs4C,GAAE,gBAAe,SAASrxC,GAAE;AAAC,QAAII,IAAEtH,EAAExF,CAAC,GAAEi0C,IAAEzuC,EAAE,CAAC,EAAE,SAAQw3C,IAAEx3C,EAAE,CAAC,EAAE;AAAO,QAASsH,KAAN,MAAQ;AAAC,MAAAA,KAAG,IAAEmnC,EAAEnnC,CAAC,IAAEJ,KAAG1M,EAAE,QAAMg9C,GAAE/I,EAAE,KAAKvnC,CAAC;AAAG,UAAIjH,KAAE;AAAG,MAAAA,KAAE,MAAM,QAAQ,EAAE,KAAK,KAAG,EAAE,WAASwuC,IAAEvnC,GAAW,EAAE,UAAX,SAAiB,EAAE,QAAM,MAAM,QAAQjH,EAAC,IAAEA,KAAE,CAACA,EAAC,KAAG,EAAE,gBAAeA,EAAC,GAAE,EAAE,UAASA,IAAEiH,GAAEI,CAAC,IAAG,EAAE,YAAUkwC,KAAG,EAAE,QAAMe,EAAE,QAAM,IAAG,EAAE,aAAa;AAAA;AAAA,EAAG,GAAE,aAAYnB,GAAE,cAAaG,GAAE,WAAUpT,GAAE,sBAAqB,SAAS3jC,GAAE;AAAC,IAAAA,EAAE,aAAa,gBAAc;AAAO,QAAI0G,IAAE1G,EAAE;AAAO,IAAAm3C,IAAE,CAACzwC,EAAE,QAAQ;AAAA,EAAK,GAAE,qBAAoB,SAAS1G,GAAE;AAAA,EAAA,GAAG,iBAAgB,SAASA,GAAE;AAAC,QAAI0G,IAAE,CAAC1G,EAAE,OAAO,QAAQ,OAAM8G,IAAE+vC,GAAEr3C,EAAE,CAAC,CAAC,GAAEyuC,IAAEnnC,EAAEqwC,CAAC;AAAE,IAAArwC,EAAE,OAAOqwC,GAAE,CAAC;AAAE,QAAIn9C,KAAE8M,EAAE,MAAM,GAAEJ,CAAC,GAAEswC,IAAElwC,EAAE,OAAOJ,CAAC,GAAEjH,IAAEzF,GAAE,OAAO,CAACi0C,CAAC,CAAC,EAAE,OAAO+I,CAAC;AAAE,MAAE,gBAAev3C,CAAC,GAAE,EAAE,UAASA,GAAEA,EAAE03C,CAAC,GAAEA,CAAC;AAAA,EAAC,GAAE,eAAciB,IAAE,aAAYP,GAAE,QAAO5J,GAAE,kBAAiBiK,IAAE,kBAAiBD,EAAC;AAAC,EAAC,CAAC;AAAEM,GAAE,2dAA2d,GAAE2C,GAAG,SAAO,SAAS,GAAE,GAAElhD,GAAEg9C,GAAEv3C,GAAEuH,GAAE;AAAC,MAAI,IAAEkvC,EAAE,YAAY,GAAEvkC,IAAEukC,EAAE,gBAAgB,GAAEkB,IAAElB,EAAE,QAAQ;AAAE,SAAOpvC,EAAC,GAAGH,EAAE,OAAM,EAAC,OAAM,gBAAe,KAAI,eAAc,aAAY,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEsnC,GAAG,WAAU;AAAC,WAAO,EAAE,wBAAsB,EAAE,qBAAqB,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,MAAM,CAAC,IAAG,YAAW,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAG,WAAU;AAAC,WAAO,EAAE,uBAAqB,EAAE,oBAAoB,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,WAAU,MAAM,CAAC,IAAG,QAAO,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAG,WAAU;AAAC,WAAO,EAAE,mBAAiB,EAAE,gBAAgB,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,WAAU,MAAM,CAAC,IAAG,SAAQ,EAAE,CAAC,MAAI,EAAE,CAAC,IAAEA,GAAG,WAAU;AAAC,WAAO,EAAE,gBAAc,EAAE,aAAa,MAAM,GAAE,SAAS;AAAA,EAAC,GAAG,CAAC,MAAM,CAAC,GAAE,GAAE,EAAEnnC,EAAE,EAAE,GAAEH,EAAE+zC,IAAE,MAAK9W,GAAE,EAAE,QAAQ,SAASl9B,GAAEC,GAAE;AAAC,WAAOG,EAAG,GAAConC,EAAE,GAAE,EAAC,OAAM,cAAa,KAAIvnC,GAAE,SAAQ,IAAG,KAAI,SAASD,GAAE;AAAC,aAAO,EAAE,cAAcC,CAAC,IAAED;AAAA,IAAC,GAAE,MAAK,EAAE,MAAK,OAAM,EAAE,OAAM,QAAO,EAAE,QAAO,OAAMA,GAAE,UAAS,EAAE,kBAAkBC,CAAC,GAAE,cAAaA,GAAE,WAAU,EAAE,UAAU,SAAO,GAAE,QAAO,EAAE,OAAM,GAAE,MAAK,GAAE,CAAC,QAAO,SAAQ,UAAS,SAAQ,YAAW,cAAa,aAAY,QAAQ,CAAC;AAAA,EAAC,CAAG,GAAC,GAAG,IAAG,EAAE,YAAU,EAAE,oBAAkBG,EAAG,GAAConC,EAAEv8B,GAAE,EAAC,KAAI,GAAE,OAAM,kBAAiB,KAAI,gBAAe,UAAS,EAAE,kBAAkB,EAAE,GAAE,cAAa,GAAE,GAAE,MAAK,GAAE,CAAC,UAAU,CAAC,KAAGgyB,EAAE,QAAO,EAAE,IAAG78B,EAAG,GAAConC,EAAE0J,IAAE,EAAC,IAAG,EAAE,kBAAiB,UAAS,EAAE,iBAAgB,GAAE,CAACP,EAAEQ,IAAE,MAAK,EAAC,SAAQ3mC,EAAG,WAAU;AAAC,WAAM,CAAC,EAAE,gBAAcpK,EAAC,GAAGonC,EAAEkJ,GAAE,EAAC,KAAI,GAAE,OAAM,UAAS,OAAMnwC,GAAE,EAAE,WAAW,GAAE,KAAI,aAAY,OAAM,EAAE,eAAc,QAAO,EAAE,QAAO,cAAa,EAAE,WAAU,QAAO,EAAE,QAAO,UAAS,EAAE,eAAc,GAAE,MAAK,GAAE,CAAC,SAAQ,SAAQ,UAAS,cAAa,UAAS,UAAU,CAAC,KAAG08B,EAAE,QAAO,EAAE,CAAC;AAAA,EAAC,CAAC,GAAG,GAAE,EAAC,CAAC,CAAC,GAAE,GAAE,CAAC,MAAK,UAAU,CAAC,EAAC,GAAG,GAAG;AAAC,GAAEuX,GAAG,YAAU,mBAAkBA,GAAG,SAAO;ACW5muC,MAAAC,KAAe39C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,YACV49C;AAAAA,IAAA,QACAz4C;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOnI,GAAOC,GAAS;AACrB,UAAM4gD,IAAax8C,EAAS;AAAA,MAC1B,KAAK,MAAMrE,EAAM;AAAA,MACjB,KAAK,CAACD,MAAU;AACN,QAAAE,EAAA,KAAK,UAAUF,CAAK;AAAA,MAC9B;AAAA,IAAA,CACD;AAIM,WAAA;AAAA,MACL,YAAA8gD;AAAA,MACA,cALmB,CAACr7C,MAAW;AAC/B,QAAAq7C,EAAW,QAAQr7C,EAAE;AAAA,MAAA;AAAA,IAIrB;AAAA,EAEJ;AACF,CAAC;;;8BCtCCoB,EAGM,aAAA;SAFKC,EAAa,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EAAgBkL,GAAU;AAAA,MAAA,OAAA;AAAA;MAChD,kBAA2FlE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAAI;AAAA,IAAA,GAA9E,MAAM,GAAA,CAAA,OAAA,CAAA;AAAA,IAAAjH,EAA6B2gD,GAAU;AAAA,MAAA,OAAA;AAAA,MAAG,OAAM95C,EAAE;AAAA,MAAG,kBAAeG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAAI;AAAA,MAAA,MAAA;AAAA;;;;uFCa3F25C,KAAe/9C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,YACV49C;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAO5gD,GAAO,EAAE,MAAA8U,KAAQ;AAChB,UAAAksC,IAAiB,CAACjhD,MAAoB;AAC1C,MAAA+U,EAAK,UAAU/U,CAAK;AAAA,IAAA,GAEhB+tB,IAAMtpB,EAAI,EAAE;AAIX,WAAA;AAAA,MACL,gBAAAw8C;AAAA,MACA,KAAAlzB;AAAA,MACA,eANoB,MAAM;AAClB,QAAAzkB,GAAA,KAAK,cAAcykB,EAAI,OAAO;AAAA,MAAA;AAAA,IAKtC;AAAA,EAEJ;AACF,CAAC;;;YCzCClnB,EAQM,aAAA;AAND,SAAAC,EAAY,GAAAW,EAAA,OAAAd,IAAA;AAAA,IACJvG,EAAA2gD,GAAA;AAAA,MACR,OAAK95C,EAAA;AAAA,MACL,aAAQ;AAAA,MACR,KAAAA,EAAA;AAAA,MAAA,UAAAA,EAAA;AAAA;;;;uFC2CPi6C,KAAej+C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,WAAAC;AAAA,IAAA,qBACA7D;AAAAA,IAAA,qBACAuC;AAAAA,IAAA,YACAi/C;AAAAA,IACA,aAAAM;AAAA,IAAA,oBACAp/C;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA;AAAA,IAEA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAO9B,GAAO,EAAE,MAAA8U,KAAQ;AACtB,UAAMmF,IAAU5V,EAAS;AAAA,MACvB,KAAK,MAAMrE,EAAM;AAAA,MACjB,KAAK,CAACD,MAAU;AACd,QAAA+U,EAAK,UAAU/U,CAAK;AAAA,MACtB;AAAA,IAAA,CACD;AA6DM,WAAA;AAAA,MACL,SAAAka;AAAA,MACA,OA/CY,MAAM;;AACZ,cAAAtD,KAAOnT,IAAAxD,EAAM,UAAN,gBAAAwD,EAAa;AACtB,YAAA,CAAC,MAAM,QAAQmT,CAAI;AAAG;AAC1B,cAAM9M,IAAM8M,EAAK;AACjB,YAAI3W,EAAM,QAAQ,MAAMA,EAAM,MAAM6J,GAAK;AACjC,gBAAAs3C,IAAYxqC,EAAK,CAAC;AACxB,cAAI,OAAO,UAAU,SAAS,KAAKwqC,CAAS,MAAM,mBAAmB;AAC7D,kBAAA/lC,IAAO,OAAO,KAAK+lC,CAAS,GAC5BrhD,IAAM,CAAA;AACP,YAAAsb,EAAA,QAAQ,CAACxb,MAAQ;AACpB,cAAAE,EAAIF,CAAG,IAAI;AAAA,YAAA,CACZ,GACD+W,EAAK,KAAK7W,CAAG;AAAA;AACf,YAAW,OAAOqhD,KAAc,YAC9BxqC,EAAK,KAAKwqC,CAAS;AAErB,UAAAlnC,EAAQ,QAAQtD;AAAA;AAEhB,UAAAtN,GAAQ,KAAK,SAAS;AAAA,MACxB;AAAA,MA6BA,kBAhBuB,CAACyE,OACZ;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,MAAA,GAECA,CAAI;AAAA,MASf,eA/DoB,CAACtI,GAAUe,GAAe3G,MAAgB;;AACxD,cAAA+W,KAAOnT,IAAAxD,EAAM,UAAN,gBAAAwD,EAAa;AACtB,YAAA,MAAM,QAAQmT,CAAI,GAAG;AACvB,gBAAMpX,IAASiG,KAAA,gBAAAA,EAAG,QACZzF,KAAQR,KAAA,gBAAAA,EAAQ,UAAS,OAAOA,KAAA,gBAAAA,EAAQ,QAAQiG;AACtD,UAAI5F,IACG+W,EAAApQ,CAAK,EAAE3G,CAAG,IAAIG,IAEnB4W,EAAKpQ,CAAK,IAAIxG,GAEhBka,EAAQ,QAAQtD;AAAA;AAAA,MAClB;AAAA,MAqDA,UA7Be,CAACpQ,MAAkB;;AAC5B,cAAAoQ,KAAOnT,IAAAxD,EAAM,UAAN,gBAAAwD,EAAa;AACtB,YAAC,MAAM,QAAQmT,CAAI,GACnB;AAAA,cAAAA,EAAK,WAAW,GAAG;AACrB,YAAAtN,GAAQ,KAAK,gBAAgB;AAC7B;AAAA;AAEG,UAAAsN,EAAA,OAAOpQ,GAAO,CAAC,GACpB0T,EAAQ,QAAQtD;AAAA;AAAA,MAAA;AAAA,MAsBhB,OARY;AAAA,MASZ,iBARsB,CAAC3R,MAAcA,KAAK;AAAA,IAQ1C;AAAA,EAEJ;AACF,CAAC;gEClJmBgD,KAAa;AAAA,EAAA,KAAA;AAAA;GAIf4C,KAAa;AAAA,EAAA,KAAA;AAAA;;;gEAd7BhE,EAuCM,uBAAA;AArCF,SAAAC,EAAgB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EACR0T,GAAK;AAAA,MAAA,OAAA;AAAA,MAEf,SA2BY7M,EAAA;AAAA,IAAA,GA3BD,MAAM,GAAM,CAAA,SAAA,CAAA;AAAA,IAAiB7G,EAAAihD,GAAA;AAAA,MAAA,OAAA;AAAA,MAAE,YAASp6C,EAAI;AAAA,MAAA,uBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAAI;AAAA,MAC1C,YAAI;AAAA,IAAA,GAAA;AAAA,0BAEX5B,GAqBM,OAAAhG,QAAA;AAAA,QArBN8H,EAAA,OAAAX,IAAA;AAAA,WAAAE,EAAW,EAAW,GAAAW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,QAAA,CAAAmQ,GAAAT,OAAiC7P,EAAA,GAAAW,EAAA,OAAA;AAAA,YAAA,OAAA;AAAA,YACrC,KAAAkP;AAAA,UAAA,GAAA;AAAA,YAKhB,MAAA,QAAAS,EAAA,KAAA,KAAAtQ,OAcE,QARKmB,IAAAmD,GAAkBgM,EAAC,gBAH1BA,EAAA,MAWE3X,mCAVAqH,EAAa,GAAAW,EAAA,QAAAoD,IAAAO,GAAAgM,EAAA,gBAAAA,EAAA,SAAA3X,IAAA,KAAA2X,EAAA,KAAA,GAAA,CAAA;AAAA,aAAAtQ,OACMw6C,GAASr6C,EAAa,iBAAiBmQ,EAAK,IAAG,IAAK6V,GAAO;AAAA,cAE7E,OAAK;AAAA,cAAgD,CAAAhmB,EAAA,gBAAAmQ,EAAA,SAAA,KAAW,EAAI,GAAA,OAAK3R,KAAa,WAAAA,IAAAA,EAAA2R,EAAA,KAAA,KAAAA,EAAA;AAAA,cAAA,OAAA;AAAA,uBAG7E,CAAK,CAAA,SAAA,QAAA,EAAA,SAAAA,EAAA,IAAA,KAAAnQ,EAAA,OAAA,SAAA,IAAA,UAAA;AAAA,cAAA;AAAA,YAEd,GAAAmQ,EAAA,OAAA;AAAA,cACA,OAAMnQ,EAAA;AAAA,cAAA,kBAAA;AAAA;;;;;MAMjB,GAAA;AAAA,IAAA,GAAA,GAAA,CAAA,YAAA,CAAA;AAAA,IACEM,EAAA,OAAA8D,IAAA;AAAA,OAAAvE,EAAW,EAAW,GAAAW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,SAAA,CAAAxB,GAAAhG,OAAkCqH,EAAA,GAAAW,EAAA,OAAA;AAAA,QAAA,OAAA;AAAA,QAEtD,KAAAhI;AAAA,MAAA,GAAA;AAAA,UAAiD8hD,GAAY;AAAA,UAAA,OAAA;AAAA;;;;;;uFCvBrEC,KAAev+C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IAAA,WACVoW;AAAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOpZ,GAAO,EAAE,MAAA8U,KAAQ;AAIf,WAAA;AAAA,MACL,kBAJuB,CAACtP,MAAW;AAC9B,QAAAsP,EAAA,UAAUtP,EAAE,OAAO,KAAK;AAAA,MAAA;AAAA,IAG7B;AAAA,EAEJ;AACF,CAAC;;YCrCCoB,EAOE,YAAA;AALC,SAAAC,EAAA,GAAkBC,EAAA8U,GAAA;AAAA,IAClB,OAAU5U,EAAA;AAAA,IAAA,UAAAA,EAAA;AAAA,IAEV,UAAA;AAAA,MACA,SAAQ;AAAA,IAAA;AAAA;;;qDCoBbw6C,KAAex+C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,SACVy+C;AAAAA,IAAA,cACAn0C;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ;AAAA,EAChB,MAAOtN,GAAO,EAAE,MAAA8U,KAAQ;AAIf,WAAA;AAAA,MACL,UAJe,CAAC/U,MAAkB;AAClC,QAAA+U,EAAK,UAAU/U,CAAK;AAAA,MAAA;AAAA,IAGpB;AAAA,EAEJ;AACF,CAAC;;wEC/CC6G,EAoBQ,OAAA;AAnBN,SAAAC,EAAgB,GAAAC,EAAA0U,GAAA,MAAA;AAAA,IAOZ,SAAAvU,EAAA,MAAA;AAAA,MAAA9G,EANFsb,GAME,EAAA,MAAA,GAAA,GAAA;AAAA,QAAA,SALMxU,EAAE,MAAK;AAAA,UACN9G,EAAAuhD,GAAA;AAAA,YACN,OAAM16C,EAAA;AAAA,YACN,KAAI;AAAA,YACJ,KAAA;AAAA,YAAA,MAAA;AAAA;;;QAGL,GAAA;AAAA,MAAA,CAAA;AAAA,MAAiB7G,EAAAsb,GAAA;AAAA,QAAA,MAAA;AAAA,QAQb,OAAA,EAAA,gBAAA,OAAA;AAAA,MAAA,GAAA;AAAA,QANM,SAAAxU,EAAE,MAAK;AAAA,UACN9G,EAAA+T,GAAA;AAAA,YACN,OAAMlN,EAAA;AAAA,YACN,KAAI;AAAA,YACL,KAAoB;AAAA,YACnB,MAAA;AAAA,YAAA,OAAA,EAAA,OAAA,OAAA;AAAA;;;;;;;;;qDCoDT26C,KAAe3+C,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,OAAA4+C;AAAA,IACA,aAAAV;AAAA,IACA,YAAAW;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,eAAe;AAAA;AAAA,MAEb,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOpiD,GAAO;AAON,UAAAqiD,IAAgB3+C,EAAO4+C,EAAc,GAGrCr+C,IAAgBP,EAAOQ,EAAc,GACrCq+C,IAAsB7+C,EAAO8+C,EAAqB,GAClDC,IAAqB/+C,EAAOg/C,EAAoB,GAChD50C,IAAOzJ,EAAS,MAAA;;AAAM,cAAAb,IAAAO,EAAMs+C,CAAa,MAAnB,gBAAA7+C,EAAsB;AAAA,KAAI,GAChDy3B,IAAgB,CAACjrB,MAAiB;AACtC,MAAIhQ,EAAM,iBAAiBA,EAAM,kBAAkB,UACjDyiD,EAAmBzyC,CAAO,IAE1BuyC,EAAoBvyC,CAAO;AAAA,IAC7B,GAEI2yC,IAAe,CAACC,MAA2B;AAC/C,YAAM,EAAE,QAAA19C,GAAQ,kBAAA29C,GAAkB,KAAAjjD,GAAK,OAAAG,MAAU6iD;AACjD,UAAI19C,KAAU,QAAQ,OAAOA,KAAW;AACtC;AAEI,YAAA;AAAA,QACJ,WAAA49C,IAAY;AAAA,QACZ,sBAAAC,IAAuB;AAAA,QACvB,QAAArrC;AAAA,QACA,QAAAyjB;AAAA,QACA,WAAAH;AAAA,QACA,OAAAh7B;AAAAA,MACE,IAAA6iD;AAEJ,MAAA39C,EAAOtF,CAAG,IAAI;AAAA,QACZ,GAAGijD;AAAA;AAAA,QAEH,WAAAC;AAAA,QACA,OAAA/iD;AAAA,QACA,QAAQ;AAAA,UACN,CAACgjD,CAAoB,GAAG,CAAChjD,GAAYijD,IAAuB,OAAS;AAEnE,YAAIA,KACF/nB,EAAc,EAAE,CAACr7B,CAAG,GAAGG,EAAO,CAAA,GAC1Bi7B,KACFA,EAAUp7B,GAAKG,GAAOk7B,GAAel3B,EAAME,CAAa,CAAC,KAG3Dg3B,EAAc,CAAE,CAAA;AAAA,UAEpB;AAAA,UACA,GAAGvjB;AAAA,QACL;AAAA,QACA,GAAGurC,EAAY9nB,CAAM;AAAA,QACrB,OAAO,EAAE,GAAGn7B,GAAO,GAAGkjD,EAAYljD,GAAO+D,EAAME,CAAa,CAAC,EAAE;AAAA,MAAA;AAAA,IACjE,GAEIk/C,IAAY9+C,EAAS,MAAM;AAC/B,YAAM++C,IAAQpjD,EAAM;AACpB,aAAIojD,KAAS,QAAQ,OAAOA,KAAU,WAC7B,KAEFC;AAAA,QACLD;AAAA,QACA,CAACl+C,GAAQnF,GAAOH,MAAQ;AAChB,gBAAAijD,IAAmBv1B,GAAkB1tB,CAAG;AAC1C,cAAA,MAAM,QAAQijD,CAAgB,GAAG;AACnC,kBAAM/9C,IAAO+9C,EAAiB,KAAK,CAAC/9C,MAAS;AACrC,oBAAA,EAAE,UAAA6oB,GAAU,aAAA21B,EAAgBx+C,IAAAA;AAC9B,qBAAA6oB,KAAY,QAAQ21B,KAAe,OAC9B,KACE31B,IACF/P,GAAkB7Z,EAAM+J,CAAI,GAAG6f,CAAQ,IACrC21B,IACF,CAAC1lC,GAAkB7Z,EAAM+J,CAAI,GAAGw1C,CAAW,IAE7C;AAAA,YAAA,CACR;AACD,YAAIx+C,KACF69C,EAAa,EAAE,QAAAz9C,GAAQ,OAAAnF,GAAO,KAAAH,GAAK,kBAAkBkF,GAAM;AAAA;AAG7D,YAAA69C,EAAa,EAAE,QAAAz9C,GAAQ,OAAAnF,GAAO,KAAAH,GAAK,kBAAAijD,EAAkB,CAAA;AAEhD,iBAAA39C;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAAA,IACH,CACD,GAEK+9C,IAAc,CAAC9nB,MAAgB;AACnC,YAAMooB,IAAc,CAAA;AACpB,iBAAW3jD,KAAOu7B;AAChB,QAAAooB,EAAO3jD,CAAG,IAAIyjD;AAAA,UACZloB,EAAOv7B,CAAG,EAAE;AAAA,UACZ,CAAC4jD,GAAiB1+C,MAAcq2B,EAAOv7B,CAAG,EAAE,aAAa,OAAQ4jD,KAAUC,EAAkB3+C,CAAI,IAAM0+C,KAAUC,EAAkB3+C,CAAI;AAAA,UACvI,EAAQq2B,EAAOv7B,CAAG,EAAE;AAAA,QAAO;AAExB,aAAA2jD;AAAA,IAAA,GAGHE,IAAoB,CAAC3+C,MAAS;AAElC,YAAMk2B,IAAYh7B,EAAM,MAAM8E,EAAK,KAAK;AACpC,UAAAI;AACJ,cAAQJ,EAAK,MAAM;AAAA,QACjB,KAAK;AACH,UAAAI,IAAS81B,MAAcl2B,EAAK;AAC5B;AAAA,QACF,KAAK;AACM,UAAAI,IAAA81B,EAAU,SAASl2B,EAAK,KAAK;AACtC;AAAA,QACF,KAAK;AACH,UAAAI,IAASJ,EAAK,MAAMA,GAAM9E,EAAM,KAAK;AACrC;AAAA,QACF;AACE,UAAAkF,IAAS81B,MAAcl2B,EAAK;AAAA,MAChC;AACO,aAAAI;AAAA,IAAA;AAGT,aAASg+C,EAAaljD,IAAQ,CAAC,GAAGiE,GAAe;AAE/C,YAAMy/C,IAAa,CAAA;AACnB,iBAAWC,KAAQ3jD;AACjB,QAAI,OAAOA,EAAM2jD,CAAI,KAAM,eACzBD,EAAWC,CAAI,IAAI3jD,EAAM2jD,CAAI,EAAE1/C,CAAa;AAGzC,aAAAy/C;AAAA,IACT;AACO,WAAA;AAAA,MACL,WAAAP;AAAA,MAAA,mBACAvlC;AAAAA,IAAA;AAAA,EAEJ;AACF,CAAC;uCCrOUjX,KAAM;AAAA,EAAA,KAAA;AAAA;;eALbQ,GAuCWy8C,GAAAC,GAAAC,GAAAC,GAAA;;KAlCoBl9C,EAAA,EAAS,GAAIW,EAAAC,IAAA,MAAAC,GAAAV,EAAA,WAAA,CAAAg9C,GAAApkD,OAA1CiH,EAAA,GAAAW,EAiCMC,IAjCN,EAiCM,KAAA7H,EAAA,GAAA;AAAA,MAAAokD,EAhCJ,iBA+BM,GAAAx8C,EAAA,OAAAb,IAAA;AAAA,QAAAW,EA3B0B,QAAQU,IAAAmD,GAAA64C,EAAA,KAAA,GAAA,CAAA;AAAA,QACpC18C,EAAA,OAAAsD,IAAA;AAAA,UAES,MAAA,QAAAo5C,CAAA,KAAAn9C,EAAA,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAAC,GAAAs8C,GAAA,CAAAh/C,GAAAg4C,OAGAn2C,EAAY,GAAAC,EAAAu6C,GAAAr8C,EAAA,SAAA,GAAAgoB,GAAA;AAAA,YAEhB,KAAKgwB;AAAA,YACL,OAAA;AAAA,YAAA,OACSh4C,EAAK;AAAA,YAAA,UAAAgC,EAAA,YAAAhC,EAAA;AAAA,sEAKJ,GAAM,GAAvB,KAAA6C,EAAA,IAAA,EAAA;AAAA,UAAA,MAGU,QAASm8C,CAOf,iBAAAn9C,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,YAAAu8C,EAAA,aAAAn9C,KARiBC,EAAAu6C,GAAA2C,EAAA,SAAA,GAAAh3B,GAAA;AAAA,cAGhB,KAAA;AAAA,cACA,OAAO;AAAA,cACP,CAAAg3B,EAAU,aAAQ,EAAI,GAASA,EAAA;AAAA,cAAA,OACxBA,EAAc;AAAA,cAAA,UAAAh9C,EAAA,YAAAg9C,EAAA;AAAA;;;;;;;;;;;;;;;;;ACrBpC,MAAAC,KAAejhD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,UAAU,kBAAkB;AAAA,EACpC,MAAOhD,GAAO,EAAE,MAAA8U,KAAQ;AAGtB,WAAO,oBAAoB;AAAA,MACzB,UAAWovC,GAAkBx+C,GAAe;AAC1C,eAAIA,MAAU,SACL,IAAIy+C,GAAW,IAEpBz+C,MAAU,gBAAgBA,MAAU,eAC/B,IAAI0+C,GAAS,IAEf,IAAIC,GAAa;AAAA,MAC1B;AAAA,IAAA;AAKF,UAAMC,IAAM9/C;AAEZ,QAAI+/C,IAAS;AAGb,UAAMC,IAAW;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAER,WAAA1yC,GAAU,MAAM;AACLyyC,MAAAA,IAAAE,GAAa,OAAOH,EAAI,OAAO;AAAA,QACtC,UAAUtkD,EAAM;AAAA,QAChB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,sBAAsB;AAAA,QACtB,OAAOwkD,EAAS;AAAA,QAChB,UAAU;AAAA,QACV,sBAAsB;AAAA,QACtB,YAAY;AAAA,QACZ,qBAAqB;AAAA,QACrB,eAAe;AAAA,QACf,cAAc;AAAA,QACd,sBAAsB;AAAA;AAAA,QAEtB,kBAAkBxkD,EAAM;AAAA,QACxB,oBAAoB;AAAA,QACpB,4BAA4B;AAAA,QAC5B,WAAW;AAAA,UACT,uBAAuB;AAAA,UACvB,yBAAyB;AAAA,UACzB,yBAAyB;AAAA,UACzB,WAAW;AAAA,QACb;AAAA,QACA,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,UAAU;AAAA;AAAA,QAEV,aAAa;AAAA;AAAA,QAEb,SAAS;AAAA,UACP,SAASA,EAAM;AAAA,QACjB;AAAA,QACA,UAAUA,EAAM;AAAA,QAChB,GAAGA,EAAM;AAAA,MAAA,CACV,GAEOukD,KAAAA,QAAAA,EAAA,SAASvkD,EAAM,YAGnBA,EAAM,cACR,WAAW,MAAM;AACPukD,QAAAA,KAAAA,QAAAA,EAAA,UAAU,gCAAgC;AAAA,SACjD,GAAG,GAEDA,EAAA,wBAAwBpK,GAAS,MAAM;AAGtC,cAAAp6C,IAAQwkD,KAAAA,gBAAAA,EAAQ;AACtB,QAAAzvC,EAAK,UAAU/U,CAAK;AAAA,MAAA,GACnB,GAAG,CAAC,GAGPwkD,EAAO,oBAAoB,MAAM;AACzB,cAAAxkD,IAAQwkD,KAAAA,gBAAAA,EAAQ;AACtB,QAAAzvC,EAAK,oBAAoB/U,CAAK;AAAA,MAAA,CAC/B;AAAA,IAAA,CACF,GAEDsG,GAAM,MAAMrG,EAAM,WAAW,CAAC0kD,MAAS;AACrC,UAAIH,GAAQ;AAEJ,cAAA5uB,IAAW4uB,EAAO;AACxBA,QAAAA,EAAO,SAASG,CAAI,GAEhB1kD,EAAM,cACDukD,EAAA,UAAU,8BAA8B,EAAE,IAAI,GAEnD5uB,KAAY,QAEd4uB,EAAO,YAAY5uB,CAAQ;AAAA;AAAA,IAE/B,CACD,GAEDgvB,GAAY,MAAM;AAChBJ,MAAAA,KAAAA,QAAAA,EAAQ;AAAA,IAAQ,CACjB,GACM;AAAA,MACL,KAAAD;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;MC7JwB59C,KAAM;AAAA,EAAA,OAAA;AAAA;;;;;uFC8B/Bk+C,KAAe5hD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,eACV1C;AAAAA,IAAA,cACAkB;AAAAA,IAAA,OACAuL;AAAAA,IAAA,WACAC;AAAAA,IAAA,QACA7E;AAAAA,IAAA,SACA/E;AAAAA,IAAA,WACA0J;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAO9M,GAAO;AACZ,UAAMiR,IAAc;AAAA,MAClB;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IAAA,GAGIzC,IAAYhK,EAAI;AAAA,MACpB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IAAA,CACN,GAEK,EAAE,iBAAAyL,GAAiB,iBAAAC,GAAiB,cAAAC,EAAa,IAAIzM,EAAO0M,IAAkB;AAAA;AAAA,MAElF,iBAAiB,CAACC,GAAoCC,GAAgBC,MAAkB;AAAA;AAAA;AAAA,MAExF,iBAAiB,CAACD,GAAgBC,MAAkB;AAAA;AAAA;AAAA,MAEpD,cAAc,CAACA,GAAeD,GAAgBE,MAAuB;AAAA;AAAA,IAAA,CACtE;AAED,IAAAnK;AAAA,MACEmI;AAAA,MACA,CAACA,MAAc;AACb,QAAAyB,EAAgBpK,GAAU2I,CAAS,GAAGxO,EAAM,OAAOA,EAAM,IAAI;AAAA,MAC/D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,MACR;AAAA,IAAA;AAGF,UAAMuR,IAAe,MAAM;AAAA,IAAA,GAIrBszC,IAAqB,CAACt/C,MAAc;AAC3B,MAAA4K,EAAAnQ,EAAM,MAAMA,EAAM,OAAOuF,EAAK,QAAQ,MAAM,OAAO,IAAI;AAAA,IAAA,GAGhEkL,IAAW,MAAM;AACL,MAAAP,EAAAlQ,EAAM,OAAOA,EAAM,IAAI;AAAA,IAAA;AAGzC,WAAA8R,GAAU,MAAM;;AACd,MAAA/N,EAAMyK,CAAS,EAAE,SAAOhL,IAAAxD,EAAM,SAAN,gBAAAwD,EAAY,SAAQ,IAC5CO,EAAMyK,CAAS,EAAE,UAAQ5I,IAAA5F,EAAM,SAAN,gBAAA4F,EAAY,UAAS,IAC9C7B,EAAMyK,CAAS,EAAE,QAAMC,IAAAzO,EAAM,SAAN,gBAAAyO,EAAY,QAAO5C;IAAO,CAClD,GAEM;AAAA,MACL,aAAAoF;AAAA,MACA,WAAAzC;AAAA,MACA,cAAA+C;AAAA,MACA,oBAAAszC;AAAA,MACA,UAAAp0C;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;qIC1IC7J,EAcM,gBAAA;AAbM,SAAAC,EAAkB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EAAgBwH,GAAc;AAAA,MAAA,OAAA;AAAA,MAAG,OAAOX,EAAE,UAAA;AAAA,MAAc,kBAAQG,EAAY,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,OAAAI;AAAA,MAAA,SAAAJ,EAAA;AAAA,MAExG,UAAkFA,EAAA;AAAA,IAAA,GAAzE,MAAM,GAAa,CAAA,SAAA,WAAA,UAAA,CAAA;AAAA,IAAA7G,EAAgBkL,GAAe;AAAA,MAAA,OAAA;AAAA,MAAE,OAAArE,EAAW,UAAO;AAAA,MAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,QAAAI;AAAA,MAC/E,aAQa;AAAA,IANA,GAAA,MAAO,WAChB,CAGS;AAAA,IAHTjH,EAAAkU,GAGS,EAHA,SAAO,CAAA,OAAA,EAAA,GAAA;AAAA,MAC0B,SAAApN,EAAA,MAAA;AAAA,QAAxC9G,EAAAmU,GAAwC,EAA3B,SAAAtN,EAAI,mBAAG,GAAA;AAAA,UAAM,SAAAC,EAAA,MAAA;AAAA,YAAA9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;cAC1B,GAAA;AAAA,YAAA,CAAA;AAAA,YAA0B9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;;;;;wBAJ9B,CAAmC;AAAA,MAAA,CAAA;AAAA;;;MAQrC,GAAA;AAAA,IAAA,CAAA;AAAA,MAA4CuN,GAAQ;AAAA,MAAA,OAAA;AAAA;;;;uFC0BxDswC,KAAe9hD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,WAAA0R;AAAA,EACF;AACF,CAAC;MC1DMhO,KAAM;AAAA,EAAA,KAAA;AAAA;GAMAC,KAAM;AAAA,EAAA,KAAA;AAAA;GAEFqB,KAAM;AAAA,EAAA,KAAA;AAAA;GACN4C,KAAM;AAAA,EAAA,KAAA;AAAA;;;yCAT2BhE,EAAI,WAAA;AAClD,SAAA,MAAA,QAAAI,EAAA,IAAA,KAAAH,KAAAW,EAAA,OAAAd,IAAA;AAAA,KAIuBG,EAAA,EAAI,GAAIW,EAAmBC,IAAa,MAAMC,GAAUV,EAAA,MAAA,CAAAlC,GAAAyB,OAC3EM,EAAA,GAAAW,EAcMC,IAdN,EAcM,KAAAlB,KAAA;AAAA,MAbiBzB,EAAA,QAAAA,EAAA,cAAiB,sCAAtC,OAGW6B,IAAA;AAAA,QAFkC7B,EAAA,WAAA,SAAA,KAAA+B,EAAA,GAAAW,EAA3CC,IAA6D,EAA7D,KAA6D,KAAA;AAAA,UAAA3C,EAAA,SAAA,QACvB+B,EAAtC,GAAAW,EAAA,OAAAQ,IAAA,GAAA,KAAAH,EAAA,IAAA,EAAA;AAAA,UAAA/C,EAAA,SAAA,QAAA+B,EAAA,GAAAW,EAAA,OAAAoD,IAAA,GAAA,KAAA/C,EAAA,IAAA,EAAA;AAAA,QAEF,GAAA,EAAA,KACkBA,EAAgB,IAAM,EAAA;AAAA,QAAAP,EAAA,OACpC8D,IAIE;AAAA,UAAAtG,EAAA,WAAA,SAAA,KAAA+B,EAHa,GAAAC,EAAA6N,GAAA;AAAA,YACZ,KAAI;AAAA,YACJ,OAAM3N,EAAK,QAAA;AAAA,YAAA,MAAA,GAAAA,EAAA,OAAAA,EAAA,OAAA,MAAA,KAAAT;AAAA;;;MASP,CAAA,MAAAM,EAAA,GAAGC,EAAO8N,GAAc;AAAA,QAClC,OAAM;AAAA,QACN,KAAK9P,EAAE,OAAK,GAAAkC,EAAA,SAAAT;AAAA,QACZ,MAAKzB;AAAA,QACL,OAAMkC,EAAA;AAAA,QAAA,OAAAT;AAAA;;;;;uFC0EjBw+C,KAAe/hD,GAAgB;AAAA,EAC7B,YAAY;AAAA,IACV,eAAAqS;AAAA,IAAA,YACAurC;AAAAA;AAAAA,IAAA,SAEAz9C;AAAAA,IAAA,QACAD;AAAAA,IAAA,SACAE;AAAAA;AAAAA,EAEF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAOpD,GAAO,EAAE,MAAA8U,GAAM,QAAAxR,KAAU;AACxB,UAAA0C,IAAUxB,EAAI,EAAK,GACnBqR,IAAgBrR,EAA+B,CAAA,CAAE,GACjD4jC,IAAY5jC,EAA4B,CAAA,CAAE,GAC1CwgD,IAAS3gD,EAAS,OAAO;AAAA,MAC7B,QAAQN,EAAM,QAAQ;AAAA,IACtB,EAAA,GACIkhD,IAAmB,CAAClgD,MAA+D;AACvF,YAAMG,IAAoC,CAAA;AAC1C,iBAAWs3C,KAAKz3C;AACd,QAAIy3C,EAAE,aACJt3C,EAAO,KAAK,GAAG+/C,EAAiBzI,EAAE,UAAU,CAAC,IAE7Ct3C,EAAO,KAAKs3C,CAAC;AAGV,aAAAt3C;AAAA,IAAA,GAEHggD,IAAW,MAAM;AAEjB,UADkBD,EAAiBlhD,EAAM8R,CAAa,CAAC,EACzC,KAAK,CAAC,MAAW,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG;AACvD,QAAAxM,GAAQ,MAAM,YAAY;AAC1B;AAAA;AAEF,MAAAyL,EAAK,QAAQ;AAAA,QACX,YAAY/Q,EAAM8R,CAAa;AAAA,QAC/B,WAAW9R,EAAMqkC,CAAS;AAAA,MAAA,CAC3B,GACDpiC,EAAQ,QAAQ;AAAA,IAAA,GAGZ+P,IAAc,CAACC,MAA0C;;AAC7D,iBAAWlR,KAAQkR;AACb,SAAAxS,IAAAsB,EAAK,eAAL,QAAAtB,EAAiB,SACnBuS,EAAYjR,EAAK,UAAU,IAE3BA,EAAK,MAAM+G;IAEf;AAGI,IAAAxF,GAAAL,GAAS,CAACA,MAAY;;AAC1B,UAAIA,GAAS;AACX,YAAI,MAAM,SAAQxC,IAAAxD,EAAM,SAAN,gBAAAwD,EAAY,UAAU,GAAG;AACzC,gBAAMwS,IAAanQ,KAAUD,IAAA5F,EAAM,SAAN,gBAAA4F,EAAY,eAAc,CAAA,CAAE;AACzD,UAAAmQ,EAAYC,CAAU,GACtBH,EAAc,QAAQG;AAAA;AAExB,QAAAoyB,EAAU,QAAQviC,KAAU4I,IAAAzO,EAAM,SAAN,gBAAAyO,EAAY,cAAa,CAAA,CAAE,GAClD1K,EAAMqkC,CAAS,EAAE,UACpBA,EAAU,MAAM,QAAQ,KAErBrkC,EAAMqkC,CAAS,EAAE,cACpBA,EAAU,MAAM,YAAY;AAAA;AAG9B,QAAAvyB,EAAc,QAAQ,IACtBuyB,EAAU,QAAQ;IACpB,GACC;AAAA,MACD,OAAO;AAAA,IAAA,CACR;AAED,UAAMniC,IAAY,MAAM;AACtB,MAAAD,EAAQ,QAAQ;AAAA,IAAA,GAGZmK,IAAe,CAAC8F,MAAuB;;AACvC,MAAAlS,EAAM8R,CAAa,KAAK,UAAQrS,IAAAO,EAAM8R,CAAa,MAAnB,gBAAArS,EAAsB,YAAW,IACnEqS,EAAc,QAAQ,CAAC;AAAA,QACrB,KAAKhK,GAAO;AAAA,MAAA,CACb,IACQ9H,EAAM8R,CAAa,EAAE,CAAC,KAAK,SAChC9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,cAAc,QAAQ9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,SAASI,IACjFJ,EAAc,QAAQ,CAAC;AAAA,QACrB,MAAAI;AAAA,QACA,YAAY;AAAA,UACVlS,EAAM8R,CAAa,EAAE,CAAC;AAAA,UACtB;AAAA,YACE,KAAKhK,GAAO;AAAA,UACd;AAAA,QACF;AAAA,MAAA,CACD,IACQ9H,EAAM8R,CAAa,EAAE,CAAC,EAAE,WAAW,SAAS,KAAK9R,EAAM8R,CAAa,EAAE,CAAC,EAAE,SAASI,KAC3FJ,EAAc,MAAM,CAAC,EAAE,WAAW,KAAK;AAAA,QACrC,KAAKhK,GAAO;AAAA,MAAA,CACb;AAAA,IAEL;AAGF,IAAAqK,GAAQ9F,IAAkB;AAAA,MACxB,gBAAiB5B,GAAiCjI,GAAe4P,GAAc;;AAC7E,YAAIH,IAAaH,EAAc;AACzB,cAAAO,IAAUD,EAAK,MAAM,GAAG;AAC1B,YAAAA,MAAQC,KAAA,QAAAA,EAAS;AACnB,qBAAW5W,KAAK4W;AACV,gBAAAJ,EAAW,CAACxW,CAAC;AACF,cAAAwW,KAAAxS,IAAAwS,EAAW,CAACxW,CAAC,MAAb,gBAAAgE,EAAgB;AAAA;AAE7B;AAIN,QAAI,MAAM,QAAQwS,CAAU,KAAKA,EAAWzP,CAAK,MAC/CyP,EAAWzP,CAAK,IAAIiI;AAAA,MAExB;AAAA,MACA,gBAAiBjI,GAAe4P,GAAc;;AAC5C,YAAI,CAACA,GAAM;AACT,UAAAN,EAAc,QAAQ;AACtB;AAAA;AAEE,YAAAG,IAAajS,EAAM8R,CAAa;AAC9B,cAAAO,IAAUD,EAAK,MAAM,GAAG;AAC9B,YAAIC,KAAA,QAAAA,EAAS,QAAQ;AACnB,qBAAW5W,KAAK4W;AACV,gBAAAJ,EAAW,CAACxW,CAAC;AACF,cAAAwW,KAAAxS,IAAAwS,EAAW,CAACxW,CAAC,MAAb,gBAAAgE,EAAgB;AAAA;AAE7B;AAGJ,cAAI,MAAM,QAAQwS,CAAU,KAAKA,EAAWzP,CAAK;AAE3C,gBADOyP,EAAA,OAAOzP,GAAO,CAAC,GACtByP,EAAW,WAAW;AACpB,kBAAAI,EAAQ,SAAS,GAAG;AAChB,sBAAAC,IAAYD,EAAQ,SAAS,GAC7BE,IAAWF,EAAQC,CAAS,GAC5BE,IAAcH,EAAQ,MAAM,GAAGC,CAAS;AAC1C,oBAAAG,IAAoBzS,EAAM8R,CAAa,GACvCY,IAAc;AAClB,2BAAWC,MAAKH;AACV,sBAAAC,EAAkB,CAACE,EAAC;AACR,oBAAAD,KAAA7Q,IAAA4Q,EAAkB,CAACE,EAAC,MAApB,gBAAA9Q,EAAuB,MACjB4Q,KAAA/H,IAAA+H,EAAkB,CAACE,EAAC,MAApB,gBAAAjI,EAAuB;AAAA;AAE3C;AAIJ,oBAAIgI,MAAgBT,EAAW,CAAC,EAAE;AAChC,sBAAI,MAAM,QAAQA,EAAW,CAAC,EAAE,UAAU,GAAG;AAC3C,0BAAMW,KAAO9Q,GAAUmQ,EAAW,CAAC,EAAE,UAAU;AAC7B,oBAAAQ,EAAA,OAAO,CAACF,GAAU,CAAC,GACrCE,EAAkB,OAAO,CAACF,GAAU,GAAG,GAAGK,EAAI;AAAA;AAAA;AAGhD,kBAAAH,EAAkB,CAACF,CAAQ,IAAIN,EAAW,CAAC;AAAA;AAAA;AAGjD,cAAWA,EAAW,WAAW,MAC/BH,EAAc,QAAQ;;MAI9B;AAAA,MACA,aAAcM,GAAc5P,GAAe0P,GAAmB;;AACxD,YAAAD,IAAajS,EAAM8R,CAAa,GAChCe,IAAS;AACP,cAAAR,IAAUD,EAAK,MAAM,GAAG;AAC1B,YAAAA,MAAQC,KAAA,QAAAA,EAAS;AACnB,qBAAW5W,KAAK4W;AACV,gBAAAJ,EAAW,CAACxW,CAAC;AACN,cAAAoX,KAAApT,IAAAwS,EAAW,CAACxW,CAAC,MAAb,gBAAAgE,EAAgB,MACZwS,KAAApQ,IAAAoQ,EAAW,CAACxW,CAAC,MAAb,gBAAAoG,EAAgB;AAAA;AAE7B;AAIN,YAAIgR,MAAWX;AACF,UAAAD,EAAA,OAAOzP,IAAQ,GAAG,GAAG;AAAA,YAC9B,KAAKsF,GAAO;AAAA,UAAA,CACb;AAAA,aACI;AACL,gBAAM8K,IAAO9Q,GAAUmQ,EAAWzP,CAAK,CAAC;AACxC,UAAAyP,EAAWzP,CAAK,IAAI;AAAA,YAClB,MAAA0P;AAAA,YACA,YAAY;AAAA,cACVU;AAAA,cACA;AAAA,gBACE,KAAK9K,GAAO;AAAA,cACd;AAAA,YACF;AAAA,UAAA;AAAA;AAAA,MAGN;AAAA,IAAA,CACD;AAEK,UAAAs5C,IAAiB,CAACC,MAAmB;AACzC,MAAAhd,EAAU,MAAM,OAAOgd;AAAA,IAAA,GAMnBC,IAAahhD,EAAS,MAAO,OAAO,OAAe,UAAU,GAE7DihD,IAAc9gD,EAAI;AAAA,MACtB,EAAE,OAAO,QAAQ,OAAO,4CAA4C;AAAA,MACpE,EAAE,OAAO,QAAQ,OAAO,0CAA0C;AAAA,IAAA,CAAE;AAE/D,WAAAlB,EAAA;AAAA,MACL,WAAA2C;AAAA,IAAA,CACD,GAEM;AAAA,MACL,QAAA++C;AAAA,MACA,SAAAh/C;AAAA,MACA,eAAA6P;AAAA,MACA,WAAAuyB;AAAA,MACA,UAAA8c;AAAA,MACA,cAAA/0C;AAAA,MACA,gBAAAg1C;AAAA,MACA,YAAAE;AAAA,MACA,aAAAC;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACxUU,MAAArwC,KAAA,CAAA9I,OAAK+I,GAAC,iBAAgB,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,IACpBzF,KAAA,EAAA,OAAM,iBAoBNC,KAAA,EAAA,OAAM,2BAQR,OAAM,qCAEJyE,KAAA,EAAA,OAAM,qBACOP,KAAAoK,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,OAAA,EAAA,OAAA,WAAA,QAAA,EAAA,CAAA,2CAQN,SACRyD,KAAAkK,gBAAAA,GAAA,MAAA3N,gBAAAA,EAAA,OAAc,MAAN,SAAA,EAAA,CAAA,GACH0D,KAAA,EAAA,OAAA;;iGAxDfpE,EAoFU,SAAA;AAlFA,SAAAC,EAAA,GAAgBC,EAAAC,GAAA;AAAA,IAAA,OAAA;AAAA,IACvB,SAAOC,EAAM;AAAA,IACb,oBAAoBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAAI;AAAA,IACpB,OAAA;AAAA,IACA,gBAAW;AAAA,IAAA,cAAA;AAAA;MAGX,QAAA;AAAA,MACA,UAAI;AAAA,IAAA;AAAA;;aAIHH,EA4BM,MAAA;AAAA,MAAAK,EA3BJ,OAmBMZ,IAnBN;AAAA,QAAAY,EAAA,OAAmBX,IAEjB;AAAA,UAAAW,EAA8B,OAAaU,IAAA;AAAA,YAA3CkD,EAAA,QAAA;AAAA,YACE,MAAA,QAAAlE,EAKW,kDAJgB,GAAAQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,cACnBtH,EAAAoH,GAAA;AAAA,gBAAA,OAAA;AAAA,gBAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,cAAA,GAAA;AAAA;;;gBACA,GAAA;AAAA,cAAA,CAAA;AAAA,cAEQ7G,EAAAoH,GAAA;AAAA,gBAAA,OAAA;AAAA,gBAGR,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,cAAA,GAAA;AAAA;;;;;4BAEkCF,EAAAS,GAAA;AAAA,cAAE,KAAA;AAAA,cAAA,OAAA,EAAA,eAAA,OAAA;AAAA,cAEtC,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA;YAAA,GAAA;AAAA;;;;YAEF,CAAA;AAAA,UAAA,CAAA;AAAA,YAEU,OAAgB4D,IAAA;AAAA,YAAAzK,EACfwU,GAAa;AAAA,cACnB,OAAO;AAAA,cAAA,MAAA3N,EAAA;AAAA;;UAId,CAAA;AAAA,QAAA,CAAA;AAAA,UAEE,OAoCMoE,IAAA;AAAA,UAAAP;AAAAA,UAlCcvD,EAAA,OAAAwD,IAAA;AAAA,YAKdxD,EAAA,OAAAgE,IAAA;AAAA,cAAAP;AAAAA,gBAFe+1C,GAAe;AAAA,gBAAA,OAAA;AAAA,gBAC7B,OAAM95C,EAAE,UAAA;AAAA,gBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,QAAAI;AAAA;cAsBP,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YAAA,CAAA;AAAA,cAjBJ,OAgBM4D,IAAA;AAAA,cAAAW;AAAA,cAPqBrE,EAAA,OAAU8U,IAAI;AAAA,gBAAAjc,EAAAwH,GAAA;AAAA,kBAAG,OAAOX,EAAE,UAAA;AAAA,kBAAa,kBAAoBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,OAAAI;AAAA,kBAAA,SAAAJ,EAAA;AAAA,kBACpF,OAIA,EAAA,OAAA,QAAA;AAAA,gBAAA,GAHA,MAAM,GAAa,CAAA,SAAA,SAAA,CAAA;AAAA,gBAAA7G,EACJ2gD,GAAmB;AAAA,kBAAA,OAAA;AAAA,kBACjC,OAAM95C,EAAE,UAAA;AAAA,kBAAA,kBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAA,YAAAI;AAAA;;;;;;;;;;;uFCxBvBm+C,KAAeviD,GAAgB;AAAA,EAC7B,YAAY;AAAA,IAAA,QACVE;AAAAA,IAAA,SACAC;AAAAA,IAAA,QACAqiD;AAAAA,IACA,eAAAC;AAAA,IAAA,QACAt9C;AAAAA,EACF;AAAA,EACA,MAAOnI,GAAO,EAAE,QAAAsD,GAAQ,MAAAwR,KAAQ;AAC9B,YAAQ,IAAI9U,CAAK;AACX,UAAAgG,IAAUxB,EAAI,EAAK,GACnBkhD,IAAgBlhD,KAChBmhD,IAAcnhD,KACd8hB,IAAe9hB,EAAI,CAAC,GACpBohD,IAAqB;AAAA,MACzB;AAAA,QACE,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,WAAW;AAAA,QACX,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IAAA,GAEIC,IAAQrhD,EAAc,CAAA,CAAE,GACxBshD,IAAqBthD,KAErBuhD,IAAmB,CAAC/vC,GAAiBC,IAAY,OAAO;AAC5D,UAAI/Q,IAAS;AACF,aAAA8Q,EAAA,QAAQ,CAACxH,GAAWjI,MAAU;AACjC,cAAA,EAAE,OAAAxG,GAAO,MAAAsS,EAAS,IAAA7D;AACxB,QAAIA,EAAU,aACZtJ,KAAU,IAAI6gD,EAAiBv3C,EAAU,YAAYA,EAAU,IAAI,OAC1DzO,KAASsS,MAClBnN,KAAU,SAASmN,MAAStS,OAEpBmF,KAAA,GAAGqB,MAAUyP,EAAW,SAAS,IAAI,KAAKC,IAAO,MAAMA,IAAO,MAAM;AAAA,MAAA,CAC/E,GACM/Q;AAAA,IAAA,GAGH8gD,IAAO,CAACC,MAAyB;AACrC,MAAAJ,EAAM,QAAQ,IACdC,EAAmB,QAAQG;AAC3B,YAAM,EAAE,OAAOC,GAAU,eAAAC,GAAe,YAAAnwC,GAAY,WAAAoyB,EAAc,IAAA6d;AAClE,UAAIC;AACI,QAAAL,EAAA,QAAQhgD,GAAUqgD,CAAQ;AAAA,eAE5BC,GAAe;AACjB,cAAMC,IAAW,EAAE,eAAAD,GAAe,YAAAnwC,GAAY,WAAAoyB,GAAW,MAAM;AAC/D,QAAAyd,EAAM,MAAM,KAAKhgD,GAAUugD,CAAQ,CAAC,GACpC,OAAOH,EAAgB,eACvB,OAAOA,EAAgB,YACvB,OAAOA,EAAgB;AAAA;AAG3B,MAAAjgD,EAAQ,QAAQ;AAAA,IAAA,GAGZqgD,IAAQ,MAAM;AAClB,MAAArgD,EAAQ,QAAQ;AACL,iBAAAqM,KAAQwzC,EAAM;AACvB,YAAIxzC,EAAK,kBAAkB;AAAW,iBAAA;AAEnC,MAAAyC,EAAA,WAAW/Q,EAAM8hD,CAAK,CAAC;AAAA,IAAA,GAGxBS,IAAU,MAAM;AACpB,MAAAT,EAAM,MAAM,KAAK;AAAA,QACf,eAAe;AAAA,QACf,MAAM;AAAA,QACN,WAAW,CAAC;AAAA,QACZ,WAAW,CAAC;AAAA,MAAA,CACb;AAAA,IAAA,GAGGU,IAAiB,CAAChhD,MAAc;AAC/B,MAAAA,EAAA,gBAAgBwgD,EAAiBxgD,EAAK,UAAU,GACrD,OAAO,OAAOsgD,EAAM,MAAMv/B,EAAa,KAAK,GAAG/gB,CAAI;AAAA,IAAA,GAG/CihD,IAAgB,CAACC,GAAalgD,MAAkB;AAC9C,MAAAxC,EAAA2hD,CAAa,EAAE,aACTC,EAAA,QAAQ9/C,GAAU4gD,CAAM,GACpCngC,EAAa,QAAQ/f;AAAA,IAAA,GAEjBmgD,IAAa,CAACngD,MAAkB;AAAQ,MAAAs/C,EAAA,MAAM,OAAOt/C,GAAO,CAAC;AAAA,IAAA;AAC5D,WAAAjD,EAAA;AAAA,MACL,MAAA0iD;AAAA,IAAA,CACD,GAEM;AAAA,MACL,SAAAhgD;AAAA,MACA,aAAA2/C;AAAA,MACA,cAAAr/B;AAAA,MACA,eAAAs/B;AAAA,MACA,eAAAF;AAAA,MACA,OAAAG;AAAA,MACA,MAAAG;AAAA,MACA,OAAAK;AAAA,MACA,SAAAC;AAAA,MACA,eAAAE;AAAA,MACA,gBAAAD;AAAA,MACA,YAAAG;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;SCnKU7/C,EAAW,GAAAW,EAAAC,IAAA,MAAA;AAAA,IAAAtH,EAAkB4G,GAAO;AAAA,MAAA,OAAA;AAAA,MAAG,SAAOC,EAAM;AAAA,MAAG,oBAAoBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,UAAAI;AAAA,MAAG,OAAA;AAAA,MACpF,gBAAW;AAAA,MAAA,cAAA;AAAA;QAGX,QAAA;AAAA,QAAG,UAAI;AAAA,MAAA;AAAA;;MAEuB,SAAAH,EAAA,MAAA;AAAA,QAAA9G,EAAAoH,GAAA,EAAA,SAAAP,EAAA,QAAA,GAAA;AAAA,UAAA,SAAAC,EAAA,MAAA;AAAA;;UAC/B,GAAA;AAAA,QAAA,GAAS,IAAK,SAAC,CAAA;AAAA,QAAA9G,EAAoBwmD,GAAO;AAAA,UAAE,OAAO;AAAA,UAAkB,MAAA;AAAA,UAAqB,SAAQ3/C,EAAA;AAAA,UAC/F,eAAYA,EAAK;AAAA,UAAE,QAAQ,EAAR,GAAQ,QAAA,GAAA,IAAA;AAAA,UAAA,YAAA;AAAA,UACjB,UAAQ;AAAA,QAAA,GAAA;AAAA,yBAEf,QAAAgR,GAA4D,QAAAyuC,GAAA,OAAAlgD,EAAA,MAAA;AAAA,YAAAyR,EAAA,cAAA,UAAAnR,EAAA,GAAvCC,EAAAuE,GAAA;AAAA,cAAS,KAAK;AAAA,cAAA,MAAA;AAAA;;eAEf,MAAC,IAAS,SAAhC,gBAAA,CAAA,KAAAxD,EAAA,IAAA,EAAA;AAAA,YACEmQ,EAAA,cAA0E,iBAApD,GAAAxQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,cAAAtH,EAAOoH,GAAE;AAAA,gBAAA,MAAA;AAAA,gBAAgC,SAAA,CAAAH,MAAAJ,EAAA,cAAAy/C,GAAAlgD,CAAA;AAAA,cAAA,GAAA;AAAA;;;gBAC/D,GAAA;AAAA,cAAA,GAAU,MAAK,CAAO,SAAA,CAAA;AAAA,cAAApG,EAAOoH,GAAE;AAAA,gBAAmB,MAAwB;AAAA,gBAAA,SAAA,CAAAH,MAAAJ,EAAA,WAAAT,CAAA;AAAA,gBAAG,OAAA,EAAA,eAAA,MAAA;AAAA,cAAA,GAAA;AAAA;;;;;;;;;;MAKrF,GAAA;AAAA,IACE,GAAA,GAAG,CAAC,WAAe,MAAA,CAAA;AAAA,IAAApG,EACZymD,GAAW;AAAA,MACjB,KAAK;AAAA,MACL,MAAI5/C,EAAE;AAAA,MAAA,OAAAA,EAAA;AAAA;;;;qDC0IL4+C,KAAqB;AAAA,EACzB;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF,GAEAiB,KAAe7jD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,QACVwiD;AAAAA,IAAA,QACAtiD;AAAAA,IAAA,WACAkF;AAAAA,IAAA,QACAD;AAAAA,IAAA,cACAmF;AAAAA,IAAA,SACAlK;AAAAA,IAAA,eACAC;AAAAA,IACA,QAAAyjD;AAAA,IAAA,cACArmD;AAAAA,IACA,iBAAAsmD;AAAA,EACF;AAAA,EACA,QAAS;AACD,UAAAtxC,IAAoB/R,EAAOgS,EAAkB,GAC7CzR,IAAgBP,EAAOQ,EAAc,GAErCkoB,IAAe/nB;AAAA,MACnB,MAAA;;AAAM,gBAAC,GAACb,IAAAO,EAAM0R,CAAiB,MAAvB,QAAAjS,EAA0B;AAAA;AAAA,IAAA,GAE9BwjD,IAAe3iD,EAAS,MAAM;;AAClC,eAAOb,IAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,EAA0B,iBAAgB,CAAA;AAAA,IAAC,CACnD,GACKyjD,IAAaziD,EAAI,CAAA,CAAE;AACzB,QAAI0iD,IAAU,MACVC,IAAU;AACR,UAAAC,IAAa5iD,EAAY,EAAE,GAC3B6iD,IAAc7iD,EAAY,EAAE,GAC5B8iD,IAAgB9iD,EAAS,EAAK;AACpC,IAAA6B;AAAA,MACEpC;AAAA,MACA,MAAM;AACY,QAAAsjD;MAClB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA;AAEF,UAAMA,IAAkB,MAAM;;AAC5B,UAAI5uC,IAAU,CAAA;AAEV,UADJsuC,EAAW,QAAQ,IACd76B,EAAa,OAIX;AACL,cAAMo7B,MAAgB/4C,IAAA1K,EAAME,CAAa,MAAnB,gBAAAwK,EAAsB,kBAAiB,CAAA,GACvDkL,MAAajL,IAAA3K,EAAME,CAAa,MAAnB,gBAAAyK,EAAsB,eAAc,CAAA;AACvD,QAAAiK,IAAU,CAAC,GAAG6uC,GAAe,GAAG7tC,CAAU;AAAA,aAPnB;AACvB,cAAMC,MAAkBpW,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,oBAAmB,CAAA,GAC3DmW,MAAa/T,IAAA7B,EAAME,CAAa,MAAnB,gBAAA2B,EAAsB,eAAc,CAAA;AACvD,QAAA+S,IAAU,CAAC,GAAGiB,GAAiB,GAAGD,CAAU;AAAA;AAMtC,cAAA,IAAI,WAAWhB,GAASquC,CAAY,GACpCruC,EAAA,QAAQ,CAACX,MAAW;;AACtB,YAAAyvC,KAAcjkD,KAAAO,EAAMijD,CAAY,MAAlB,gBAAAxjD,GAAqB,KAAK,CAACsB,MAAcA,EAAK,UAAUkT,EAAO;AACjF,QAAKyvC,MACWA,IAAA;AAAA,UACZ,OAAOzvC,EAAO;AAAA,UACd,MAAMA,EAAO;AAAA,UACb,OAAO;AAAA,UACP,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,OAAO;AAAA,UACP,OAAO;AAAA,UACP,YAAY,CAAC;AAAA,UACb,gBAAgB;AAAA,UAChB,eAAe;AAAA;AAAA,YACb,KAAK;AAAA;AAAA,YACL,KAAK;AAAA;AAAA,UACP;AAAA,UACA,YAAY,CAAC;AAAA;AAAA,UACb,WAAW,CAAC;AAAA;AAAA,QAAA,IAGXyvC,EAAY,kBACfA,EAAY,gBAAgB;AAAA,UAC1B,KAAK;AAAA,UACL,KAAK;AAAA,QAAA,IAGER,EAAA,MAAM,KAAKQ,CAAW;AAAA,MAAA,CAClC,GACiBhyC,EAAA,MAAM,eAAewxC,EAAW;AAAA,IAAA;AAEpD,IAAAn1C,GAAU,MAAM;AACE,MAAAy1C;IAAA,CACjB;AAEK,UAAAG,IAAmB,CAACl1C,GAAKhN,MAAM;AAC/B,MAAAgN,EAAA,QAAQhN,EAAE,OAAO,SACjBgN,EAAI,QACFA,EAAI,eAAe,WACrBA,EAAI,aAAa,MAGnB,OAAOA,EAAI;AAAA,IACb,GAEIm1C,IAAa,CAAC7nD,GAAUF,GAAa6I,MAAkB;AAC3D,MAAI3I,KAAOF,MACCsnD,IAAApnD,GACAqnD,IAAAvnD,GACCwnD,EAAA,QAAQtnD,EAAIF,CAAG,KAAK,IAC/B0nD,EAAc,QAAQ,IACtBD,EAAY,QAAQ5+C;AAAA,IACtB,GAEIm/C,IAAiB,CAAClD,MAAiB;AACnC,UAAA;AACF,QAAA0C,EAAW,QAAQ1C;AAAA,eACZl/C;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEI0/C,IAAW,MAAM;AACrB,MAAIgC,KAAWC,MACLD,EAAAC,CAAO,IAAIC,EAAW,QAEhCA,EAAW,QAAQ,IACnBE,EAAc,QAAQ;AAAA,IAAA,GAGlB3B,IAAcnhD,KACd8hB,IAAe9hB,EAAI,CAAC,GACpBqjD,IAAqBrjD;AASpB,WAAA;AAAA,MAAA,eACLohD;AAAAA,MACA,YAAAqB;AAAA,MACA,aAAAI;AAAA,MACA,eAAAC;AAAA,MACA,YAAAF;AAAA,MACA,UAAAlC;AAAA,MACA,YAAAyC;AAAA,MACA,gBAAAC;AAAA,MACA,kBAAAF;AAAA,MACA,gBAlBqB,CAACnhD,MAAkB;AACxC,QAAA+f,EAAa,QAAQ/f,GACTo/C,EAAA,QAAQsB,EAAW,MAAM1gD,CAAK,GAC1CxC,EAAM8jD,CAAkB,EAAE,KAAKZ,EAAW,MAAM1gD,CAAK,CAAC;AAAA,MAAA;AAAA,MAgBtD,mBAdwB,CAACs/C,MAAe;AACxC,QAAAF,EAAY,MAAM,QAAQE;AAAA,MAAA;AAAA,MAc1B,oBAAAgC;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;sMC5YCjhD,EAsIM,kBAAA;AApIF,SAAAC,EAAoB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EACVwmD,GAAa;AAAA,MACtB,OAAA;AAAA,MACA,SAAQ3/C,EAAA;AAAA,MACR,eAAYA,EAAK;AAAA,MAClB,QAAQ,EAAR,GAAQ,QAAA,GAAA,IAAA;AAAA,MAAA,YAAA;AAAA,MAEG,UAAQ;AAAA,IAAA,GAAA;AAAA,qBAEf,QAAAgR,GAGc,MAAAoO,GAAA,QAAAqgC,GAAA,OAAAlgD,QAAA;AAAA,QAAAyR,EAAA,cAAA,WAAAnR,EAAA,KAFHkN,GAAuB;AAAA,UAC/B,KAAA;AAAA,UAAA,UAAA,CAAA3M,MAAAJ,EAAA,iBAAAy/C,GAAAr/C,CAAA;AAAA,UAGgB,SAAOq/C,EAAS;AAAA,QACnC,GAAA,MAAA,GAAA,CAAA,YAAA,SAA6C,CAAhB,KAAAzuC,EAAA,cAAA,WAAAnR,KAAMC,EAAMuE,GAAA;AAAA,UAAA,KAAA;AAAA;;UAEtB,gBAAgB,EAAA,MAAA,GAAA;AAAA,QAAA,GAAA,MAAA,GAAA,CAAA,SAArC,gBAUW,CAAA,KAAA2M,EATQ,cAAY,gBAAAnR,EAAA,GAAAW,EAA7BC,IAEW,EAAA,KAAA,KAAA;AAAA,UAAAg/C,EAAA,SAMT5/C,KAHqBC,EAAWuE,GAAA;AAAA,YAAA,KAAA;AAAA,YAC/B,OAAco7C,EAAA;AAAA,YACd,kBAAK,CAAEr/C,MAAAq/C,EAAW,aAAMr/C;AAAA,YAAA,UAAA;AAAA;UAGR,GAAO,MAAS,GAAA,CAAA,SAAA,kBAAA,SAAA,CAAA,MARxBP,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,cACX0D,GAKEib,CAAA,GAAA,CAAA;AAAA,UAAA,GAAA,EAAA;AAAA,QAGe,GAAA,EAAA,KAAApO,EAAA,cAAY,2BAA7BvQ,IAEW,EAAA,KAAA,EAAA,GAAA;AAAA,UAAAg/C,EAAA,SAGM5/C,KAAMC,EAACuE,GAAc;AAAA,YAAA,KAAA;AAAA,YACnC,OAAco7C,EAAA;AAAA,YACd,kBAAK,CAAEr/C,MAAAq/C,EAAW,iBAAMr/C;AAAA,YAAA,UAAA;AAAA;UAGR,GAAO,MAAS,GAAA,CAAA,SAAA,kBAAA,SAAA,CAAA,MARxBP,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,cACX0D,GAKEib,CAAA,GAAA,CAAA;AAAA,UAHe,GAAA,EAAA;AAAA,QAKkB,GAAA,EAAA,KAAApO,EAAA,cAAA,iBAAAnR,EAEd,GAAAC,EAAAa,GAAA;AAAA,UACnB,KAAI;AAAA,UACI,OAAO,EAAO,OAAA,OAAA;AAAA,UAAA,MAAA;AAAA;4BAEtB,CAAmDP,MAAAq/C,EAAA,cAAAr/C;AAAA,QAAA,GAAA;AAAA,UAAlB,SAAAH,EAAA,MAAA;AAAA,YAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cACjC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAkC9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAClC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAkC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;;;;UAGjB,GAAA;AAAA,QACnB,GAAA,MAAA,CAAA,SAAA,gBAQW,sCAPUH,EAAAa,GAAA;AAAA,UACnB,KAAI;AAAA,UACI,OAAO,SAAO,OAAK;AAAA,UAAA,MAAA;AAAA;4BAE3B,CAAmDP,MAAAq/C,EAAA,QAAAr/C;AAAA,QAAA,GAAA;AAAA,UAAlB,SAAAH,EAAA,MAAA;AAAA,YAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cACjC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAkC9G,EAAA2H,GAAA,EAAA,OAAA,SAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAClC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAkC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;;;;UAGjB,GAAA;AAAA,QACnB,GAAA,MAAA,CAAA,SAAA,gBAQW,sCAPUH,EAAAa,GAAA;AAAA,UACnB,KAAI;AAAA,UACI,OAAO,SAAO,OAAK;AAAA,UAAA,MAAA;AAAA;4BAE3B,CAA+CP,MAAAq/C,EAAA,QAAAr/C;AAAA,QAAA,GAAA;AAAA,UAAlB,SAAAH,EAAA,MAAA;AAAA,YAAA9G,EAAA2H,GAAA,EAAA,OAAA,GAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAC7B,GAAA;AAAA,YAAA,CAAA;AAAA,YAAgC9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAChC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAiC9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;;;;UAGhB,GAAA;AAAA,QACnB,GAAA,MAAA,CAAA,SAAA,gBAUW,CATM,KAAA+Q,EAAA,cAAA,gBAAAnR,KAAMC,EAAWa,GAAA;AAAA,UAAA,KAAA;AAAA,UAChC,OAAA8+C,EAAA;AAAA,UACA,kBAAe,CAAAr/C,MAAAq/C,EAAA,aAAAr/C;AAAA,UACf,OAAU,EAAA,OAAA,OAAA;AAAA,UACT,MAAA;AAAA,UAAA,YAAA;AAAA;;UAEiC,SAAAH,EAAA,MAAA;AAAA,YAAA9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAClC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAkC9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;cAClC,GAAA;AAAA,YAAA,CAAA;AAAA,YAAgC9G,EAAA2H,GAAA,EAAA,OAAA,IAAA,GAAA;AAAA,cAAA,SAAAb,EAAA,MAAA;AAAA;;;;;UAGf,GAAA;AAAA,QAAA,GAArB,MAAA,CAAA,SAAA,gBAAA,CAAA,KAAA+Q,EAEU,cAAiB,oBAIPnR,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,UAHDg/C,EAAA,cAAAA,EAAA,WAAA,SAAA,MAAA,KAAA5/C,EAAA,GAAMC,EAACoN,GAAc;AAAA,YAAA,KAAA;AAAA,YACnC,OAAMuyC,EAAA;AAAA,YACN,kBAAO,CAAAr/C,MAAAq/C,EAAA,iBAAAr/C;AAAA,YAAA,KAAA;AAAA;sDAGSS,EAAgB,IAAA,EAAA;AAAA,QAAA,GAAA,EAAA,KAAAmQ,EACnC,cAAsE,mBAAAnR,KAAzCW,EAAqBC,IAAG,EAAA,KAAA,EAAA,GAAA;AAAA,UAAxBtH,EAAA4T,GAAA;AAAA,YAAA,SAAA0yC,EAAA,cAAA;AAAA,YAA4B,oBAAA,CAAAr/C,MAAAq/C,EAAA,cAAA,MAAAr/C;AAAA,UAAA,GAAA;AAAA;;;YACzD,GAAA;AAAA,UAAoB,GAAA,MAAO,YAAS,kBAAiB,CAAA;AAAA,UAAxBjH,EAAA4T,GAAA;AAAA,YAAA,SAAA0yC,EAAA,cAAA;AAAA,YAA4B,oBAAA,CAAAr/C,MAAAq/C,EAAA,cAAA,MAAAr/C;AAAA,UAAA,GAAA;AAAA;;;;UAErC,GAAA,MAAO,CAAS,WAAA,kBAAA,CAAA;AAAA,QAAA,GAAA,EAAA,KAAA4Q,EAAA,cAAA,gBAAAnR,EACT,GAAAC,EAAAghD,GAAA;AAAA,UAAE,KAAA;AAAA,UAAA,OAAA;AAAA;;;MAInC,GAAA;AAAA,IACG,GAAA,GAAA,CAAK,WAAE,aAAW,CAAA;AAAA,IAAA3nD,EACF4G,GAAa;AAAA,MAAA,OAAAC,EAAA;AAAA,MAC9B,SAAAA,EAAA;AAAA,MACA,oBAAaG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,gBAAAI;AAAA,MACZ,oBAAW;AAAA,MAAA,OAAA;AAAA;QAGX,QAAA;AAAA,QACD,UAAQ;AAAA,MACP;AAAA,MACD,UAAO;AAAA,MACP,QAAA;AAAA,MACC,QAAI;AAAA,MAAA,YAAA;AAAA;;eAGEH,EAAC,MAAA;AAAA,QAAA9G,EACG4nD,GAAY;AAAA,UACpB,OAAO;AAAA,UAAA,UAAA;AAAA;YAGP,UAAA;AAAA,YACA,YAAW;AAAA,UAAA;AAAA;;;;MAIhB,GAAA;AAAA,IAAA,GACC,GAAS,CAAA,SAAA,WAAA,MAAA,CAAA;AAAA,IAAA5nD,EACN6nD,GAAoB;AAAA,MAAA,WAAAhhD,EAAA;AAAA;;;;uFChFtB4+C,KAAqB;AAAA,EACzB;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF,GAEAqC,KAAejlD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,QACVwiD;AAAAA,IAAA,cACAl4C;AAAAA,IAAA,SACAlK;AAAAA,IAAA,eACAC;AAAAA,IAAA,WACAgF;AAAAA,IAAA,gBACAC;AAAAA,EACF;AAAA,EACA,QAAS;AACD,UAAAmN,IAAoB/R,EAAOgS,EAAkB,GAC7CzR,IAAgBP,EAAOQ,EAAc,GACrCgkD,IAAc1jD,EAAc,CAAC,YAAY,CAAC,GAE1C+iD,IAAkB,MAAM;;AAC5B,YAAM5tC,MAAanW,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,eAAc,CAAA,GACjD2kD,IAAmB1yC,EAAkB,MAAM,oBAAoB,CAAA,GAC/DwH,IAAgB,EAAE,YAAY,CAAC,GAAG,gBAAgB,GAAG,GACrDmrC,IAAmBzuC,EAAW;AAAA,QAClC,CAAC85B,GAAQC,OAAY,EAAE,GAAGD,GAAG,CAACC,EAAE,KAAK,GAAG,EAAE,GAAGz2B,GAAe,GAAIkrC,EAAiBzU,EAAE,KAAK,KAAK;QAC7F,CAAC;AAAA,MAAA;AAEH,MAAAj+B,EAAkB,MAAM,mBAAmB2yC;AAAA,IAAA;AAE7C,IAAA/hD;AAAA,MACEpC;AAAA,MACA,MAAM;AACY,QAAAsjD;MAClB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA,GAEFz1C,GAAU,MAAM;AACE,MAAAy1C;IAAA,CACjB;AACD,UAAMY,IAAmB9jD,EAAS,MAAMoR,EAAkB,MAAM,oBAAoB,CAAA,CAAE;AAC/E,WAAA;AAAA,MACL,mBAAAA;AAAA,MACA,eAAAmwC;AAAA,MACA,eAAA3hD;AAAA,MACA,kBAAAkkD;AAAA,MACA,aAAAD;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;+HChICthD,EAqCa,YAAA;;;IADQ,sBAAAO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAAI;AAAA,EAAA,GAAA;AAAA,aAnCGH,EAAY,MAAA;AAAA,MAAA9G,EAAQqL,GAAO;AAAA,QAAA,KAAA;AAAA;;iBAExCvE,EAAC,MAAA;AAAA,UAAA9G,EACIwmD,GAAa;AAAA,YACtB,OAAA;AAAA,YACA,SAAQ3/C,EAAA;AAAA,YACR,eAAYA,EAAK,cAAA,cAAA,CAAA;AAAA,YAClB,QAAQ,EAAR,GAAQ,QAAA,GAAA,IAAA;AAAA,YAAA,YAAA;AAAA,YAEG,UAAQ;AAAA,UAAA,GAAA;AAAA,2BAEf,QAAAgR,GAUW,QAAAyuC,EAAA,MAAA;AAAA,cAAAzuC,EAAA,cAAA,gBAAAhR,EAAA,iBAAAy/C,EAAA,KAAA,KAAA5/C,KATqCC,EAAAa,GAAA;AAAA,gBAAA,KAAA;AAAA,gBAC9C,OAAmBX,EAAA,iBAAAy/C,EAAA,KAAA,EAAA;AAAA,gBACnB,kBAAe,CAAAr/C,MAAAJ,EAAA,iBAAAy/C,EAAA,KAAA,EAAA,aAAAr/C;AAAA,gBACf,OAAU,EAAA,OAAA,OAAA;AAAA,gBACT,MAAA;AAAA,gBAAA,YAAA;AAAA;;gBAEiC,SAAAH,EAAA,MAAA;AAAA,kBAAA9G,EAAA2H,GAAA,EAAA,OAAA,QAAA,GAAA;AAAA,oBAAA,SAAAb,EAAA,MAAA;AAAA;;oBAClC,GAAA;AAAA,kBAAA,CAAA;AAAA,kBAAkC9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,oBAAA,SAAAb,EAAA,MAAA;AAAA;;oBAClC,GAAA;AAAA,kBAAA,CAAA;AAAA,kBAAgC9G,EAAA2H,GAAA,EAAA,OAAA,IAAA,GAAA;AAAA,oBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;gBAGf,GAAA;AAAA,cAAA,GAArB,MAAA,CAAA,SAAA,gBAAA,CAAA,KAAA+Q,EAAA,cAAA,oBAAAhR,EAAA,iBAAAy/C,EAAA,KAAA,KAE4B5/C,OAA+BY,IAAc,EAAA,KAAA,KAAA;AAAA,gBADvET,EAAA,iBAAAy/C,EAAA,KAAA,EAAA,cAOkBz/C,6DAH8B,GAAAF,EAAAoN,GAAA;AAAA,kBAAA,KAAA;AAAA,kBAC7C,OAAMlN,EAAA,iBAAAy/C,EAAA,KAAA,EAAA;AAAA,kBACN,kBAAO,CAAAr/C,MAAAJ,EAAA,iBAAAy/C,EAAA,KAAA,EAAA,iBAAAr/C;AAAA,kBAAA,KAAA;AAAA;;;;;;;;;;;;;uFCuFtBihD,KAAerlD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,eAAe;AAAA;AAAA,MAEb,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAAslD;AAAA,IACA,mBAAAC;AAAA,IACA,QAAAzB;AAAA,IAAA,WACArqC;AAAAA,IAAA,SACArZ;AAAAA,IAAA,eACAC;AAAAA,IAAA,WACAgF;AAAAA,IAAA,gBACAC;AAAAA,IAAA,SACAo9B;AAAAA,IACA,oBAAA8iB;AAAA,EACF;AAAA,EACA,MAAOC,GAAW;AACV,UAAAP,IAAc1jD,EAAc,CAAA,CAAE,GAC9BkkD,IAAalkD,EAAc,CAAC,IAAI,CAAC,GACjC69C,IAAgB3+C,EAAO4+C,EAAc,GAGrCqG,IAAejlD,EAAOklD,EAAa,GACnCrG,IAAsB7+C,EAAO8+C,EAAqB,GAClDC,IAAqB/+C,EAAOg/C,EAAoB,GAChDmG,IAAcnlD,EAAOolD,EAAY,GACjCrzC,IAAoB/R,EAAOgS,EAAkB,GAC7CqzC,IAAmB,CAAC/zC,MAAgB;AACxC,MAAAutC;AAAA,QACE;AAAA,UACE,GAAGyG,GAASh0C,CAAG;AAAA,QACjB;AAAA,QACA;AAAA,MAAA,GAEFjR,EAAM0R,CAAiB,EAAE,OAAO1R,EAAM+J,CAAI,GAC9B+6C;IAAA,GAER/6C,IAAOzJ,EAAS,MAAA;;AAAM,cAAAb,IAAAO,EAAMs+C,CAAa,MAAnB,gBAAA7+C,EAAsB;AAAA,KAAI,GAChDylD,IAAkB,CAAC,iBAAiB,aAAa,WAAW,GAC5DC,IAAoB7kD,EAA4B,MAC7C4oB,GACJ,IAAI,CAACk8B,MAA2B;AAC/B,YAAM,EAAE,OAAAnpD,GAAO,OAAAyI,GAAO,aAAA2gD,GAAa,UAAAz7B,GAAU,aAAA21B,GAAgB,IAAA6F,GACvDE,IAAY,CAAA;AACZ,MAAArpD,EAAA,QAAQ,CAAC2jD,MAAS;AAClB,QAAA,OAAOA,KAAS,aACdsF,EAAgB,SAAStF,CAAI,IAC3B8E,EAAU,gBACZY,EAAU,KAAK1F,CAAI,IAGrB0F,EAAU,KAAK1F,CAAI;AAAA,MAEvB,CACD;AACD,UAAI2F,IAAmBC;AACvB,aAAId,EAAU,kBAAkB,YAAW96B,KAAA,QAAAA,EAAU,SAAS86B,EAAU,mBAEpEa,KAAA,OAAOF,KAAgB,YAAYT,EAAa,QAC3CA,EAAa,MAAMS,CAAW,IAC/B,QACNG,IAAcC,GAAKzlD,EAAM4kD,CAAY,GAAGU,CAAS,MAG/CC,KAAA,OAAOF,KAAgB,YAAY/G,EAAc,QAC5CA,EAAc,MAAM+G,CAAW,IAChC,QACNG,IAAcC,GAAKzlD,EAAMs+C,CAAa,GAAGgH,CAAS,IAE7C;AAAA,QACL,OAAA5gD;AAAA,QACA,aAAa6gD;AAAA,QACb,iBAAiBF;AAAA,QACjB,UAAAz7B;AAAA,QACA,aAAA21B;AAAA,QACA,OAAOiG;AAAA,MAAA;AAAA,IAEV,CAAA,EACA,OAAO,CAAC,EAAE,OAAAvpD,QACF,OAAO,KAAKA,CAAK,EAAE,SAAS,CACpC,CACJ,GACKypD,IAAe,CAACC,GAAoCC,MAA0B;AAC5E,YAAA,EAAE,UAAAh8B,GAAU,aAAA21B,EAAgB,IAAAoG;AAC9B,aAAA/7B,KAAY,QAAQ21B,KAAe,OAC9B,KACE31B,IACF/P,GAAkB+rC,GAAeh8B,CAAQ,IACvC21B,IACF,CAAC1lC,GAAkB+rC,GAAerG,CAAW,IAE/C;AAAA,IAAA,GAEHsG,IAAgB,CAACC,GAAoC5/C,OACzDA,KAAA,QAAAA,EAAO,mBACA4/C,IAEHC,IAAiB,CAAC/pD,GAAYH,MAA4B;AAC9D,MAAIA,KAAO,QACW2iD,EAAA;AAAA,QAClB,CAAC3iD,CAAG,GAAGG;AAAA,MAAA,CACR;AAAA,IACH,GAEIgqD,IAAkB1lD,EAAS,MAAM,KAAK,UAAUN,EAAMs+C,CAAa,GAAG,MAAM,CAAC,CAAC,GAC9E2H,IAAyB,CAACtF,MAAiB;AAC3C,UAAA;AACF,cAAM1kD,IAAQ,KAAK,MAAM0kD,KAAQ,IAAI;AACrC,QAAAnC,EAAoBviD,GAAO,EAAK;AAAA,eACzBwF;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEI4hD,IAAa5iD,EAAI,EAAE,GACnBojD,IAAiB,CAAClD,MAAiB;AACnC,UAAA;AACF,QAAA0C,EAAW,QAAQ1C;AAAA,eACZl/C;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEIykD,IAAoB,CAACvF,GAAc9kD,MAAQ;AAC3C,UAAA;AACiB,QAAA6iD,EAAA;AAAA,UACjB,CAAC7iD,CAAG,GAAG8kD;AAAA,QAAA,CACR;AAAA,eACMl/C;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA,GAEI0kD,IAAqB7lD,EAAS,MAAM;;AAAA,cAAC,aAAa,EAAE,UAASb,IAAAO,EAAMs+C,CAAa,MAAnB,gBAAA7+C,EAAsB,IAAI;AAAA,KAAC;AACvF,WAAA;AAAA,MACL,MAAAsK;AAAA,MACA,kBAAAi7C;AAAA,MACA,aAAAb;AAAA,MACA,YAAAQ;AAAA,MACA,iBAAAqB;AAAA,MACA,wBAAAC;AAAA,MACA,cAAArB;AAAA,MACA,YAAAvB;AAAA,MACA,gBAAAQ;AAAA,MACA,mBAAAqC;AAAA,MACA,eAAAL;AAAA,MACA,gBAAAE;AAAA,MACA,mBAAAZ;AAAA,MACA,cAAAO;AAAA,MACA,oBAAAS;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;yNCpRCtjD,EAyFM,qBAAA;cAxFJY,EAuCW,OAAAd,IAAA;AAAA,IAtCTM,EAAA,kBAQc,+BARW,UAOZH,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,MAAAtH,EANXme,GAMW,EAAA,OAAA,OAAA,GAAA;AAAA,QAAA,SANYrX,EAAE,MAAI;AAAA,UAAA9G,EAAAwH,GAAA;AAAA,YAAE,OAAAX,EAAA;AAAA,YAAqB,kBAAQG,EAAgB,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,OAAAI;AAAA,YAAA,OAAA,EAAA,OAAA,OAAA;AAAA;;YACzC,SAAAH,EAAA,MAAA;AAAA,cAAA9G,EAAA2H,GAAA,EAAA,OAAA,OAAA,GAAA;AAAA,gBAAA,SAAAb,EAAA,MAAA;AAAA;;gBACjC,GAAA;AAAA,cAAA,CAAA;AAAA,cAAgC9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,gBAAA,SAAAb,EAAA,MAAA;AAAA;;gBAChC,GAAA;AAAA,cAAA,CAAA;AAAA,cAA+B9G,EAAA2H,GAAA,EAAA,OAAA,MAAA,GAAA;AAAA,gBAAA,SAAAb,EAAA,MAAA;AAAA;;gBAC/B,GAAA;AAAA,cAAA,CAAA;AAAA,cAAwC9G,EAAA2H,GAAA,EAAA,OAAA,aAAA,GAAA;AAAA,gBAAA,SAAAb,EAAA,MAAA;AAAA;;gBACxC,GAAA;AAAA,cAAA,CAAA;AAAA,cAA0C9G,EAAA2H,GAAA,EAAA,OAAA,cAAA,GAAA;AAAA,gBAAA,SAAAb,EAAA,MAAA;AAAA;;;;;;;;QAG9C,GAAA;AAAA,MAAA,CAAA;AAAA;;QACyD,sBAAAE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAAI;AAAA,MAAA,GAAA;AAAA;aAAO,EAAsB,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,mBAAA,CAAA0iD;iBAClEA,EAAa;AAAA,UAAA,GAAA;AAAA,YAGnB1iD,EAAA,aAAA0iD,GAAsB1iD,EAgBX,IAAA,KAAAH,EAAA,GAAAW,EAAAC,IAAA,EAAA,KAAA,EAAA,GAAA;AAAA,cAfRiiD,EAAA,SAAA7iD,OACc2E,GAAK;AAAA,gBAAA,QAAAk+C,EAAA;AAAA,gBAEjB,KAAKA,EAMZ;AAAA,cAAA,GAAA;AAAA,gBALF,OAAAziD,EAAA,MAAA;AAAA,kBAAA,OAAAyiD,EAAA,eAAA,aAAA7iD,OAE6B8+B,GAAW;AAAA,oBACrC,KAAA;AAAA,oBACA,SAAO+jB,EAAA;AAAA,oBAAA,UAAA,CAAAtiD,MAAAJ,EAAA,eAAAI,GAAAsiD,EAAA,eAAA;AAAA;kBAMV,GAAA,MAAA,GAAA,CAAA,WAAA,YAAA,SAAA,CAAA,KAAA7hD,EAAA,IAAA,EAAA;AAAA,gBAAA,CAAA;AAAA,yBAFMZ,EAAE,MAAA;AAAA,kBAAA9G,EACCgqD,GAA0B;AAAA,oBAAA,OAAAT,EAAA;AAAA;;;;;;UAMsB,GAAA,EAAA,EAAA,GAAA,GAAA;AAAA,UAA/C1iD,EAAA,sBAAAH,KAAwCC,EAAA0E,GAAA;AAAA,YAAA,KAAA;AAAA;;qBAC3CvE,EAAC,MAAA;AAAA,cAAA9G,EAAyB4nD,GAAY;AAAA,gBAAE,OAAA;AAAA,gBAAwB,UAAQ;AAAA,gBAAA,WAAA/gD,EAAA;AAAA;;;;;;;;IAI3E,GAAA,EAAA,KAAAa,EACd,IA0Ca,EAAA;AAAA,IAAAb,EAAA,kBAAA,WAAAH,EAAA,GA1CkBC,EAAUyE,GAAA;AAAA,MAAA,KAAA;AAAA;MACgB,sBAAApE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAAI;AAAA,IAAA,GAAA;AAAA;WAAO,EAAsB,GAAAI,EAAAC,IAAA,MAAAC,GAAAV,EAAA,mBAAA,CAAA0iD,MAAA;;;iBAG1EA,EAAiB;AAAA,UAAA,GAAA;AAAA,cACd,WAAsBlmD,IAAAkmD,EAAA,aAAA,QAAAlmD,EAAA,SAAAwD,EAAA,mBAAAH,OACR2E,GAAK;AAAA,cAAA,QAAAk+C,EAAA;AAAA,cAM1B,KAAAA,EAAA;AAAA,YAAA,GAAA;AAAA,cAHC,SAAAziD,EAAa,MAAE;AAAA,gBAAA9G,EACRgqD,GAAsB;AAAA,kBAC7B,eAAQnjD,EAAS;AAAA,kBAAA,OAAA0iD,EAAA;AAAA;;;;;UAIxB,GAAA,EAAA;AAAA,QAAA,CAAA,GAAkB,GAAI;AAAA,QAAAvpD,EAAqBqL,GAAO;AAAA,UAAA,KAAA;AAAA;;;;;UAGlD,GAAA;AAAA,QAAA,CAAA;AAAA,UAAqDA,GAAS;AAAA,UAAA,KAAA;AAAA;;mBAErDvE,EAAC,MAAA;AAAA,YAAA9G,EACG4nD,GAAY;AAAA,cACpB,OAAO;AAAA,cAAA,UAAA;AAAA;gBAGP,UAAA;AAAA,gBACA,YAAA;AAAA,cAAA;AAAA;;;;UAIL,GAAA;AAAA,QAAA,CAAA;AAAA,UAA8Cv8C,GAAK;AAAA,UAAA,KAAA;AAAA;;mBAE1CvE,EAAC,MAAA;AAAA,YAAA9G,EACG4nD,GAAY;AAAA,cACpB,OAAO;AAAA,cAAA,UAAA;AAAA;gBAGP,UAAA;AAAA,gBACA,YAAA;AAAA,cAAA;AAAA;;;;;;;;IAMO,GAAA,GAAA,CAAA,WAAa,QAC3B,IAA2C,EAAA;AAAA,IAAA/gD,EAAA,kBAAA,UAAAH,EAAA,GAAAC,EAAAsjD,GAAA,EAAA,KAAA,EAAA,CAAA,KAAAviD,EAAA,IAAA,EAAA;AAAA;;uFCmCjDwiD,KAAernD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,eACV1C;AAAAA,IAAA,QACA6H;AAAAA,IAAA,SACA/E;AAAAA,IAAA,cACA5B;AAAAA,IAAA,WACAsL;AAAAA,IAAA,OACAC;AAAAA,IAAA,WACAC;AAAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,UAAU,QAAQ;AAAA,EAC1B,MAAOhN,GAAO;AACN,UAAA4D,IAAuBF,EAAOG,EAAsB,GACpD8R,IAAsBjS,EAAOkS,EAAqB,GAClD0X,IAAoB5pB,EAAO4mD,EAAmB,GAC9CC,IAAe7mD,EAAO8mD,EAAc,GACpC,EAAE,iBAAAC,GAAiB,iBAAAC,GAAiB,kBAAAC,EAAiB,IAAIjnD,EAAO,kBAAkB;AAAA;AAAA,MAEtF,iBAAiB,CAACknD,MAAiC;AAAA;AAAA;AAAA,MAEnD,iBAAiB,CAACA,MAAiC;AAAA;AAAA;AAAA,MAEnD,kBAAkB,CAACr6C,GAAeD,GAAgBE,MAAuB;AAAA;AAAA,IAAA,CAC1E,GACK7L,IAAoBN,EAAS,MAAM;;AACvC,cAAOb,IAAAO,EAAMH,CAAoB,MAA1B,gBAAAJ,EAA6B,OAAO,CAACoB,MACnCA,EAAc,YAAY;AAAA,IAClC,CACF,GACKmJ,IAAiB1J,EAAS,MAAM;AACpC,YAAMwmD,IAAe,CAAA;AACjB,aAAC9mD,EAAMwmD,CAAY,KACrBM,EAAa,KAAK;AAAA,QAChB,SAAS;AAAA,QACT,IAAI;AAAA,MAAA,CACL,GAEI;AAAA,QACL,GAAGA;AAAA,QACH,GAAG9mD,EAAMY,CAAiB;AAAA,MAAA;AAAA,IAC5B,CACD,GACKmmD,IAAczmD,EAAS,MAAM;;AACjC,YAAM2L,IAA8C,CAAA,GAC9CyH,KAAYjU,IAAAO,EAAMY,CAAiB,MAAvB,gBAAAnB,EAA0B,KAAK,OAAiB;;AAAA,eAAAoB,EAAc,SAAOpB,KAAAxD,EAAM,YAAN,gBAAAwD,GAAe;AAAA;AACtG,UAAIiU,GAAW;AACb,cAAM3J,IAAO2J,EAAU,MACjB4xC,KAAYG,GAAK/xC,GAAW,CAAC,SAAS,aAAa,SAAS,CAAC;AACnE,SAAK7R,IAAA,OAAO,KAAKyjD,EAAS,MAArB,QAAAzjD,EAAwB,WAC3ByjD,GAAU,QAAQ;AAEpB,mBAAW1F,MAAQ0F;AACjB,cAAI,OAAO,UAAU,eAAe,KAAKA,IAAW1F,EAAI,GAAG;AACzD,kBAAMd,KAAmB9+C,EAAMupB,CAAiB,EAAEq2B,EAAI;AAClD,gBAAA,MAAM,QAAQd,EAAgB,GAAG;AAC7B,oBAAAkI,KAAWlI,GAAiB,KAAK,CAAA/9C,OAAQ8Y,GAAkB9P,GAAMhJ,GAAK,QAAQ,CAAC;AACrF,cAAIimD,MACF/6C,EAAQ,KAAK;AAAA,gBACX,OAAO+6C,GAAS;AAAA,gBAChB,OAAOpH;AAAA,cAAA,CACR;AAAA;AAGH,cAAA3zC,EAAQ,KAAK;AAAA,gBACX,OAAO6yC,GAAiB;AAAA,gBACxB,OAAOc;AAAA,cAAA,CACR;AAAA;AAAA;AAKF,aAAA3zC;AAAA,IAAA,CACR,GACKS,IAAW,MAAM;AACL,MAAAi6C,EAAA;AAAA,QACd,OAAO1qD,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb,GAEWgrD,EAAAhrD,EAAM,QAAQ,EAAE;AAAA,IAAA,GAGxB6kD,IAAqB,CAAC,EAAE,KAAAjlD,QAAU;AACtC,MAAA+qD,EAAiB3qD,EAAM,MAAMA,EAAM,OAAOJ,MAAQ,MAAM,OAAO,IAAI;AAAA,IAAA;AAIrE,aAASorD,EAAaj/C,GAAY;AAC1B,YAAA0L,IAAY1T,EAAMY,CAAiB,EAAE,KAAK,CAAQG,MAAAA,EAAK,OAAOiH,CAAE;AACtE,UAAI0L,GAAW;AACb,cAAM,EAAE,MAAA3J,GAAM,IAAA/B,GAAI,QAAA2L,IAAS,CAAA,EAAO,IAAAD,GAC5BxN,KAAQ0N,GAAa7J,CAAI,GACzBvH,KAAQmR,EAAO,UAAU,CAAC5S,OAC9B;;AAAA,iBAAAA,GAAK,OAAOmF,MAASnF,GAAK,aAAWtB,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B,OAAMsB,GAAK,SAAS;AAAA,SAAa;AAClG,QAAIyB,OAAU,OACLmR,EAAA,OAAOnR,IAAO,CAAC,GACFoP,EAAA;AAAA,UAClB,IAAA5J;AAAAA,UACA,QAAA2L;AAAA,QAAA,CACD;AAAA;AAAA,IAGP;AAEM,UAAAuzC,IAAa,CAAClrD,MAAkB;AACpC,YAAMmrD,IAAU,EAAE,GAAGlrD,EAAM,QAAQ;AAGnC,UAFAkrD,EAAQ,KAAKnrD,GACbmrD,EAAQ,cAAc,IAClBnrD,GAAO;AACH,cAAA0X,IAAY1T,EAAMY,CAAiB,EAAE,KAAK,CAAQG,MAAAA,EAAK,OAAO/E,CAAK;AACzE,QAAI0X,MACFyzC,EAAQ,UAAUzzC,EAAU,SAE5B0zC,EAAU1zC,GAAW1X,CAAK;AAAA;AAG9B,aAAOmrD,EAAQ,MACCT,EAAA;AAAA,QACd,SAAAS;AAAA,QACA,OAAOlrD,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGorD,IAAU5mD,EAAI,EAAE,GAChB6mD,IAAY,MAAM;AACd,MAAAD,EAAA,QAAQprD,EAAM,QAAQ;AAAA,IAAA,GAG1BsrD,IAAe,CAACvrD,MAAkB;AACtB,MAAA0qD,EAAA;AAAA,QACd,SAAS;AAAA,UACP,GAAGzqD,EAAM;AAAA,UACT,MAAMD;AAAA,QACR;AAAA,QACA,OAAOC,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGurD,IAAqB,CAAC/lD,MAAW;AACrB,MAAAilD,EAAA;AAAA,QACd,SAAS;AAAA,UACP,GAAGzqD,EAAM;AAAA,UACT,MAAMwF,EAAE,OAAO;AAAA,QACjB;AAAA,QACA,OAAOxF,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGuR,IAAe,CAACxR,MAAkB;AACtB,MAAA0qD,EAAA;AAAA,QACd,SAAS;AAAA,UACP,GAAGzqD,EAAM;AAAA,UACT,MAAMD;AAAA,QACR;AAAA,QACA,OAAOC,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGwR,IAAmB,CAACzR,MAAkB;AAC1C,YAAMmrD,IAAU,EAAE,GAAGlrD,EAAM,QAAQ;AACnC,MAAIkrD,EAAQ,aACVA,EAAQ,WAAW,KAEjBA,EAAQ,SACVA,EAAQ,OAAO,KAEbA,EAAQ,WACVA,EAAQ,SAAS,KAEHT,EAAA;AAAA,QACd,SAAS;AAAA,UACP,GAAGS;AAAA,UACH,UAAUnrD;AAAA,UACV,aAAa;AAAA,UACb,IAAI;AAAA,UACJ,SAAS;AAAA,QACX;AAAA,QACA,OAAOC,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGwrD,IAAsB,CAAChmD,MAAW;AACtB,MAAAilD,EAAA;AAAA,QACd,SAAS;AAAA,UACP,GAAGzqD,EAAM;AAAA,UACT,aAAawF,EAAE,OAAO;AAAA,QACxB;AAAA,QACA,OAAOxF,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGyrD,IAAe,CAAC1rD,MAAkB;AACtC,YAAMmrD,IAAU,EAAE,GAAGlrD,EAAM,QAAQ;AACnC,MAAID,KAAS,OACX,OAAOmrD,EAAQ,OAEfA,EAAQ,OAAOnrD,GAEjB,OAAOmrD,EAAQ,gBACf,OAAOA,EAAQ,eACf,OAAOA,EAAQ,cACf,OAAOA,EAAQ,oBACCT,EAAA;AAAA,QACd,SAAAS;AAAA,QACA,OAAOlrD,EAAM;AAAA,QACb,MAAMA,EAAM;AAAA,MAAA,CACb;AAAA,IAAA,GAGGyV,IAAoB/R,EAAOgS,EAAkB,GAC7CzR,IAAgBP,EAAOQ,EAAc;AAElC,aAAAinD,EAAW1zC,GAAgB1X,GAAe;;AACjD,YAAM,EAAE,MAAA+N,GAAM,IAAA/B,GAAI,QAAA2L,IAAS,OAAOD,GAC5BxN,KAAQ0N,GAAa7J,CAAI;AAE/B,MAAI/J,EAAMqnD,CAAO,KAAKrrD,MAAUgE,EAAMqnD,CAAO,MACvBp0C,KAAcxT,KAAAO,EAAME,CAAa,MAAnB,gBAAAT,GAAsB,gBAAe,CAAA,CAAE,EACxD,KAAK,CAACwB,OAAWA,GAAE,OAAOjB,EAAMqnD,CAAO,CAAC,KAC3CJ,EAAAjnD,EAAMqnD,CAAO,CAAC,IAGzB1zC,EAAO,KAAK,CAAC5S,OAAA;;AAChB,eAAAA,GAAK,OAAOmF,MAASnF,GAAK,aAAWtB,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B,OAAMsB,GAAK,SAAS;AAAA,OAAa,KAC5E6Q,EAAA;AAAA,QAClB,IAAA5J;AAAA,QACA,QAAQ,CAAC,GAAG2L,GAAQ;AAAA,UAClB,IAAIzN;AAAA,UACJ,SAAQrE,KAAA7B,EAAM0R,CAAiB,MAAvB,gBAAA7P,GAA0B;AAAA,UAClC,MAAM;AAAA,QACP,CAAA,EAAE,QAAQ;AAAA,MAAA,CACZ;AAAA,IAEL;AAEM,UAAA8lD,IAAuB,CAAC3rD,GAAe0G,MAAiC;AAC5E,UAAI1G,GAAO;AACH,cAAA,EAAE,OAAA2F,GAAO,MAAAC,GAAM,IAAAoG,GAAI,aAAA4E,IAAa,WAAAG,IAAW,UAAAD,IAAU,cAAAE,GAAA,IAAiBtK,KAAU,IAChFklD,KAAqB;AAAA,UACzB,GAAG3rD,EAAM;AAAA,UACT,cAAc+L;AAAA,UACd,gBAAgBrG;AAAA,UAChB,eAAeC;AAAA,UACf,oBAAoBgL;AAAA,UACpB,WAAAG;AAAA,UACA,UAAAD;AAAA,UACA,cAAAE;AAAA,QAAA;AAEF,QAAK4Y,GAAOgiC,IAAe,MAAM,MAC/BA,GAAc,OAAO,UAElBhiC,GAAOgiC,IAAe,UAAU,MACnCA,GAAc,WAAW,cAEXlB,EAAA;AAAA,UACd,SAASkB;AAAA,UACT,OAAO3rD,EAAM;AAAA,UACb,MAAMA,EAAM;AAAA,QAAA,CACb;AAAA,aACI;AACL,cAAMkrD,IAAU,EAAE,GAAGlrD,EAAM,QAAQ;AACnC,eAAOkrD,EAAQ,gBACf,OAAOA,EAAQ,eACf,OAAOA,EAAQ,cACf,OAAOA,EAAQ,oBACCT,EAAA;AAAA,UACd,SAAAS;AAAA,UACA,OAAOlrD,EAAM;AAAA,UACb,MAAMA,EAAM;AAAA,QAAA,CACb;AAAA;AAAA,IACH,GAGIuY,KAAiB,CAACC,GAAoB/R,MAAiC;;AAC3E,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,YAAR,gBAAAjD,EAAiB,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa,GAGpEjF,IAAe,CAACiF,GAAoB/R,MAAiC;;AACzE,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,UAAR,gBAAAjD,EAAe,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa,GAGlEozC,KAAavnD,EAAS,MAAM;AAC1B,YAAA9E,IAASS,EAAM,iBAAiB,KAAK,OAAKgF,EAAE,OAAOhF,EAAM,QAAQ,YAAY;AACnF,UAAI8N,IAAO;AAIP,aAHAvO,MACFuO,KAAOvO,KAAA,gBAAAA,EAAQ,gBAAe,KAE5BuO,MAAS,UAAUA,MAAS,MACvB;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,QAC3B,EAAE,OAAO,OAAO,OAAO,SAAS;AAAA,QAChC,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,OAAO,OAAO,WAAW;AAAA,QAClC,EAAE,OAAO,OAAO,OAAO,QAAQ;AAAA,QAC/B,EAAE,OAAO,OAAO,OAAO,QAAQ;AAAA,QAC/B,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,MAAA,IAEjCA,MAAS,YAAYA,MAAS,MAChC;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,MAAA,IAE5BA,MAAS,UAAUA,MAAS,MAC9B;AAAA,QACL,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,QAC3B,EAAE,OAAO,OAAO,OAAO,SAAS;AAAA,QAChC,EAAE,OAAO,MAAM,OAAO,OAAO;AAAA,QAC7B,EAAE,OAAO,QAAQ,OAAO,aAAa;AAAA,QACrC,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,MAAA,IAG9B;IACT,CACD,GAEK6Q,IAAiB,CAAC;AAAA,MACtB,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,GACN;AAAA,MACD,OAAO;AAAA,MACP,OAAO;AAAA,IAAA,CACR,GAEKktC,IAAkBxnD,EAAS,MAAM;AACrC,UAAIa,IAAS;AACb,YAAM,EAAE,IAAA6G,IAAK,IAAI,UAAAyD,IAAW,gBAAgBxP,EAAM;AAC9C,UAAA+L,KAAMyD,MAAa,aAAa;AAC5B,cAAAjQ,IAASwE,EAAMY,CAAiB,EAAE,KAAK,CAACK,OAAWA,GAAE,OAAO+G,CAAE,GAC9D+/C,IAAe,CAAC,SAAS,OAAO,cAAc,QAAQ,OAAO,SAAS,WAAW,QAAQ,WAAW;AAC1G,QAAIluC,GAAkBre,KAAA,gBAAAA,EAAQ,MAAMusD,CAAY,MACrC5mD,IAAA;AAAA;AAGb,aAAI6G,MAAO,aAEA7G,IAAA,KAEJA;AAAA,IAAA,CACR,GAEK6mD,IAAa1nD,EAAS,MAAM;AAChC,UAAIa,IAAS;AACb,YAAM,EAAE,IAAA6G,IAAK,IAAI,UAAAyD,IAAW,gBAAgBxP,EAAM;AAC9C,UAAA+L,KAAMyD,MAAa,aAAa;AAC5B,cAAAjQ,IAASwE,EAAMY,CAAiB,EAAE,KAAK,CAACK,MAAWA,EAAE,OAAO+G,CAAE;AACpE,QAAI6R,IAAkBre,KAAA,gBAAAA,EAAQ,SAAQ,IAAI,OAAO,MACtC2F,IAAA;AAAA;AAGb,aAAI6G,MAAO,aAEA7G,IAAA,KAEJA;AAAA,IAAA,CACR,GAEK6Z,IAAe1a,EAAS,MAAM;AAClC,UAAIa,IAAS;AACb,YAAM,EAAE,IAAA6G,IAAK,IAAI,UAAAyD,IAAW,gBAAgBxP,EAAM;AAC9C,UAAA+L,KAAMyD,MAAa,aAAa;AAC5B,cAAAjQ,IAASwE,EAAMY,CAAiB,EAAE,KAAK,CAACK,MAAWA,EAAE,OAAO+G,CAAE;AAEhE,QAAA6R,IAAkBre,KAAA,gBAAAA,EAAQ,SAAQ,IAAI,CAAC,QAAQ,OAAO,CAAC,MAChD2F,IAAA;AAAA;AAGN,aAAAA;AAAA,IAAA,CACR;AAiCM,WAAA;AAAA,MACL,aAAA4lD;AAAA,MACA,mBAAAnmD;AAAA,MACA,UAAA8L;AAAA,MACA,YAAAw6C;AAAA,MACA,WAAAI;AAAA,MACA,cAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,cAAAE;AAAA,MACA,cAAAl6C;AAAA,MACA,kBAAAC;AAAA,MACA,qBAAAg6C;AAAA,MACA,sBAAAE;AAAA,MACA,gBAAAnzC;AAAA,MACA,cAAAhF;AAAA,MACA,gBArCqB,CAACxT,MAAkB;AACxB,QAAA0qD,EAAA;AAAA,UACd,SAAS;AAAA,YACP,GAAGzqD,EAAM;AAAA,YACT,QAAQD;AAAA,UACV;AAAA,UACA,OAAOC,EAAM;AAAA,UACb,MAAMA,EAAM;AAAA,QAAA,CACb;AAAA,MAAA;AAAA,MA8BD,mBA3BwB,CAACwF,MAAW;AACpB,QAAAilD,EAAA;AAAA,UACd,SAAS;AAAA,YACP,GAAGzqD,EAAM;AAAA,YACT,UAAUwF,EAAE,OAAO;AAAA,UACrB;AAAA,UACA,OAAOxF,EAAM;AAAA,UACb,MAAMA,EAAM;AAAA,QAAA,CACb;AAAA,MAAA;AAAA,MAoBD,oBAAA6kD;AAAA,MACA,YAAA+G;AAAA,MACA,gBAAAjtC;AAAA,MACA,YAAAotC;AAAA,MACA,cAAAhtC;AAAA,MACA,iBAAA8sC;AAAA,MACA,eAtDoB;AAAA,QACpB,EAAE,OAAO,KAAK,OAAO,OAAO;AAAA,QAC5B,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,QAChC,EAAE,OAAO,OAAO,OAAO,aAAa;AAAA,QACpC,EAAE,OAAO,QAAQ,OAAO,gBAAgB;AAAA,QACxC,EAAE,OAAO,SAAS,OAAO,mBAAmB;AAAA,QAC5C,EAAE,OAAO,UAAU,OAAO,sBAAsB;AAAA,MAAA;AAAA,MAiDhD,gBAAA99C;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;qICzkBCnH,EAmGM,gBAAA;AAhGF,SAAAC,EAAkB,GAAAW,EAAA,OAAAd,IAAA;AAAA,IAAAvG,EACVwH,GAAoB;AAAA,MAC3B,OAAO;AAAA,MACP,OAAYX,EAAA,QAAA;AAAA,MACb,SAAWA,EAAA;AAAA,MACX,YAAW,EAAA,OAAA,KAAA;AAAA,MACV,eAAQ;AAAA,MACR,eAAa;AAAA,MAAA,UAAAA,EAAA;AAAA,MAGhB,iBAMEA,EAAA;AAAA,IAAA,GALA,MAAM,GAAY,CAAA,SAAA,WAAA,YAAA,eAAA,CAAA;AAAA,IAAA7G,EACVwH,GAAY;AAAA,MACnB,OAAO;AAAA,MACR,OAAAX,EAAA,QAAA;AAAA,MACC,SAAMA,EAAE;AAAA,MAAA,OAAA,EAAA,aAAA,QAAA;AAAA,MAGX,UAMEA,EAAA;AAAA,IAAA,GALA,MAAM,GAAY,CAAA,SAAA,WAAA,UAAA,CAAA;AAAA,IAAA7G,EACVwH,GAAgB;AAAA,MACvB,OAAO;AAAA,MACR,OAAAX,EAAA,QAAA;AAAA,MACC,SAAMA,EAAE;AAAA,MAAA,OAAA,EAAA,aAAA,QAAA;AAAA,MAGK,UAAQA,EAAA;AAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SACtB,WAKE,UAAA,CAAA;AAAA,IAAAA,EAAA,QAAA,aAAA,MAAAH,EAJkB,GAAAC,EAAAuE,GAAA;AAAA,MACjB,KAAK;AAAA,MACN,OAAA;AAAA,MACC,OAAKrE,EAAE,QAAA;AAAA,MAAA,OAAA,EAAA,aAAA,QAAA;AAAA;OAIW,MAAA,GAAC,CAAQ,SAAA,SAAA,CAAA,KAAAa,EAC9B,IAaE,EAAA;AAAA,IAAAb,EAAA,QAAA,aAAA,eAAAH,EAZkB,GAAAC,EAAAa,GAAA;AAAA,MACjB,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAYX,EAAA,QAAA;AAAA,MAAA,SAAAA,EAAA;AAAA;QAGZ,OAAA;AAAA,QACD,OAAA;AAAA,MAAA;AAAA,MAEA,eAAA;AAAA,MACC,iBAAQA,EAAA;AAAA,MACR,OAAK,eAAE,QAAS;AAAA,MAAA,UAAAA,EAAA;AAAA;IAIL,GAAA,MAAA,GAAA,CAAA,SAAe,yDAC7B,IAKE,EAAA;AAAA,IAAAA,EAAA,mBAAAH,KAJkBC,EAAAuE,GAAA;AAAA,MACjB,KAAK;AAAA,MACL,OAAK;AAAA,MACL,SAAW,QAAE;AAAA,MAAA,SAAArE,EAAA;AAAA;IAIF,GAAA,MAAA,GAAU,CAA1B,SAAA,WAAA,aAAA,CAAA,KAAAa,EAAA,IAAA,EAAA;AAAA,IAOIb,EAAA,cAAAH,KAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,MAAAT,EAAA,QAAA,OAAA,YAAAH,EAJkB,GAAAC,EAAAuE,GAAA;AAAA,QACjB,KAAK;AAAA,QACL,OAAK;AAAA,QACN,SAAW,QAAC;AAAA,QAAA,SAAArE,EAAA;AAAA,QAEd,aAAA;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,SAAA,SAAA,CAAA,MAAAH,EAAA,GAEoBC,EAAAa,GAAA;AAAA,QACjB,KAAK;AAAA,QACL,OAAO;AAAA,QACP,OAAQX,EAAA,QAAA;AAAA,QAAA,SAAAA,EAAA;AAAA;;IAIG,GAAA,EAAA,KAAAa,EACd,IAKE,EAAA;AAAA,IAAAb,EAAA,gBAAAH,KAJkBC,EAAAa,GAAA;AAAA,MACjB,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAQX,EAAA,QAAA;AAAA,MAAA,SAAAA,EAAA;AAAA;OAWA,MAAA,GAAA,CAAA,SAAA,WAAA,UARS,MAETa,EAIA,IAAA,EAAA;AAAA,IAHT1H,EAAAkU,GAGS,EAHA,SAAO,CAAA,OAAA,EAAA,GAAA;AAAA,MAC0B,SAAApN,EAAA,MAAA;AAAA,QAAxC9G,EAAAmU,GAAwC,EAA3B,SAAAtN,EAAI,mBAAG,GAAA;AAAA,UAAM,SAAAC,EAAA,MAAA;AAAA,YAAA9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;cAC1B,GAAA;AAAA,YAAA,CAAA;AAAA,YAA0B9G,EAAAoU,GAAA,EAAA,KAAA,IAAA,GAAA;AAAA,cAAA,SAAAtN,EAAA,MAAA;AAAA;;;;;;wBAJ9B,CAAmC;AAAA,MAAA,CAAA;AAAA;;;MAQrC,GAAA;AAAA,IAAA,CAAA;AAAA,MAA4CuN,GAAQ;AAAA,MAAA,OAAA;AAAA;;;;uFC1DxDw3C,KAAehpD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAO,CAAC;AAAA,IACnB;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAAipD;AAAA,EACF;AACF,CAAC;MC/DMvlD,KAAM;AAAA,EAAA,KAAA;AAAA;GAMAC,KAAM;AAAA,EAAA,KAAA;AAAA;GAEFqB,KAAM;AAAA,EAAA,KAAA;AAAA;GACN4C,KAAM;AAAA,EAAA,KAAA;AAAA;;;mCAT+BshD,IAAAtlD,EAAA,cAAA;AAClD,SAAA,MAAA,QAAAI,EAAA,IAAA,KAAAH,KAAAW,EAAA,OAAAd,IAAA;AAAA,KAIuBG,EAAA,EAAI,GAAIW,EAAmBC,IAAa,MAAMC,GAAUV,EAAA,MAAA,CAAAlC,GAAAyB,OAC3EM,EAAA,GAAAW,EAeMC,IAfN,EAeM,KAAAlB,KAAA;AAAA,MAdiBzB,EAAA,QAAAA,EAAA,cAAiB,sCAAtC,OAGW6B,IAAA;AAAA,QAFkC7B,EAAA,WAAA,SAAA,KAAA+B,EAAA,GAAAW,EAA3CC,IAA6D,EAA7D,KAA6D,KAAA;AAAA,UAAA3C,EAAA,SAAA,QACvB+B,EAAtC,GAAAW,EAAA,OAAAQ,IAAA,GAAA,KAAAH,EAAA,IAAA,EAAA;AAAA,UAAA/C,EAAA,SAAA,QAAA+B,EAAA,GAAAW,EAAA,OAAAoD,IAAA,GAAA,KAAA/C,EAAA,IAAA,EAAA;AAAA,QAEF,GAAA,EAAA,KACkBA,EAAgB,IAAM,EAAA;AAAA,QAAAP,EAAA,OACpC8D,IAKE;AAAA,UAAAtG,EAAA,WAAA,SAAA,KAAA+B,EAJa,GAAAC,EAAAqlD,GAAA;AAAA,YACZ,KAAI;AAAA,YACJ,OAAMnlD,EAAK,QAAA;AAAA,YACX,kBAAkBA,EAAgB,OAAA,MAAA,KAAAT;AAAA,YAAA,MAAAzB,EAAA;AAAA;;;MAS9B,CAAA,MAAA+B,EAAA,GAAAC,EAAeolD,GAAc;AAAA,QACvC,OAAO;AAAA,QACP,KAAKpnD,EAAE,YAAK,GAAAkC,EAAA,SAAAT;AAAA,QACZ,SAAMzB;AAAA,QACN,OAAAyB;AAAA,QAAA,MAAAS,EAAA,QAAA;AAAA;;;;;uFCkDXolD,KAAeppD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAAqpD;AAAA,IAAA,SACAlpD;AAAAA,IAAA,SACAC;AAAAA,IAAA,UACA6J;AAAAA,EACF;AAAA,EACA,QAAS;AACD,UAAAq/C,IAAY9nD,EAAI,EAAK,GACrB+nD,IAAc/nD,EAAI,CAAA,CAAE,GACpBZ,IAAuBF,EAAOG,EAAsB,GACpDI,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDooD,IAAyB9oD,EAAO+oD,EAAwB,GAExD7+C,IAAcvJ,EAAS,MAAM;;AACjC,YAAMU,MAAOvB,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,gBAAe,CAAA;AAClD,iBAAWsB,KAAQC;AACjB,QAAID,EAAK,iBACF6kB,GAAO7kB,GAAM,MAAM,MAClBA,EAAK,SAAS,cAChBA,EAAK,OAAO,kBACHA,EAAK,SAAS,YACvBA,EAAK,OAAO,eAEZA,EAAK,OAAO,UAGX6kB,GAAO7kB,GAAM,UAAU,MAC1BA,EAAK,WAAW;AAItB,cAAIC,KAAA,gBAAAA,EAAM,UAAS,KAAK,GAACa,IAAAb,EAAK,CAAC,MAAN,QAAAa,EAAS,QACzB,CAAC;AAAA,QACN,MAAM;AAAA,QACN,YAAYb;AAAA,MAAA,CACb,IAEIA;AAAA,IAAA,CACR,GAEK2nD,IAAkBloD,EAAI,IAAI,GAC1B+b,IAAe,CAACosC,MAAkC;AACtD,YAAMznD,IAAS;AAAA,QACb,GAAGnB,EAAME,CAAa;AAAA,QACtB,GAAG0oD;AAAA,QACH,eAAer1C,GAAiB;AAAA,UAC9B,GAAGvT,EAAME,CAAa;AAAA,UACtB,GAAG0oD;AAAA,QAAA,GACF5oD,EAAMH,CAAoB,CAAC;AAAA,MAAA;AAEhC,MAAAO,EAAoBe,CAAM;AAAA,IAAA,GAEtB0nD,IAAe,CAAC32C,MAAuB;;AAC3C,YAAMlR,KAAOvB,IAAAO,EAAM6J,CAAW,MAAjB,gBAAApK,EAAoB;AACjC,MAAIuB,KAAQ,SAAQA,KAAA,gBAAAA,EAAM,YAAW,IACtBwb,EAAA;AAAA,QACX,aAAa,CAAC;AAAA,UACZ,UAAU1U,GAAO;AAAA,QAAA,CAClB;AAAA,MAAA,CACF,IACQ9G,EAAK,CAAC,KAAK,SAChBA,EAAK,CAAC,EAAE,cAAc,QAAQA,EAAK,CAAC,EAAE,SAASkR,IACpCsK,EAAA;AAAA,QACX,aAAa,CAAC;AAAA,UACZ,MAAAtK;AAAA,UACA,YAAY;AAAA,YACVlR,EAAK,CAAC;AAAA,YACN;AAAA,cACE,UAAU8G,GAAO;AAAA,YACnB;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MAAA,CACF,IACQ9G,EAAK,CAAC,EAAE,WAAW,SAAS,KAAKA,EAAK,CAAC,EAAE,SAASkR,MACtDlR,EAAA,CAAC,EAAE,WAAW,KAAK;AAAA,QACtB,UAAU8G,GAAO;AAAA,MAAA,CAClB,GACY0U,EAAA;AAAA,QACX,aAAaxb;AAAA,MAAA,CACd;AAAA,IAEL,GAEI2lD,IAAkB,CAACnlD,MAAgC;;AACjD,YAAA,EAAE,OAAAgB,GAAO,MAAA4P,EAAS,IAAA5Q;AACxB,UAAIsnD,IAAahnD,IAAUrC,IAAAO,EAAM6J,CAAW,MAAjB,gBAAApK,EAAoB,OAAO,GAClDwS,IAAa62C;AACX,YAAAz2C,IAAUD,EAAK,MAAM,GAAG;AAC9B,UAAIC,KAAA,QAAAA,EAAS,QAAQ;AACnB,mBAAW5W,KAAK4W;AACV,cAAAJ,EAAWxW,CAAC;AACD,YAAAwW,KAAApQ,IAAAoQ,EAAWxW,CAAC,MAAZ,gBAAAoG,EAAe;AAAA;AAE5B;AAGJ,YAAI,MAAM,QAAQoQ,CAAU,KAAKA,EAAWzP,CAAK;AAE3C,cADOyP,EAAA,OAAOzP,GAAO,CAAC,GACtByP,EAAW,WAAW;AACpB,gBAAAI,EAAQ,SAAS,GAAG;AAChB,oBAAAC,IAAYD,EAAQ,SAAS,GAC7BE,KAAWF,EAAQC,CAAS,GAC5BE,IAAcH,EAAQ,MAAM,GAAGC,CAAS;AAC9C,kBAAIG,KAAoBq2C,GACpBp2C,IAAc;AAClB,yBAAWC,KAAKH;AACV,oBAAAC,GAAkBE,CAAC;AACP,kBAAAD,KAAAhI,IAAA+H,GAAkBE,CAAC,MAAnB,gBAAAjI,EAAsB,MAChB+H,MAAA9H,IAAA8H,GAAkBE,CAAC,MAAnB,gBAAAhI,EAAsB;AAAA;AAE1C;AAIJ,kBAAI+H,MAAgBT,EAAW,CAAC,EAAE;AAChC,oBAAI,MAAM,QAAQA,EAAW,CAAC,EAAE,UAAU,GAAG;AAC3C,wBAAMW,IAAO9Q,GAAUmQ,EAAW,CAAC,EAAE,UAAU;AAC7B,kBAAAQ,GAAA,OAAO,CAACF,IAAU,CAAC,GACrCE,GAAkB,OAAO,CAACF,IAAU,GAAG,GAAGK,CAAI;AAAA;AAAA;AAG9B,gBAAAH,GAAAF,EAAQ,IAAIN,EAAW,CAAC;AAAA;AAAA;AAGhD,YAAWA,EAAW,WAAW,MAC/B62C,IAAa,CAAA;AAGJ,QAAAtsC,EAAA;AAAA,UACX,aAAassC;AAAA,QAAA,CACd;AAAA;AAAA,IACH,GAEIpC,IAAkB,CAACllD,MAAgC;;AACvD,YAAM,EAAE,SAAA2lD,GAAS,OAAA3kD,GAAO,MAAA4P,EAAA,IAAS5Q,GAC3BsnD,IAAahnD,IAAUrC,IAAAO,EAAM6J,CAAW,MAAjB,gBAAApK,EAAoB,OAAO;AACxD,UAAIwS,IAAa62C;AACX,YAAAz2C,IAAUD,EAAK,MAAM,GAAG;AAC9B,UAAIC,KAAA,QAAAA,EAAS;AACX,mBAAW5W,KAAK4W;AACV,cAAAJ,EAAWxW,CAAC;AACD,YAAAwW,KAAApQ,IAAAoQ,EAAWxW,CAAC,MAAZ,gBAAAoG,EAAe;AAAA;AAE5B;AAIN,MAAI,MAAM,QAAQoQ,CAAU,KAAKA,EAAWzP,CAAK,MAC/CyP,EAAWzP,CAAK,IAAI2kD,IAET3qC,EAAA;AAAA,QACX,aAAassC;AAAA,MAAA,CACd;AAAA,IAAA,GAGGlC,IAAmB,CAACx0C,GAAc5P,GAAe0P,MAAsB;;AAC3E,YAAM42C,IAAahnD,IAAUrC,IAAAO,EAAM6J,CAAW,MAAjB,gBAAApK,EAAoB,OAAO;AACxD,UAAIwS,IAAa62C,GACbj2C,IAAS;AACP,YAAAR,IAAUD,EAAK,MAAM,GAAG;AAC9B,UAAIC,KAAA,QAAAA,EAAS,QAAQ;AACnB,mBAAW5W,KAAK4W;AACV,cAAAJ,EAAWxW,CAAC;AACL,YAAAoX,KAAAhR,IAAAoQ,EAAWxW,CAAC,MAAZ,gBAAAoG,EAAe,MACXoQ,KAAAvH,IAAAuH,EAAWxW,CAAC,MAAZ,gBAAAiP,EAAe;AAAA;AAE5B;AAGJ,YAAImI,MAAWX;AACF,UAAAD,EAAA,OAAOzP,IAAQ,GAAG,GAAG;AAAA,YAC9B,UAAUsF,GAAO;AAAA,UAAA,CAClB;AAAA,aACI;AACL,gBAAM8K,IAAO9Q,GAAUmQ,EAAWzP,CAAK,CAAC;AACxC,UAAAyP,EAAWzP,CAAK,IAAI;AAAA,YAClB,MAAA0P;AAAA,YACA,YAAY;AAAA,cACVU;AAAA,cACA;AAAA,gBACE,UAAU9K,GAAO;AAAA,cACnB;AAAA,YACF;AAAA,UAAA;AAAA;AAGS,QAAA0U,EAAA;AAAA,UACX,aAAassC;AAAA,QAAA,CACd;AAAA;AAAA,IACH,GAEIt5C,IAAe,CAACiF,GAAoB/R,MAAiC;;AACzE,cAAOjD,IAAAiD,KAAA,gBAAAA,EAAQ,UAAR,gBAAAjD,EAAe,cAAc,SAASgV,KAAA,gBAAAA,EAAY;AAAA,IAAa,GAElEs0C,IAAsBzoD,EAAS,MAC5BN,EAAMH,CAAoB,EAC9B,OAAO,CAAC,MAAW,EAAE,aAAa,eAAe,EAAE,cAAc,WAAW,eAAe,EAC3F,IAAI,CAAC,OAAY;AAAA,MAChB,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,IACT,EAAA,CACL,GACKmpD,IAAoB,MAAM;;AAC1B,UAAA;AACE,SAAAvpD,IAAAO,EAAMwoD,CAAW,MAAjB,QAAA/oD,EAAoB,WACtBgpD,EAAuBzoD,EAAMwoD,CAAW,GAAGxoD,EAAM6J,CAAW,CAAC,GAC7DvE,GAAQ,QAAQ,MAAM,IAExBijD,EAAU,QAAQ;AAAA,eACXU;AACP,gBAAQ,MAAMA,CAAK;AAAA,MACrB;AAAA,IAAA;AAEI,WAAA3mD,GAAAimD,GAAW,CAACt3C,MAAQ;AACxB,MAAKA,MACHu3C,EAAY,QAAQ;IACtB,CACD,GACDr2C,GAAQ,kBAAkB;AAAA,MACxB,iBAAAw0C;AAAA,MACA,iBAAAD;AAAA,MACA,kBAAAE;AAAA,IAAA,CACD,GACM;AAAA,MACL,WAAA2B;AAAA,MACA,aAAAC;AAAA,MACA,aAAA3+C;AAAA,MACA,iBAAA8+C;AAAA,MACA,qBAAAI;AAAA,MACA,cAAAF;AAAA,MACA,cAAAr5C;AAAA,MACA,mBAAAw5C;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;ACjUQ,MAAA93C,KAAA,CAAA9I,OAAK+I,GAAC,iBAAsB,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,IAatBzF,KAAA,EAAA,OAAM,4NAIJ0E,KAAM;AAAA,EAAA,KAAA;AAAA;;;sEAlBrBxE,EAoEM,cAAA;AAlEc,SAAAC,OAA8B,OAAYH,IAAA;AAAA,IAA1DY,EAAA,OAAAX,IAAA;AAAA,MACE,MAAA,QAAAK,EAAsD,8CAApC,GAAAQ,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,QAAAtH,EAAAoH,GAAA;AAAA,UAAyB,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,QAAA,GAAA;AAAA;;;UAC3C,GAAA;AAAA,QAAA,CAAA;AAAA,UAAsCO,GAA0B;AAAA,UAAA,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,aAAA,IAAA;AAAA,UAAM,OAAA,EAAA,eAAA,OAAA;AAAA,QAAA,GAAA;AAAA;;;;;sBAE/CF,EAAAS,GAAA;AAAA,QAAA,KAAA;AAAA,QAAoB,SAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA;MAAA,GAAA;AAAA;;;QAC7C,GAAA;AAAA,MAAA,CACU;AAAA,MAAA7G,EAAA2T,GAAA;AAAA,QACR,SAAM9M,EAAM;AAAA,QACZ,oBAAUG,EAAa,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,QACvB,OAAO;AAAA,QAAA,WAAA;AAAA,QAEI,SAAO;AAAA,MAAA,GAAA;AAAA,iBAEdH,EAEM,MAAA;;AAAA;AAAA,YAAAK,EAC4B,OAAmBU,IAAO;AAAA,cAAA4C;AAAAA,cAG5D5D,EAAA,oBAAA,UAAAH,KAAAW,EAkBM,8FAjBJK,EAQE,IAAA,EAAA;AAAA,cAAAP,EAPA,OAAmBuD,IAAA;AAAA,gBAAA1K,EACJwH,GAAW;AAAA,kBAAA,OAAA,EAAA,OAAA,MAAA;AAAA,kBAC1B,OAAAX,EAAA;AAAA,kBACA,kBAAeG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,cAAAI;AAAA,kBACf,eAAY;AAAA,kBACX,MAAA;AAAA,kBACA,aAAS;AAAA,kBAAA,iBAAAJ,EAAA;AAAA,kBAEZ,SAOWA,EAAA;AAAA,gBAAA,GANT,MAA0B,GAAA,CAAA,SAAA,iBAAA,SAAA,CAAA;AAAA,gBAAA7G,EACrBoH,GAAS;AAAA,kBACb,OAAA,EAAQ,eAAG,OAAW;AAAA,kBACtB,MAAA;AAAA,kBAAA,UAAA,GAAA/D,IAAAwD,EAAA,gBAAA,QAAAxD,EAAA;AAAA;;;;;;;;;;;QAOT,SAAAyD,EAAA,MAAA;AAAA,UAAA,MAAA,QAAAD,EAAA,WAAA,KAAAA,EAAA,YAAA,SAAA,KAAAH,KACgBC,EAAAS,GAAA;AAAA,YACd,KAAK;AAAA,YACL,MAAqB;AAAA,YAAA,OAAA;AAAA,YAIvB,OAAA,EAAA,OAAA,QAAA;AAAA,UAAA,GAAA;AAAA;;;;;;;MAGJ,GAAA,GAAA,CAAA,SAAA,CAAA;AAAA,IAAA,CAAA;AAAA,MAUU,OAAgBuD,IAAA;AAAA,MAAA3K,EACfgsD,GAAW;AAAA,QACjB,OAAO;AAAA,QACP,MAAAnlD,EAAA;AAAA,QAAA,OAAA;AAAA;;;;;uFCcTimD,KAAejqD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,WAAAC;AAAA,IAAA,gBACAlC;AAAAA,EACF;AAAA,EACA,QAAS;AACD,UAAA0C,IAAUC,EAAOC,EAAO,GACxBG,IAAiBJ,EAAOM,EAAe,GACvCC,IAAgBP,EAAOQ,EAAc,GACrCC,IAAsBT,EAAOU,EAAqB,GAClDqR,IAAoB/R,EAAOgS,EAAkB,GAC7C9R,IAAuBF,EAAOG,EAAsB,GACpDqpD,IAAY7oD,EAAS;AAAA,MACzB,KAAK,MAAA;;AAAM,iBAAAb,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,mBAAkB,CAAC;AAAA;AAAA,MACpD,IAAKuB,GAAW;AACd,QAAAwb,EAAaxb,CAAI;AAAA,MACnB;AAAA,IAAA,CACD,GACKooD,IAAgB3oD,EAAI,CAAA,CAAE,GAEtB+b,IAAe,CAACxb,MAAkC;AAClC,MAAAZ,EAAA;AAAA,QAClB,GAAGJ,EAAME,CAAa;AAAA,QACtB,gBAAgBc;AAAA,MAAA,CACjB;AAAA,IAAA,GAGGqE,IAAa,MAAM;AACvB,YAAMrE,IAAOc,GAAU9B,EAAMmpD,CAAS,CAAC;AACvC,MAAAnoD,EAAK,KAAK;AAAA,QACR,KAAK8G,GAAO;AAAA,QACZ,YAAY,CAAC;AAAA,MAAA,CACd,GACD0U,EAAaxb,CAAI;AAAA,IAAA,GAGbqoD,IAAe,CAAC7mD,MAAkB;;AACtC,UAAIA,KAAS,GAAG;AACd,cAAMxB,IAAOc,GAAU9B,EAAMmpD,CAAS,CAAC;AACvC,SAAI1pD,IAAAuB,EAAKwB,CAAK,EAAE,eAAZ,QAAA/C,EAAwB,UAC1BO,EAAMopD,CAAa,EAAE,KAAK,GAAGpoD,EAAKwB,CAAK,EAAE,UAAU,GAEhDxB,EAAA,OAAOwB,GAAO,CAAC,GACpBga,EAAaxb,CAAI;AAAA;AAAA,IACnB,GAGIsoD,IAAmB,YAAY;;AACnC,YAAMC,IAAoBC,GAAsB;AAAA,QAC9C,GAAGxpD,EAAM0R,CAAiB;AAAA,QAC1B,kBAAkB1R,EAAMH,CAAoB;AAAA,MAAA,CAC7C;AACD,UAAI4pD,KAAkBF,KAAA,gBAAAA,EAAc,oBAAkBA,KAAA,gBAAAA,EAAc,oBAAmB,CAAA;AACvF,aAAK,MAAM,QAAQE,CAAe,MAChCA,IAAkB,CAACA,CAAe,IAE7B,MAAM/pD,EAAQ;AAAA,QACnB,KAAK,GAAGM,EAAMsB,EAAa;AAAA,QAC3B,QAAQ;AAAA,QACR,SAAS;AAAA;AAAA,UAEP,gBAAgBtB,EAAMD,CAAc;AAAA,UACpC,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,UACJ,UAAQN,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,WAAU;AAAA,UACxC,SAASoC,IAAA,iCAAgB,WAAhB,gBAAAA,EAAwB;AAAA,UACjC,gBAAe0nD,KAAA,gBAAAA,EAAc,kBAAiB,CAAC;AAAA,UAC/C,iBAAAE;AAAA,UACA,gBAAc/+C,IAAA1K,EAAME,CAAa,MAAnB,gBAAAwK,EAAsB,iBAAgB;AAAA,UACpD,cAAc;AAAA,QAChB;AAAA;AAAA,QAEA,UAAQC,IAAA,OAAO,eAAP,gBAAAA,EAAmB,WAAU;AAAA,MAAA,CACtC;AAAA,IAAA;AAGH,WAAAoD,GAAU,YAAY;;AACd,YAAA27C,IAAkB,MAAMJ,KACxBv9C,MAAOtM,IAAAiqD,KAAA,gBAAAA,EAAiB,SAAjB,gBAAAjqD,EAAuB,SAAQ,CAAA,GACtCkqD,IAAe,CAAA,EAAG,OAAO,GAAG3pD,EAAMmpD,CAAS,EAAE,IAAI,CAAC,MAAW,EAAE,UAAU,CAAC;AAClE,MAAAC,EAAA,QACZr9C,EACG,OAAO,CAAC,MAAW,CAAC49C,EAAa,KAAK,CAACnhD,MAAWA,EAAE,aAAa,EAAE,QAAQ,CAAC,EAC5E,IAAI,CAAC,OAAY,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,SAAA,EAAW;AAAA,IAAA,CAChE,GAEM;AAAA,MACL,eAAA4gD;AAAA,MACA,WAAAD;AAAA,MACA,YAAA9jD;AAAA,MACA,cAAAgkD;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;AC7KQ,MAAAn4C,KAAA,CAAA9I,OAAK+I,GAAC,iBAAoB,GAAA/I,IAAAA,KAAAgJ,MAAAhJ,WAI5B,OAAM,uDAcAnE,KAAA,EAAA,OAAM,qJAMZ6C,KAAM;AAAA,EAAA,KAAA;AAAA;UA0BM,OAAM;;;;SAlDrBhE,EAEM,GAAAW,EAAAC,IAAA,MAAA;AAAA,IADwCH,EAAA,OAAAZ,IAAA;AAAA,MAAXY,EAAA,OAAAX,IAAA;AAAA,QAAAxG,EAAAoH,GAAA,EAAA,SAAAP,EAAA,WAAA,GAAA;AAAA,UAAA,SAAAC,EAAA,MAAA;AAAA;;;;MAGrC,CAAA;AAAA,IAAA,CAAA;AAAA,IAkBcK,EAAA,OAAAU,IAAA;AAAA,MAAA4C;AAAA;QAdV,YAAM5D,EAAA;AAAA,QACN,uBAAmBG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,gBAAAI;AAAA,QAClB,OAAO;AAAA,QAAA,YAAA;AAAA;;UAIP,MAAA;AAAA,UACA,KAAI;AAAA,QAAA;AAAA,QAEM,MAAI;AAAA,MAAA,GAAA;AAAA;;;;SAO+B,GAAA,CAAA,YAAA,CAAA;AAAA,IAAA,CAAA;AAAA,WAChD,wBACoB,UAAAP,EAAA,GAAAW,EAAA,OAAAqD,IAAA;AAAA,MAAA1K,EAAAihD,GAAA;AAAA,QAClB,YAAMp6C,EAAA;AAAA,QACN,uBAAcG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,QACb,OAAO;AAAA,QAAA,YAAA;AAAA;;UAIP,MAAA;AAAA,UAAA,KAAA;AAAA;;QAIG,MAAAH,EAAA,CAAA,EAAA,SAAAogC,GAA6C,OAAA9gC,EAA7C,MAAA;AAAA,UAiBYe,EAAA,OAAAwD,IAAA;AAAA,YAAAxD,EAfD,OAAQgE,IAAU,MAAAH,GAAA5E,IAAA,CAAA,GAAA,CAAA;AAAA,YAAApG,EAAAihD,GAAA;AAAA,cAC3B,YAAM/Z,EAAY;AAAA,cAClB,uBAAmB,CAAAjgC,MAAAigC,EAAA,aAAAjgC;AAAA,cAClB,OAAO;AAAA,cAAA,YAAA;AAAA;;gBAIP,MAAA;AAAA,gBACA,KAAA;AAAA,cAAA;AAAA,cAEU,MAAI;AAAA,YAAA,GAAA;AAAA;;;cAMjB,GAAA;AAAA,YAAA,GAAiB,MAAM,CAAa,cAAA,qBAAA,CAAA;AAAA,YAAAjH,EAAO4H,GAAe;AAAA,cAAA,OAAA;AAAA;;;;;;;;;uFChCpE4lD,KAAe3qD,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY,EAAEwiD,QAAAA,GAAO;AAAA,EACrB,OAAO;AAAA,IACL,eAAe;AAAA;AAAA,MAEb,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MAAC;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAClB;AAAA,EACF;AAAA,EACA,MAAOxlD,GAAO;AACN,UAAAyV,IAAoB/R,EAAOgS,EAAkB,GAG7Ck4C,IAAYppD,EAAW,CAAA,CAAE,GACzBwiD,IAAexiD,EAAW,CAAA,CAAE,GAC5Bf,IAAUC,EAAOC,EAAO,GACxBG,IAAiBJ,EAAOM,EAAe,KAAK,IAC5C6pD,IAAsB,YAAY;;AAClC,UAAA;AAOI,cAAAzoD,IAAM,MANU0oD,GAAiB;AAAA,UACrC,eAAe9tD,EAAM;AAAA,UACrB,MAAMA,EAAM;AAAA,UACZ,SAAAyD;AAAA,UACA,gBAAAK;AAAA,QAAA,CACD,KAEK,EAAE,SAAA6U,IAAU,CAAI,GAAA,MAAAhO,IAAO,CAAA,EAAO,MAAAnH,IAAA4B,KAAA,gBAAAA,EAAK,SAAL,gBAAA5B,EAAW,SAAQ,IACjD2kD,IAAmBpkD,EAAM0R,CAAiB,EAAE;AAClD,QAAAuxC,EAAa,QAAQruC,EAAQ,IAAI,CAACnZ,OAAO,EAAE,OAAOA,GAAG,WAAWA,GAAG,OAAOA,GAAG,GAAG2oD,EAAiB3oD,CAAC,EAAI,EAAA,GACtGouD,EAAU,QAAQjjD;AAAA,eACXnF;AACP,gBAAQ,MAAMA,CAAC;AAAA,MACjB;AAAA,IAAA;AAEF,WAAAa;AAAA,MACE,CAAC,MAAMrG,EAAM,eAAe,MAAM+D,EAAM0R,CAAiB,EAAE,gBAAgB;AAAA,MAC3E,MAAM;AACgB,QAAAo4C;MACtB;AAAA,MACA,EAAE,MAAM,IAAM,WAAW,GAAK;AAAA,IAAA,GAEzB;AAAA,MACL,WAAAD;AAAA,MACA,cAAA5G;AAAA,MACA,cAAA+G;AAAA,MACA,kBAAkBhqD,EAAM0R,CAAiB,EAAE;AAAA,IAAA;AAAA,EAE/C;AACF,CAAC;;YChFC7O,EAaU,SAAA;AAXD,SAAAC,EAAA,GAAYC,EAAA6/C,GAAA;AAAA,IAClB,OAAO,EAAE,OAAA,OAAA;AAAA,IACT,aAAW,IAAE;AAAA,IACd,SAAK3/C,EAAO;AAAA,IACX,eAAYA,EAAA;AAAA,IAAA,MAAA;AAAA,IAEJ,YAAQA,EAAA;AAAA,EAAA,GAAA;AAAA,mBAEb,QAAAgR,GAA8C,QAAAyuC,EAAA,MAAA;AAAA,MAAAzuC,EAAA,mBAAA,UAAAnR,EAAA,GAAAW,EAAA,QAAAd,IAAAyE,GAAAnE,EAAA,aAAAy/C,GAAAzuC,CAAA,CAAA,GAAA,CAAA,KAAAnQ,EAAA,IAAA,EAAA;AAAA;;;;qDCgGtD29B,KAAexiC,GAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IAAA,WACVgrD;AAAAA,IAAA,YACAC;AAAAA,IACA,YAAAC;AAAA,IAAA,OACAhhD;AAAAA,IAAA,UACAC;AAAAA,IACA,cAAAghD;AAAA,IACA,eAAA3sC;AAAA,IACA,YAAA4sC;AAAA,IAAA,SACAjrD;AAAAA,IAAA,gBACAZ;AAAAA,IACA,YAAA8rD;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,EACF;AAAA,EACA,MAAOruD,GAAO,EAAE,QAAAsD,KAAU;;AAClB,UAAAgrD,IAAsB9pD,EAAI,IAAI,GAC9B+pD,IAAoB/pD,KACpBC,IAAYD,EAAI,GAAG,GACnB0jD,IAAc1jD,EAAc,CAAC,GAAG,GAAG,CAAC,CAAC,GACrCgqD,IAAehqD,KACfiqD,IAAoBjqD,KACpBiR,IAAoB/R,EAAOgS,EAAkB,GAG7Cg5C,IAAoBhrD,EAAOirD,EAAiB,GAC5C1qD,IAAgBP,EAAOQ,EAAc,GACrCN,IAAuBF,EAAOG,EAAsB,GACpD+qD,IAAalrD,EAAOmrD,EAAW,GAC/BtE,IAAe7mD,EAAO8mD,EAAc,GACpCsE,IAAeprD,EAAOqrD,EAAc,GACpCC,IAAiB,CAAC,QAAQ,cAAc,UAAU,YAAY,SAAS,SAAS,WAAW,GAC3Fv3C,IAAYpT,EAAiC,MAAM;AACvD,YAAM4qD,IAAiBppD,GAAU9B,EAAM0R,CAAiB,CAAC;AACzD,MAAAy5C,EAAYD,CAAc;AAC1B,YAAME,IAAgB3F;AAAA,QACpByF;AAAA,QACAG,GAAQ,OAAO,KAAKH,CAAc,GAAG,YAAY,OAAO,QAAQ,SAAS,QAAQ;AAAA,MAAA;AAEnF,MAAIrxC,GAAkBqxC,EAAe,MAAMD,CAAc,KACvDG,EAAc,SAASF,EAAe,QACtCE,EAAc,QAAQF,EAAe,SAErCE,EAAc,SAAS;AAEzB,YAAMxC,IAAS9mD,GAAU9B,EAAME,CAAa,CAAC;AAE7C,aAAA0oD,EAAO,WAAW,UAElBA,EAAO,gBAAgB/oD,GAEvB+oD,EAAO,UAAU,IAEjBA,EAAO,aAAaiC,GAEhBhxC,GAAkBqxC,EAAe,MAAM,YAAY,MACjDlrD,EAAMwqD,CAAiB,MACzBY,EAAc,SAASprD,EAAMwqD,CAAiB,EAAE,IAAI,eAAe,KAAK,MACxEY,EAAc,QAAQprD,EAAMwqD,CAAiB,EAAE,IAAI,cAAc,OAEnEY,EAAc,WAAW,IACzBxC,EAAO,UAAU,IACjB,OAAOA,EAAO,WAGT;AAAA,QACL,GAAGwC;AAAA,QACH,eAAe;AAAA,UACb,GAAGxC;AAAA,UACH,eAAe3sD,EAAM;AAAA,QACvB;AAAA;AAAA,QAEA,aAAa;AAAA;AAAA,QAEb,YAAYivD,EAAe;AAAA,QAC3B,WAAWA,EAAe;AAAA,MAAA;AAAA,IAC5B,CACD,GAEKI,IAAahrD,EAAS,MAAM;;AAChC,YAAM,EAAE,OAAAirD,GAAO,SAAArvD,EAAQ,IAAI8D,EAAM0R,CAAiB,GAC5CgY,OAASjqB,IAAAO,EAAM0qD,CAAiB,MAAvB,gBAAAjrD,EAA0B,gBAAe,KAAK,MACvDwqB,OAAUpoB,KAAA7B,EAAM0qD,CAAiB,MAAvB,gBAAA7oD,GAA0B,iBAAgB,KAAK;AACxD,aAAA;AAAA,QACL,IAAI7B,EAAM0R,CAAiB,EAAE;AAAA,QAC7B,MAAM1R,EAAM0R,CAAiB,EAAE;AAAA,QAC/B,SAAS1R,EAAM0R,CAAiB,EAAE;AAAA,QAClC,MAAM;AAAA,QACN,OAAAgY;AAAA,QACA,QAAAO;AAAA,QACA,eAAejqB,EAAM0R,CAAiB,EAAE;AAAA,QACxC,eAAe1R,EAAM0R,CAAiB,EAAE,iBAAiB,CAAC;AAAA,QAC1D,UAAU;AAAA,QACV,iCAAiB,IAAI;AAAA,QACrB,cAAc;AAAA,QACd,gBAAgB65C;AAAA,QAChB,SAAArvD;AAAA,MAAA;AAAA,IACF,CACD;AAGD,aAASivD,EAAaz3C,GAAmC;;AACnD,MAAA,CAAC,WAAW,MAAM,EAAE,UAASA,IAAAA,KAAAA,gBAAAA,EAAW,UAAXA,gBAAAA,EAAkB,aAAa,MAC9DA,EAAU,QAAQ,SAEhB,CAAC,WAAW,MAAM,EAAE,UAASA,IAAAA,KAAAA,gBAAAA,EAAW,kBAAXA,gBAAAA,EAA0B,aAAa,MACtEA,EAAU,gBAAgB,SAExB,CAAC,WAAW,MAAM,EAAE,UAASA,IAAAA,KAAAA,gBAAAA,EAAW,kBAAXA,gBAAAA,EAA0B,aAAa,MACtEA,EAAU,gBAAgB,SAExB,CAAC,WAAW,MAAM,EAAE,UAASA,IAAAA,KAAAA,gBAAAA,EAAW,iBAAXA,gBAAAA,EAAyB,aAAa,MACrEA,EAAU,eAAe;AAAA,IAE7B;AACM,UAAA83C,IAAYlrD,EAAS,MAAM;AAC/B,UAAIa,IAAS;AACb,aAAI0Y,GAAkB7Z,EAAM0T,CAAS,EAAE,MAAMu3C,CAAc,MAChD9pD,IAAA,KAEJA;AAAA,IAAA,CACR,GACK4I,IAAOzJ,EAAS,MAAA;;AAAM,cAAAb,IAAAO,EAAM0T,CAAS,MAAf,gBAAAjU,EAAkB;AAAA,KAAI,GAC5C4oB,IAAe/nB,EAAS,MAAM;;AAAA,cAAC,GAACb,IAAAO,EAAM0T,CAAS,MAAf,QAAAjU,EAAkB;AAAA,KAAY,GAE9DuC,IAAW,CAACiP,MAAgB;AAChC,YAAMw6C,IAAOx6C,MAAQ;AACjB,MAAAw6C,KAAQ1hD,EAAK,UAAU,WACb+6C,MAET,OAAe,mBACjB,OAAe,gBAAgB2G,CAAI,GAElCx6C,MAAQ,OAEGy6C;IACf,GAGIC,IAAmBlrD,EAAS,CAAA,CAAE,GAE9Bf,IAAUC,EAAOC,EAAO,GACxBG,IAAiBC,EAAML,EAAOM,EAAe,CAAC,GAC9CT,KAAWC,IAAA,iCAAgB,WAAhB,gBAAAA,EAAwB;AACzC,aAASisD,KAAgB;;AACvB,YAAM,EAAE,cAAAj2C,IAAe,IAAI,eAAAE,IAAgB,CAAA,GAAI,YAAAC,IAAa,CAAI,GAAA,cAAAnE,IAAe,GAAG,IAAIzR,EAAME,CAAa,GACnG8L,IAAY,CAAC,GAAGyJ,GAAc,GAAGE,GAAe,GAAGC,CAAU,GAC7Dg2C,KAAa,CAAA;AACnB,iBAAW7qD,MAAQiL,GAAW;AAC5B,cAAM,EAAE,IAAAhE,KAAK,IAAI,WAAA+E,KAAY,OAAOhM;AAChC,QAAAiH,MAAM,CAAC4d,GAAO7kB,IAAM,UAAU,KAAK,CAAC6qD,GAAM5jD,EAAE,MAC9C4jD,GAAM5jD,EAAE,IAAI+E;AAAA;AAGhB,WAAItN,KAAA,OAAO,KAAKmsD,EAAK,MAAjB,QAAAnsD,GAAoB,QAAQ;AAC9B,cAAMosD,KAAc,CAAA;AACpB,mBAAW7jD,MAAM4jD;AACH,UAAAC,GAAA;AAAA,YACV,IAAI,QAAQ,CAACtV,IAASuV,OAAW;AAE5B,cAAApsD,EAAA;AAAA,gBACC,GAAG4B;AAAA,gBACH;AAAA,kBACE,QAAQ9B;AAAA,kBACR,WAAWwI;AAAA,kBACX,WAAW4jD,GAAM5jD,EAAE;AAAA,kBACnB,cAAAyJ;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,SAAS;AAAA,oBACP,gBAAgB1R;AAAA,oBAChB,gBAAgB;AAAA,kBAClB;AAAA,gBACF;AAAA,cAAA,EAED,KAAK,CAACsB,OAAa;;AAClB,sBAAM,EAAE,SAAAE,IAAS,MAAAC,KAAO,CAAC,EAAA,IAAMH,GAAI;AAC/B,gBAAAE,QAAW9B,KAAA+B,MAAA,gBAAAA,GAAM,oBAAN,QAAA/B,GAAuB,UACpC82C,GAAQ/0C,GAAK,eAAe,IAE5BsqD,GAAOtqD,EAAI;AAAA,cACb,CACD,EACA,MAAM,CAACC,OAAM;AACZ,gBAAAqqD,GAAOrqD,EAAC;AAAA,cAAA,CACT;AAAA,YAAA,CACJ;AAAA,UAAA;AAGL,gBAAQ,IAAIoqD,EAAW,EAAE,KAAK,CAACxqD,OAAQ;AACrC,cAAIA,MAAA,QAAAA,GAAK,QAAQ;AAEf,kBAAM0qD,KAAa1qD,GAAI;AAAA,cAAO,CAACquC,IAAQC,OACrCD,GAAE,OAAO,CAACxuC,OAAWyuC,GAAE,KAAK,CAAC1uC,OAAWA,GAAE,aAAaC,GAAE,QAAQ,CAAC;AAAA,YAAA;AAEpE,YAAA8qD,EAAoBD,GAAW,OAAO,CAAC9qD,OAAWA,GAAE,QAAQ,CAAC;AAAA;AAAA,QAC/D,CACD;AAAA;AAED,QAAA+qD,EAAoB,CAAE,CAAA;AAAA,IAE1B;AAEA,aAASA,EAAqBC,GAAmB;;AACzC,YAAA;AAAA,QACJ,oBAAA7mC,IAAqB,CAAC;AAAA,QACtB,YAAA8mC,IAAa,CAAC;AAAA,QACd,cAAAz2C,IAAe,CAAC;AAAA,QAChB,eAAAE,IAAgB,CAAC;AAAA,QACjB,YAAAC,KAAa,CAAC;AAAA,QACd,eAAA6tC,KAAgB,CAAC;AAAA,QACjB,iBAAA5tC,KAAkB,CAAC;AAAA,MAAA,IACjB7V,EAAME,CAAa,GACjBisD,KAAerqD,GAAU;AAAA,QAC7B,GAAGsjB;AAAA,QACH,GAAG8mC;AAAA,QACH,GAAGz2C;AAAA,QACH,GAAGE;AAAA,QACH,GAAGC;AAAA,QACH,GAAG6tC;AAAA,QACH,GAAG5tC;AAAA,MAAA,CACJ;AACD,UAAIs2C,MAAA,QAAAA,GAAc;AAChB,mBAAWprD,MAAQorD;AACjB,UAAAprD,GAAK,KAAKA,GAAK;AAInB,YAAMkL,KAAU;AAAA,QACd;AAAA,UACE,OAAO;AAAA;AAAA,UACP,MAAM;AAAA;AAAA,UACN,IAAI;AAAA;AAAA,UACJ,aAAa;AAAA;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA,GAAGggD,EAAa,IAAI,CAAChrD,QACZ;AAAA,UACL,GAAGA;AAAA,UACH,IAAIA,GAAE;AAAA,UACN,OAAOA,GAAE,SAASA,GAAE;AAAA,QAAA,EAEvB;AAAA,QACD,GAAGkrD;AAAA,MAAA;AAIL,UAAItyC,IAAkBpa,KAAAO,EAAM0R,CAAiB,MAAvB,gBAAAjS,GAA0B,MAAM,QAAQ,GAAG;AAC/D,cAAM,EAAE,oBAAA2sD,KAAqB,CAAA,EAAG,IAAIpsD,EAAME,CAAa;AAOvD,YANA+L,GAAQ,QAAQ;AAAA,UACd,OAAO;AAAA,UACP,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,aAAa;AAAA,QAAA,CACd,GACGmgD,MAAA,QAAAA,GAAoB;AACtB,qBAAWrrD,MAAQqrD;AACjB,YAAAngD,GAAQ,QAAQ;AAAA,cACd,OAAOlL,GAAK;AAAA,cACZ,MAAMA,GAAK;AAAA,cACX,IAAIA,GAAK;AAAA,cACT,aAAa;AAAA,YAAA,CACd;AAAA;AAMD,YAAAsrD,yBAAiB,OACjBC,KAAargD,GAAQ;AAC3B,eAASxQ,KAAI,GAAGA,KAAI6wD,IAAY7wD,MAAK;AAC7B,cAAAiH,KAASuJ,GAAQxQ,EAAC,GAClB,EAAE,IAAAuM,GAAA,IAAOtF,MAAU;AACd,QAAA2pD,GAAA,IAAIrkD,IAAItF,EAAM;AAAA;AAErB,YAAA6pD,KAAgB,CAAC,GAAGF,EAAU;AACnB,MAAAV,EAAA,QAAQY,GAAc,IAAI,CAAC,CAACC,IAAK9pD,EAAM,MAAMA,EAAM;AAAA,IACtE;AAEA,UAAMoiD,KAAc,MAAM;;AACpBA,UAAAA;AACA,MAAA6F,KAAqB5gD,EAAK,UAAU,UACtC+6C,IAAe,OAAe,eAE9BA,KAAcrlD,IAAAO,EAAMyqD,CAAY,MAAlB,gBAAAhrD,EAAqB,aAEjC,OAAOqlD,KAAgB,cACzBA;IACF,GAGI1kD,IAAsBT,EAAOU,EAAqB,GAClDosD,IAAyB,MAAM;;AAC7B,YAAAC,IAAqB5vC,KAAmBrd,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,CAAA,GAAII,CAAoB;AAC5G,aAAI,KAAK,UAAU6sD,CAAkB,MAAM,KAAK,YAAU7qD,IAAA7B,EAAME,CAAa,MAAnB,gBAAA2B,EAAsB,uBAAsB,CAAE,CAAA,KAClFzB,EAAA,EAAE,oBAAAssD,GAAoB,GACnC,MAEF;AAAA,IAAA,GAEHC,IAAgB,MAAM;;AAEN,MAAAvsD,EAAA;AAAA,QAClB,oBAAoB0c,KAAmBrd,IAAAO,EAAME,CAAa,MAAnB,gBAAAT,EAAsB,iBAAgB,IAAII,CAAoB;AAAA,MAAA,CACtG;AAAA,IAAA;AAGH,IAAAsS,GAAQ4yC,IAAcD,EAAW,GACjCxiD;AAAA,MACEpC;AAAA,MACA,MAAM;AACA,QAACusD,OACS3H;MAEhB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IAAA;AAGF,UAAM8H,IAAuB,YAAY;AACnC,UAAA;AACI,cAAAC,IAAc,MAAM,OAAO,yBAAsB;AACvD,QAAAtC,EAAoB,QAAQuC,GAAqB;AAAA,UAC/C,QAAQ,MAAM,QAAQ,QAAQD,EAAY,cAAc;AAAA,UACxD,OAAO;AAAA,QAAA,CACR;AAAA,eACM5D;AACC,gBAAA,MAAM,WAAWA,CAAK;AAAA,MAChC;AAAA,IAAA;AAGF,IAAAl7C,GAAU,YAAY;AACpB,MAAIy4C,EAAa,UACf,MAAMoG,EAAqB,GAC3B,WAAW,MAAM;AACH,QAAA9H;SACX,CAAC;AAAA,IACN,CACD;AAED,UAAMiI,KAAc,MAAM/sD,EAAMyqD,CAAY,EAAE,YAAY,GAGpDuC,IAAqB,CAAC,EAAE,MAAAjjD,GAAM,MAAAvI,QAAW;AAC7C,UAAIuI,MAAS,MAAM;AACjB,cAAM,EAAE,YAAAkjD,GAAY,YAAAr3C,EAAW,IAAI9T,GAAUN,CAAI,GAC3CmT,IAAgB,CAAA;AACtB,YAAIs4C,GAAY;AACd,qBAAWlsD,MAAQksD;AACjB,YAAIlsD,GAAK,cACPA,GAAK,QAAQA,GAAK,YAEpB4T,EAAc,KAAK;AAAA,cACjB,KAAK5T,GAAK;AAAA,cACV,OAAOA,GAAK;AAAA,cACZ,OAAO;AAAA,cACP,UAAUA,GAAK,gBAAgB;AAAA,YAAA,CAChC;AAEH,qBAAWA,MAAQ6U;AACjB,YAAI7U,GAAK,cACPA,GAAK,QAAQA,GAAK;AAAA;AAIJ,QAAAX,EAAA;AAAA,UAClB,eAAAuU;AAAA,UACA,iBAAiBs4C;AAAA,UACjB,YAAAr3C;AAAA,QAAA,CACD,GACDlC,EAAU,MAAM,gBAAgBiB;AAAA;AAAA,IAClC;AAGK,WAAApV,EAAA;AAAA,MACL,aAAAwtD;AAAA,IAAA,CACD,GAEM;AAAA,MACL,mBAAApC;AAAA,MACA,WAAAjqD;AAAA,MACA,aAAAyjD;AAAA,MACA,cAAAsG;AAAA,MACA,mBAAAC;AAAA,MACA,MAAA3gD;AAAA,MACA,cAAAse;AAAA,MACA,cAAAm+B;AAAA,MACA,cAAAuE;AAAA,MACA,WAAAr3C;AAAA,MACA,WAAA83C;AAAA,MACA,sBAAA3rD;AAAA,MACA,kBAAA8rD;AAAA,MACA,YAAAL;AAAA,MACA,mBAAAd;AAAA,MACA,qBAAAD;AAAA,MACA,YAAAM;AAAA,MACA,aAAA/F;AAAA,MACA,eAAA6H;AAAA,MACA,UAAA3qD;AAAA,MACA,oBAAAgrD;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;MCziBcrqD,KAAM;AAAA,EAAmB,KAAI;AAAA,EAAA,OAAA;AAAA;GAwDjCC,KAAY;AAAA,EACf,KAAK;AAAA,EACL,IAAG;AAAA,EACH,OAAA;AAAA,EAAA,KAAA;AAAA;;;uOA/DNC,EA2EM,aAAA;;IA1EJ,OAuDS8jB,GAAA,CAAA,eAAA1jB,EAAA,eAAA,qBAAA,EAAA,CAAA;AAAA,EAAA,GAAA;AAAA;MAvD8B,WAAQA,EAAA;AAAA,MAAA,sBAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAJ,EAAA,YAAAI;AAAA,MA+ClC,UAAUJ,EAAA;AAAA,IAAA,GAAA;AAAA,kBAEFC,EACM,MAAA;AAAA,QAAA9G,EAAnBoH,GAAmB,EAAA,SAAAP,EAAA,cAAA,GAAA;AAAA,UAAA,MAAAC,EAAA,MAAA;AAAA,YAGvB9G,EAAA8wD,CAAA;AAAA,UAAA,CAAA;AAAA;;;;wBApDF,CAuBa;AAAA,MAAA,CAAA;AAAA,eAvBGhqD,EAAG,MAAA;;AAAA;AAAA,UAAW9G,EAAAkH,GAAA;AAAA,YAAC,KAAI;AAAA,YAAA,KAAA;AAAA;;YAE/B,SAAAJ,EAAA,MAAA;AAAA,cAAAD,EAAA,gBAEUA,EAIN,gBAAAH,EAAA,GAAAW,EAAA,OAAAd,IAAA;AAAA,gBAAAM,EAAA,uBAAAH,KAFkBC,EAAAu6C,GAAAr6C,EAAA,mBAAA,GAAAgmB,GAAA;AAAA,kBACV,KAAA;AAAA,kBAAA,KAAA;AAAA,gBAId,GAAAhmB,EAAA,UAAA,GAAA,MAAA,EAAA,KAAAa,EAAA,IAAA,EAAA;AAAA,cAAA,GAAA,GACwC,MAAgBhB,KAAAW,EAAAC,IAAA,EAAA,KAAA,KAAA;AAAA,gBAAAT,EAAA,eAE7Ca,EADT,IAQE,EAAA,KAToDhB,EAAA,GAAxBC,EAAAoqD,GAAA;AAAA,kBAAA,KAAA;AAAA;gBAErB,GAAA,MAAA,GAAA;AAAA,gBAOPlqD,EAAA,iCAAAH,OANuBw6C,GACNr6C,EAAA,IAAA,GAAAgmB,GAAA;AAAA,kBAET,KAAA;AAAA,kBACR,OAAI,CAAc,mBAAAhmB,EAAA,YAAA,eAAA,EAAA;AAAA,gBAAA,GACjBA,EAAa,WAAA;AAAA,kBAAA,KAAA;AAAA;;;;YAIF,GAAA;AAAA,UAAA,GAAA,GAAA;AAAA,UAAmBA,EAAA,qBAAAH,KAAkBC,EAAAO,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA,KAAA;AAAA;;YACxC,SAAAJ,EAAa,MAAE;AAAA,cAAA9G,EAAOgxD,GAA0B;AAAA,gBAAA,eAAAnqD,EAAA;AAAA;;;;UAE5C,CAAA,KAAAa,EAApB,IAEa,EAAA;AAAA,WAF8D,CAAAb,EAAA,gBAAOA,kDAAWF,EAAAO,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA,KAAA;AAAA;;qBACzEJ,EAAc,MAAA;AAAA,cAAA9G,EAAEixD,GAAkB;AAAA,gBAAA,KAAA;AAAA;;;;UAG9C,CAAA,KAAAvpD,EADT,IAOa,EAAA;AAAA,UAAAb,EALX,eAOOa,EADT,IAOa,EAAA,UAZDf,EAAAO,GAAA;AAAA,YACV,KAAA;AAAA,YAAA,KAAA;AAAA;;;;;;UAKO,CAAA;AAAA,UACP,CAAAL,EAAA,gBAAO,oGACGF,EAAAO,GAAA;AAAA,YACV,KAAA;AAAA,YAAA,KAAA;AAAA;;;;;;;;;MAaY,GAAA;AAAA,IAAhB,GAAA,GAAA,CAAA,aAAA,UAAA,CAAA;AAAA,IAAAL,EAAA,qBAEc,CAAgBA,EAAA,gBAAAH,KAAAW,EAD5BC,IAMO,EANP,KAMO,EAAA,GAAA;AAAA,MAAAT,EACoE,SAAI,WAAAA,EAAA,cAAA,OAAAH,EAAA,GAAAW,EAA/E,OAA6Hb,IAAA,MAAA,GAAA,KAAAK,EAAA,SAAA,SAAAyE,IAA/E5E,KAAiBC,EAAAuqD,GAAArkC,GAAA;AAAA,QAAqC,KAAA;AAAA,QAAA,OAAA;AAAA;QACpG,CAAArZ,IAAA3M,EAAA,cAAA,GAAA;AAAA,MAGO,CAAA,IAAAyE,IAAA5E,OAAkByqD,GACN;AAAA,QACjB,KAAI;AAAA,QACJ,OAAkC5mC,GAAA,CAAA,mBAAA1jB,EAAA,YAAA,eAAA,EAAA,CAAA;AAAA,QAAA,KAAA;AAAA,wBAJ1B,QAAS,QAAA,QAAA;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,IAAA;AAAA;;;;;;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,33,34,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129]}