kd-lane-container 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -3533,16 +3533,12 @@ var script = {
3533
3533
  return this.dragUpdateLine(lines);
3534
3534
  });
3535
3535
  Promise.all(promises).then(() => {
3536
- this.onLineChange(lane.lines[lineIndex], ACTION_TYPE.UPSERT_LINE);
3536
+ this.setDefaultAndNotify();
3537
3537
  });
3538
3538
  });
3539
3539
  }
3540
3540
  });
3541
- } else if (Object.prototype.hasOwnProperty.call(event, "removed") && event.removed.element) {
3542
- // 拖拽删除了线条
3543
- let data = cloneDeep(event.removed.element);
3544
- this.onLineChange(data, ACTION_TYPE.DELETE_LINE);
3545
- } else if (Object.prototype.hasOwnProperty.call(event, "moved") && event.moved.element) {
3541
+ } else if (Object.prototype.hasOwnProperty.call(event, "removed") && event.removed.element) ; else if (Object.prototype.hasOwnProperty.call(event, "moved") && event.moved.element) {
3546
3542
  // 拖拽移动了线条
3547
3543
  let data = cloneDeep(event.moved.element);
3548
3544
  let currentLanes = this.currentTemplate.lanes;
@@ -3553,8 +3549,7 @@ var script = {
3553
3549
  return this.dragUpdateLine(lines);
3554
3550
  });
3555
3551
  Promise.all(promises).then(() => {
3556
- let lineIndex = lane.lines.findIndex((line) => line.lineId == data.lineId);
3557
- this.onLineChange(lane.lines[lineIndex], ACTION_TYPE.UPSERT_LINE);
3552
+ this.setDefaultAndNotify();
3558
3553
  });
3559
3554
  }
3560
3555
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/context-menu/index.vue","../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../node_modules/.pnpm/vue-runtime-helpers@1.1.2/node_modules/vue-runtime-helpers/dist/normalize-component.mjs","../../../src/components/strategies/CustomStrategy.js","../../../src/components/store/db-manager.js","../../../src/components/util/index.js","../../../src/components/strategies/DefaultLocalStrategy.js","../../../src/components/strategies/StrategyFactory.js","../../../src/components/kd-lane/config/TemplateEdit.vue","../../../src/components/kd-lane/config/LaneEdit.vue","../../../src/components/kd-lane/config/LineEdit.vue","../../../src/components/kd-lane/config/RealTimeCurveConfig.vue","../../../src/components/kd-lane/const/action-type.js","../../../src/components/kd-lane/header-item.vue","../../../src/components/kd-lane/chart-container.vue","../../../src/components/kd-lane/index.js"],"sourcesContent":["<template>\r\n <div>\r\n <ul ref=\"refUl\" class=\"vue-simple-context-menu\" v-click-outside=\"onClickOutside\">\r\n <li\r\n v-for=\"(option, index) in options\"\r\n :key=\"index\"\r\n @click.stop=\"optionClicked(option)\"\r\n class=\"vue-simple-context-menu__item\"\r\n :class=\"[option.class, option.type === 'divider' ? 'vue-simple-context-menu__divider' : '']\"\r\n >\r\n <span v-html=\"option.name\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from \"vue\";\r\nimport vClickOutside from \"v-click-outside\";\r\nVue.use(vClickOutside);\r\n\r\nexport default {\r\n name: \"VueSimpleContextMenu\",\r\n props: {\r\n options: {\r\n type: Array,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n item: null,\r\n menuWidth: null,\r\n menuHeight: null,\r\n };\r\n },\r\n methods: {\r\n showMenu(event, item) {\r\n this.item = item;\r\n\r\n const menu = this.$refs.refUl;\r\n if (!menu) {\r\n return;\r\n }\r\n\r\n if (!this.menuWidth || !this.menuHeight) {\r\n menu.style.visibility = \"hidden\";\r\n menu.style.display = \"block\";\r\n this.menuWidth = menu.offsetWidth;\r\n this.menuHeight = menu.offsetHeight;\r\n menu.removeAttribute(\"style\");\r\n }\r\n\r\n if (this.menuWidth + event.pageX >= window.innerWidth) {\r\n menu.style.left = event.pageX - this.menuWidth + 2 + \"px\";\r\n } else {\r\n menu.style.left = event.pageX - 2 + \"px\";\r\n }\r\n\r\n if (this.menuHeight + event.pageY >= window.innerHeight) {\r\n menu.style.top = event.pageY - this.menuHeight + 2 + \"px\";\r\n } else {\r\n menu.style.top = event.pageY - 2 + \"px\";\r\n }\r\n menu.classList.add(\"vue-simple-context-menu--active\");\r\n },\r\n hideContextMenu() {\r\n const element = this.$refs.refUl;\r\n if (element) {\r\n element.classList.remove(\"vue-simple-context-menu--active\");\r\n this.$emit(\"menu-closed\");\r\n }\r\n },\r\n onClickOutside() {\r\n this.hideContextMenu();\r\n },\r\n optionClicked(option) {\r\n this.hideContextMenu();\r\n this.$emit(\"option-clicked\", {\r\n item: this.item,\r\n option: option,\r\n });\r\n },\r\n onEscKeyRelease(event) {\r\n if (event.keyCode === 27) {\r\n this.hideContextMenu();\r\n }\r\n },\r\n },\r\n mounted() {\r\n document.body.addEventListener(\"keyup\", this.onEscKeyRelease);\r\n },\r\n beforeDestroy() {\r\n document.removeEventListener(\"keyup\", this.onEscKeyRelease);\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.vue-simple-context-menu {\r\n top: 0;\r\n left: 0;\r\n margin: 0;\r\n padding: 0;\r\n display: none;\r\n list-style: none;\r\n position: fixed;\r\n z-index: 1000000;\r\n background-color: var(--kd-lane-container-context-background-color, #ecf0f1);\r\n border-bottom-width: 0px;\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\",\r\n \"Helvetica Neue\", sans-serif;\r\n box-shadow: 0 3px 6px 0 rgba(var(--kd-lane-container-context-item-color, #333), 0.2);\r\n border-radius: 4px;\r\n\r\n &--active {\r\n display: block;\r\n }\r\n\r\n &__item {\r\n display: flex;\r\n color: var(--kd-lane-container-context-item-color, #333);\r\n cursor: pointer;\r\n padding: 5px 15px;\r\n align-items: center;\r\n\r\n &:hover {\r\n background-color: var(--kd-lane-container-context-hover-background-color, #007aff);\r\n color: var(--kd-lane-container-context-hover-item-color, #fff);\r\n }\r\n }\r\n\r\n &__divider {\r\n box-sizing: content-box;\r\n height: 2px;\r\n background-color: var(--kd-lane-container-context-divider-color, #595a5a);\r\n padding: 4px 0;\r\n background-clip: content-box;\r\n pointer-events: none;\r\n }\r\n\r\n // Have to use the element so we can make use of `first-of-type` and\r\n // `last-of-type`\r\n li {\r\n &:first-of-type {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-of-type {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n}\r\n</style>\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n if (typeof shadowMode !== 'boolean') {\r\n createInjectorSSR = createInjector;\r\n createInjector = shadowMode;\r\n shadowMode = false;\r\n }\r\n // Vue.extend constructor export interop.\r\n const options = typeof script === 'function' ? script.options : script;\r\n // render functions\r\n if (template && template.render) {\r\n options.render = template.render;\r\n options.staticRenderFns = template.staticRenderFns;\r\n options._compiled = true;\r\n // functional template\r\n if (isFunctionalTemplate) {\r\n options.functional = true;\r\n }\r\n }\r\n // scopedId\r\n if (scopeId) {\r\n options._scopeId = scopeId;\r\n }\r\n let hook;\r\n if (moduleIdentifier) {\r\n // server build\r\n hook = function (context) {\r\n // 2.3 injection\r\n context =\r\n context || // cached call\r\n (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n // 2.2 with runInNewContext: true\r\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n context = __VUE_SSR_CONTEXT__;\r\n }\r\n // inject component styles\r\n if (style) {\r\n style.call(this, createInjectorSSR(context));\r\n }\r\n // register component module identifier for async chunk inference\r\n if (context && context._registeredComponents) {\r\n context._registeredComponents.add(moduleIdentifier);\r\n }\r\n };\r\n // used by ssr in case component is cached and beforeCreate\r\n // never gets called\r\n options._ssrRegister = hook;\r\n }\r\n else if (style) {\r\n hook = shadowMode\r\n ? function (context) {\r\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n }\r\n : function (context) {\r\n style.call(this, createInjector(context));\r\n };\r\n }\r\n if (hook) {\r\n if (options.functional) {\r\n // register for functional component in vue file\r\n const originalRender = options.render;\r\n options.render = function renderWithStyleInjection(h, context) {\r\n hook.call(context);\r\n return originalRender(h, context);\r\n };\r\n }\r\n else {\r\n // inject component registration as beforeCreate hook\r\n const existing = options.beforeCreate;\r\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n }\r\n }\r\n return script;\r\n}\n\nexport default normalizeComponent;\n//# sourceMappingURL=normalize-component.mjs.map\n","export class CustomStrategy {\r\n constructor(strategy) {\r\n this.strategy = strategy;\r\n }\r\n\r\n /**\r\n * 加载配置\r\n * @returns {Promise<Object>} - 返回配置对象,包含所有模板、泳道和线条数据\r\n * @example\r\n * {\r\n * caseVersion: { caseId: \"case123\", versionCode: \"v1.0\", createDate: \"2023-01-01\" },\r\n * templates: [\r\n * {\r\n * templateId: \"tpl123\",\r\n * templateName: \"模板1\",\r\n * isPublic: \"1\",\r\n * lanes: [\r\n * {\r\n * laneId: \"lane123\",\r\n * laneName: \"泳道1\",\r\n * lines: [\r\n * { lineId: \"line123\", lineName: \"线条1\", laneId: \"lane123\", color: \"#ff0000\" },\r\n * { lineId: \"line456\", lineName: \"线条2\", laneId: \"lane123\", color: \"#00ff00\" }\r\n * ]\r\n * }\r\n * ]\r\n * }\r\n * ],\r\n * params: []\r\n * }\r\n */\r\n getUserTemplates() {\r\n return this.strategy.getUserTemplates();\r\n }\r\n\r\n /**\r\n * 新增或更新模板\r\n * @param {Object} data - 模板数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整模板对象\r\n * @example\r\n * {\r\n * templateId: \"tpl123\",\r\n * templateName: \"模板1\",\r\n * isPublic: \"1\",\r\n * createDate: \"2023-01-01\",\r\n * updateDate: \"2023-01-02\"\r\n * }\r\n */\r\n upsertTemplate(data) {\r\n return this.strategy.upsertTemplate(data);\r\n }\r\n\r\n /**\r\n * 删除模板\r\n * @param {Object} data - 模板数据(需包含templateId)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delTemplate(data) {\r\n return this.strategy.deleteTemplate(data);\r\n }\r\n\r\n /**\r\n * 新增或更新泳道\r\n * @param {Object} data - 泳道数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整泳道对象\r\n * @example\r\n * {\r\n * laneId: \"lane123\",\r\n * laneName: \"泳道1\",\r\n * templateId: \"tpl123\",\r\n * createDate: \"2023-01-01\"\r\n * }\r\n */\r\n upsertLane(data) {\r\n return this.strategy.upsertLane(data);\r\n }\r\n\r\n /**\r\n * 删除泳道\r\n * @param {Object} lane - 泳道数据(需包含laneId和lines数组)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delLane(lane) {\r\n return this.strategy.deleteLane(lane);\r\n }\r\n\r\n /**\r\n * 新增或更新线条\r\n * @param {Object} data - 线条数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整线条对象\r\n * @example\r\n * {\r\n * lineId: \"line123\",\r\n * lineName: \"线条1\",\r\n * laneId: \"lane123\",\r\n * templateId: \"tpl123\",\r\n * color: \"#ff0000\",\r\n * createDate: \"2023-01-01\"\r\n * }\r\n */\r\n upsertLine(data) {\r\n return this.strategy.upsertLine(data);\r\n }\r\n\r\n /**\r\n * 删除线条\r\n * @param {Object} data - 线条数据(需包含lineId和laneId)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delLine(data) {\r\n return this.strategy.delLine(data);\r\n }\r\n\r\n /**\r\n * 恢复默认设置\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n restoreSetting() {\r\n if (this.strategy.restoreSetting) {\r\n return this.strategy.restoreSetting();\r\n }\r\n return Promise.resolve();\r\n }\r\n}\r\n","/**\r\n * 配置管理 IndexedDB 工具类(版本号归属场景)\r\n * 核心 Store:templates/lanes/lines/case_versions/params\r\n * 设计原则:ES6 + Promise 链式调用 + 低冗余 + 索引优化\r\n *\r\n * case_versions(caseId → versionCode)\r\n * ↓(通过caseId关联)\r\n * templates(caseId + templateId → 模板列表)\r\n * ↓(通过templateId关联)\r\n * lanes(caseId + laneId → 泳道列表)\r\n * ↓(通过laneId关联)\r\n * lines(caseId + lineId → 线条列表)\r\n *\r\n */\r\nclass ConfigDBManager {\r\n // 数据库常量配置(升级版本号到2)\r\n static DB_NAME = \"KDLaneChartContainerConfigDB\";\r\n static MAX_UNICODE_CHAR = \"\\uffff\";\r\n static DB_VERSION = 2;\r\n static STORE_NAMES = {\r\n TEMPLATES: \"templates\",\r\n LANES: \"lanes\",\r\n LINES: \"lines\",\r\n PARAMS: \"params\",\r\n CASE_VERSIONS: \"case_versions\",\r\n };\r\n\r\n // 私有变量:数据库实例\r\n _db = null;\r\n\r\n /**\r\n * 私有方法:打开/创建数据库(核心基础方法)\r\n * @returns {Promise<IDBDatabase>} 数据库实例Promise\r\n */\r\n _openDB() {\r\n return new Promise((resolve, reject) => {\r\n if (this._db) {\r\n resolve(this._db);\r\n return;\r\n }\r\n\r\n const request = indexedDB.open(ConfigDBManager.DB_NAME, ConfigDBManager.DB_VERSION);\r\n\r\n // 数据库版本升级/首次创建时执行(创建Store和索引)\r\n request.onupgradeneeded = (event) => {\r\n const db = event.target.result;\r\n const { STORE_NAMES } = ConfigDBManager;\r\n\r\n // 1. 创建 case_versions Store(场景版本,主键caseId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.CASE_VERSIONS)) {\r\n db.createObjectStore(STORE_NAMES.CASE_VERSIONS, {\r\n keyPath: \"caseId\",\r\n });\r\n }\r\n\r\n // 2. 重建 templates Store(复合主键:caseId + templateId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.TEMPLATES)) {\r\n // eslint-disable-next-line\r\n const templateStore = db.createObjectStore(STORE_NAMES.TEMPLATES, {\r\n keyPath: [\"caseId\", \"templateId\"],\r\n });\r\n }\r\n\r\n // 3. 重建 lanes Store(复合主键:caseId + laneId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.LANES)) {\r\n // eslint-disable-next-line\r\n const laneStore = db.createObjectStore(STORE_NAMES.LANES, {\r\n keyPath: [\"caseId\", \"laneId\"],\r\n });\r\n }\r\n\r\n // 4. 重建 lines Store(复合主键:caseId + lineId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.LINES)) {\r\n // eslint-disable-next-line\r\n const lineStore = db.createObjectStore(STORE_NAMES.LINES, {\r\n keyPath: [\"caseId\", \"lineId\"],\r\n });\r\n }\r\n\r\n // 5. 重建 params Store(复合主键:caseId + paramId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.PARAMS)) {\r\n // eslint-disable-next-line\r\n const paramStore = db.createObjectStore(STORE_NAMES.PARAMS, {\r\n keyPath: [\"caseId\", \"paramId\"],\r\n });\r\n }\r\n };\r\n\r\n // 打开成功\r\n request.onsuccess = (event) => {\r\n this._db = event.target.result;\r\n this._db.onclose = () => {\r\n this._db = null;\r\n };\r\n resolve(this._db);\r\n };\r\n\r\n // 打开失败\r\n request.onerror = (event) => {\r\n reject(new Error(`打开数据库失败:${event.target.error.message}`));\r\n };\r\n\r\n request.onblocked = () => {\r\n reject(new Error(\"数据库操作被阻塞,请关闭其他标签页后重试\"));\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * 关闭数据库\r\n * @returns {Promise<void>}\r\n */\r\n closeDB() {\r\n return new Promise((resolve) => {\r\n if (this._db) {\r\n this._db.close();\r\n this._db = null;\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * 私有工具方法:版本号比较\r\n * @param {string|number} newVersion - 新版本号\r\n * @param {string|number} oldVersion - 旧版本号\r\n * @returns {number} 比较结果\r\n */\r\n _compareVersion(newVersion, oldVersion) {\r\n const parseVersion = (v) => String(v).split(\".\").map(Number);\r\n const newV = parseVersion(newVersion);\r\n const oldV = parseVersion(oldVersion);\r\n const maxLen = Math.max(newV.length, oldV.length);\r\n for (let i = 0; i < maxLen; i++) {\r\n const newSeg = newV[i] || 0;\r\n const oldSeg = oldV[i] || 0;\r\n if (newSeg > oldSeg) return 1;\r\n if (newSeg < oldSeg) return -1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * 私有方法:清除指定场景下的所有数据\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<void>}\r\n */\r\n _clearSceneData(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction(\r\n [\r\n ConfigDBManager.STORE_NAMES.CASE_VERSIONS,\r\n ConfigDBManager.STORE_NAMES.TEMPLATES,\r\n ConfigDBManager.STORE_NAMES.LANES,\r\n ConfigDBManager.STORE_NAMES.LINES,\r\n ConfigDBManager.STORE_NAMES.PARAMS,\r\n ],\r\n \"readwrite\"\r\n );\r\n\r\n const tStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n const lStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n const lineStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n const cvStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n const paramsStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n const bound = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n tStore.delete(bound);\r\n lStore.delete(bound);\r\n lineStore.delete(bound);\r\n paramsStore.delete(bound);\r\n cvStore.delete(caseId);\r\n\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`事务失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 私有工具:将 IDBRequest 转为 Promise\r\n * @param {IDBRequest} request - IndexedDB 请求对象\r\n * @returns {Promise<any>}\r\n */\r\n _promisifyRequest(request) {\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = () => resolve(request.result);\r\n request.onerror = () => reject(request.error);\r\n });\r\n }\r\n\r\n /**\r\n * 强制初始化场景配置\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源 {templates, lanes, lines, params}\r\n * @returns {Promise<Object>} 写入后的完整配置\r\n */\r\n forceInitSceneConfig(caseId, versionCode, dataSource) {\r\n if (!caseId || !versionCode) {\r\n return Promise.reject(new Error(\"caseId和versionCode为强制初始化的必传参数\"));\r\n }\r\n return this._clearSceneData(caseId)\r\n .then(() => {\r\n const config = this.setUpData(caseId, versionCode, dataSource);\r\n return this.batchAddConfig(config);\r\n })\r\n .catch((err) => {\r\n throw new Error(`强制初始化场景配置失败:${err.message}`);\r\n });\r\n }\r\n\r\n /**\r\n * 组装配置数据(自动为子项添加caseId)\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源\r\n * @returns {Object} 完整配置\r\n */\r\n setUpData(caseId, versionCode, dataSource) {\r\n // 为所有子项添加caseId\r\n const templates = dataSource.templates.map((t) => ({ ...t, caseId }));\r\n const lanes = dataSource.lanes.map((l) => ({ ...l, caseId }));\r\n const lines = dataSource.lines.map((line) => ({ ...line, caseId }));\r\n const params = dataSource.params.map((p) => ({ ...p, caseId }));\r\n\r\n return {\r\n caseVersion: { caseId, versionCode, updateTime: new Date() },\r\n templates,\r\n lanes,\r\n lines,\r\n params,\r\n };\r\n }\r\n\r\n /**\r\n * 校验场景配置完整性\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @returns {Promise<boolean>} true=异常,false=正常\r\n */\r\n checkConfigIntegrity(caseId, versionCode) {\r\n return this.getCaseVersionByCaseId(caseId).then((caseVersion) => {\r\n if (!caseVersion || caseVersion.versionCode !== versionCode) return false;\r\n return this.getTemplatesByCaseId(caseId).then((templates) => {\r\n if (templates.length === 0) return true;\r\n const randomTplId = templates[0].templateId;\r\n return this.getLanesByTemplateId(caseId, randomTplId).then((lanes) => {\r\n if (lanes.length === 0) return true;\r\n const randomLaneId = lanes[0].laneId;\r\n return this.getLinesByLaneId(caseId, randomLaneId).then((lines) => lines.length === 0);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 私有核心方法:初始化场景配置\r\n * @param {Object} config - 完整配置\r\n * @returns {Promise<Object>}\r\n */\r\n _initSceneConfig(config) {\r\n const { caseVersion } = config;\r\n const { caseId, versionCode } = caseVersion;\r\n\r\n return this.getCaseVersionByCaseId(caseId).then((oldCaseVersion) => {\r\n if (!oldCaseVersion) {\r\n return this.batchAddConfig(config);\r\n }\r\n\r\n const compareResult = this._compareVersion(versionCode, oldCaseVersion.versionCode);\r\n if (compareResult > 0) {\r\n return this._clearSceneData(caseId).then(() => this.batchAddConfig(config));\r\n } else if (compareResult === 0) {\r\n console.log(`场景${caseId}已存在版本${versionCode},无需重复创建`);\r\n return Promise.resolve(oldCaseVersion);\r\n } else {\r\n throw new Error(`场景${caseId}当前版本${oldCaseVersion.versionCode}高于待创建版本${versionCode}。`);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 对外暴露的便捷入口方法\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源\r\n * @returns {Promise<Object>} 初始化后的配置\r\n */\r\n saveSceneConfig(caseId, versionCode, dataSource) {\r\n if (!caseId || !versionCode) {\r\n return Promise.reject(new Error(\"caseId和versionCode为必传参数\"));\r\n }\r\n if (!Array.isArray(dataSource.templates) || !Array.isArray(dataSource.lanes) || !Array.isArray(dataSource.lines)) {\r\n return Promise.reject(new Error(\"templates/lanes/lines必须为数组\"));\r\n }\r\n\r\n const config = this.setUpData(caseId, versionCode, dataSource);\r\n return this._initSceneConfig(config);\r\n }\r\n\r\n /**\r\n * 批量添加配置(内部使用)\r\n * @param {Object} config - 完整配置\r\n * @returns {Promise<Object>}\r\n */\r\n batchAddConfig(config) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction(\r\n [\r\n ConfigDBManager.STORE_NAMES.CASE_VERSIONS,\r\n ConfigDBManager.STORE_NAMES.TEMPLATES,\r\n ConfigDBManager.STORE_NAMES.LANES,\r\n ConfigDBManager.STORE_NAMES.LINES,\r\n ConfigDBManager.STORE_NAMES.PARAMS,\r\n ],\r\n \"readwrite\"\r\n );\r\n\r\n // 保存场景版本\r\n transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS).put(config.caseVersion);\r\n\r\n // 保存模板(已包含caseId)\r\n const tStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n config.templates.forEach((tpl) => tStore.put(tpl));\r\n\r\n // 保存泳道(已包含caseId)\r\n const lStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n config.lanes.forEach((lane) => lStore.put(lane));\r\n\r\n // 保存线条(已包含caseId)\r\n const lineStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n config.lines.forEach((line) => lineStore.put(line));\r\n\r\n // 保存参数(已包含caseId)\r\n const pStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n config.params.forEach((param) => pStore.put(param));\r\n\r\n transaction.oncomplete = () => resolve(config);\r\n transaction.onerror = (e) => reject(new Error(`批量添加配置失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== case_versions 操作 ======================\r\n /**\r\n * 新增/更新场景版本\r\n * @param {Object} caseVersion - { caseId, versionCode, updateTime: Date }\r\n * @returns {Promise<Object>}\r\n */\r\n upsertCaseVersion(caseVersion) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n const versionData = {\r\n updateTime: new Date(),\r\n ...caseVersion,\r\n };\r\n\r\n this._promisifyRequest(store.put(versionData))\r\n .then(() => resolve(versionData))\r\n .catch((error) => reject(new Error(`更新场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询场景版本\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getCaseVersionByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n this._promisifyRequest(store.get(caseId))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询完整配置信息(含模板、泳道、线条、参数)\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Object>} 完整配置对象 { caseVersion, templates: [{...tpl, lanes: [{...lane, lines: [...]}]}], params }\r\n */\r\n getConfigByCaseId(caseId) {\r\n if (!caseId) {\r\n return Promise.reject(new Error(\"caseId为必传参数\"));\r\n }\r\n\r\n // 并行查询基础数据(场景版本、模板、参数)\r\n return Promise.all([this.getCaseVersionByCaseId(caseId), this.getTemplatesByCaseId(caseId), this.getParamsByCaseId(caseId)])\r\n .then(([caseVersion, templates, params]) => {\r\n // 遍历模板,为每个模板查询关联的泳道及线条\r\n const templatePromises = templates.map((tpl) => {\r\n return this.getLanesByTemplateId(caseId, tpl.templateId).then((lanes) => {\r\n // 遍历泳道,为每个泳道查询关联的线条\r\n const lanePromises = lanes.map((lane) => {\r\n return this.getLinesByLaneId(caseId, lane.laneId).then((lines) => ({ ...lane, lines }));\r\n });\r\n return Promise.all(lanePromises).then((lanesWithLines) => ({\r\n ...tpl,\r\n lanes: lanesWithLines,\r\n }));\r\n });\r\n });\r\n\r\n return Promise.all(templatePromises).then((templatesWithLanes) => ({\r\n caseVersion,\r\n templates: templatesWithLanes,\r\n params,\r\n }));\r\n })\r\n .catch((err) => {\r\n throw new Error(`查询场景配置失败:${err.message}`);\r\n });\r\n }\r\n\r\n getConfigByTemplateId(caseId, templateId) {\r\n if (!caseId || !templateId) {\r\n return Promise.reject(new Error(\"caseId为必传参数\"));\r\n }\r\n const template = {};\r\n return this.getLanesByTemplateId(caseId, templateId)\r\n .then((lanes) => {\r\n const lineTasks = lanes.map((lane) => {\r\n return this.getLinesByLaneId(caseId, lane.laneId);\r\n });\r\n\r\n return Promise.all(lineTasks).then((linesArray) => {\r\n linesArray.forEach((lines, index) => {\r\n lanes[index].lines = lines;\r\n });\r\n template.lanes = lanes;\r\n });\r\n })\r\n .then(() => {\r\n return this.getTemplateById(caseId, templateId);\r\n })\r\n .then((result) => {\r\n result.lanes = template.lanes;\r\n return Promise.resolve(result);\r\n });\r\n }\r\n\r\n /**\r\n * 删除场景版本\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteCaseVersion(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n this._promisifyRequest(store.delete(caseId))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n // ====================== templates 操作 ======================\r\n /**\r\n * 新增/更新模板(自动携带caseId)\r\n * @param {Object} template - 模板数据(含caseId、templateId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertTemplate(template) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!template.caseId) {\r\n reject(new Error(\"模板数据必须包含caseId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n const templateData = {\r\n ...template,\r\n createDate: template.createDate ? new Date(template.createDate) : new Date(),\r\n updateDate: template.updateDate ? new Date(template.updateDate) : null,\r\n };\r\n delete templateData.lanes;\r\n return this._promisifyRequest(store.put(templateData))\r\n .then(() => resolve(templateData))\r\n .catch((error) => reject(new Error(`更新模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和templateId查询模板\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getTemplateById(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n\r\n this._promisifyRequest(store.get([caseId, templateId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询所有模板\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Array>} 模板列表\r\n */\r\n getTemplatesByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n // 通过复合主键前缀查询(caseId匹配)\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n this._promisifyRequest(store.getAll(range))\r\n .then((result) => {\r\n resolve(result || []);\r\n })\r\n .catch((error) => reject(new Error(`查询场景下模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除模板\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteTemplate(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n\r\n this._promisifyRequest(store.delete([caseId, templateId]))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n // ====================== lanes 操作 ======================\r\n /**\r\n * 新增/更新泳道(自动携带caseId)\r\n * @param {Object} lane - 泳道数据(含caseId、laneId、templateId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertLane(caseId, lane) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!caseId || !lane.templateId) {\r\n reject(new Error(\"泳道数据必须包含caseId和templateId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n const laneData = {\r\n ...lane,\r\n caseId: caseId,\r\n updateDate: lane.updateDate ? new Date(lane.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(laneData))\r\n .then(() => resolve(laneData))\r\n .catch((error) => reject(new Error(`更新泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和laneId查询泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {string} laneId - 泳道ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getLaneById(caseId, laneId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n this._promisifyRequest(store.get([caseId, laneId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和templateId查询泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<Array>} 泳道列表\r\n */\r\n getLanesByTemplateId(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n // 原索引查询修改为:查询该场景下所有泳道后过滤templateId\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((lanes) => lanes.filter((lane) => lane.templateId === templateId))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询模板下泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {Array} laneIds - 泳道ID数组\r\n * @returns {Promise<void>}\r\n */\r\n deleteLaneByLaneIds(caseId, laneIds) {\r\n if (!Array.isArray(laneIds) || laneIds.length === 0) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n laneIds.map((laneId) => this._promisifyRequest(store.delete([caseId, laneId])));\r\n\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`删除泳道失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== lines 操作 ======================\r\n /**\r\n * 新增/更新线条(自动携带caseId)\r\n * @param {Object} line - 线条数据(含caseId、lineId、laneId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertLine(caseId, line) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!caseId || !line.laneId) {\r\n reject(new Error(\"线条数据必须包含caseId和laneId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n const lineData = {\r\n ...line,\r\n caseId: caseId,\r\n updateDate: line.updateDate ? new Date(line.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(lineData))\r\n .then(() => resolve(lineData))\r\n .catch((error) => reject(new Error(`更新线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和lineId查询线条\r\n * @param {string} caseId - 场景ID\r\n * @param {string} lineId - 线条ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getLineById(caseId, lineId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n this._promisifyRequest(store.get([caseId, lineId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和laneId查询线条\r\n * @param {string} caseId - 场景ID\r\n * @param {string} laneId - 泳道ID\r\n * @returns {Promise<Array>} 线条列表\r\n */\r\n getLinesByLaneId(caseId, laneId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n // 原索引查询修改为:查询该场景下所有线条后过滤laneId\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((lines) => lines.filter((line) => line.laneId === laneId))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询泳道下线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除线条\r\n * @param {string} caseId - 场景ID\r\n * @param {Array} lineIds - 线条ID数组\r\n * @returns {Promise<void>}\r\n */\r\n deleteLineByIds(caseId, lineIds) {\r\n // 边界处理:空数组直接resolve,避免无意义的事务操作\r\n if (!Array.isArray(lineIds) || lineIds.length === 0) {\r\n return Promise.resolve();\r\n }\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n // 批量执行delete,复用同一个事务\r\n lineIds.map((lineId) => this._promisifyRequest(store.delete([caseId, lineId])));\r\n // 监听事务完成/错误\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`批量删除线条失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== params 操作 ======================\r\n /**\r\n * 新增/更新参数(自动携带caseId)\r\n * @param {Object} param - 参数数据(含caseId、paramId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertParam(param) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!param.caseId) {\r\n reject(new Error(\"参数数据必须包含caseId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n const paramData = {\r\n ...param,\r\n updateDate: param.updateDate ? new Date(param.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(paramData))\r\n .then(() => resolve(paramData))\r\n .catch((error) => reject(new Error(`更新参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和paramId查询参数\r\n * @param {string} caseId - 场景ID\r\n * @param {string} paramId - 参数ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getParamById(caseId, paramId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n this._promisifyRequest(store.get([caseId, paramId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询所有参数\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Array>} 参数列表\r\n */\r\n getParamsByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n // 通过复合主键前缀查询\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询场景下参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除参数\r\n * @param {string} caseId - 场景ID\r\n * @param {string} paramId - 参数ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteParamById(caseId, paramId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n this._promisifyRequest(store.delete([caseId, paramId]))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n}\r\nexport const dbHelper = new ConfigDBManager();\r\n","export function isNumeric(val) {\r\n return val != null && val !== \"\" && !Number.isNaN(Number(val));\r\n}\r\nexport function pxToNumber(pxStr) {\r\n if (!pxStr || typeof pxStr !== \"string\") return 0;\r\n return parseFloat(pxStr.replace(\"px\", \"\")) || 0;\r\n}\r\n/**\r\n * 【原地排序】对单个泳道(lane)的lines数组按lineSort升序排序\r\n * @param {Object} lane - 单个泳道对象(直接修改原对象的lines)\r\n */\r\nexport function sortLaneLines(lane) {\r\n // 边界保护:lane不存在/无lines字段则不处理\r\n if (!lane || !Array.isArray(lane.lines)) return;\r\n\r\n // 直接对原lines数组原地排序(无拷贝)\r\n lane.lines.sort((a, b) => {\r\n const lineSortA = a.lineSort ?? 0;\r\n const lineSortB = b.lineSort ?? 0;\r\n return lineSortA - lineSortB;\r\n });\r\n}\r\n\r\n/**\r\n * 【原地排序】对lanes数组按sort升序排序,并原地处理每条lane的lines\r\n * @param {Array} lanes - 泳道数组(直接修改原数组)\r\n */\r\nexport function sortLanes(lanes) {\r\n // 边界保护:非数组则不处理\r\n if (!Array.isArray(lanes)) return;\r\n\r\n // 1. 直接对原lanes数组原地排序(无拷贝)\r\n lanes.sort((a, b) => {\r\n const sortA = a.sort ?? 0;\r\n const sortB = b.sort ?? 0;\r\n return sortA - sortB;\r\n });\r\n\r\n // 2. 遍历每条lane,原地排序其lines\r\n lanes.forEach((lane) => sortLaneLines(lane));\r\n}\r\n\r\n/**\r\n * 【原地排序】完整的模板排序逻辑(直接修改原templates数组)\r\n * @param {Array} templates - 模板数组(直接修改原数组)\r\n * @returns {Array} 返回原数组(方便链式调用,本质已原地修改)\r\n */\r\nexport function sortTemplates(templates) {\r\n // 边界保护:非数组/空数组直接返回\r\n if (!Array.isArray(templates) || templates.length === 0) {\r\n return templates;\r\n }\r\n\r\n // 1. 直接对原templates数组原地排序(无拷贝)\r\n templates.sort((a, b) => {\r\n const sortA = a.sort ?? 0;\r\n const sortB = b.sort ?? 0;\r\n return sortA - sortB;\r\n });\r\n\r\n // 2. 遍历每个模板,原地排序其lanes\r\n templates.forEach((template) => sortLanes(template.lanes));\r\n\r\n // 返回原数组(方便调用方链式操作,比如 sortTemplates(arr).filter(...))\r\n return templates;\r\n}\r\n\r\n/**\r\n * 判断RQW数据类型\r\n * @param {Object} data - 待判断的数据对象\r\n * @returns {string|null} - 返回数据类型('line'|'lane'|'template')或null\r\n *\r\n * 类型判断规则:\r\n * - 同时包含lineId和laneId时,返回'line'(线路类型)\r\n * - 包含laneId和templateId但不包含lineId时,返回'lane'(车道类型)\r\n * - 只包含templateId时,返回'template'(模板类型)\r\n * - 不满足以上条件时,返回null\r\n */\r\nexport function judgeRawDataType(data) {\r\n // 如果数据为空,直接返回null\r\n if (!data) return null;\r\n\r\n // 判断是否为线路类型(同时包含lineId和laneId)\r\n if (data.lineId && data.laneId) {\r\n return \"line\";\r\n }\r\n // 判断是否为车道类型(包含laneId和templateId,但不包含lineId)\r\n else if (data.laneId && data.templateId && !data.lineId) {\r\n return \"lane\";\r\n }\r\n // 判断是否为模板类型(只包含templateId)\r\n else if (data.templateId) {\r\n return \"template\";\r\n }\r\n // 其他情况返回null\r\n else {\r\n return null;\r\n }\r\n}\r\nexport function strategyValidator(config) {\r\n // 1. 必须是对象\r\n if (typeof config !== \"object\" || config === null) {\r\n throw new Error(\"配置必须是一个对象\");\r\n }\r\n\r\n // 2. 必须有 type 属性\r\n if (!(\"type\" in config)) {\r\n throw new Error(\"配置必须包含 type 属性\");\r\n }\r\n\r\n // 通用参数校验\r\n if (!(\"caseId\" in config) || !(\"versionCode\" in config)) {\r\n throw new Error(\"配置必须包含 caseId, versionCode 属性\");\r\n }\r\n\r\n const { type } = config;\r\n\r\n // 3. 根据 type 的值进一步校验\r\n if (type === \"local\") {\r\n if (!(\"dataSource\" in config) || config.dataSource == null) {\r\n throw new Error(\"local 类型的配置必须包含 dataSource 属性\");\r\n }\r\n\r\n if (!(\"params\" in config.dataSource)) {\r\n throw new Error(\"local 类型的配置 dataSource 必须包含 params 属性\");\r\n }\r\n } else if (type === \"custom\") {\r\n // 校验增删改查方法是否为函数\r\n const crudMethods = [\"getUserTemplates\", \"upsertTemplate\", \"delTemplate\", \"upsertLane\", \"delLane\", \"upsertLine\", \"delLine\"];\r\n for (const method of crudMethods) {\r\n if (typeof config[method] !== \"function\") {\r\n throw new Error(`${method} 必须是一个函数`);\r\n }\r\n }\r\n } else {\r\n throw new Error('type 必须是 \"local\" 或 \"custom\"');\r\n }\r\n\r\n return true; // 校验通过\r\n}\r\n\r\n/**\r\n * 数据归一化:将任意输入结构转为树形结构\r\n * @param {*} data 外部传入的数据源(扁平结构/树形结构)\r\n * @returns {Array} 统一的树形templates数组\r\n */\r\nexport function normalizeData(data) {\r\n // 容错:空数据返回空数组\r\n if (!data) return [];\r\n\r\n // 情况1:扁平结构 → 转换\r\n if (isFlatStructure(data)) {\r\n return flattenToTree(data.templates, data.lanes, data.lines);\r\n }\r\n\r\n // 情况2:树形结构 → 直接提取templates(兼容两种传入形式:{templates:[]} 或 直接传templates数组)\r\n if (isTreeStructure(data)) {\r\n return Array.isArray(data) ? data : data.templates;\r\n }\r\n\r\n // 情况3:非法结构 → 报错并返回空数组\r\n console.error(\"传入的数据源结构不支持,请检查格式!\");\r\n return [];\r\n}\r\n\r\n/**\r\n * 判断是否为扁平结构\r\n * @param {*} data 传入的数据源\r\n * @returns {boolean}\r\n */\r\nexport function isFlatStructure(data) {\r\n // 扁平结构特征:包含templates、lanes、lines三个数组,且templates第一项无lanes属性\r\n return (\r\n !!data &&\r\n Array.isArray(data.templates) &&\r\n Array.isArray(data.lanes) &&\r\n Array.isArray(data.lines) &&\r\n (data.templates.length === 0 || !data.templates[0].lanes)\r\n );\r\n}\r\n\r\n/**\r\n * 判断是否为树形结构(第二种)\r\n * @param {*} data 传入的数据源\r\n * @returns {boolean}\r\n */\r\nexport function isTreeStructure(data) {\r\n // 树形结构特征:直接是templates数组,或包含templates数组且templates项有lanes数组\r\n if (Array.isArray(data)) {\r\n // 外部直接传templates数组的情况\r\n return data.length === 0 || (!!data[0] && Array.isArray(data[0].lanes));\r\n }\r\n return !!data && Array.isArray(data.templates) && (data.templates.length === 0 || Array.isArray(data.templates[0].lanes));\r\n}\r\n\r\n/**\r\n * 将扁平数据转换为树形结构\r\n * {templates : [], lanes : [], lines : []}\r\n */\r\nexport function flattenToTree(templates = [], lanes = [], lines = []) {\r\n const laneMap = new Map();\r\n for (const lane of lanes) {\r\n if (laneMap.has(lane.templateId)) {\r\n laneMap.get(lane.templateId).push(lane);\r\n } else {\r\n laneMap.set(lane.templateId, [lane]);\r\n }\r\n }\r\n const lineMap = new Map();\r\n for (const line of lines) {\r\n if (lineMap.has(line.laneId)) {\r\n lineMap.get(line.laneId).push(line);\r\n } else {\r\n lineMap.set(line.laneId, [line]);\r\n }\r\n }\r\n\r\n const result = [];\r\n\r\n for (const template of templates) {\r\n const tempT = { ...template };\r\n const tId = tempT.templateId;\r\n tempT.lanes = laneMap.get(tId) || [];\r\n\r\n for (const lane of tempT.lanes) {\r\n const laneId = lane.laneId;\r\n lane.lines = lineMap.get(laneId) || [];\r\n }\r\n result.push(tempT);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * 将树形结构数据转换为扁平数据\r\n */\r\nexport function treeToFlatten(treeData) {\r\n const templates = [];\r\n const lanes = [];\r\n const lines = [];\r\n\r\n for (const template of treeData) {\r\n // 未被显式提取的其他所有属性 收集到一个新的对象 templateData 中\r\n const { lanes: templateLanes, ...templateData } = template;\r\n\r\n // 如果template没有templateId属性,则调用generateUUID为其生成\r\n if (!templateData.templateId) {\r\n templateData.templateId = generateUUID();\r\n }\r\n\r\n templates.push(templateData);\r\n\r\n for (const lane of templateLanes || []) {\r\n const { lines: laneLines, ...laneData } = lane;\r\n\r\n // lane中的templateId属性,确保等于他所在template对象中的templateId属性\r\n laneData.templateId = templateData.templateId;\r\n\r\n // 如果没有laneId属性,则调用generateUUID为其生成\r\n if (!laneData.laneId) {\r\n laneData.laneId = generateUUID();\r\n }\r\n\r\n lanes.push(laneData);\r\n\r\n for (const line of laneLines || []) {\r\n // 确保line中的laneId等于他所在对象的laneId属性\r\n line.laneId = laneData.laneId;\r\n\r\n // 如果没有lineId,则调用generateUUID方法为其生成\r\n if (!line.lineId) {\r\n line.lineId = generateUUID();\r\n }\r\n\r\n lines.push(line);\r\n }\r\n }\r\n }\r\n return { templates, lanes, lines };\r\n}\r\n\r\nexport function generateUUID(simple = true) {\r\n // 优先使用现代浏览器的原生方法\r\n let uuid = \"\";\r\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\r\n uuid = crypto.randomUUID();\r\n } else {\r\n uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n if (simple) {\r\n // 替换掉-号, 生成的UUID更短\r\n return uuid.replace(/-/g, \"\");\r\n } else {\r\n return uuid;\r\n }\r\n}\r\n","import { dbHelper } from \"../store/db-manager.js\";\nimport { generateUUID } from \"../util/index.js\";\nexport class DefaultLocalStrategy {\n constructor(caseId, versionCode, dataSource, flatData = true) {\n this.caseId = caseId;\n this.versionCode = versionCode;\n this.dataSource = dataSource;\n this.flatData = flatData;\n this.ready = dbHelper.saveSceneConfig(caseId, versionCode, dataSource).catch((e) => {\n console.warn(`初始化数据库出错,直接重置:${e.message}`);\n // 版本冲突的话,直接重置\n return dbHelper.forceInitSceneConfig(caseId, versionCode, dataSource);\n });\n }\n\n /**\n * 加载配置\n * @returns {Promise<Object>} - 返回配置对象,包含所有模板、泳道和线条数据\n * @example\n * {\n * caseVersion: { caseId: \"case123\", versionCode: \"v1.0\", createDate: \"2023-01-01\" },\n * templates: [\n * {\n * templateId: \"tpl123\",\n * templateName: \"模板1\",\n * isPublic: \"1\",\n * lanes: [\n * {\n * laneId: \"lane123\",\n * laneName: \"泳道1\",\n * lines: [\n * { lineId: \"line123\", lineName: \"线条1\", laneId: \"lane123\", color: \"#ff0000\" },\n * { lineId: \"line456\", lineName: \"线条2\", laneId: \"lane123\", color: \"#00ff00\" }\n * ]\n * }\n * ]\n * }\n * ],\n * params: []\n * }\n */\n getUserTemplates() {\n return this.ready.then(() => {\n return dbHelper.getConfigByCaseId(this.caseId);\n });\n }\n\n /**\n * 新增或更新模板\n * @param {Object} data - 模板数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整模板对象\n * @example\n * {\n * templateId: \"tpl123\",\n * templateName: \"模板1\",\n * isPublic: \"1\",\n * createDate: \"2023-01-01\",\n * updateDate: \"2023-01-02\"\n * }\n */\n upsertTemplate(template) {\n let p;\n // 第一步,如果没有templateId,则先创建一条\n if (!template.templateId) {\n const newTemplateId = generateUUID();\n template.templateId = newTemplateId;\n if (template.baseTemplate) {\n const dataSource = {};\n // 如果template有baseTemplate属性,则要复制其内容到template\n p = dbHelper\n .getLanesByTemplateId(this.caseId, template.baseTemplate)\n .then((lanes) => {\n dataSource.lanes = lanes;\n\n const linesP = lanes.map((lane) => {\n return dbHelper.getLinesByLaneId(this.caseId, lane.laneId);\n });\n return Promise.all(linesP).then((results) => {\n const allLines = [];\n // 二维数组\n const linesByLane = results;\n linesByLane.forEach((lines, index) => {\n const newLaneId = generateUUID();\n dataSource.lanes[index].laneId = newLaneId;\n dataSource.lanes[index].templateId = newTemplateId;\n dataSource.lanes[index].createUser = undefined;\n lines.forEach((line) => {\n line.lineId = generateUUID();\n line.laneId = newLaneId;\n line.createUser = undefined;\n allLines.push(line);\n });\n });\n dataSource.lines = allLines;\n });\n })\n .then(() => {\n dataSource.templates = [template];\n })\n .then(() => {\n dataSource.params = [];\n const config = dbHelper.setUpData(this.caseId, this.versionCode, dataSource);\n return dbHelper.batchAddConfig(config);\n })\n .then(() => {\n return dbHelper.getTemplateById(this.caseId, newTemplateId);\n });\n } else {\n p = dbHelper.upsertTemplate(template);\n }\n } else {\n p = dbHelper.upsertTemplate(template);\n }\n\n if (template.isPublic === \"1\") {\n return p.then(() => {\n return dbHelper\n .getTemplatesByCaseId(this.caseId)\n .then((templates) => {\n return templates.filter((t) => {\n return t.templateId !== template.templateId;\n });\n })\n .then((allT) => {\n allT.forEach((t) => {\n t.isPublic = \"0\";\n });\n const PArray = allT.map((t) => {\n return dbHelper.upsertTemplate(t);\n });\n return Promise.all(PArray);\n })\n .then(() => {\n return dbHelper.getConfigByTemplateId(this.caseId, template.templateId);\n });\n });\n } else {\n return p;\n }\n }\n\n /**\n * 删除模板\n * @param {Object} data - 模板数据(需包含templateId)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n deleteTemplate(data) {\n return dbHelper\n .getLanesByTemplateId(this.caseId, data.templateId)\n .then((lanes) => {\n const allLaneIds = lanes.map((lane) => lane.laneId);\n\n let linesP = allLaneIds.map((laneId) => {\n return dbHelper.getLinesByLaneId(this.caseId, laneId);\n });\n\n return Promise.all(linesP)\n .then((results) => {\n const allLineIds = results\n .reduce((previousValue, currentValue) => {\n return previousValue.concat(currentValue);\n }, [])\n .map((line) => line.lineId);\n return dbHelper.deleteLineByIds(this.caseId, allLineIds);\n })\n .then(() => {\n return Promise.resolve(allLaneIds);\n });\n })\n .then((allLaneIds) => {\n return dbHelper.deleteLaneByLaneIds(this.caseId, allLaneIds);\n })\n .then(() => {\n return dbHelper.deleteTemplate(this.caseId, data.templateId);\n })\n .then(() => {\n return Promise.resolve(data);\n });\n }\n\n /**\n * 新增或更新泳道\n * @param {Object} data - 泳道数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整泳道对象\n * @example\n * {\n * laneId: \"lane123\",\n * laneName: \"泳道1\",\n * templateId: \"tpl123\",\n * createDate: \"2023-01-01\"\n * }\n */\n upsertLane(lane) {\n if (!lane.laneId) {\n lane.laneId = generateUUID();\n }\n if (!lane.lines) {\n lane.lines = [];\n }\n return dbHelper.upsertLane(this.caseId, lane);\n }\n\n /**\n * 删除泳道\n * @param {Object} lane - 泳道数据(需包含laneId和lines数组)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n delLane(lane) {\n const { lines, laneId } = lane;\n const allLineIds = lines.map((line) => line.lineId);\n return dbHelper\n .deleteLineByIds(this.caseId, allLineIds)\n .then(() => {\n return dbHelper.deleteLaneByLaneIds(this.caseId, [laneId]);\n })\n .then(() => {\n return Promise.resolve(lane);\n });\n }\n\n /**\n * 新增或更新线条\n * @param {Object} data - 线条数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整线条对象\n * @example\n * {\n * lineId: \"line123\",\n * lineName: \"线条1\",\n * laneId: \"lane123\",\n * templateId: \"tpl123\",\n * color: \"#ff0000\",\n * createDate: \"2023-01-01\"\n * }\n */\n upsertLine(line) {\n if (!line.lineId) {\n line.lineId = generateUUID();\n }\n if (!line.laneId) {\n return Promise.reject(new Error(\"更新线条数据的时候,必须laneId不能为空!\"));\n }\n return dbHelper.upsertLine(this.caseId, line);\n }\n\n /**\n * 删除线条\n * @param {Object} data - 线条数据(需包含lineId和laneId)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n delLine(line) {\n if (!line.laneId) {\n return Promise.reject(new Error(\"更新线条数据的时候,必须laneId不能为空!\"));\n }\n return dbHelper.deleteLineByIds(this.caseId, [line.lineId]);\n }\n\n /**\n * 恢复设置\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n restoreSetting() {\n return dbHelper.forceInitSceneConfig(this.caseId, this.versionCode, this.dataSource);\n }\n\n // 获取策略类型(用于调试)\n getType() {\n return \"local-default\";\n }\n}\n","import { CustomStrategy } from \"./CustomStrategy.js\";\r\nimport { DefaultLocalStrategy } from \"./DefaultLocalStrategy.js\";\r\nimport { isFlatStructure, isTreeStructure, treeToFlatten } from \"../util/index.js\";\r\n\r\nexport class StrategyFactory {\r\n static createStrategy(strategy) {\r\n // 本地策略默认实现\r\n if (strategy.type === \"local\") {\r\n let option;\r\n if (isFlatStructure(strategy.dataSource)) {\r\n option = { ...strategy };\r\n } else if (isTreeStructure(strategy.dataSource)) {\r\n const flatedData = treeToFlatten(strategy.dataSource.templates);\r\n option = { ...strategy, dataSource: { ...flatedData, params: strategy.dataSource.params } };\r\n } else {\r\n throw new Error(\"策略数据源格式不匹配\");\r\n }\r\n const { caseId, versionCode, dataSource } = option;\r\n return new DefaultLocalStrategy(caseId, versionCode, dataSource, false);\r\n } else {\r\n return new CustomStrategy(strategy);\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"kd-lane-template-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" label-width=\"120px\">\r\n <el-form-item label=\"模板名称\" prop=\"templateName\">\r\n <el-input v-model=\"formData.templateName\" :disabled=\"currentTemplate.createUser == 'SYSTEM_USER' || formDisable\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"默认模板\" prop=\"isPublic\">\r\n <el-radio-group v-model=\"formData.isPublic\" :disabled=\"formDisable\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"曲线高度占比\" prop=\"col1\">\r\n <el-select v-model=\"formData.col1\" :disabled=\"formDisable\">\r\n <el-option value=\"0.5\" label=\"50%\"></el-option>\r\n <el-option value=\"0.6\" label=\"60%\"></el-option>\r\n <el-option value=\"0.7\" label=\"70%\"></el-option>\r\n <el-option value=\"0.8\" label=\"80%\"></el-option>\r\n <el-option value=\"0.9\" label=\"90%\"></el-option>\r\n <el-option value=\"1\" label=\"全屏\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"选择基础模板\" prop=\"lineType\" v-show=\"!currentTemplate.templateId\" :disabled=\"formDisable\">\r\n <el-select v-model=\"formData.baseTemplate\" placeholder=\"请选择\">\r\n <el-option v-for=\"item in baseTemplate\" :key=\"item.value\" :label=\"item.name\" :value=\"item.value\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"顺序\" prop=\"sort\" label-width=\"120px\">\r\n <el-input v-model.number=\"formData.sort\" :disabled=\"formDisable\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\" :loading=\"saving\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertTemplate\", \"setTargetData\", \"setExpanded\"],\r\n props: {\r\n currentTemplate: {\r\n type: Object,\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n userTemplate: {\r\n type: Array,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n },\r\n data() {\r\n return {\r\n formData: Object.assign({ sort: undefined }, this.currentTemplate),\r\n rules: {\r\n templateName: [{ required: true, message: \"请输入模板名称\", trigger: \"blur\" }],\r\n },\r\n saving: false,\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName].validate((valid) => {\r\n if (!valid) {\r\n return;\r\n }\r\n if (typeof this.upsertTemplate !== \"function\") {\r\n this.$message({ type: \"error\", message: \"没有配置模板管理方法\" });\r\n return;\r\n }\r\n this.saving = true;\r\n const payload = { ...this.formData };\r\n if (!payload.caseId) {\r\n payload.caseId = this.caseId;\r\n }\r\n const result = this.upsertTemplate(payload);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n });\r\n },\r\n },\r\n computed: {\r\n baseTemplate() {\r\n if (!this.userTemplate) {\r\n return [{ name: \"空白模板\", value: \"\" }];\r\n } else {\r\n return [\r\n { name: \"空白模板\", value: \"\" },\r\n ...this.userTemplate.map((item) => {\r\n return {\r\n name: item.templateName,\r\n value: item.templateId,\r\n };\r\n }),\r\n ];\r\n }\r\n },\r\n },\r\n watch: {\r\n currentTemplate: {\r\n deep: true,\r\n handler: function (newV) {\r\n this.formData = Object.assign({}, newV);\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-template-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-lane-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" label-width=\"120px\">\r\n <el-form-item label=\"泳道顺序\" prop=\"sort\">\r\n <el-input v-model=\"formData.sort\" :disabled=\"formDisable\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\" :loading=\"saving\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertLane\", \"setTargetData\", \"setExpanded\"],\r\n props: {\r\n laneInfo: {\r\n type: Object,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n },\r\n data() {\r\n return {\r\n formData: Object.assign(this.laneInfo),\r\n rules: {\r\n sort: [{ required: true, message: \"请输入泳道顺序\", trigger: \"blur\" }],\r\n },\r\n saving: false,\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName].validate((valid) => {\r\n if (!valid) {\r\n return;\r\n }\r\n if (typeof this.upsertLane !== \"function\") {\r\n this.$message({ type: \"error\", message: \"没有配置泳道管理方法\" });\r\n return;\r\n }\r\n this.saving = true;\r\n const payload = { ...this.formData };\r\n if (!payload.caseId) {\r\n payload.caseId = this.caseId;\r\n }\r\n const result = this.upsertLane(payload);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n });\r\n },\r\n },\r\n computed: {},\r\n watch: {\r\n laneInfo: {\r\n deep: true,\r\n handler: function (newV) {\r\n this.formData = Object.assign({}, newV);\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-lane-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-line-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" :disabled=\"formDisable\">\r\n <el-form-item label=\"参数名称\" prop=\"paramId\" label-width=\"120px\">\r\n <el-select v-model=\"formData.paramId\" filterable placeholder=\"请选择\">\r\n <el-option v-for=\"item in params\" :key=\"item.paramId\" :label=\"item.paramName\" :value=\"item.paramId\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"最小值\" prop=\"min\" label-width=\"120px\">\r\n <el-input v-model=\"formData.min\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"最大值\" prop=\"max\" label-width=\"120px\">\r\n <el-input v-model=\"formData.max\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"曲线粗细\" prop=\"lineSize\" label-width=\"120px\">\r\n <el-input v-model=\"formData.lineSize\" :max=\"4\" :min=\"1\" type=\"number\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"曲线颜色\" prop=\"lineColor\" label-width=\"120px\">\r\n <el-color-picker v-model=\"formData.lineColor\" :disabled=\"formData.isGradient\"></el-color-picker>\r\n </el-form-item>\r\n <el-form-item label=\"线型\" prop=\"lineType\" label-width=\"120px\">\r\n <el-select v-model=\"formData.lineType\" placeholder=\"请选择\" :disabled=\"formData.isGradient\">\r\n <el-option v-for=\"item in lines\" :key=\"item.value\" :label=\"item.name\" :value=\"item.value\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"曲线顺序\" prop=\"lineSort\" label-width=\"120px\">\r\n <el-input v-model.number=\"formData.lineSort\"></el-input>\r\n </el-form-item>\r\n <el-form-item v-if=\"false\" label=\"是否启用\" prop=\"isUsed\" label-width=\"120px\">\r\n <el-radio-group v-model=\"formData.isUsed\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\" v-show=\"template.createUser != 'SYSTEM_USER'\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertLine\", \"setTargetData\", \"setExpanded\", \"getThemeName\"],\r\n props: {\r\n template: {\r\n type: Object,\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n params: {\r\n type: Array,\r\n },\r\n },\r\n mounted() {},\r\n data() {\r\n const validatorNumber = (rule, value, callback) => {\r\n if (isNaN(value)) {\r\n callback(new Error(\"请输入数字值\"));\r\n } else {\r\n callback();\r\n }\r\n };\r\n return {\r\n formData: Object.assign({}, this.template),\r\n lines: [\r\n {\r\n name: \"直线\",\r\n value: \"solid\",\r\n },\r\n {\r\n name: \"虚线\",\r\n value: \"dashed\",\r\n },\r\n {\r\n name: \"点线\",\r\n value: \"dotted\",\r\n },\r\n {\r\n name: \"面积\",\r\n value: \"area\",\r\n },\r\n ],\r\n lineWidthSliderMarks: {\r\n 1: \"1\",\r\n 2: \"2\",\r\n 3: \"3\",\r\n 4: \"4\",\r\n },\r\n rules: {\r\n min: [\r\n { required: true, message: \"请输入最小值\", trigger: \"blur\" },\r\n { validator: validatorNumber, trigger: \"blur\" },\r\n ],\r\n lineSort: [\r\n {\r\n required: true,\r\n message: \"请输入曲线顺序(1-10)\",\r\n trigger: \"blur\",\r\n },\r\n { type: \"number\", message: \"顺序必须为数字值\" },\r\n ],\r\n max: [\r\n { required: true, message: \"请输入最大值\", trigger: \"blur\" },\r\n { validator: validatorNumber, trigger: \"blur\" },\r\n ],\r\n lineSize: [{ required: true, message: \"请选择曲线粗细\", trigger: \"blur\" }],\r\n lineColor: [{ required: true, message: \"请选择曲线颜色\", trigger: \"blur\" }],\r\n lineType: [{ required: true, message: \"请选择线型\", trigger: \"blur\" }],\r\n paramId: [{ required: true, message: \"请选择参数名称\", trigger: \"blur\" }],\r\n },\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName]\r\n .validate()\r\n .then(() => {\r\n if (this.upsertLine instanceof Function) {\r\n // 检查是否有主题配置\r\n const themeName = this.getThemeName();\r\n const themeConfig = this.formData.themeConfig;\r\n if (themeName && themeConfig && themeConfig[themeName]) {\r\n const theme = themeConfig[themeName];\r\n theme.lineColor = this.formData.lineColor;\r\n }\r\n this.saving = true;\r\n const result = this.upsertLine(this.formData);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n } else {\r\n return Promise.reject(new Error(\"未配置线条设置函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n });\r\n },\r\n },\r\n watch: {\r\n template: {\r\n immediate: false,\r\n deep: true,\r\n handler(newD) {\r\n // 检查是否有主题配置\r\n const themeName = this.getThemeName();\r\n const themeConfig = newD.themeConfig;\r\n let themeLineColor;\r\n if (themeName && themeConfig && themeConfig[themeName]) {\r\n const theme = themeConfig[themeName];\r\n const lineColor = theme.lineColor;\r\n if (lineColor) {\r\n themeLineColor = lineColor;\r\n }\r\n }\r\n if (themeLineColor) {\r\n this.formData = Object.assign({}, newD, { lineColor: themeLineColor });\r\n } else {\r\n this.formData = Object.assign({}, newD);\r\n }\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-line-content {\r\n width: 95%;\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-container class=\"kd-lane-el-container\" v-loading=\"curveConfigLoading\">\r\n <!-- 左边栏 -->\r\n <el-aside width=\"20%\" class=\"rtd-config-side\">\r\n <el-tree\r\n :key=\"treeKey\"\r\n ref=\"refTree\"\r\n :data=\"treeData\"\r\n class=\"rtd-config-side-tree\"\r\n :expand-on-click-node=\"false\"\r\n :current-node-key=\"currentNodeKey\"\r\n :default-expanded-keys=\"expandedKeys\"\r\n node-key=\"id\"\r\n highlight-current\r\n @node-click=\"handleNodeClick\"\r\n @node-expand=\"hideContextMenu\"\r\n @node-collapse=\"hideContextMenu\"\r\n >\r\n <span class=\"custom-tree-node\" slot-scope=\"{ node, data }\" @contextmenu.prevent=\"showRightWindows($event, data, node)\">\r\n <span>{{ node.label }}</span>\r\n <span style=\"padding-left: 5px\" v-show=\"data.isPublic == '1'\">\r\n <i class=\"el-icon-star-on\"></i>\r\n </span>\r\n </span>\r\n </el-tree>\r\n <div class=\"rtd-config-side-option\">\r\n <el-button @click=\"addTemplate\">新增模板</el-button>\r\n </div>\r\n </el-aside>\r\n\r\n <!-- 编辑区域 -->\r\n <el-main class=\"rtd-config-main\">\r\n <!-- 模板配置 -->\r\n <TemplateEdit\r\n v-show=\"templateContentShow\"\r\n :currentTemplate=\"templateInfo\"\r\n :form-disable=\"templateDisable\"\r\n :userTemplate=\"userTemplate\"\r\n :caseId=\"caseId\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n >\r\n </TemplateEdit>\r\n <!-- 泳道配置 -->\r\n <LaneEdit\r\n v-show=\"laneContentShow\"\r\n :laneInfo=\"laneInfo\"\r\n :form-disable=\"templateDisable\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n ></LaneEdit>\r\n\r\n <!-- 曲线配置 -->\r\n <LineEdit\r\n v-show=\"lineContentShow\"\r\n :template=\"lineInfo\"\r\n :params=\"params\"\r\n :form-disable=\"templateDisable\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n ></LineEdit>\r\n </el-main>\r\n <VueSimpleContextMenu\r\n :options=\"contextMenuOptions\"\r\n ref=\"vueSimpleContextMenu\"\r\n @option-clicked=\"optionClicked\"\r\n />\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport TemplateEdit from \"./TemplateEdit.vue\";\r\nimport LaneEdit from \"./LaneEdit.vue\";\r\nimport LineEdit from \"./LineEdit.vue\";\r\nimport { judgeRawDataType } from \"../../util/index.js\";\r\nimport VueSimpleContextMenu from \"../../context-menu/index.vue\";\r\n\r\nexport default {\r\n inject: [\"delTemplate\", \"delLane\", \"delLine\"],\r\n provide() {\r\n return {\r\n setTargetData: this.setTargetData,\r\n setExpanded: this.setExpanded,\r\n };\r\n },\r\n components: { LineEdit, TemplateEdit, LaneEdit, VueSimpleContextMenu },\r\n props: {\r\n contextItem: {\r\n type: Object,\r\n default: () => undefined,\r\n },\r\n expended: {\r\n type: Object,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n inputTempates: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n params: {\r\n type: Array,\r\n required: true,\r\n default: () => [],\r\n },\r\n paramsNameMap: {\r\n type: Object,\r\n default: () => {},\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n templateContentShow: false,\r\n templateDisable: false,\r\n laneContentShow: false,\r\n lineContentShow: false,\r\n templateInfo: {},\r\n laneInfo: {},\r\n lineInfo: {},\r\n dataType: \"\",\r\n curveConfigLoading: false,\r\n expandedKeys: [], // 展开的菜单\r\n currentNodeKey: \"\",\r\n targetData: undefined,\r\n treeKey: \"\",\r\n };\r\n },\r\n mounted() {},\r\n methods: {\r\n getLineDataLabel(line) {\r\n if (!line) {\r\n return \"\";\r\n }\r\n const nameConfig = this.paramsNameMap[line.paramId];\r\n if (!nameConfig) {\r\n return line.paramId;\r\n }\r\n return nameConfig.paramName;\r\n },\r\n setTargetData(targetData) {\r\n this.targetData = targetData;\r\n this.setExpanded();\r\n const dataType = judgeRawDataType(targetData);\r\n switch (dataType) {\r\n case \"template\":\r\n // 显示模板录入信息\r\n this.templateContentShow = true;\r\n this.laneContentShow = false;\r\n this.lineContentShow = false;\r\n this.templateDisable = true;\r\n this.templateInfo = targetData;\r\n break;\r\n case \"lane\":\r\n this.templateContentShow = false;\r\n this.laneContentShow = true;\r\n this.lineContentShow = false;\r\n this.templateDisable = true;\r\n this.laneInfo = targetData;\r\n break;\r\n case \"line\":\r\n // 显示模板录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = false;\r\n this.lineContentShow = true;\r\n this.templateDisable = true;\r\n this.lineInfo = targetData;\r\n break;\r\n }\r\n },\r\n setExpanded() {\r\n const val = this.targetData;\r\n if (val) {\r\n const type = judgeRawDataType(val);\r\n switch (type) {\r\n case \"template\":\r\n this.expandedKeys = [val.templateId];\r\n this.currentNodeKey = val.templateId;\r\n break;\r\n case \"lane\":\r\n this.expandedKeys = [val.laneId];\r\n this.currentNodeKey = val.laneId;\r\n break;\r\n case \"line\":\r\n this.expandedKeys = [val.lineId];\r\n this.currentNodeKey = val.lineId;\r\n break;\r\n default:\r\n this.expandedKeys = [];\r\n this.currentNodeKey = \"\";\r\n break;\r\n }\r\n } else {\r\n this.expandedKeys = [];\r\n this.currentNodeKey = \"\";\r\n }\r\n if (this.$refs.refTree) {\r\n this.$refs.refTree.setCurrentKey(this.currentNodeKey);\r\n }\r\n // fixme: 给el-tree设置新的default-expanded-keys后,新设置的节点,确实展开了,但是之前展开的,却没有关闭的问题\r\n this.treeKey = `treeKey${new Date().getTime()}`;\r\n },\r\n optionClicked(event) {\r\n const { option = {}, item } = event;\r\n switch (option.key) {\r\n case \"delTemplate\":\r\n this.askForDelTemplate(item);\r\n break;\r\n case \"addLane\":\r\n this.addLane(item);\r\n break;\r\n case \"delLane\":\r\n this.askForDelLane(item);\r\n break;\r\n case \"addParam\":\r\n this.addParam(item);\r\n break;\r\n case \"delParam\":\r\n this.delParam(item);\r\n break;\r\n }\r\n },\r\n hideContextMenu() {\r\n const ctxRef = this.$refs.vueSimpleContextMenu;\r\n if (ctxRef) {\r\n ctxRef.hideContextMenu();\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n showRightWindows(event, data, node) {\r\n const dataType = this.judgeDataType(node);\r\n this.dataType = dataType;\r\n if (data.createUser == \"SYSTEM_USER\") {\r\n this.$message.warning(\"系统模板不能编辑\");\r\n return;\r\n }\r\n this.$refs.vueSimpleContextMenu.showMenu(event, data);\r\n },\r\n clear() {\r\n // 初始化数据, 不可编辑、展开的节点、内容隐藏\r\n this.expandedKeys = [];\r\n this.templateDisable = true;\r\n this.templateContentShow = false;\r\n },\r\n editable() {\r\n this.templateDisable = false;\r\n },\r\n handleNodeClick(data) {\r\n this.setTargetData(data);\r\n },\r\n judgeDataType(node) {\r\n const { level, data = {} } = node;\r\n if (level == 1 && data.templateId) {\r\n return \"template\";\r\n } else if (level == 2 && data.laneId && data.templateId) {\r\n return \"lane\";\r\n } else if (level == 3 && data.lineId) {\r\n return \"line\";\r\n }\r\n return null;\r\n },\r\n addTemplate() {\r\n // 显示模板录入信息\r\n this.templateContentShow = true;\r\n this.laneContentShow = false;\r\n this.lineContentShow = false;\r\n this.templateDisable = false;\r\n this.templateInfo = { isPublic: \"0\", baseTemplate: \"\", col1: \"1\" };\r\n },\r\n addLane(nodeData) {\r\n // 显示参数录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = true;\r\n this.lineContentShow = false;\r\n this.templateDisable = false;\r\n this.laneInfo = { templateId: nodeData.templateId, isUsed: \"1\", sort: nodeData.lanes.length + 1 };\r\n },\r\n addParam(nodeData) {\r\n // 显示参数录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = false;\r\n this.lineContentShow = true;\r\n this.templateDisable = false;\r\n this.lineInfo = { laneId: nodeData.laneId, isUsed: \"1\", lineSize: 2 };\r\n },\r\n\r\n askForDelTemplate(nodeData) {\r\n this.$confirm(\"此操作将删除该模板, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n this.curveConfigLoading = true;\r\n if (this.delTemplate instanceof Function) {\r\n return this.delTemplate(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除模板函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n this.$message.error(e.message || \"删除失败\");\r\n })\r\n .finally(() => {\r\n this.curveConfigLoading = false;\r\n });\r\n },\r\n askForDelLane(nodeData) {\r\n this.$confirm(\"此操作将删除该泳道, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n this.curveConfigLoading = true;\r\n if (this.delLane instanceof Function) {\r\n return this.delLane(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除模板函数\"));\r\n }\r\n })\r\n .catch(() => {\r\n this.$message.error(\"删除失败\");\r\n })\r\n .finally(() => {\r\n this.curveConfigLoading = false;\r\n });\r\n },\r\n delParam(nodeData) {\r\n this.$confirm(\"此操作将删除该参数, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n if (this.delLine instanceof Function) {\r\n return this.delLine(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除线条函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n this.$message.error(e.message || \"删除失败\");\r\n });\r\n },\r\n },\r\n computed: {\r\n contextMenuOptions() {\r\n switch (this.dataType) {\r\n case \"template\":\r\n return [\r\n { name: \"新增泳道\", key: \"addLane\" },\r\n { name: \"删除模板\", key: \"delTemplate\" },\r\n ];\r\n case \"lane\":\r\n return [\r\n { name: \"新增参数\", key: \"addParam\" },\r\n { name: \"删除泳道\", key: \"delLane\" },\r\n ];\r\n case \"line\":\r\n return [{ name: \"删除参数\", key: \"delParam\" }];\r\n\r\n default:\r\n return [];\r\n }\r\n },\r\n treeData() {\r\n if (!this.inputTempates) {\r\n return [];\r\n } else {\r\n // 数据补全id label等信息\r\n const treeData = [];\r\n this.inputTempates.forEach((template) => {\r\n const tData = { ...template, id: template.templateId, label: template.templateName };\r\n tData.children = [];\r\n if (!template.lanes) {\r\n template.lanes = [];\r\n }\r\n\r\n template.lanes.forEach((lane, index) => {\r\n const laneData = { ...lane, id: lane.laneId, label: `泳道${index + 1}` };\r\n tData.children.push(laneData);\r\n if (!laneData.lines) {\r\n laneData.lines = [];\r\n }\r\n laneData.children = [];\r\n lane.lines.forEach((line) => {\r\n const lineData = { ...line, id: line.lineId, label: line.lineName || line.paramId };\r\n lineData.label = this.getLineDataLabel(line);\r\n laneData.children.push(lineData);\r\n });\r\n });\r\n treeData.push(tData);\r\n });\r\n return treeData;\r\n }\r\n },\r\n userTemplate() {\r\n if (!this.treeData) {\r\n return [];\r\n } else {\r\n return [...this.treeData];\r\n }\r\n },\r\n },\r\n watch: {\r\n // 默认展开选中的泳道\r\n contextItem: {\r\n immediate: true,\r\n deep: true,\r\n handler(val) {\r\n this.setTargetData(Object.assign({}, val));\r\n },\r\n },\r\n },\r\n beforeDestroy() {},\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-el-container {\r\n height: 60vh;\r\n border: 1px solid var(--kd-lane-container-border-color, #333);\r\n width: 100%;\r\n @media screen and (max-width: 1024px) {\r\n height: 70vh;\r\n }\r\n\r\n .rtd-config-side {\r\n border-right: 1px solid var(--kd-lane-container-border-color, #333);\r\n &-tree {\r\n height: 90%;\r\n overflow: auto;\r\n }\r\n\r\n &-option {\r\n text-align: center;\r\n }\r\n }\r\n\r\n .rtd-config-main {\r\n display: flex;\r\n align-content: center;\r\n justify-content: center;\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","export const ACTION_TYPE = {\r\n UPSERT_LINE: \"upsertLine\",\r\n DELETE_LINE: \"delLine\",\r\n};","<template>\r\n <div class=\"kd-lane-chart-container-header-item\" :style=\"headerItemStyle\" @click=\"toggleIsUsed\">\r\n <div class=\"kd-lane-chart-container-text-container\">\r\n <span class=\"left\" :style=\"textColor\">{{ line.min }}</span>\r\n <span class=\"center\">{{ getParamName(line) }}</span>\r\n <span class=\"right\" :style=\"textColor\">{{ line.max }}</span>\r\n <div class=\"gradient-display\" :style=\"gradientDisplay\"></div>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n itemHeight: {\r\n type: Number,\r\n default: 20,\r\n },\r\n line: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n paramsNameMap: {\r\n type: Object,\r\n default: () => {},\r\n required: true,\r\n },\r\n themeName: {\r\n type: String,\r\n default: undefined,\r\n },\r\n },\r\n methods: {\r\n getParamName(line) {\r\n if (!line) {\r\n return \"\";\r\n }\r\n const nameConfig = this.paramsNameMap[line.paramId];\r\n if (!nameConfig) {\r\n return \"\";\r\n }\r\n return `${nameConfig.paramName}${nameConfig.paramUnit}`;\r\n },\r\n toggleIsUsed() {\r\n const temp = { ...this.line };\r\n if (temp.isUsed == \"1\" || temp.isUsed == 1) {\r\n temp.isUsed = \"0\";\r\n } else {\r\n temp.isUsed = \"1\";\r\n }\r\n this.$emit(\"updateLine\", temp);\r\n },\r\n },\r\n computed: {\r\n gradientDisplay() {\r\n let lineColor;\r\n if (this.themeName && this.line.themeConfig) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n let result;\r\n if (this.line.isGradient) {\r\n result = { background: `${lineColor || this.line.lineColor}` };\r\n } else {\r\n result = {};\r\n }\r\n return result;\r\n },\r\n textColor() {\r\n let lineColor;\r\n // 只有不是渐变色时,才从主题配置中获取文字颜色\r\n if (this.themeName && this.line.themeConfig && !this.line.isGradient) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n return {\r\n color: lineColor || this.line.lineColor,\r\n };\r\n },\r\n headerItemStyle() {\r\n let lineColor;\r\n if (this.themeName && this.line.themeConfig) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n\r\n let lineType;\r\n if (this.line.lineType == \"area\") {\r\n if (this.line.isGradient) {\r\n lineType = {};\r\n } else {\r\n lineType = { \"box-shadow\": `inset 0 0 8px 0px ${lineColor || this.line.lineColor}` };\r\n }\r\n } else {\r\n lineType = { \"border-bottom\": `2px ${this.line.lineType} ${lineColor || this.line.lineColor}` };\r\n }\r\n return {\r\n height: `${this.itemHeight}px`,\r\n opacity: this.line.isUsed == \"1\" ? 1 : 0.5,\r\n ...lineType,\r\n };\r\n },\r\n },\r\n watch: {},\r\n};\r\n</script>\r\n<style lang=\"scss\">\r\n.kd-lane-chart-container-header-item {\r\n color: var(--kd-lane-container-header-item-color, #333);\r\n border: unset;\r\n position: relative;\r\n cursor: pointer;\r\n .kd-lane-chart-container-text-container {\r\n height: 100%;\r\n width: 100%;\r\n font-size: 10px;\r\n font-weight: bold;\r\n position: relative;\r\n .left {\r\n position: absolute;\r\n left: 0;\r\n bottom: 2px;\r\n }\r\n .center {\r\n position: absolute;\r\n left: 50%;\r\n bottom: 2px;\r\n transform: translateX(-50%);\r\n /* 文字不换行,超出显示省略号 */\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .right {\r\n position: absolute;\r\n right: 0;\r\n bottom: 2px;\r\n }\r\n .gradient-display {\r\n position: absolute;\r\n height: 2px;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-chart-container\" v-loading=\"isLoading\" @contextmenu=\"onParentContextMenu\">\r\n <template v-if=\"currentTemplate && currentTemplate.lanes && currentTemplate.lanes.length > 0\">\r\n <draggable\r\n class=\"kd-lane-chart-container\"\r\n @change=\"dragtoModifyLane\"\r\n v-model=\"currentTemplate.lanes\"\r\n :animation=\"200\"\r\n :fallbackOnBody=\"true\"\r\n :swapThreshold=\"0.65\"\r\n group=\"laneGroup\"\r\n >\r\n <template v-for=\"(lane, index) in currentTemplate.lanes || []\">\r\n <div\r\n v-if=\"$scopedSlots[`lane${lane.laneId}`]\"\r\n class=\"kd-lane-chart-lane-slot-container\"\r\n :key=\"lane.laneId\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'slot')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"slotHeaderStyle\">\r\n <slot :name=\"`lane${lane.laneId}`\" :lane=\"lane\"></slot>\r\n </div>\r\n </div>\r\n <div\r\n v-else-if=\"$slots[`lane${lane.laneId}`]\"\r\n class=\"kd-lane-chart-lane-slot-container\"\r\n :key=\"`${lane.laneId}`\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'slot')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"slotHeaderStyle\">\r\n <slot :name=\"`lane${lane.laneId}`\" :lane=\"lane\"></slot>\r\n </div>\r\n </div>\r\n <template v-else>\r\n <div\r\n class=\"kd-lane-chart-lane-container\"\r\n :key=\"lane.laneId\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'lane')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"headerStyle\" @contextmenu.prevent=\"showContextMenu($event, lane)\">\r\n <draggable\r\n v-model=\"lane.lines\"\r\n :animation=\"200\"\r\n :fallbackOnBody=\"true\"\r\n :swapThreshold=\"0.65\"\r\n group=\"lineGroup\"\r\n @change=\"dragtoModifyLines\"\r\n >\r\n <HeaderItem\r\n v-for=\"line in lane.lines || []\"\r\n :key=\"line.lineId\"\r\n :itemHeight=\"headerItemHeight\"\r\n :line=\"line\"\r\n :paramsNameMap=\"paramsNameMap\"\r\n :themeName=\"themeName\"\r\n @contextmenu.native.prevent=\"showContextMenu($event, line)\"\r\n @updateLine=\"upsertLine\"\r\n ></HeaderItem>\r\n </draggable>\r\n </div>\r\n </div>\r\n </template>\r\n </template>\r\n </draggable>\r\n </template>\r\n <template v-else>\r\n <div class=\"kd-lane-chart-lane-container\" ref=\"refLaneDiv\">\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"headerStyle\" @contextmenu.prevent=\"showContextMenu\">\r\n <!-- 空泳道,只是为了占位 -->\r\n </div>\r\n </div>\r\n </template>\r\n\r\n <!-- 画布部分 -->\r\n <div class=\"kd-lane-chart-container-draw-area\" :style=\"darwAreaStyle\">\r\n <slot name=\"draw-slot\"></slot>\r\n </div>\r\n <VueSimpleContextMenu :options=\"contextMenuOptions\" ref=\"vueSimpleContextMenu\" @option-clicked=\"optionClicked\" />\r\n <el-dialog title=\"泳道模板设置\" :visible.sync=\"curveConfigVisible\" @opened=\"setExpanded\">\r\n <RealTimeCurveConfig\r\n ref=\"curveConfig\"\r\n :inputTempates=\"treeTemplates\"\r\n :caseId=\"strategy.caseId\"\r\n :params=\"params\"\r\n :paramsNameMap=\"paramsNameMap\"\r\n v-on=\"$listeners\"\r\n :contextItem=\"contextItem\"\r\n >\r\n <!-- v-on=\"$listeners\":将父组件传递给子组件的所有事件监听器绑定到子组件的根元素上。 -->\r\n <!-- 这样做的好处是:子组件可以自动继承父组件的事件监听器,而无需在子组件中逐个声明这些监听器 -->\r\n </RealTimeCurveConfig>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { cloneDeep } from \"lodash\";\r\nimport draggable from \"vuedraggable\";\r\nimport VueSimpleContextMenu from \"../context-menu/index.vue\";\r\nimport { StrategyFactory } from \"../strategies/StrategyFactory.js\";\r\nimport { isNumeric, pxToNumber, sortLaneLines, sortLanes, sortTemplates, strategyValidator } from \"../util/index.js\";\r\nimport RealTimeCurveConfig from \"./config/RealTimeCurveConfig.vue\";\r\nimport { ACTION_TYPE } from \"./const/action-type.js\";\r\nimport HeaderItem from \"./header-item.vue\";\r\n\r\nexport default {\r\n name: \"KdLaneContainer\",\r\n provide() {\r\n return {\r\n upsertTemplate: this.upsertTemplate,\r\n delTemplate: this.delTemplate,\r\n upsertLane: this.upsertLane,\r\n delLane: this.delLane,\r\n upsertLine: this.upsertLine,\r\n delLine: this.delLine,\r\n getThemeName: () => {\r\n return this.themeName;\r\n },\r\n };\r\n },\r\n components: {\r\n HeaderItem,\r\n RealTimeCurveConfig,\r\n VueSimpleContextMenu,\r\n draggable,\r\n },\r\n props: {\r\n // {type:\"local\",dataSource:{},caseId:\"\",versionCode:\"\",load, save}\r\n // local:caseId,versionCode,templates,lanes,lines\r\n // custom:caseId,versionCode,load,save\r\n config: {\r\n type: Object,\r\n required: true,\r\n validator: strategyValidator,\r\n },\r\n headerPadding: {\r\n type: Number,\r\n default: 4,\r\n },\r\n headerItemHeight: {\r\n type: Number,\r\n default: 20,\r\n },\r\n itemGap: {\r\n type: Number,\r\n default: 2,\r\n },\r\n customMenuList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n themeName: {\r\n type: String,\r\n default: undefined,\r\n },\r\n },\r\n data() {\r\n return {\r\n treeTemplates: null,\r\n isLoading: false,\r\n strategy: null,\r\n currentTemplate: {},\r\n curveConfigVisible: false,\r\n params: [],\r\n contextItem: undefined,\r\n };\r\n },\r\n created() {\r\n // 初始化策略\r\n this.strategy = StrategyFactory.createStrategy(this.$props.config);\r\n this.loadConfig();\r\n },\r\n mounted() {},\r\n\r\n methods: {\r\n dragtoModifyLane() {\r\n let promises = this.currentTemplate.lanes.map((lane, index) => {\r\n lane.sort = index;\r\n return this.dragUpdateLane(lane);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.setDefaultAndNotify();\r\n });\r\n },\r\n dragtoModifyLines(event) {\r\n if (Object.prototype.hasOwnProperty.call(event, \"added\") && event.added.element) {\r\n // 拖拽新增了线条,通过lineId找到线段位置\r\n let data = cloneDeep(event.added.element);\r\n const currentLanes = this.currentTemplate.lanes;\r\n currentLanes.forEach((lane) => {\r\n const lineIndex = lane.lines.findIndex((line) => line.lineId == data.lineId);\r\n if (lineIndex >= 0) {\r\n data.laneId = lane.laneId;\r\n data.lineSort = event.added.newIndex ?? 0;\r\n this.dragUpdateLine(data).then(() => {\r\n let promises = lane.lines.map((lines, index) => {\r\n lines.lineSort = index;\r\n return this.dragUpdateLine(lines);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.onLineChange(lane.lines[lineIndex], ACTION_TYPE.UPSERT_LINE);\r\n });\r\n });\r\n }\r\n });\r\n } else if (Object.prototype.hasOwnProperty.call(event, \"removed\") && event.removed.element) {\r\n // 拖拽删除了线条\r\n let data = cloneDeep(event.removed.element);\r\n this.onLineChange(data, ACTION_TYPE.DELETE_LINE);\r\n } else if (Object.prototype.hasOwnProperty.call(event, \"moved\") && event.moved.element) {\r\n // 拖拽移动了线条\r\n let data = cloneDeep(event.moved.element);\r\n let currentLanes = this.currentTemplate.lanes;\r\n currentLanes.forEach((lane) => {\r\n if (lane.laneId == data.laneId) {\r\n let promises = lane.lines.map((lines, index) => {\r\n lines.lineSort = index;\r\n return this.dragUpdateLine(lines);\r\n });\r\n Promise.all(promises).then(() => {\r\n let lineIndex = lane.lines.findIndex((line) => line.lineId == data.lineId);\r\n this.onLineChange(lane.lines[lineIndex], ACTION_TYPE.UPSERT_LINE);\r\n });\r\n }\r\n });\r\n }\r\n },\r\n // 拖拽更新曲线\r\n dragUpdateLine(data) {\r\n return this.strategy.upsertLine(data).then((savedData) => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == savedData.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == savedData.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n lines.push(savedData);\r\n } else {\r\n this.$set(lines, lineIndex, savedData);\r\n }\r\n sortLaneLines(lane);\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const lane = currentLanes[laneIndex];\r\n const currentLines = lane.lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n currentLines.push(savedData);\r\n } else {\r\n this.$set(currentLines, lineIndex, savedData);\r\n }\r\n this.$set(currentLanes, laneIndex, lane);\r\n sortLaneLines(lane);\r\n return savedData;\r\n }\r\n });\r\n },\r\n // 拖拽更新泳道\r\n dragUpdateLane(data) {\r\n return this.strategy.upsertLane(data).then((savedData) => {\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == savedData.templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(\"template not found\");\r\n } else {\r\n const template = this.treeTemplates[index];\r\n const lanes = template.lanes || [];\r\n const laneIndex = lanes.findIndex((lane) => lane.laneId == savedData.laneId);\r\n if (laneIndex < 0) {\r\n lanes.push(savedData);\r\n } else {\r\n this.$set(lanes, laneIndex, savedData);\r\n }\r\n sortLanes(template.lanes);\r\n }\r\n return savedData;\r\n });\r\n },\r\n getGridSize() {\r\n if (!this.$refs.refLaneDiv) return [];\r\n const isArray = Array.isArray(this.$refs.refLaneDiv);\r\n if (isArray) {\r\n return this.$refs.refLaneDiv.map((item) => {\r\n const { x, y, width, height, top, right, bottom, left } = item.getBoundingClientRect();\r\n return { x, y, width, height, top, bottom, right, left, \"lane-id\": item.getAttribute(\"lane-id\") };\r\n });\r\n } else {\r\n return [this.$refs.refLaneDiv.getBoundingClientRect()];\r\n }\r\n },\r\n laneContainerStyle(lane, type) {\r\n const isWidthNumeric = isNumeric(lane.width);\r\n if (type === \"slot\") {\r\n return isWidthNumeric ? { width: `${lane.width}px` } : { width: \"auto\" };\r\n } else {\r\n return isWidthNumeric ? { width: `${lane.width}px` } : { flex: \"1\" };\r\n }\r\n },\r\n setExpanded() {\r\n this.$refs.curveConfig.setExpanded();\r\n },\r\n delLine(data) {\r\n return this.strategy.delLine(data).then(() => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == data.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == data.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == data.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n console.warn(\"要删除的线条在当前泳道中不存在?\");\r\n } else {\r\n lines.splice(lineIndex, 1);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const currentLines = currentLanes[laneIndex].lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == data.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n console.warn(\"要删除的线条在当前泳道中不存在?\");\r\n } else {\r\n currentLanes[laneIndex].lines.splice(lineIndex, 1);\r\n }\r\n // 以免每次保存都重新渲染\r\n this.onLineChange(data, ACTION_TYPE.DELETE_LINE);\r\n }\r\n });\r\n },\r\n upsertLine(data) {\r\n return this.strategy.upsertLine(data).then((savedData) => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == savedData.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == savedData.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n lines.push(savedData);\r\n } else {\r\n this.$set(lines, lineIndex, savedData);\r\n }\r\n sortLaneLines(lane);\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const lane = currentLanes[laneIndex];\r\n const currentLines = lane.lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n currentLines.push(savedData);\r\n } else {\r\n this.$set(currentLines, lineIndex, savedData);\r\n }\r\n this.$set(currentLanes, laneIndex, lane);\r\n sortLaneLines(lane);\r\n // 以免每次保存都重新渲染\r\n this.onLineChange(savedData, ACTION_TYPE.UPSERT_LINE);\r\n return savedData;\r\n }\r\n });\r\n },\r\n delLane(data) {\r\n return this.strategy.delLane(data).then((delLane) => {\r\n // 删除内存中数据\r\n const { templateId } = delLane;\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(`template_id not found: '${templateId}'`);\r\n return;\r\n }\r\n const template = this.treeTemplates[index];\r\n const laneIndex = template.lanes.findIndex((lane) => lane.laneId == delLane.laneId);\r\n template.lanes.splice(laneIndex, 1);\r\n // 判断泳道是否在当前模板中\r\n if (this.currentTemplate.templateId == templateId) {\r\n // 是,则通知数据变更\r\n this.setDefaultAndNotify();\r\n }\r\n });\r\n },\r\n upsertLane(data) {\r\n return this.strategy.upsertLane(data).then((savedData) => {\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == savedData.templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(\"template not found\");\r\n } else {\r\n const template = this.treeTemplates[index];\r\n const lanes = template.lanes || [];\r\n const laneIndex = lanes.findIndex((lane) => lane.laneId == savedData.laneId);\r\n if (laneIndex < 0) {\r\n lanes.push(savedData);\r\n } else {\r\n this.$set(lanes, laneIndex, savedData);\r\n }\r\n sortLanes(template.lanes);\r\n if (template.templateId === this.currentTemplate.templateId) {\r\n this.setDefaultAndNotify();\r\n }\r\n }\r\n return savedData;\r\n });\r\n },\r\n delTemplate(data) {\r\n return this.strategy.deleteTemplate(data).then(() => {\r\n const index = this.treeTemplates.findIndex((item) => {\r\n return item.templateId === data.templateId;\r\n });\r\n this.treeTemplates.splice(index, 1);\r\n if (data.templateId == this.currentTemplate.templateId) {\r\n // 刷新当前模板\r\n this.setDefaultAndNotify();\r\n }\r\n });\r\n },\r\n upsertTemplate(data) {\r\n return this.strategy.upsertTemplate(data).then((savedData) => {\r\n if (savedData.isPublic == \"1\") {\r\n this.treeTemplates.forEach((template) => {\r\n template.isPublic = \"0\";\r\n });\r\n }\r\n // 发生了模板变更 更新内存数据\r\n const index = this.treeTemplates.findIndex((item) => {\r\n return item.templateId === savedData.templateId;\r\n });\r\n\r\n if (index >= 0) {\r\n const newTemplate = this.treeTemplates[index];\r\n const temp = Object.assign({}, newTemplate, savedData);\r\n this.$set(this.treeTemplates, index, temp);\r\n } else {\r\n this.treeTemplates.push(savedData);\r\n }\r\n sortTemplates(this.treeTemplates);\r\n this.setDefaultAndNotify();\r\n return savedData;\r\n });\r\n },\r\n onParentContextMenu(event) {\r\n const itemClassName = \".kd-lane-chart-lane-header\";\r\n const lineContext = event.target && (event.target.classList.contains(itemClassName) || event.target.closest(itemClassName));\r\n if (!lineContext) {\r\n event.preventDefault();\r\n const ctxRef = this.$refs.vueSimpleContextMenu;\r\n if (ctxRef) {\r\n ctxRef.hideContextMenu();\r\n }\r\n }\r\n },\r\n showContextMenu(event, item) {\r\n event.stopPropagation();\r\n this.$refs.vueSimpleContextMenu.showMenu(event, item);\r\n },\r\n optionClicked(event) {\r\n const { option, item } = event;\r\n this.contextItem = item;\r\n\r\n const itemIndex = this.customMenuList.findIndex((item) => {\r\n return item.key == option.key;\r\n });\r\n\r\n if (itemIndex < 0) {\r\n if (option.key == \"editTemplate\") {\r\n this.curveConfigVisible = true;\r\n } else if (option.key == \"restoreSetting\") {\r\n return this.restoreSetting();\r\n }\r\n } else {\r\n // 自定义菜单按钮\r\n this.$emit(\"onCustomMenuClicked\", event);\r\n }\r\n },\r\n restoreSetting() {\r\n return this.strategy.restoreSetting().then(() => {\r\n this.loadConfig();\r\n });\r\n },\r\n loadConfig() {\r\n this.isLoading = true;\r\n this.strategy\r\n .getUserTemplates()\r\n .then((dbDatas) => {\r\n const { templates = [], params = [] } = dbDatas;\r\n this.params = params;\r\n sortTemplates(templates);\r\n this.treeTemplates = templates;\r\n this.setDefaultAndNotify();\r\n })\r\n .catch((e) => {\r\n console.error(`加载配置失败: ${this.$props.strategy.caseId},${this.$props.strategy.versionCode},${e.message}`);\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n },\r\n onLineChange(line, type) {\r\n console.log(\"notify line change\", line, type);\r\n this.$emit(\"line-change\", { ...line, actionType: type });\r\n },\r\n setDefaultAndNotify() {\r\n const publicTemplates = this.treeTemplates.find((template) => template.isPublic === \"1\");\r\n if (publicTemplates) {\r\n this.currentTemplate = publicTemplates;\r\n } else {\r\n const sysTemplate = this.treeTemplates.find((template) => template.createUser == \"SYSTEM_USER\");\r\n if (sysTemplate) {\r\n sysTemplate.isPublic = \"1\";\r\n this.currentTemplate = sysTemplate;\r\n this.strategy.upsertTemplate(sysTemplate);\r\n } else {\r\n this.treeTemplates[0].isPublic = \"1\";\r\n this.currentTemplate = this.treeTemplates[0];\r\n this.strategy.upsertTemplate(this.currentTemplate);\r\n }\r\n }\r\n this.$emit(\"template-change\", this.currentTemplate);\r\n },\r\n },\r\n computed: {\r\n contextMenuOptions() {\r\n if (this.config.type == \"local\") {\r\n return [{ name: \"编辑模板\", key: \"editTemplate\" }, { name: \"恢复默认\", key: \"restoreSetting\" }, ...this.customMenuList];\r\n } else {\r\n return [{ name: \"编辑模板\", key: \"template\" }, ...this.customMenuList];\r\n }\r\n },\r\n paramsNameMap() {\r\n const result = {};\r\n for (const param of this.params) {\r\n result[param.paramId] = {\r\n paramName: param.paramName,\r\n paramUnit: param.paramUnit,\r\n };\r\n }\r\n return result;\r\n },\r\n /**\r\n * 计算当前模板中所有车道(lane)的最大行数。\r\n * @returns {number} 返回所有车道中的最大行数,如果没有车道则返回0。\r\n **/\r\n lineCount() {\r\n const { lanes = [] } = this.currentTemplate || {};\r\n const lineCount = Math.max(\r\n ...lanes.map((lane) => {\r\n return lane.lines?.length || 0;\r\n }),\r\n );\r\n\r\n return lineCount;\r\n },\r\n headerStyle() {\r\n const common = { gap: `${this.itemGap}px`, padding: `${this.headerPadding}px` };\r\n if (!this.currentTemplate) {\r\n return { ...common, height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const { lanes = [] } = this.currentTemplate;\r\n if (!lanes || lanes.length == 0) {\r\n return { ...common, height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const gapCount = Math.max(0, this.lineCount - 1);\r\n return {\r\n ...common,\r\n height: `${this.lineCount * this.headerItemHeight + this.headerPadding * 2 + gapCount * this.itemGap}px`,\r\n \"min-height\": \"60px\",\r\n };\r\n }\r\n }\r\n },\r\n slotHeaderStyle() {\r\n // return { height: \"30%\", \"min-height\": \"60px\" };\r\n if (!this.currentTemplate) {\r\n return { height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const { lanes = [] } = this.currentTemplate;\r\n if (!lanes || lanes.length == 0) {\r\n return { height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const gapCount = Math.max(0, this.lineCount - 1);\r\n return {\r\n height: `${this.lineCount * this.headerItemHeight + this.headerPadding * 2 + gapCount * this.itemGap}px`,\r\n \"min-height\": \"60px\",\r\n };\r\n }\r\n }\r\n },\r\n darwAreaStyle() {\r\n const headerStyle = this.headerStyle;\r\n const heightNum = pxToNumber(headerStyle.height);\r\n const minHeightNum = pxToNumber(headerStyle[\"min-height\"]);\r\n // 取较大值作为实际高度\r\n const actualHeight = Math.max(heightNum, minHeightNum);\r\n return { top: `${actualHeight}px` };\r\n },\r\n },\r\n};\r\n</script>\r\n<style lang=\"scss\">\r\n.kd-lane-chart-container {\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n border: 1px solid var(--kd-lane-container-border-color, #333);\r\n display: flex;\r\n\r\n %common-lane-style {\r\n height: 100%;\r\n min-width: 0;\r\n overflow: hidden;\r\n z-index: 1;\r\n\r\n .kd-lane-chart-lane-header {\r\n max-height: 40%;\r\n border-bottom: 1px solid var(--kd-lane-container-border-color, #333);\r\n overflow: hidden;\r\n z-index: 2;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n .kd-lane-chart-lane-container,\r\n .kd-lane-chart-lane-slot-container {\r\n @extend %common-lane-style;\r\n }\r\n\r\n .border-left {\r\n border-left: 1px solid var(--kd-lane-container-border-color, #333);\r\n }\r\n\r\n .kd-lane-chart-container-draw-area {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 3;\r\n border: none;\r\n }\r\n}\r\n</style>\r\n","import KdLaneContainer from \"./chart-container.vue\";\r\n// 统一注册函数\r\nconst install = (Vue) => {\r\n Vue.component(KdLaneContainer.name, KdLaneContainer);\r\n};\r\n// 自动安装(当以script标签引入时)\r\nif (typeof window !== \"undefined\" && window.Vue) {\r\n window.Vue.use(install);\r\n}\r\nexport default { install };\r\n"],"names":["__vue_script__","script","CustomStrategy","constructor","strategy","getUserTemplates","upsertTemplate","data","delTemplate","deleteTemplate","upsertLane","delLane","lane","deleteLane","upsertLine","delLine","restoreSetting","Promise","resolve","ConfigDBManager","DB_NAME","MAX_UNICODE_CHAR","DB_VERSION","STORE_NAMES","TEMPLATES","LANES","LINES","PARAMS","CASE_VERSIONS","_db","_openDB","reject","request","indexedDB","open","onupgradeneeded","event","db","target","result","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onclose","onerror","Error","error","message","onblocked","closeDB","close","_compareVersion","newVersion","oldVersion","parseVersion","v","String","split","map","Number","newV","oldV","maxLen","Math","max","length","i","newSeg","oldSeg","_clearSceneData","caseId","then","transaction","tStore","objectStore","lStore","lineStore","cvStore","paramsStore","bound","IDBKeyRange","delete","oncomplete","e","_promisifyRequest","forceInitSceneConfig","versionCode","dataSource","config","setUpData","batchAddConfig","catch","err","templates","t","lanes","l","lines","line","params","p","caseVersion","updateTime","Date","checkConfigIntegrity","getCaseVersionByCaseId","getTemplatesByCaseId","randomTplId","templateId","getLanesByTemplateId","randomLaneId","laneId","getLinesByLaneId","_initSceneConfig","oldCaseVersion","compareResult","console","log","saveSceneConfig","Array","isArray","put","forEach","tpl","pStore","param","upsertCaseVersion","store","versionData","get","getConfigByCaseId","all","getParamsByCaseId","templatePromises","lanePromises","lanesWithLines","templatesWithLanes","getConfigByTemplateId","template","lineTasks","linesArray","index","getTemplateById","deleteCaseVersion","templateData","createDate","updateDate","range","getAll","laneData","getLaneById","filter","deleteLaneByLaneIds","laneIds","lineData","getLineById","lineId","deleteLineByIds","lineIds","upsertParam","paramData","getParamById","paramId","deleteParamById","dbHelper","isNumeric","val","isNaN","pxToNumber","pxStr","parseFloat","replace","sortLaneLines","sort","a","b","lineSortA","lineSort","lineSortB","sortLanes","sortA","sortB","sortTemplates","judgeRawDataType","strategyValidator","type","crudMethods","method","isFlatStructure","isTreeStructure","treeToFlatten","treeData","templateLanes","generateUUID","push","laneLines","simple","uuid","crypto","randomUUID","c","r","random","toString","DefaultLocalStrategy","flatData","ready","warn","newTemplateId","baseTemplate","linesP","results","allLines","linesByLane","newLaneId","createUser","undefined","isPublic","allT","PArray","allLaneIds","allLineIds","reduce","previousValue","currentValue","concat","getType","StrategyFactory","createStrategy","option","flatedData","LineEdit","TemplateEdit","LaneEdit","VueSimpleContextMenu","ACTION_TYPE","UPSERT_LINE","DELETE_LINE","HeaderItem","RealTimeCurveConfig","install","Vue","component","KdLaneContainer","name","window","use"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/context-menu/index.vue","../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../node_modules/.pnpm/vue-runtime-helpers@1.1.2/node_modules/vue-runtime-helpers/dist/normalize-component.mjs","../../../src/components/strategies/CustomStrategy.js","../../../src/components/store/db-manager.js","../../../src/components/util/index.js","../../../src/components/strategies/DefaultLocalStrategy.js","../../../src/components/strategies/StrategyFactory.js","../../../src/components/kd-lane/config/TemplateEdit.vue","../../../src/components/kd-lane/config/LaneEdit.vue","../../../src/components/kd-lane/config/LineEdit.vue","../../../src/components/kd-lane/config/RealTimeCurveConfig.vue","../../../src/components/kd-lane/const/action-type.js","../../../src/components/kd-lane/header-item.vue","../../../src/components/kd-lane/chart-container.vue","../../../src/components/kd-lane/index.js"],"sourcesContent":["<template>\r\n <div>\r\n <ul ref=\"refUl\" class=\"vue-simple-context-menu\" v-click-outside=\"onClickOutside\">\r\n <li\r\n v-for=\"(option, index) in options\"\r\n :key=\"index\"\r\n @click.stop=\"optionClicked(option)\"\r\n class=\"vue-simple-context-menu__item\"\r\n :class=\"[option.class, option.type === 'divider' ? 'vue-simple-context-menu__divider' : '']\"\r\n >\r\n <span v-html=\"option.name\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from \"vue\";\r\nimport vClickOutside from \"v-click-outside\";\r\nVue.use(vClickOutside);\r\n\r\nexport default {\r\n name: \"VueSimpleContextMenu\",\r\n props: {\r\n options: {\r\n type: Array,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n item: null,\r\n menuWidth: null,\r\n menuHeight: null,\r\n };\r\n },\r\n methods: {\r\n showMenu(event, item) {\r\n this.item = item;\r\n\r\n const menu = this.$refs.refUl;\r\n if (!menu) {\r\n return;\r\n }\r\n\r\n if (!this.menuWidth || !this.menuHeight) {\r\n menu.style.visibility = \"hidden\";\r\n menu.style.display = \"block\";\r\n this.menuWidth = menu.offsetWidth;\r\n this.menuHeight = menu.offsetHeight;\r\n menu.removeAttribute(\"style\");\r\n }\r\n\r\n if (this.menuWidth + event.pageX >= window.innerWidth) {\r\n menu.style.left = event.pageX - this.menuWidth + 2 + \"px\";\r\n } else {\r\n menu.style.left = event.pageX - 2 + \"px\";\r\n }\r\n\r\n if (this.menuHeight + event.pageY >= window.innerHeight) {\r\n menu.style.top = event.pageY - this.menuHeight + 2 + \"px\";\r\n } else {\r\n menu.style.top = event.pageY - 2 + \"px\";\r\n }\r\n menu.classList.add(\"vue-simple-context-menu--active\");\r\n },\r\n hideContextMenu() {\r\n const element = this.$refs.refUl;\r\n if (element) {\r\n element.classList.remove(\"vue-simple-context-menu--active\");\r\n this.$emit(\"menu-closed\");\r\n }\r\n },\r\n onClickOutside() {\r\n this.hideContextMenu();\r\n },\r\n optionClicked(option) {\r\n this.hideContextMenu();\r\n this.$emit(\"option-clicked\", {\r\n item: this.item,\r\n option: option,\r\n });\r\n },\r\n onEscKeyRelease(event) {\r\n if (event.keyCode === 27) {\r\n this.hideContextMenu();\r\n }\r\n },\r\n },\r\n mounted() {\r\n document.body.addEventListener(\"keyup\", this.onEscKeyRelease);\r\n },\r\n beforeDestroy() {\r\n document.removeEventListener(\"keyup\", this.onEscKeyRelease);\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.vue-simple-context-menu {\r\n top: 0;\r\n left: 0;\r\n margin: 0;\r\n padding: 0;\r\n display: none;\r\n list-style: none;\r\n position: fixed;\r\n z-index: 1000000;\r\n background-color: var(--kd-lane-container-context-background-color, #ecf0f1);\r\n border-bottom-width: 0px;\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\",\r\n \"Helvetica Neue\", sans-serif;\r\n box-shadow: 0 3px 6px 0 rgba(var(--kd-lane-container-context-item-color, #333), 0.2);\r\n border-radius: 4px;\r\n\r\n &--active {\r\n display: block;\r\n }\r\n\r\n &__item {\r\n display: flex;\r\n color: var(--kd-lane-container-context-item-color, #333);\r\n cursor: pointer;\r\n padding: 5px 15px;\r\n align-items: center;\r\n\r\n &:hover {\r\n background-color: var(--kd-lane-container-context-hover-background-color, #007aff);\r\n color: var(--kd-lane-container-context-hover-item-color, #fff);\r\n }\r\n }\r\n\r\n &__divider {\r\n box-sizing: content-box;\r\n height: 2px;\r\n background-color: var(--kd-lane-container-context-divider-color, #595a5a);\r\n padding: 4px 0;\r\n background-clip: content-box;\r\n pointer-events: none;\r\n }\r\n\r\n // Have to use the element so we can make use of `first-of-type` and\r\n // `last-of-type`\r\n li {\r\n &:first-of-type {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-of-type {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n}\r\n</style>\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n if (typeof shadowMode !== 'boolean') {\r\n createInjectorSSR = createInjector;\r\n createInjector = shadowMode;\r\n shadowMode = false;\r\n }\r\n // Vue.extend constructor export interop.\r\n const options = typeof script === 'function' ? script.options : script;\r\n // render functions\r\n if (template && template.render) {\r\n options.render = template.render;\r\n options.staticRenderFns = template.staticRenderFns;\r\n options._compiled = true;\r\n // functional template\r\n if (isFunctionalTemplate) {\r\n options.functional = true;\r\n }\r\n }\r\n // scopedId\r\n if (scopeId) {\r\n options._scopeId = scopeId;\r\n }\r\n let hook;\r\n if (moduleIdentifier) {\r\n // server build\r\n hook = function (context) {\r\n // 2.3 injection\r\n context =\r\n context || // cached call\r\n (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n // 2.2 with runInNewContext: true\r\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n context = __VUE_SSR_CONTEXT__;\r\n }\r\n // inject component styles\r\n if (style) {\r\n style.call(this, createInjectorSSR(context));\r\n }\r\n // register component module identifier for async chunk inference\r\n if (context && context._registeredComponents) {\r\n context._registeredComponents.add(moduleIdentifier);\r\n }\r\n };\r\n // used by ssr in case component is cached and beforeCreate\r\n // never gets called\r\n options._ssrRegister = hook;\r\n }\r\n else if (style) {\r\n hook = shadowMode\r\n ? function (context) {\r\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n }\r\n : function (context) {\r\n style.call(this, createInjector(context));\r\n };\r\n }\r\n if (hook) {\r\n if (options.functional) {\r\n // register for functional component in vue file\r\n const originalRender = options.render;\r\n options.render = function renderWithStyleInjection(h, context) {\r\n hook.call(context);\r\n return originalRender(h, context);\r\n };\r\n }\r\n else {\r\n // inject component registration as beforeCreate hook\r\n const existing = options.beforeCreate;\r\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n }\r\n }\r\n return script;\r\n}\n\nexport default normalizeComponent;\n//# sourceMappingURL=normalize-component.mjs.map\n","export class CustomStrategy {\r\n constructor(strategy) {\r\n this.strategy = strategy;\r\n }\r\n\r\n /**\r\n * 加载配置\r\n * @returns {Promise<Object>} - 返回配置对象,包含所有模板、泳道和线条数据\r\n * @example\r\n * {\r\n * caseVersion: { caseId: \"case123\", versionCode: \"v1.0\", createDate: \"2023-01-01\" },\r\n * templates: [\r\n * {\r\n * templateId: \"tpl123\",\r\n * templateName: \"模板1\",\r\n * isPublic: \"1\",\r\n * lanes: [\r\n * {\r\n * laneId: \"lane123\",\r\n * laneName: \"泳道1\",\r\n * lines: [\r\n * { lineId: \"line123\", lineName: \"线条1\", laneId: \"lane123\", color: \"#ff0000\" },\r\n * { lineId: \"line456\", lineName: \"线条2\", laneId: \"lane123\", color: \"#00ff00\" }\r\n * ]\r\n * }\r\n * ]\r\n * }\r\n * ],\r\n * params: []\r\n * }\r\n */\r\n getUserTemplates() {\r\n return this.strategy.getUserTemplates();\r\n }\r\n\r\n /**\r\n * 新增或更新模板\r\n * @param {Object} data - 模板数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整模板对象\r\n * @example\r\n * {\r\n * templateId: \"tpl123\",\r\n * templateName: \"模板1\",\r\n * isPublic: \"1\",\r\n * createDate: \"2023-01-01\",\r\n * updateDate: \"2023-01-02\"\r\n * }\r\n */\r\n upsertTemplate(data) {\r\n return this.strategy.upsertTemplate(data);\r\n }\r\n\r\n /**\r\n * 删除模板\r\n * @param {Object} data - 模板数据(需包含templateId)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delTemplate(data) {\r\n return this.strategy.deleteTemplate(data);\r\n }\r\n\r\n /**\r\n * 新增或更新泳道\r\n * @param {Object} data - 泳道数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整泳道对象\r\n * @example\r\n * {\r\n * laneId: \"lane123\",\r\n * laneName: \"泳道1\",\r\n * templateId: \"tpl123\",\r\n * createDate: \"2023-01-01\"\r\n * }\r\n */\r\n upsertLane(data) {\r\n return this.strategy.upsertLane(data);\r\n }\r\n\r\n /**\r\n * 删除泳道\r\n * @param {Object} lane - 泳道数据(需包含laneId和lines数组)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delLane(lane) {\r\n return this.strategy.deleteLane(lane);\r\n }\r\n\r\n /**\r\n * 新增或更新线条\r\n * @param {Object} data - 线条数据\r\n * @returns {Promise<Object>} - 返回插入或更新后的完整线条对象\r\n * @example\r\n * {\r\n * lineId: \"line123\",\r\n * lineName: \"线条1\",\r\n * laneId: \"lane123\",\r\n * templateId: \"tpl123\",\r\n * color: \"#ff0000\",\r\n * createDate: \"2023-01-01\"\r\n * }\r\n */\r\n upsertLine(data) {\r\n return this.strategy.upsertLine(data);\r\n }\r\n\r\n /**\r\n * 删除线条\r\n * @param {Object} data - 线条数据(需包含lineId和laneId)\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n delLine(data) {\r\n return this.strategy.delLine(data);\r\n }\r\n\r\n /**\r\n * 恢复默认设置\r\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\r\n */\r\n restoreSetting() {\r\n if (this.strategy.restoreSetting) {\r\n return this.strategy.restoreSetting();\r\n }\r\n return Promise.resolve();\r\n }\r\n}\r\n","/**\r\n * 配置管理 IndexedDB 工具类(版本号归属场景)\r\n * 核心 Store:templates/lanes/lines/case_versions/params\r\n * 设计原则:ES6 + Promise 链式调用 + 低冗余 + 索引优化\r\n *\r\n * case_versions(caseId → versionCode)\r\n * ↓(通过caseId关联)\r\n * templates(caseId + templateId → 模板列表)\r\n * ↓(通过templateId关联)\r\n * lanes(caseId + laneId → 泳道列表)\r\n * ↓(通过laneId关联)\r\n * lines(caseId + lineId → 线条列表)\r\n *\r\n */\r\nclass ConfigDBManager {\r\n // 数据库常量配置(升级版本号到2)\r\n static DB_NAME = \"KDLaneChartContainerConfigDB\";\r\n static MAX_UNICODE_CHAR = \"\\uffff\";\r\n static DB_VERSION = 2;\r\n static STORE_NAMES = {\r\n TEMPLATES: \"templates\",\r\n LANES: \"lanes\",\r\n LINES: \"lines\",\r\n PARAMS: \"params\",\r\n CASE_VERSIONS: \"case_versions\",\r\n };\r\n\r\n // 私有变量:数据库实例\r\n _db = null;\r\n\r\n /**\r\n * 私有方法:打开/创建数据库(核心基础方法)\r\n * @returns {Promise<IDBDatabase>} 数据库实例Promise\r\n */\r\n _openDB() {\r\n return new Promise((resolve, reject) => {\r\n if (this._db) {\r\n resolve(this._db);\r\n return;\r\n }\r\n\r\n const request = indexedDB.open(ConfigDBManager.DB_NAME, ConfigDBManager.DB_VERSION);\r\n\r\n // 数据库版本升级/首次创建时执行(创建Store和索引)\r\n request.onupgradeneeded = (event) => {\r\n const db = event.target.result;\r\n const { STORE_NAMES } = ConfigDBManager;\r\n\r\n // 1. 创建 case_versions Store(场景版本,主键caseId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.CASE_VERSIONS)) {\r\n db.createObjectStore(STORE_NAMES.CASE_VERSIONS, {\r\n keyPath: \"caseId\",\r\n });\r\n }\r\n\r\n // 2. 重建 templates Store(复合主键:caseId + templateId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.TEMPLATES)) {\r\n // eslint-disable-next-line\r\n const templateStore = db.createObjectStore(STORE_NAMES.TEMPLATES, {\r\n keyPath: [\"caseId\", \"templateId\"],\r\n });\r\n }\r\n\r\n // 3. 重建 lanes Store(复合主键:caseId + laneId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.LANES)) {\r\n // eslint-disable-next-line\r\n const laneStore = db.createObjectStore(STORE_NAMES.LANES, {\r\n keyPath: [\"caseId\", \"laneId\"],\r\n });\r\n }\r\n\r\n // 4. 重建 lines Store(复合主键:caseId + lineId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.LINES)) {\r\n // eslint-disable-next-line\r\n const lineStore = db.createObjectStore(STORE_NAMES.LINES, {\r\n keyPath: [\"caseId\", \"lineId\"],\r\n });\r\n }\r\n\r\n // 5. 重建 params Store(复合主键:caseId + paramId)\r\n if (!db.objectStoreNames.contains(STORE_NAMES.PARAMS)) {\r\n // eslint-disable-next-line\r\n const paramStore = db.createObjectStore(STORE_NAMES.PARAMS, {\r\n keyPath: [\"caseId\", \"paramId\"],\r\n });\r\n }\r\n };\r\n\r\n // 打开成功\r\n request.onsuccess = (event) => {\r\n this._db = event.target.result;\r\n this._db.onclose = () => {\r\n this._db = null;\r\n };\r\n resolve(this._db);\r\n };\r\n\r\n // 打开失败\r\n request.onerror = (event) => {\r\n reject(new Error(`打开数据库失败:${event.target.error.message}`));\r\n };\r\n\r\n request.onblocked = () => {\r\n reject(new Error(\"数据库操作被阻塞,请关闭其他标签页后重试\"));\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * 关闭数据库\r\n * @returns {Promise<void>}\r\n */\r\n closeDB() {\r\n return new Promise((resolve) => {\r\n if (this._db) {\r\n this._db.close();\r\n this._db = null;\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * 私有工具方法:版本号比较\r\n * @param {string|number} newVersion - 新版本号\r\n * @param {string|number} oldVersion - 旧版本号\r\n * @returns {number} 比较结果\r\n */\r\n _compareVersion(newVersion, oldVersion) {\r\n const parseVersion = (v) => String(v).split(\".\").map(Number);\r\n const newV = parseVersion(newVersion);\r\n const oldV = parseVersion(oldVersion);\r\n const maxLen = Math.max(newV.length, oldV.length);\r\n for (let i = 0; i < maxLen; i++) {\r\n const newSeg = newV[i] || 0;\r\n const oldSeg = oldV[i] || 0;\r\n if (newSeg > oldSeg) return 1;\r\n if (newSeg < oldSeg) return -1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * 私有方法:清除指定场景下的所有数据\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<void>}\r\n */\r\n _clearSceneData(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction(\r\n [\r\n ConfigDBManager.STORE_NAMES.CASE_VERSIONS,\r\n ConfigDBManager.STORE_NAMES.TEMPLATES,\r\n ConfigDBManager.STORE_NAMES.LANES,\r\n ConfigDBManager.STORE_NAMES.LINES,\r\n ConfigDBManager.STORE_NAMES.PARAMS,\r\n ],\r\n \"readwrite\"\r\n );\r\n\r\n const tStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n const lStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n const lineStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n const cvStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n const paramsStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n const bound = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n tStore.delete(bound);\r\n lStore.delete(bound);\r\n lineStore.delete(bound);\r\n paramsStore.delete(bound);\r\n cvStore.delete(caseId);\r\n\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`事务失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 私有工具:将 IDBRequest 转为 Promise\r\n * @param {IDBRequest} request - IndexedDB 请求对象\r\n * @returns {Promise<any>}\r\n */\r\n _promisifyRequest(request) {\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = () => resolve(request.result);\r\n request.onerror = () => reject(request.error);\r\n });\r\n }\r\n\r\n /**\r\n * 强制初始化场景配置\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源 {templates, lanes, lines, params}\r\n * @returns {Promise<Object>} 写入后的完整配置\r\n */\r\n forceInitSceneConfig(caseId, versionCode, dataSource) {\r\n if (!caseId || !versionCode) {\r\n return Promise.reject(new Error(\"caseId和versionCode为强制初始化的必传参数\"));\r\n }\r\n return this._clearSceneData(caseId)\r\n .then(() => {\r\n const config = this.setUpData(caseId, versionCode, dataSource);\r\n return this.batchAddConfig(config);\r\n })\r\n .catch((err) => {\r\n throw new Error(`强制初始化场景配置失败:${err.message}`);\r\n });\r\n }\r\n\r\n /**\r\n * 组装配置数据(自动为子项添加caseId)\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源\r\n * @returns {Object} 完整配置\r\n */\r\n setUpData(caseId, versionCode, dataSource) {\r\n // 为所有子项添加caseId\r\n const templates = dataSource.templates.map((t) => ({ ...t, caseId }));\r\n const lanes = dataSource.lanes.map((l) => ({ ...l, caseId }));\r\n const lines = dataSource.lines.map((line) => ({ ...line, caseId }));\r\n const params = dataSource.params.map((p) => ({ ...p, caseId }));\r\n\r\n return {\r\n caseVersion: { caseId, versionCode, updateTime: new Date() },\r\n templates,\r\n lanes,\r\n lines,\r\n params,\r\n };\r\n }\r\n\r\n /**\r\n * 校验场景配置完整性\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @returns {Promise<boolean>} true=异常,false=正常\r\n */\r\n checkConfigIntegrity(caseId, versionCode) {\r\n return this.getCaseVersionByCaseId(caseId).then((caseVersion) => {\r\n if (!caseVersion || caseVersion.versionCode !== versionCode) return false;\r\n return this.getTemplatesByCaseId(caseId).then((templates) => {\r\n if (templates.length === 0) return true;\r\n const randomTplId = templates[0].templateId;\r\n return this.getLanesByTemplateId(caseId, randomTplId).then((lanes) => {\r\n if (lanes.length === 0) return true;\r\n const randomLaneId = lanes[0].laneId;\r\n return this.getLinesByLaneId(caseId, randomLaneId).then((lines) => lines.length === 0);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 私有核心方法:初始化场景配置\r\n * @param {Object} config - 完整配置\r\n * @returns {Promise<Object>}\r\n */\r\n _initSceneConfig(config) {\r\n const { caseVersion } = config;\r\n const { caseId, versionCode } = caseVersion;\r\n\r\n return this.getCaseVersionByCaseId(caseId).then((oldCaseVersion) => {\r\n if (!oldCaseVersion) {\r\n return this.batchAddConfig(config);\r\n }\r\n\r\n const compareResult = this._compareVersion(versionCode, oldCaseVersion.versionCode);\r\n if (compareResult > 0) {\r\n return this._clearSceneData(caseId).then(() => this.batchAddConfig(config));\r\n } else if (compareResult === 0) {\r\n console.log(`场景${caseId}已存在版本${versionCode},无需重复创建`);\r\n return Promise.resolve(oldCaseVersion);\r\n } else {\r\n throw new Error(`场景${caseId}当前版本${oldCaseVersion.versionCode}高于待创建版本${versionCode}。`);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 对外暴露的便捷入口方法\r\n * @param {string} caseId - 场景ID\r\n * @param {string|number} versionCode - 版本号\r\n * @param {Object} dataSource - 数据源\r\n * @returns {Promise<Object>} 初始化后的配置\r\n */\r\n saveSceneConfig(caseId, versionCode, dataSource) {\r\n if (!caseId || !versionCode) {\r\n return Promise.reject(new Error(\"caseId和versionCode为必传参数\"));\r\n }\r\n if (!Array.isArray(dataSource.templates) || !Array.isArray(dataSource.lanes) || !Array.isArray(dataSource.lines)) {\r\n return Promise.reject(new Error(\"templates/lanes/lines必须为数组\"));\r\n }\r\n\r\n const config = this.setUpData(caseId, versionCode, dataSource);\r\n return this._initSceneConfig(config);\r\n }\r\n\r\n /**\r\n * 批量添加配置(内部使用)\r\n * @param {Object} config - 完整配置\r\n * @returns {Promise<Object>}\r\n */\r\n batchAddConfig(config) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction(\r\n [\r\n ConfigDBManager.STORE_NAMES.CASE_VERSIONS,\r\n ConfigDBManager.STORE_NAMES.TEMPLATES,\r\n ConfigDBManager.STORE_NAMES.LANES,\r\n ConfigDBManager.STORE_NAMES.LINES,\r\n ConfigDBManager.STORE_NAMES.PARAMS,\r\n ],\r\n \"readwrite\"\r\n );\r\n\r\n // 保存场景版本\r\n transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS).put(config.caseVersion);\r\n\r\n // 保存模板(已包含caseId)\r\n const tStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n config.templates.forEach((tpl) => tStore.put(tpl));\r\n\r\n // 保存泳道(已包含caseId)\r\n const lStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n config.lanes.forEach((lane) => lStore.put(lane));\r\n\r\n // 保存线条(已包含caseId)\r\n const lineStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n config.lines.forEach((line) => lineStore.put(line));\r\n\r\n // 保存参数(已包含caseId)\r\n const pStore = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n config.params.forEach((param) => pStore.put(param));\r\n\r\n transaction.oncomplete = () => resolve(config);\r\n transaction.onerror = (e) => reject(new Error(`批量添加配置失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== case_versions 操作 ======================\r\n /**\r\n * 新增/更新场景版本\r\n * @param {Object} caseVersion - { caseId, versionCode, updateTime: Date }\r\n * @returns {Promise<Object>}\r\n */\r\n upsertCaseVersion(caseVersion) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n const versionData = {\r\n updateTime: new Date(),\r\n ...caseVersion,\r\n };\r\n\r\n this._promisifyRequest(store.put(versionData))\r\n .then(() => resolve(versionData))\r\n .catch((error) => reject(new Error(`更新场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询场景版本\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getCaseVersionByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n this._promisifyRequest(store.get(caseId))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询完整配置信息(含模板、泳道、线条、参数)\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Object>} 完整配置对象 { caseVersion, templates: [{...tpl, lanes: [{...lane, lines: [...]}]}], params }\r\n */\r\n getConfigByCaseId(caseId) {\r\n if (!caseId) {\r\n return Promise.reject(new Error(\"caseId为必传参数\"));\r\n }\r\n\r\n // 并行查询基础数据(场景版本、模板、参数)\r\n return Promise.all([this.getCaseVersionByCaseId(caseId), this.getTemplatesByCaseId(caseId), this.getParamsByCaseId(caseId)])\r\n .then(([caseVersion, templates, params]) => {\r\n // 遍历模板,为每个模板查询关联的泳道及线条\r\n const templatePromises = templates.map((tpl) => {\r\n return this.getLanesByTemplateId(caseId, tpl.templateId).then((lanes) => {\r\n // 遍历泳道,为每个泳道查询关联的线条\r\n const lanePromises = lanes.map((lane) => {\r\n return this.getLinesByLaneId(caseId, lane.laneId).then((lines) => ({ ...lane, lines }));\r\n });\r\n return Promise.all(lanePromises).then((lanesWithLines) => ({\r\n ...tpl,\r\n lanes: lanesWithLines,\r\n }));\r\n });\r\n });\r\n\r\n return Promise.all(templatePromises).then((templatesWithLanes) => ({\r\n caseVersion,\r\n templates: templatesWithLanes,\r\n params,\r\n }));\r\n })\r\n .catch((err) => {\r\n throw new Error(`查询场景配置失败:${err.message}`);\r\n });\r\n }\r\n\r\n getConfigByTemplateId(caseId, templateId) {\r\n if (!caseId || !templateId) {\r\n return Promise.reject(new Error(\"caseId为必传参数\"));\r\n }\r\n const template = {};\r\n return this.getLanesByTemplateId(caseId, templateId)\r\n .then((lanes) => {\r\n const lineTasks = lanes.map((lane) => {\r\n return this.getLinesByLaneId(caseId, lane.laneId);\r\n });\r\n\r\n return Promise.all(lineTasks).then((linesArray) => {\r\n linesArray.forEach((lines, index) => {\r\n lanes[index].lines = lines;\r\n });\r\n template.lanes = lanes;\r\n });\r\n })\r\n .then(() => {\r\n return this.getTemplateById(caseId, templateId);\r\n })\r\n .then((result) => {\r\n result.lanes = template.lanes;\r\n return Promise.resolve(result);\r\n });\r\n }\r\n\r\n /**\r\n * 删除场景版本\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteCaseVersion(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.CASE_VERSIONS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.CASE_VERSIONS);\r\n\r\n this._promisifyRequest(store.delete(caseId))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除场景版本失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n // ====================== templates 操作 ======================\r\n /**\r\n * 新增/更新模板(自动携带caseId)\r\n * @param {Object} template - 模板数据(含caseId、templateId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertTemplate(template) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!template.caseId) {\r\n reject(new Error(\"模板数据必须包含caseId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n const templateData = {\r\n ...template,\r\n createDate: template.createDate ? new Date(template.createDate) : new Date(),\r\n updateDate: template.updateDate ? new Date(template.updateDate) : null,\r\n };\r\n delete templateData.lanes;\r\n return this._promisifyRequest(store.put(templateData))\r\n .then(() => resolve(templateData))\r\n .catch((error) => reject(new Error(`更新模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和templateId查询模板\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getTemplateById(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n\r\n this._promisifyRequest(store.get([caseId, templateId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询所有模板\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Array>} 模板列表\r\n */\r\n getTemplatesByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n // 通过复合主键前缀查询(caseId匹配)\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n this._promisifyRequest(store.getAll(range))\r\n .then((result) => {\r\n resolve(result || []);\r\n })\r\n .catch((error) => reject(new Error(`查询场景下模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除模板\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteTemplate(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.TEMPLATES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.TEMPLATES);\r\n\r\n this._promisifyRequest(store.delete([caseId, templateId]))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除模板失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n // ====================== lanes 操作 ======================\r\n /**\r\n * 新增/更新泳道(自动携带caseId)\r\n * @param {Object} lane - 泳道数据(含caseId、laneId、templateId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertLane(caseId, lane) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!caseId || !lane.templateId) {\r\n reject(new Error(\"泳道数据必须包含caseId和templateId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n const laneData = {\r\n ...lane,\r\n caseId: caseId,\r\n updateDate: lane.updateDate ? new Date(lane.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(laneData))\r\n .then(() => resolve(laneData))\r\n .catch((error) => reject(new Error(`更新泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和laneId查询泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {string} laneId - 泳道ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getLaneById(caseId, laneId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n this._promisifyRequest(store.get([caseId, laneId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和templateId查询泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {string} templateId - 模板ID\r\n * @returns {Promise<Array>} 泳道列表\r\n */\r\n getLanesByTemplateId(caseId, templateId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n // 原索引查询修改为:查询该场景下所有泳道后过滤templateId\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((lanes) => lanes.filter((lane) => lane.templateId === templateId))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询模板下泳道失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除泳道\r\n * @param {string} caseId - 场景ID\r\n * @param {Array} laneIds - 泳道ID数组\r\n * @returns {Promise<void>}\r\n */\r\n deleteLaneByLaneIds(caseId, laneIds) {\r\n if (!Array.isArray(laneIds) || laneIds.length === 0) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LANES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LANES);\r\n\r\n laneIds.map((laneId) => this._promisifyRequest(store.delete([caseId, laneId])));\r\n\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`删除泳道失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== lines 操作 ======================\r\n /**\r\n * 新增/更新线条(自动携带caseId)\r\n * @param {Object} line - 线条数据(含caseId、lineId、laneId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertLine(caseId, line) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!caseId || !line.laneId) {\r\n reject(new Error(\"线条数据必须包含caseId和laneId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n const lineData = {\r\n ...line,\r\n caseId: caseId,\r\n updateDate: line.updateDate ? new Date(line.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(lineData))\r\n .then(() => resolve(lineData))\r\n .catch((error) => reject(new Error(`更新线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和lineId查询线条\r\n * @param {string} caseId - 场景ID\r\n * @param {string} lineId - 线条ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getLineById(caseId, lineId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n this._promisifyRequest(store.get([caseId, lineId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和laneId查询线条\r\n * @param {string} caseId - 场景ID\r\n * @param {string} laneId - 泳道ID\r\n * @returns {Promise<Array>} 线条列表\r\n */\r\n getLinesByLaneId(caseId, laneId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n // 原索引查询修改为:查询该场景下所有线条后过滤laneId\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((lines) => lines.filter((line) => line.laneId === laneId))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询泳道下线条失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除线条\r\n * @param {string} caseId - 场景ID\r\n * @param {Array} lineIds - 线条ID数组\r\n * @returns {Promise<void>}\r\n */\r\n deleteLineByIds(caseId, lineIds) {\r\n // 边界处理:空数组直接resolve,避免无意义的事务操作\r\n if (!Array.isArray(lineIds) || lineIds.length === 0) {\r\n return Promise.resolve();\r\n }\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.LINES], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.LINES);\r\n\r\n // 批量执行delete,复用同一个事务\r\n lineIds.map((lineId) => this._promisifyRequest(store.delete([caseId, lineId])));\r\n // 监听事务完成/错误\r\n transaction.oncomplete = () => resolve();\r\n transaction.onerror = (e) => reject(new Error(`批量删除线条失败:${e.target.error.message}`));\r\n });\r\n });\r\n }\r\n\r\n // ====================== params 操作 ======================\r\n /**\r\n * 新增/更新参数(自动携带caseId)\r\n * @param {Object} param - 参数数据(含caseId、paramId等)\r\n * @returns {Promise<Object>}\r\n */\r\n upsertParam(param) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n if (!param.caseId) {\r\n reject(new Error(\"参数数据必须包含caseId\"));\r\n return;\r\n }\r\n\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n const paramData = {\r\n ...param,\r\n updateDate: param.updateDate ? new Date(param.updateDate) : new Date(),\r\n };\r\n\r\n this._promisifyRequest(store.put(paramData))\r\n .then(() => resolve(paramData))\r\n .catch((error) => reject(new Error(`更新参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId和paramId查询参数\r\n * @param {string} caseId - 场景ID\r\n * @param {string} paramId - 参数ID\r\n * @returns {Promise<Object|null>}\r\n */\r\n getParamById(caseId, paramId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n this._promisifyRequest(store.get([caseId, paramId]))\r\n .then((result) => resolve(result || null))\r\n .catch((error) => reject(new Error(`查询参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 根据caseId查询所有参数\r\n * @param {string} caseId - 场景ID\r\n * @returns {Promise<Array>} 参数列表\r\n */\r\n getParamsByCaseId(caseId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readonly\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n // 通过复合主键前缀查询\r\n const range = IDBKeyRange.bound([caseId], [caseId, ConfigDBManager.MAX_UNICODE_CHAR]);\r\n\r\n this._promisifyRequest(store.getAll(range))\r\n .then((result) => resolve(result || []))\r\n .catch((error) => reject(new Error(`查询场景下参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 删除参数\r\n * @param {string} caseId - 场景ID\r\n * @param {string} paramId - 参数ID\r\n * @returns {Promise<void>}\r\n */\r\n deleteParamById(caseId, paramId) {\r\n return this._openDB().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n const transaction = db.transaction([ConfigDBManager.STORE_NAMES.PARAMS], \"readwrite\");\r\n const store = transaction.objectStore(ConfigDBManager.STORE_NAMES.PARAMS);\r\n\r\n this._promisifyRequest(store.delete([caseId, paramId]))\r\n .then(() => resolve())\r\n .catch((error) => reject(new Error(`删除参数失败:${error.message}`)));\r\n });\r\n });\r\n }\r\n}\r\nexport const dbHelper = new ConfigDBManager();\r\n","export function isNumeric(val) {\r\n return val != null && val !== \"\" && !Number.isNaN(Number(val));\r\n}\r\nexport function pxToNumber(pxStr) {\r\n if (!pxStr || typeof pxStr !== \"string\") return 0;\r\n return parseFloat(pxStr.replace(\"px\", \"\")) || 0;\r\n}\r\n/**\r\n * 【原地排序】对单个泳道(lane)的lines数组按lineSort升序排序\r\n * @param {Object} lane - 单个泳道对象(直接修改原对象的lines)\r\n */\r\nexport function sortLaneLines(lane) {\r\n // 边界保护:lane不存在/无lines字段则不处理\r\n if (!lane || !Array.isArray(lane.lines)) return;\r\n\r\n // 直接对原lines数组原地排序(无拷贝)\r\n lane.lines.sort((a, b) => {\r\n const lineSortA = a.lineSort ?? 0;\r\n const lineSortB = b.lineSort ?? 0;\r\n return lineSortA - lineSortB;\r\n });\r\n}\r\n\r\n/**\r\n * 【原地排序】对lanes数组按sort升序排序,并原地处理每条lane的lines\r\n * @param {Array} lanes - 泳道数组(直接修改原数组)\r\n */\r\nexport function sortLanes(lanes) {\r\n // 边界保护:非数组则不处理\r\n if (!Array.isArray(lanes)) return;\r\n\r\n // 1. 直接对原lanes数组原地排序(无拷贝)\r\n lanes.sort((a, b) => {\r\n const sortA = a.sort ?? 0;\r\n const sortB = b.sort ?? 0;\r\n return sortA - sortB;\r\n });\r\n\r\n // 2. 遍历每条lane,原地排序其lines\r\n lanes.forEach((lane) => sortLaneLines(lane));\r\n}\r\n\r\n/**\r\n * 【原地排序】完整的模板排序逻辑(直接修改原templates数组)\r\n * @param {Array} templates - 模板数组(直接修改原数组)\r\n * @returns {Array} 返回原数组(方便链式调用,本质已原地修改)\r\n */\r\nexport function sortTemplates(templates) {\r\n // 边界保护:非数组/空数组直接返回\r\n if (!Array.isArray(templates) || templates.length === 0) {\r\n return templates;\r\n }\r\n\r\n // 1. 直接对原templates数组原地排序(无拷贝)\r\n templates.sort((a, b) => {\r\n const sortA = a.sort ?? 0;\r\n const sortB = b.sort ?? 0;\r\n return sortA - sortB;\r\n });\r\n\r\n // 2. 遍历每个模板,原地排序其lanes\r\n templates.forEach((template) => sortLanes(template.lanes));\r\n\r\n // 返回原数组(方便调用方链式操作,比如 sortTemplates(arr).filter(...))\r\n return templates;\r\n}\r\n\r\n/**\r\n * 判断RQW数据类型\r\n * @param {Object} data - 待判断的数据对象\r\n * @returns {string|null} - 返回数据类型('line'|'lane'|'template')或null\r\n *\r\n * 类型判断规则:\r\n * - 同时包含lineId和laneId时,返回'line'(线路类型)\r\n * - 包含laneId和templateId但不包含lineId时,返回'lane'(车道类型)\r\n * - 只包含templateId时,返回'template'(模板类型)\r\n * - 不满足以上条件时,返回null\r\n */\r\nexport function judgeRawDataType(data) {\r\n // 如果数据为空,直接返回null\r\n if (!data) return null;\r\n\r\n // 判断是否为线路类型(同时包含lineId和laneId)\r\n if (data.lineId && data.laneId) {\r\n return \"line\";\r\n }\r\n // 判断是否为车道类型(包含laneId和templateId,但不包含lineId)\r\n else if (data.laneId && data.templateId && !data.lineId) {\r\n return \"lane\";\r\n }\r\n // 判断是否为模板类型(只包含templateId)\r\n else if (data.templateId) {\r\n return \"template\";\r\n }\r\n // 其他情况返回null\r\n else {\r\n return null;\r\n }\r\n}\r\nexport function strategyValidator(config) {\r\n // 1. 必须是对象\r\n if (typeof config !== \"object\" || config === null) {\r\n throw new Error(\"配置必须是一个对象\");\r\n }\r\n\r\n // 2. 必须有 type 属性\r\n if (!(\"type\" in config)) {\r\n throw new Error(\"配置必须包含 type 属性\");\r\n }\r\n\r\n // 通用参数校验\r\n if (!(\"caseId\" in config) || !(\"versionCode\" in config)) {\r\n throw new Error(\"配置必须包含 caseId, versionCode 属性\");\r\n }\r\n\r\n const { type } = config;\r\n\r\n // 3. 根据 type 的值进一步校验\r\n if (type === \"local\") {\r\n if (!(\"dataSource\" in config) || config.dataSource == null) {\r\n throw new Error(\"local 类型的配置必须包含 dataSource 属性\");\r\n }\r\n\r\n if (!(\"params\" in config.dataSource)) {\r\n throw new Error(\"local 类型的配置 dataSource 必须包含 params 属性\");\r\n }\r\n } else if (type === \"custom\") {\r\n // 校验增删改查方法是否为函数\r\n const crudMethods = [\"getUserTemplates\", \"upsertTemplate\", \"delTemplate\", \"upsertLane\", \"delLane\", \"upsertLine\", \"delLine\"];\r\n for (const method of crudMethods) {\r\n if (typeof config[method] !== \"function\") {\r\n throw new Error(`${method} 必须是一个函数`);\r\n }\r\n }\r\n } else {\r\n throw new Error('type 必须是 \"local\" 或 \"custom\"');\r\n }\r\n\r\n return true; // 校验通过\r\n}\r\n\r\n/**\r\n * 数据归一化:将任意输入结构转为树形结构\r\n * @param {*} data 外部传入的数据源(扁平结构/树形结构)\r\n * @returns {Array} 统一的树形templates数组\r\n */\r\nexport function normalizeData(data) {\r\n // 容错:空数据返回空数组\r\n if (!data) return [];\r\n\r\n // 情况1:扁平结构 → 转换\r\n if (isFlatStructure(data)) {\r\n return flattenToTree(data.templates, data.lanes, data.lines);\r\n }\r\n\r\n // 情况2:树形结构 → 直接提取templates(兼容两种传入形式:{templates:[]} 或 直接传templates数组)\r\n if (isTreeStructure(data)) {\r\n return Array.isArray(data) ? data : data.templates;\r\n }\r\n\r\n // 情况3:非法结构 → 报错并返回空数组\r\n console.error(\"传入的数据源结构不支持,请检查格式!\");\r\n return [];\r\n}\r\n\r\n/**\r\n * 判断是否为扁平结构\r\n * @param {*} data 传入的数据源\r\n * @returns {boolean}\r\n */\r\nexport function isFlatStructure(data) {\r\n // 扁平结构特征:包含templates、lanes、lines三个数组,且templates第一项无lanes属性\r\n return (\r\n !!data &&\r\n Array.isArray(data.templates) &&\r\n Array.isArray(data.lanes) &&\r\n Array.isArray(data.lines) &&\r\n (data.templates.length === 0 || !data.templates[0].lanes)\r\n );\r\n}\r\n\r\n/**\r\n * 判断是否为树形结构(第二种)\r\n * @param {*} data 传入的数据源\r\n * @returns {boolean}\r\n */\r\nexport function isTreeStructure(data) {\r\n // 树形结构特征:直接是templates数组,或包含templates数组且templates项有lanes数组\r\n if (Array.isArray(data)) {\r\n // 外部直接传templates数组的情况\r\n return data.length === 0 || (!!data[0] && Array.isArray(data[0].lanes));\r\n }\r\n return !!data && Array.isArray(data.templates) && (data.templates.length === 0 || Array.isArray(data.templates[0].lanes));\r\n}\r\n\r\n/**\r\n * 将扁平数据转换为树形结构\r\n * {templates : [], lanes : [], lines : []}\r\n */\r\nexport function flattenToTree(templates = [], lanes = [], lines = []) {\r\n const laneMap = new Map();\r\n for (const lane of lanes) {\r\n if (laneMap.has(lane.templateId)) {\r\n laneMap.get(lane.templateId).push(lane);\r\n } else {\r\n laneMap.set(lane.templateId, [lane]);\r\n }\r\n }\r\n const lineMap = new Map();\r\n for (const line of lines) {\r\n if (lineMap.has(line.laneId)) {\r\n lineMap.get(line.laneId).push(line);\r\n } else {\r\n lineMap.set(line.laneId, [line]);\r\n }\r\n }\r\n\r\n const result = [];\r\n\r\n for (const template of templates) {\r\n const tempT = { ...template };\r\n const tId = tempT.templateId;\r\n tempT.lanes = laneMap.get(tId) || [];\r\n\r\n for (const lane of tempT.lanes) {\r\n const laneId = lane.laneId;\r\n lane.lines = lineMap.get(laneId) || [];\r\n }\r\n result.push(tempT);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * 将树形结构数据转换为扁平数据\r\n */\r\nexport function treeToFlatten(treeData) {\r\n const templates = [];\r\n const lanes = [];\r\n const lines = [];\r\n\r\n for (const template of treeData) {\r\n // 未被显式提取的其他所有属性 收集到一个新的对象 templateData 中\r\n const { lanes: templateLanes, ...templateData } = template;\r\n\r\n // 如果template没有templateId属性,则调用generateUUID为其生成\r\n if (!templateData.templateId) {\r\n templateData.templateId = generateUUID();\r\n }\r\n\r\n templates.push(templateData);\r\n\r\n for (const lane of templateLanes || []) {\r\n const { lines: laneLines, ...laneData } = lane;\r\n\r\n // lane中的templateId属性,确保等于他所在template对象中的templateId属性\r\n laneData.templateId = templateData.templateId;\r\n\r\n // 如果没有laneId属性,则调用generateUUID为其生成\r\n if (!laneData.laneId) {\r\n laneData.laneId = generateUUID();\r\n }\r\n\r\n lanes.push(laneData);\r\n\r\n for (const line of laneLines || []) {\r\n // 确保line中的laneId等于他所在对象的laneId属性\r\n line.laneId = laneData.laneId;\r\n\r\n // 如果没有lineId,则调用generateUUID方法为其生成\r\n if (!line.lineId) {\r\n line.lineId = generateUUID();\r\n }\r\n\r\n lines.push(line);\r\n }\r\n }\r\n }\r\n return { templates, lanes, lines };\r\n}\r\n\r\nexport function generateUUID(simple = true) {\r\n // 优先使用现代浏览器的原生方法\r\n let uuid = \"\";\r\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\r\n uuid = crypto.randomUUID();\r\n } else {\r\n uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n if (simple) {\r\n // 替换掉-号, 生成的UUID更短\r\n return uuid.replace(/-/g, \"\");\r\n } else {\r\n return uuid;\r\n }\r\n}\r\n","import { dbHelper } from \"../store/db-manager.js\";\nimport { generateUUID } from \"../util/index.js\";\nexport class DefaultLocalStrategy {\n constructor(caseId, versionCode, dataSource, flatData = true) {\n this.caseId = caseId;\n this.versionCode = versionCode;\n this.dataSource = dataSource;\n this.flatData = flatData;\n this.ready = dbHelper.saveSceneConfig(caseId, versionCode, dataSource).catch((e) => {\n console.warn(`初始化数据库出错,直接重置:${e.message}`);\n // 版本冲突的话,直接重置\n return dbHelper.forceInitSceneConfig(caseId, versionCode, dataSource);\n });\n }\n\n /**\n * 加载配置\n * @returns {Promise<Object>} - 返回配置对象,包含所有模板、泳道和线条数据\n * @example\n * {\n * caseVersion: { caseId: \"case123\", versionCode: \"v1.0\", createDate: \"2023-01-01\" },\n * templates: [\n * {\n * templateId: \"tpl123\",\n * templateName: \"模板1\",\n * isPublic: \"1\",\n * lanes: [\n * {\n * laneId: \"lane123\",\n * laneName: \"泳道1\",\n * lines: [\n * { lineId: \"line123\", lineName: \"线条1\", laneId: \"lane123\", color: \"#ff0000\" },\n * { lineId: \"line456\", lineName: \"线条2\", laneId: \"lane123\", color: \"#00ff00\" }\n * ]\n * }\n * ]\n * }\n * ],\n * params: []\n * }\n */\n getUserTemplates() {\n return this.ready.then(() => {\n return dbHelper.getConfigByCaseId(this.caseId);\n });\n }\n\n /**\n * 新增或更新模板\n * @param {Object} data - 模板数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整模板对象\n * @example\n * {\n * templateId: \"tpl123\",\n * templateName: \"模板1\",\n * isPublic: \"1\",\n * createDate: \"2023-01-01\",\n * updateDate: \"2023-01-02\"\n * }\n */\n upsertTemplate(template) {\n let p;\n // 第一步,如果没有templateId,则先创建一条\n if (!template.templateId) {\n const newTemplateId = generateUUID();\n template.templateId = newTemplateId;\n if (template.baseTemplate) {\n const dataSource = {};\n // 如果template有baseTemplate属性,则要复制其内容到template\n p = dbHelper\n .getLanesByTemplateId(this.caseId, template.baseTemplate)\n .then((lanes) => {\n dataSource.lanes = lanes;\n\n const linesP = lanes.map((lane) => {\n return dbHelper.getLinesByLaneId(this.caseId, lane.laneId);\n });\n return Promise.all(linesP).then((results) => {\n const allLines = [];\n // 二维数组\n const linesByLane = results;\n linesByLane.forEach((lines, index) => {\n const newLaneId = generateUUID();\n dataSource.lanes[index].laneId = newLaneId;\n dataSource.lanes[index].templateId = newTemplateId;\n dataSource.lanes[index].createUser = undefined;\n lines.forEach((line) => {\n line.lineId = generateUUID();\n line.laneId = newLaneId;\n line.createUser = undefined;\n allLines.push(line);\n });\n });\n dataSource.lines = allLines;\n });\n })\n .then(() => {\n dataSource.templates = [template];\n })\n .then(() => {\n dataSource.params = [];\n const config = dbHelper.setUpData(this.caseId, this.versionCode, dataSource);\n return dbHelper.batchAddConfig(config);\n })\n .then(() => {\n return dbHelper.getTemplateById(this.caseId, newTemplateId);\n });\n } else {\n p = dbHelper.upsertTemplate(template);\n }\n } else {\n p = dbHelper.upsertTemplate(template);\n }\n\n if (template.isPublic === \"1\") {\n return p.then(() => {\n return dbHelper\n .getTemplatesByCaseId(this.caseId)\n .then((templates) => {\n return templates.filter((t) => {\n return t.templateId !== template.templateId;\n });\n })\n .then((allT) => {\n allT.forEach((t) => {\n t.isPublic = \"0\";\n });\n const PArray = allT.map((t) => {\n return dbHelper.upsertTemplate(t);\n });\n return Promise.all(PArray);\n })\n .then(() => {\n return dbHelper.getConfigByTemplateId(this.caseId, template.templateId);\n });\n });\n } else {\n return p;\n }\n }\n\n /**\n * 删除模板\n * @param {Object} data - 模板数据(需包含templateId)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n deleteTemplate(data) {\n return dbHelper\n .getLanesByTemplateId(this.caseId, data.templateId)\n .then((lanes) => {\n const allLaneIds = lanes.map((lane) => lane.laneId);\n\n let linesP = allLaneIds.map((laneId) => {\n return dbHelper.getLinesByLaneId(this.caseId, laneId);\n });\n\n return Promise.all(linesP)\n .then((results) => {\n const allLineIds = results\n .reduce((previousValue, currentValue) => {\n return previousValue.concat(currentValue);\n }, [])\n .map((line) => line.lineId);\n return dbHelper.deleteLineByIds(this.caseId, allLineIds);\n })\n .then(() => {\n return Promise.resolve(allLaneIds);\n });\n })\n .then((allLaneIds) => {\n return dbHelper.deleteLaneByLaneIds(this.caseId, allLaneIds);\n })\n .then(() => {\n return dbHelper.deleteTemplate(this.caseId, data.templateId);\n })\n .then(() => {\n return Promise.resolve(data);\n });\n }\n\n /**\n * 新增或更新泳道\n * @param {Object} data - 泳道数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整泳道对象\n * @example\n * {\n * laneId: \"lane123\",\n * laneName: \"泳道1\",\n * templateId: \"tpl123\",\n * createDate: \"2023-01-01\"\n * }\n */\n upsertLane(lane) {\n if (!lane.laneId) {\n lane.laneId = generateUUID();\n }\n if (!lane.lines) {\n lane.lines = [];\n }\n return dbHelper.upsertLane(this.caseId, lane);\n }\n\n /**\n * 删除泳道\n * @param {Object} lane - 泳道数据(需包含laneId和lines数组)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n delLane(lane) {\n const { lines, laneId } = lane;\n const allLineIds = lines.map((line) => line.lineId);\n return dbHelper\n .deleteLineByIds(this.caseId, allLineIds)\n .then(() => {\n return dbHelper.deleteLaneByLaneIds(this.caseId, [laneId]);\n })\n .then(() => {\n return Promise.resolve(lane);\n });\n }\n\n /**\n * 新增或更新线条\n * @param {Object} data - 线条数据\n * @returns {Promise<Object>} - 返回插入或更新后的完整线条对象\n * @example\n * {\n * lineId: \"line123\",\n * lineName: \"线条1\",\n * laneId: \"lane123\",\n * templateId: \"tpl123\",\n * color: \"#ff0000\",\n * createDate: \"2023-01-01\"\n * }\n */\n upsertLine(line) {\n if (!line.lineId) {\n line.lineId = generateUUID();\n }\n if (!line.laneId) {\n return Promise.reject(new Error(\"更新线条数据的时候,必须laneId不能为空!\"));\n }\n return dbHelper.upsertLine(this.caseId, line);\n }\n\n /**\n * 删除线条\n * @param {Object} data - 线条数据(需包含lineId和laneId)\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n delLine(line) {\n if (!line.laneId) {\n return Promise.reject(new Error(\"更新线条数据的时候,必须laneId不能为空!\"));\n }\n return dbHelper.deleteLineByIds(this.caseId, [line.lineId]);\n }\n\n /**\n * 恢复设置\n * @returns {Promise<void>} - 不携带任何数据,仅表示操作成功或失败\n */\n restoreSetting() {\n return dbHelper.forceInitSceneConfig(this.caseId, this.versionCode, this.dataSource);\n }\n\n // 获取策略类型(用于调试)\n getType() {\n return \"local-default\";\n }\n}\n","import { CustomStrategy } from \"./CustomStrategy.js\";\r\nimport { DefaultLocalStrategy } from \"./DefaultLocalStrategy.js\";\r\nimport { isFlatStructure, isTreeStructure, treeToFlatten } from \"../util/index.js\";\r\n\r\nexport class StrategyFactory {\r\n static createStrategy(strategy) {\r\n // 本地策略默认实现\r\n if (strategy.type === \"local\") {\r\n let option;\r\n if (isFlatStructure(strategy.dataSource)) {\r\n option = { ...strategy };\r\n } else if (isTreeStructure(strategy.dataSource)) {\r\n const flatedData = treeToFlatten(strategy.dataSource.templates);\r\n option = { ...strategy, dataSource: { ...flatedData, params: strategy.dataSource.params } };\r\n } else {\r\n throw new Error(\"策略数据源格式不匹配\");\r\n }\r\n const { caseId, versionCode, dataSource } = option;\r\n return new DefaultLocalStrategy(caseId, versionCode, dataSource, false);\r\n } else {\r\n return new CustomStrategy(strategy);\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"kd-lane-template-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" label-width=\"120px\">\r\n <el-form-item label=\"模板名称\" prop=\"templateName\">\r\n <el-input v-model=\"formData.templateName\" :disabled=\"currentTemplate.createUser == 'SYSTEM_USER' || formDisable\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"默认模板\" prop=\"isPublic\">\r\n <el-radio-group v-model=\"formData.isPublic\" :disabled=\"formDisable\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"曲线高度占比\" prop=\"col1\">\r\n <el-select v-model=\"formData.col1\" :disabled=\"formDisable\">\r\n <el-option value=\"0.5\" label=\"50%\"></el-option>\r\n <el-option value=\"0.6\" label=\"60%\"></el-option>\r\n <el-option value=\"0.7\" label=\"70%\"></el-option>\r\n <el-option value=\"0.8\" label=\"80%\"></el-option>\r\n <el-option value=\"0.9\" label=\"90%\"></el-option>\r\n <el-option value=\"1\" label=\"全屏\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"选择基础模板\" prop=\"lineType\" v-show=\"!currentTemplate.templateId\" :disabled=\"formDisable\">\r\n <el-select v-model=\"formData.baseTemplate\" placeholder=\"请选择\">\r\n <el-option v-for=\"item in baseTemplate\" :key=\"item.value\" :label=\"item.name\" :value=\"item.value\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"顺序\" prop=\"sort\" label-width=\"120px\">\r\n <el-input v-model.number=\"formData.sort\" :disabled=\"formDisable\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\" :loading=\"saving\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertTemplate\", \"setTargetData\", \"setExpanded\"],\r\n props: {\r\n currentTemplate: {\r\n type: Object,\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n userTemplate: {\r\n type: Array,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n },\r\n data() {\r\n return {\r\n formData: Object.assign({ sort: undefined }, this.currentTemplate),\r\n rules: {\r\n templateName: [{ required: true, message: \"请输入模板名称\", trigger: \"blur\" }],\r\n },\r\n saving: false,\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName].validate((valid) => {\r\n if (!valid) {\r\n return;\r\n }\r\n if (typeof this.upsertTemplate !== \"function\") {\r\n this.$message({ type: \"error\", message: \"没有配置模板管理方法\" });\r\n return;\r\n }\r\n this.saving = true;\r\n const payload = { ...this.formData };\r\n if (!payload.caseId) {\r\n payload.caseId = this.caseId;\r\n }\r\n const result = this.upsertTemplate(payload);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n });\r\n },\r\n },\r\n computed: {\r\n baseTemplate() {\r\n if (!this.userTemplate) {\r\n return [{ name: \"空白模板\", value: \"\" }];\r\n } else {\r\n return [\r\n { name: \"空白模板\", value: \"\" },\r\n ...this.userTemplate.map((item) => {\r\n return {\r\n name: item.templateName,\r\n value: item.templateId,\r\n };\r\n }),\r\n ];\r\n }\r\n },\r\n },\r\n watch: {\r\n currentTemplate: {\r\n deep: true,\r\n handler: function (newV) {\r\n this.formData = Object.assign({}, newV);\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-template-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-lane-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" label-width=\"120px\">\r\n <el-form-item label=\"泳道顺序\" prop=\"sort\">\r\n <el-input v-model=\"formData.sort\" :disabled=\"formDisable\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\" :loading=\"saving\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertLane\", \"setTargetData\", \"setExpanded\"],\r\n props: {\r\n laneInfo: {\r\n type: Object,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n },\r\n data() {\r\n return {\r\n formData: Object.assign(this.laneInfo),\r\n rules: {\r\n sort: [{ required: true, message: \"请输入泳道顺序\", trigger: \"blur\" }],\r\n },\r\n saving: false,\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName].validate((valid) => {\r\n if (!valid) {\r\n return;\r\n }\r\n if (typeof this.upsertLane !== \"function\") {\r\n this.$message({ type: \"error\", message: \"没有配置泳道管理方法\" });\r\n return;\r\n }\r\n this.saving = true;\r\n const payload = { ...this.formData };\r\n if (!payload.caseId) {\r\n payload.caseId = this.caseId;\r\n }\r\n const result = this.upsertLane(payload);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n });\r\n },\r\n },\r\n computed: {},\r\n watch: {\r\n laneInfo: {\r\n deep: true,\r\n handler: function (newV) {\r\n this.formData = Object.assign({}, newV);\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-lane-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-line-content\">\r\n <el-form :rules=\"rules\" ref=\"template\" :model=\"formData\" :disabled=\"formDisable\">\r\n <el-form-item label=\"参数名称\" prop=\"paramId\" label-width=\"120px\">\r\n <el-select v-model=\"formData.paramId\" filterable placeholder=\"请选择\">\r\n <el-option v-for=\"item in params\" :key=\"item.paramId\" :label=\"item.paramName\" :value=\"item.paramId\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"最小值\" prop=\"min\" label-width=\"120px\">\r\n <el-input v-model=\"formData.min\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"最大值\" prop=\"max\" label-width=\"120px\">\r\n <el-input v-model=\"formData.max\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"曲线粗细\" prop=\"lineSize\" label-width=\"120px\">\r\n <el-input v-model=\"formData.lineSize\" :max=\"4\" :min=\"1\" type=\"number\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"曲线颜色\" prop=\"lineColor\" label-width=\"120px\">\r\n <el-color-picker v-model=\"formData.lineColor\" :disabled=\"formData.isGradient\"></el-color-picker>\r\n </el-form-item>\r\n <el-form-item label=\"线型\" prop=\"lineType\" label-width=\"120px\">\r\n <el-select v-model=\"formData.lineType\" placeholder=\"请选择\" :disabled=\"formData.isGradient\">\r\n <el-option v-for=\"item in lines\" :key=\"item.value\" :label=\"item.name\" :value=\"item.value\"> </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"曲线顺序\" prop=\"lineSort\" label-width=\"120px\">\r\n <el-input v-model.number=\"formData.lineSort\"></el-input>\r\n </el-form-item>\r\n <el-form-item v-if=\"false\" label=\"是否启用\" prop=\"isUsed\" label-width=\"120px\">\r\n <el-radio-group v-model=\"formData.isUsed\">\r\n <el-radio label=\"1\">是</el-radio>\r\n <el-radio label=\"0\">否</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"template-buttons\" v-show=\"template.createUser != 'SYSTEM_USER'\">\r\n <el-button @click=\"editable\">编辑</el-button>\r\n <el-button type=\"primary\" :disabled=\"formDisable\" @click=\"submitForm('template')\">保存</el-button>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n inject: [\"upsertLine\", \"setTargetData\", \"setExpanded\", \"getThemeName\"],\r\n props: {\r\n template: {\r\n type: Object,\r\n },\r\n formDisable: {\r\n type: Boolean,\r\n },\r\n params: {\r\n type: Array,\r\n },\r\n },\r\n mounted() {},\r\n data() {\r\n const validatorNumber = (rule, value, callback) => {\r\n if (isNaN(value)) {\r\n callback(new Error(\"请输入数字值\"));\r\n } else {\r\n callback();\r\n }\r\n };\r\n return {\r\n formData: Object.assign({}, this.template),\r\n lines: [\r\n {\r\n name: \"直线\",\r\n value: \"solid\",\r\n },\r\n {\r\n name: \"虚线\",\r\n value: \"dashed\",\r\n },\r\n {\r\n name: \"点线\",\r\n value: \"dotted\",\r\n },\r\n {\r\n name: \"面积\",\r\n value: \"area\",\r\n },\r\n ],\r\n lineWidthSliderMarks: {\r\n 1: \"1\",\r\n 2: \"2\",\r\n 3: \"3\",\r\n 4: \"4\",\r\n },\r\n rules: {\r\n min: [\r\n { required: true, message: \"请输入最小值\", trigger: \"blur\" },\r\n { validator: validatorNumber, trigger: \"blur\" },\r\n ],\r\n lineSort: [\r\n {\r\n required: true,\r\n message: \"请输入曲线顺序(1-10)\",\r\n trigger: \"blur\",\r\n },\r\n { type: \"number\", message: \"顺序必须为数字值\" },\r\n ],\r\n max: [\r\n { required: true, message: \"请输入最大值\", trigger: \"blur\" },\r\n { validator: validatorNumber, trigger: \"blur\" },\r\n ],\r\n lineSize: [{ required: true, message: \"请选择曲线粗细\", trigger: \"blur\" }],\r\n lineColor: [{ required: true, message: \"请选择曲线颜色\", trigger: \"blur\" }],\r\n lineType: [{ required: true, message: \"请选择线型\", trigger: \"blur\" }],\r\n paramId: [{ required: true, message: \"请选择参数名称\", trigger: \"blur\" }],\r\n },\r\n };\r\n },\r\n methods: {\r\n editable() {\r\n this.$emit(\"editable\");\r\n },\r\n submitForm(formName) {\r\n this.$refs[formName]\r\n .validate()\r\n .then(() => {\r\n if (this.upsertLine instanceof Function) {\r\n // 检查是否有主题配置\r\n const themeName = this.getThemeName();\r\n const themeConfig = this.formData.themeConfig;\r\n if (themeName && themeConfig && themeConfig[themeName]) {\r\n const theme = themeConfig[themeName];\r\n theme.lineColor = this.formData.lineColor;\r\n }\r\n this.saving = true;\r\n const result = this.upsertLine(this.formData);\r\n if (result instanceof Promise) {\r\n result\r\n .then((res) => {\r\n this.setTargetData(res);\r\n })\r\n .then(() => {\r\n this.$message({\r\n type: \"success\",\r\n message: \"保存成功\",\r\n });\r\n })\r\n .finally(() => {\r\n this.saving = false;\r\n });\r\n } else {\r\n this.saving = false;\r\n }\r\n } else {\r\n return Promise.reject(new Error(\"未配置线条设置函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n });\r\n },\r\n },\r\n watch: {\r\n template: {\r\n immediate: false,\r\n deep: true,\r\n handler(newD) {\r\n // 检查是否有主题配置\r\n const themeName = this.getThemeName();\r\n const themeConfig = newD.themeConfig;\r\n let themeLineColor;\r\n if (themeName && themeConfig && themeConfig[themeName]) {\r\n const theme = themeConfig[themeName];\r\n const lineColor = theme.lineColor;\r\n if (lineColor) {\r\n themeLineColor = lineColor;\r\n }\r\n }\r\n if (themeLineColor) {\r\n this.formData = Object.assign({}, newD, { lineColor: themeLineColor });\r\n } else {\r\n this.formData = Object.assign({}, newD);\r\n }\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-line-content {\r\n width: 95%;\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n .template-buttons {\r\n text-align: center;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-container class=\"kd-lane-el-container\" v-loading=\"curveConfigLoading\">\r\n <!-- 左边栏 -->\r\n <el-aside width=\"20%\" class=\"rtd-config-side\">\r\n <el-tree\r\n :key=\"treeKey\"\r\n ref=\"refTree\"\r\n :data=\"treeData\"\r\n class=\"rtd-config-side-tree\"\r\n :expand-on-click-node=\"false\"\r\n :current-node-key=\"currentNodeKey\"\r\n :default-expanded-keys=\"expandedKeys\"\r\n node-key=\"id\"\r\n highlight-current\r\n @node-click=\"handleNodeClick\"\r\n @node-expand=\"hideContextMenu\"\r\n @node-collapse=\"hideContextMenu\"\r\n >\r\n <span class=\"custom-tree-node\" slot-scope=\"{ node, data }\" @contextmenu.prevent=\"showRightWindows($event, data, node)\">\r\n <span>{{ node.label }}</span>\r\n <span style=\"padding-left: 5px\" v-show=\"data.isPublic == '1'\">\r\n <i class=\"el-icon-star-on\"></i>\r\n </span>\r\n </span>\r\n </el-tree>\r\n <div class=\"rtd-config-side-option\">\r\n <el-button @click=\"addTemplate\">新增模板</el-button>\r\n </div>\r\n </el-aside>\r\n\r\n <!-- 编辑区域 -->\r\n <el-main class=\"rtd-config-main\">\r\n <!-- 模板配置 -->\r\n <TemplateEdit\r\n v-show=\"templateContentShow\"\r\n :currentTemplate=\"templateInfo\"\r\n :form-disable=\"templateDisable\"\r\n :userTemplate=\"userTemplate\"\r\n :caseId=\"caseId\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n >\r\n </TemplateEdit>\r\n <!-- 泳道配置 -->\r\n <LaneEdit\r\n v-show=\"laneContentShow\"\r\n :laneInfo=\"laneInfo\"\r\n :form-disable=\"templateDisable\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n ></LaneEdit>\r\n\r\n <!-- 曲线配置 -->\r\n <LineEdit\r\n v-show=\"lineContentShow\"\r\n :template=\"lineInfo\"\r\n :params=\"params\"\r\n :form-disable=\"templateDisable\"\r\n @editable=\"editable\"\r\n v-on=\"$listeners\"\r\n ></LineEdit>\r\n </el-main>\r\n <VueSimpleContextMenu\r\n :options=\"contextMenuOptions\"\r\n ref=\"vueSimpleContextMenu\"\r\n @option-clicked=\"optionClicked\"\r\n />\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport TemplateEdit from \"./TemplateEdit.vue\";\r\nimport LaneEdit from \"./LaneEdit.vue\";\r\nimport LineEdit from \"./LineEdit.vue\";\r\nimport { judgeRawDataType } from \"../../util/index.js\";\r\nimport VueSimpleContextMenu from \"../../context-menu/index.vue\";\r\n\r\nexport default {\r\n inject: [\"delTemplate\", \"delLane\", \"delLine\"],\r\n provide() {\r\n return {\r\n setTargetData: this.setTargetData,\r\n setExpanded: this.setExpanded,\r\n };\r\n },\r\n components: { LineEdit, TemplateEdit, LaneEdit, VueSimpleContextMenu },\r\n props: {\r\n contextItem: {\r\n type: Object,\r\n default: () => undefined,\r\n },\r\n expended: {\r\n type: Object,\r\n },\r\n caseId: {\r\n type: String,\r\n default: \"\",\r\n },\r\n inputTempates: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n params: {\r\n type: Array,\r\n required: true,\r\n default: () => [],\r\n },\r\n paramsNameMap: {\r\n type: Object,\r\n default: () => {},\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n templateContentShow: false,\r\n templateDisable: false,\r\n laneContentShow: false,\r\n lineContentShow: false,\r\n templateInfo: {},\r\n laneInfo: {},\r\n lineInfo: {},\r\n dataType: \"\",\r\n curveConfigLoading: false,\r\n expandedKeys: [], // 展开的菜单\r\n currentNodeKey: \"\",\r\n targetData: undefined,\r\n treeKey: \"\",\r\n };\r\n },\r\n mounted() {},\r\n methods: {\r\n getLineDataLabel(line) {\r\n if (!line) {\r\n return \"\";\r\n }\r\n const nameConfig = this.paramsNameMap[line.paramId];\r\n if (!nameConfig) {\r\n return line.paramId;\r\n }\r\n return nameConfig.paramName;\r\n },\r\n setTargetData(targetData) {\r\n this.targetData = targetData;\r\n this.setExpanded();\r\n const dataType = judgeRawDataType(targetData);\r\n switch (dataType) {\r\n case \"template\":\r\n // 显示模板录入信息\r\n this.templateContentShow = true;\r\n this.laneContentShow = false;\r\n this.lineContentShow = false;\r\n this.templateDisable = true;\r\n this.templateInfo = targetData;\r\n break;\r\n case \"lane\":\r\n this.templateContentShow = false;\r\n this.laneContentShow = true;\r\n this.lineContentShow = false;\r\n this.templateDisable = true;\r\n this.laneInfo = targetData;\r\n break;\r\n case \"line\":\r\n // 显示模板录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = false;\r\n this.lineContentShow = true;\r\n this.templateDisable = true;\r\n this.lineInfo = targetData;\r\n break;\r\n }\r\n },\r\n setExpanded() {\r\n const val = this.targetData;\r\n if (val) {\r\n const type = judgeRawDataType(val);\r\n switch (type) {\r\n case \"template\":\r\n this.expandedKeys = [val.templateId];\r\n this.currentNodeKey = val.templateId;\r\n break;\r\n case \"lane\":\r\n this.expandedKeys = [val.laneId];\r\n this.currentNodeKey = val.laneId;\r\n break;\r\n case \"line\":\r\n this.expandedKeys = [val.lineId];\r\n this.currentNodeKey = val.lineId;\r\n break;\r\n default:\r\n this.expandedKeys = [];\r\n this.currentNodeKey = \"\";\r\n break;\r\n }\r\n } else {\r\n this.expandedKeys = [];\r\n this.currentNodeKey = \"\";\r\n }\r\n if (this.$refs.refTree) {\r\n this.$refs.refTree.setCurrentKey(this.currentNodeKey);\r\n }\r\n // fixme: 给el-tree设置新的default-expanded-keys后,新设置的节点,确实展开了,但是之前展开的,却没有关闭的问题\r\n this.treeKey = `treeKey${new Date().getTime()}`;\r\n },\r\n optionClicked(event) {\r\n const { option = {}, item } = event;\r\n switch (option.key) {\r\n case \"delTemplate\":\r\n this.askForDelTemplate(item);\r\n break;\r\n case \"addLane\":\r\n this.addLane(item);\r\n break;\r\n case \"delLane\":\r\n this.askForDelLane(item);\r\n break;\r\n case \"addParam\":\r\n this.addParam(item);\r\n break;\r\n case \"delParam\":\r\n this.delParam(item);\r\n break;\r\n }\r\n },\r\n hideContextMenu() {\r\n const ctxRef = this.$refs.vueSimpleContextMenu;\r\n if (ctxRef) {\r\n ctxRef.hideContextMenu();\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n showRightWindows(event, data, node) {\r\n const dataType = this.judgeDataType(node);\r\n this.dataType = dataType;\r\n if (data.createUser == \"SYSTEM_USER\") {\r\n this.$message.warning(\"系统模板不能编辑\");\r\n return;\r\n }\r\n this.$refs.vueSimpleContextMenu.showMenu(event, data);\r\n },\r\n clear() {\r\n // 初始化数据, 不可编辑、展开的节点、内容隐藏\r\n this.expandedKeys = [];\r\n this.templateDisable = true;\r\n this.templateContentShow = false;\r\n },\r\n editable() {\r\n this.templateDisable = false;\r\n },\r\n handleNodeClick(data) {\r\n this.setTargetData(data);\r\n },\r\n judgeDataType(node) {\r\n const { level, data = {} } = node;\r\n if (level == 1 && data.templateId) {\r\n return \"template\";\r\n } else if (level == 2 && data.laneId && data.templateId) {\r\n return \"lane\";\r\n } else if (level == 3 && data.lineId) {\r\n return \"line\";\r\n }\r\n return null;\r\n },\r\n addTemplate() {\r\n // 显示模板录入信息\r\n this.templateContentShow = true;\r\n this.laneContentShow = false;\r\n this.lineContentShow = false;\r\n this.templateDisable = false;\r\n this.templateInfo = { isPublic: \"0\", baseTemplate: \"\", col1: \"1\" };\r\n },\r\n addLane(nodeData) {\r\n // 显示参数录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = true;\r\n this.lineContentShow = false;\r\n this.templateDisable = false;\r\n this.laneInfo = { templateId: nodeData.templateId, isUsed: \"1\", sort: nodeData.lanes.length + 1 };\r\n },\r\n addParam(nodeData) {\r\n // 显示参数录入信息\r\n this.templateContentShow = false;\r\n this.laneContentShow = false;\r\n this.lineContentShow = true;\r\n this.templateDisable = false;\r\n this.lineInfo = { laneId: nodeData.laneId, isUsed: \"1\", lineSize: 2 };\r\n },\r\n\r\n askForDelTemplate(nodeData) {\r\n this.$confirm(\"此操作将删除该模板, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n this.curveConfigLoading = true;\r\n if (this.delTemplate instanceof Function) {\r\n return this.delTemplate(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除模板函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n this.$message.error(e.message || \"删除失败\");\r\n })\r\n .finally(() => {\r\n this.curveConfigLoading = false;\r\n });\r\n },\r\n askForDelLane(nodeData) {\r\n this.$confirm(\"此操作将删除该泳道, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n this.curveConfigLoading = true;\r\n if (this.delLane instanceof Function) {\r\n return this.delLane(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除模板函数\"));\r\n }\r\n })\r\n .catch(() => {\r\n this.$message.error(\"删除失败\");\r\n })\r\n .finally(() => {\r\n this.curveConfigLoading = false;\r\n });\r\n },\r\n delParam(nodeData) {\r\n this.$confirm(\"此操作将删除该参数, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n nodeData.bsflag = \"1\";\r\n if (this.delLine instanceof Function) {\r\n return this.delLine(nodeData);\r\n } else {\r\n return Promise.reject(new Error(\"未配置删除线条函数\"));\r\n }\r\n })\r\n .catch((e) => {\r\n this.$message.error(e.message || \"删除失败\");\r\n });\r\n },\r\n },\r\n computed: {\r\n contextMenuOptions() {\r\n switch (this.dataType) {\r\n case \"template\":\r\n return [\r\n { name: \"新增泳道\", key: \"addLane\" },\r\n { name: \"删除模板\", key: \"delTemplate\" },\r\n ];\r\n case \"lane\":\r\n return [\r\n { name: \"新增参数\", key: \"addParam\" },\r\n { name: \"删除泳道\", key: \"delLane\" },\r\n ];\r\n case \"line\":\r\n return [{ name: \"删除参数\", key: \"delParam\" }];\r\n\r\n default:\r\n return [];\r\n }\r\n },\r\n treeData() {\r\n if (!this.inputTempates) {\r\n return [];\r\n } else {\r\n // 数据补全id label等信息\r\n const treeData = [];\r\n this.inputTempates.forEach((template) => {\r\n const tData = { ...template, id: template.templateId, label: template.templateName };\r\n tData.children = [];\r\n if (!template.lanes) {\r\n template.lanes = [];\r\n }\r\n\r\n template.lanes.forEach((lane, index) => {\r\n const laneData = { ...lane, id: lane.laneId, label: `泳道${index + 1}` };\r\n tData.children.push(laneData);\r\n if (!laneData.lines) {\r\n laneData.lines = [];\r\n }\r\n laneData.children = [];\r\n lane.lines.forEach((line) => {\r\n const lineData = { ...line, id: line.lineId, label: line.lineName || line.paramId };\r\n lineData.label = this.getLineDataLabel(line);\r\n laneData.children.push(lineData);\r\n });\r\n });\r\n treeData.push(tData);\r\n });\r\n return treeData;\r\n }\r\n },\r\n userTemplate() {\r\n if (!this.treeData) {\r\n return [];\r\n } else {\r\n return [...this.treeData];\r\n }\r\n },\r\n },\r\n watch: {\r\n // 默认展开选中的泳道\r\n contextItem: {\r\n immediate: true,\r\n deep: true,\r\n handler(val) {\r\n this.setTargetData(Object.assign({}, val));\r\n },\r\n },\r\n },\r\n beforeDestroy() {},\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.kd-lane-el-container {\r\n height: 60vh;\r\n border: 1px solid var(--kd-lane-container-border-color, #333);\r\n width: 100%;\r\n @media screen and (max-width: 1024px) {\r\n height: 70vh;\r\n }\r\n\r\n .rtd-config-side {\r\n border-right: 1px solid var(--kd-lane-container-border-color, #333);\r\n &-tree {\r\n height: 90%;\r\n overflow: auto;\r\n }\r\n\r\n &-option {\r\n text-align: center;\r\n }\r\n }\r\n\r\n .rtd-config-main {\r\n display: flex;\r\n align-content: center;\r\n justify-content: center;\r\n width: 100%;\r\n }\r\n}\r\n</style>\r\n","export const ACTION_TYPE = {\r\n UPSERT_LINE: \"upsertLine\",\r\n DELETE_LINE: \"delLine\",\r\n};","<template>\r\n <div class=\"kd-lane-chart-container-header-item\" :style=\"headerItemStyle\" @click=\"toggleIsUsed\">\r\n <div class=\"kd-lane-chart-container-text-container\">\r\n <span class=\"left\" :style=\"textColor\">{{ line.min }}</span>\r\n <span class=\"center\">{{ getParamName(line) }}</span>\r\n <span class=\"right\" :style=\"textColor\">{{ line.max }}</span>\r\n <div class=\"gradient-display\" :style=\"gradientDisplay\"></div>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n itemHeight: {\r\n type: Number,\r\n default: 20,\r\n },\r\n line: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n paramsNameMap: {\r\n type: Object,\r\n default: () => {},\r\n required: true,\r\n },\r\n themeName: {\r\n type: String,\r\n default: undefined,\r\n },\r\n },\r\n methods: {\r\n getParamName(line) {\r\n if (!line) {\r\n return \"\";\r\n }\r\n const nameConfig = this.paramsNameMap[line.paramId];\r\n if (!nameConfig) {\r\n return \"\";\r\n }\r\n return `${nameConfig.paramName}${nameConfig.paramUnit}`;\r\n },\r\n toggleIsUsed() {\r\n const temp = { ...this.line };\r\n if (temp.isUsed == \"1\" || temp.isUsed == 1) {\r\n temp.isUsed = \"0\";\r\n } else {\r\n temp.isUsed = \"1\";\r\n }\r\n this.$emit(\"updateLine\", temp);\r\n },\r\n },\r\n computed: {\r\n gradientDisplay() {\r\n let lineColor;\r\n if (this.themeName && this.line.themeConfig) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n let result;\r\n if (this.line.isGradient) {\r\n result = { background: `${lineColor || this.line.lineColor}` };\r\n } else {\r\n result = {};\r\n }\r\n return result;\r\n },\r\n textColor() {\r\n let lineColor;\r\n // 只有不是渐变色时,才从主题配置中获取文字颜色\r\n if (this.themeName && this.line.themeConfig && !this.line.isGradient) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n return {\r\n color: lineColor || this.line.lineColor,\r\n };\r\n },\r\n headerItemStyle() {\r\n let lineColor;\r\n if (this.themeName && this.line.themeConfig) {\r\n lineColor = this.line.themeConfig[this.themeName]?.lineColor;\r\n }\r\n\r\n let lineType;\r\n if (this.line.lineType == \"area\") {\r\n if (this.line.isGradient) {\r\n lineType = {};\r\n } else {\r\n lineType = { \"box-shadow\": `inset 0 0 8px 0px ${lineColor || this.line.lineColor}` };\r\n }\r\n } else {\r\n lineType = { \"border-bottom\": `2px ${this.line.lineType} ${lineColor || this.line.lineColor}` };\r\n }\r\n return {\r\n height: `${this.itemHeight}px`,\r\n opacity: this.line.isUsed == \"1\" ? 1 : 0.5,\r\n ...lineType,\r\n };\r\n },\r\n },\r\n watch: {},\r\n};\r\n</script>\r\n<style lang=\"scss\">\r\n.kd-lane-chart-container-header-item {\r\n color: var(--kd-lane-container-header-item-color, #333);\r\n border: unset;\r\n position: relative;\r\n cursor: pointer;\r\n .kd-lane-chart-container-text-container {\r\n height: 100%;\r\n width: 100%;\r\n font-size: 10px;\r\n font-weight: bold;\r\n position: relative;\r\n .left {\r\n position: absolute;\r\n left: 0;\r\n bottom: 2px;\r\n }\r\n .center {\r\n position: absolute;\r\n left: 50%;\r\n bottom: 2px;\r\n transform: translateX(-50%);\r\n /* 文字不换行,超出显示省略号 */\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .right {\r\n position: absolute;\r\n right: 0;\r\n bottom: 2px;\r\n }\r\n .gradient-display {\r\n position: absolute;\r\n height: 2px;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"kd-lane-chart-container\" v-loading=\"isLoading\" @contextmenu=\"onParentContextMenu\">\r\n <template v-if=\"currentTemplate && currentTemplate.lanes && currentTemplate.lanes.length > 0\">\r\n <draggable\r\n class=\"kd-lane-chart-container\"\r\n @change=\"dragtoModifyLane\"\r\n v-model=\"currentTemplate.lanes\"\r\n :animation=\"200\"\r\n :fallbackOnBody=\"true\"\r\n :swapThreshold=\"0.65\"\r\n group=\"laneGroup\"\r\n >\r\n <template v-for=\"(lane, index) in currentTemplate.lanes || []\">\r\n <div\r\n v-if=\"$scopedSlots[`lane${lane.laneId}`]\"\r\n class=\"kd-lane-chart-lane-slot-container\"\r\n :key=\"lane.laneId\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'slot')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"slotHeaderStyle\">\r\n <slot :name=\"`lane${lane.laneId}`\" :lane=\"lane\"></slot>\r\n </div>\r\n </div>\r\n <div\r\n v-else-if=\"$slots[`lane${lane.laneId}`]\"\r\n class=\"kd-lane-chart-lane-slot-container\"\r\n :key=\"`${lane.laneId}`\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'slot')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"slotHeaderStyle\">\r\n <slot :name=\"`lane${lane.laneId}`\" :lane=\"lane\"></slot>\r\n </div>\r\n </div>\r\n <template v-else>\r\n <div\r\n class=\"kd-lane-chart-lane-container\"\r\n :key=\"lane.laneId\"\r\n :lane-id=\"lane.laneId\"\r\n :class=\"{ 'border-left': index != 0 }\"\r\n :style=\"laneContainerStyle(lane, 'lane')\"\r\n ref=\"refLaneDiv\"\r\n >\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"headerStyle\" @contextmenu.prevent=\"showContextMenu($event, lane)\">\r\n <draggable\r\n v-model=\"lane.lines\"\r\n :animation=\"200\"\r\n :fallbackOnBody=\"true\"\r\n :swapThreshold=\"0.65\"\r\n group=\"lineGroup\"\r\n @change=\"dragtoModifyLines\"\r\n >\r\n <HeaderItem\r\n v-for=\"line in lane.lines || []\"\r\n :key=\"line.lineId\"\r\n :itemHeight=\"headerItemHeight\"\r\n :line=\"line\"\r\n :paramsNameMap=\"paramsNameMap\"\r\n :themeName=\"themeName\"\r\n @contextmenu.native.prevent=\"showContextMenu($event, line)\"\r\n @updateLine=\"upsertLine\"\r\n ></HeaderItem>\r\n </draggable>\r\n </div>\r\n </div>\r\n </template>\r\n </template>\r\n </draggable>\r\n </template>\r\n <template v-else>\r\n <div class=\"kd-lane-chart-lane-container\" ref=\"refLaneDiv\">\r\n <div class=\"kd-lane-chart-lane-header\" :style=\"headerStyle\" @contextmenu.prevent=\"showContextMenu\">\r\n <!-- 空泳道,只是为了占位 -->\r\n </div>\r\n </div>\r\n </template>\r\n\r\n <!-- 画布部分 -->\r\n <div class=\"kd-lane-chart-container-draw-area\" :style=\"darwAreaStyle\">\r\n <slot name=\"draw-slot\"></slot>\r\n </div>\r\n <VueSimpleContextMenu :options=\"contextMenuOptions\" ref=\"vueSimpleContextMenu\" @option-clicked=\"optionClicked\" />\r\n <el-dialog title=\"泳道模板设置\" :visible.sync=\"curveConfigVisible\" @opened=\"setExpanded\">\r\n <RealTimeCurveConfig\r\n ref=\"curveConfig\"\r\n :inputTempates=\"treeTemplates\"\r\n :caseId=\"strategy.caseId\"\r\n :params=\"params\"\r\n :paramsNameMap=\"paramsNameMap\"\r\n v-on=\"$listeners\"\r\n :contextItem=\"contextItem\"\r\n >\r\n <!-- v-on=\"$listeners\":将父组件传递给子组件的所有事件监听器绑定到子组件的根元素上。 -->\r\n <!-- 这样做的好处是:子组件可以自动继承父组件的事件监听器,而无需在子组件中逐个声明这些监听器 -->\r\n </RealTimeCurveConfig>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { cloneDeep } from \"lodash\";\r\nimport draggable from \"vuedraggable\";\r\nimport VueSimpleContextMenu from \"../context-menu/index.vue\";\r\nimport { StrategyFactory } from \"../strategies/StrategyFactory.js\";\r\nimport { isNumeric, pxToNumber, sortLaneLines, sortLanes, sortTemplates, strategyValidator } from \"../util/index.js\";\r\nimport RealTimeCurveConfig from \"./config/RealTimeCurveConfig.vue\";\r\nimport { ACTION_TYPE } from \"./const/action-type.js\";\r\nimport HeaderItem from \"./header-item.vue\";\r\n\r\nexport default {\r\n name: \"KdLaneContainer\",\r\n provide() {\r\n return {\r\n upsertTemplate: this.upsertTemplate,\r\n delTemplate: this.delTemplate,\r\n upsertLane: this.upsertLane,\r\n delLane: this.delLane,\r\n upsertLine: this.upsertLine,\r\n delLine: this.delLine,\r\n getThemeName: () => {\r\n return this.themeName;\r\n },\r\n };\r\n },\r\n components: {\r\n HeaderItem,\r\n RealTimeCurveConfig,\r\n VueSimpleContextMenu,\r\n draggable,\r\n },\r\n props: {\r\n // {type:\"local\",dataSource:{},caseId:\"\",versionCode:\"\",load, save}\r\n // local:caseId,versionCode,templates,lanes,lines\r\n // custom:caseId,versionCode,load,save\r\n config: {\r\n type: Object,\r\n required: true,\r\n validator: strategyValidator,\r\n },\r\n headerPadding: {\r\n type: Number,\r\n default: 4,\r\n },\r\n headerItemHeight: {\r\n type: Number,\r\n default: 20,\r\n },\r\n itemGap: {\r\n type: Number,\r\n default: 2,\r\n },\r\n customMenuList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n themeName: {\r\n type: String,\r\n default: undefined,\r\n },\r\n },\r\n data() {\r\n return {\r\n treeTemplates: null,\r\n isLoading: false,\r\n strategy: null,\r\n currentTemplate: {},\r\n curveConfigVisible: false,\r\n params: [],\r\n contextItem: undefined,\r\n };\r\n },\r\n created() {\r\n // 初始化策略\r\n this.strategy = StrategyFactory.createStrategy(this.$props.config);\r\n this.loadConfig();\r\n },\r\n mounted() {},\r\n\r\n methods: {\r\n dragtoModifyLane() {\r\n let promises = this.currentTemplate.lanes.map((lane, index) => {\r\n lane.sort = index;\r\n return this.dragUpdateLane(lane);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.setDefaultAndNotify();\r\n });\r\n },\r\n dragtoModifyLines(event) {\r\n if (Object.prototype.hasOwnProperty.call(event, \"added\") && event.added.element) {\r\n // 拖拽新增了线条,通过lineId找到线段位置\r\n let data = cloneDeep(event.added.element);\r\n const currentLanes = this.currentTemplate.lanes;\r\n currentLanes.forEach((lane) => {\r\n const lineIndex = lane.lines.findIndex((line) => line.lineId == data.lineId);\r\n if (lineIndex >= 0) {\r\n data.laneId = lane.laneId;\r\n data.lineSort = event.added.newIndex ?? 0;\r\n this.dragUpdateLine(data).then(() => {\r\n let promises = lane.lines.map((lines, index) => {\r\n lines.lineSort = index;\r\n return this.dragUpdateLine(lines);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.setDefaultAndNotify();\r\n });\r\n });\r\n }\r\n });\r\n } else if (Object.prototype.hasOwnProperty.call(event, \"removed\") && event.removed.element) {\r\n // 拖拽删除了线条\r\n // this.setDefaultAndNotify();\r\n } else if (Object.prototype.hasOwnProperty.call(event, \"moved\") && event.moved.element) {\r\n // 拖拽移动了线条\r\n let data = cloneDeep(event.moved.element);\r\n let currentLanes = this.currentTemplate.lanes;\r\n currentLanes.forEach((lane) => {\r\n if (lane.laneId == data.laneId) {\r\n let promises = lane.lines.map((lines, index) => {\r\n lines.lineSort = index;\r\n return this.dragUpdateLine(lines);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.setDefaultAndNotify();\r\n });\r\n }\r\n });\r\n }\r\n },\r\n // 拖拽更新曲线\r\n dragUpdateLine(data) {\r\n return this.strategy.upsertLine(data).then((savedData) => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == savedData.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == savedData.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n lines.push(savedData);\r\n } else {\r\n this.$set(lines, lineIndex, savedData);\r\n }\r\n sortLaneLines(lane);\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const lane = currentLanes[laneIndex];\r\n const currentLines = lane.lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n currentLines.push(savedData);\r\n } else {\r\n this.$set(currentLines, lineIndex, savedData);\r\n }\r\n this.$set(currentLanes, laneIndex, lane);\r\n sortLaneLines(lane);\r\n return savedData;\r\n }\r\n });\r\n },\r\n // 拖拽更新泳道\r\n dragUpdateLane(data) {\r\n return this.strategy.upsertLane(data).then((savedData) => {\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == savedData.templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(\"template not found\");\r\n } else {\r\n const template = this.treeTemplates[index];\r\n const lanes = template.lanes || [];\r\n const laneIndex = lanes.findIndex((lane) => lane.laneId == savedData.laneId);\r\n if (laneIndex < 0) {\r\n lanes.push(savedData);\r\n } else {\r\n this.$set(lanes, laneIndex, savedData);\r\n }\r\n sortLanes(template.lanes);\r\n }\r\n return savedData;\r\n });\r\n },\r\n getGridSize() {\r\n if (!this.$refs.refLaneDiv) return [];\r\n const isArray = Array.isArray(this.$refs.refLaneDiv);\r\n if (isArray) {\r\n return this.$refs.refLaneDiv.map((item) => {\r\n const { x, y, width, height, top, right, bottom, left } = item.getBoundingClientRect();\r\n return { x, y, width, height, top, bottom, right, left, \"lane-id\": item.getAttribute(\"lane-id\") };\r\n });\r\n } else {\r\n return [this.$refs.refLaneDiv.getBoundingClientRect()];\r\n }\r\n },\r\n laneContainerStyle(lane, type) {\r\n const isWidthNumeric = isNumeric(lane.width);\r\n if (type === \"slot\") {\r\n return isWidthNumeric ? { width: `${lane.width}px` } : { width: \"auto\" };\r\n } else {\r\n return isWidthNumeric ? { width: `${lane.width}px` } : { flex: \"1\" };\r\n }\r\n },\r\n setExpanded() {\r\n this.$refs.curveConfig.setExpanded();\r\n },\r\n delLine(data) {\r\n return this.strategy.delLine(data).then(() => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == data.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == data.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == data.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n console.warn(\"要删除的线条在当前泳道中不存在?\");\r\n } else {\r\n lines.splice(lineIndex, 1);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const currentLines = currentLanes[laneIndex].lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == data.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n console.warn(\"要删除的线条在当前泳道中不存在?\");\r\n } else {\r\n currentLanes[laneIndex].lines.splice(lineIndex, 1);\r\n }\r\n // 以免每次保存都重新渲染\r\n this.onLineChange(data, ACTION_TYPE.DELETE_LINE);\r\n }\r\n });\r\n },\r\n upsertLine(data) {\r\n return this.strategy.upsertLine(data).then((savedData) => {\r\n const currentLanes = this.currentTemplate.lanes;\r\n const laneIndex = currentLanes.findIndex((lane) => {\r\n return lane.laneId == savedData.laneId;\r\n });\r\n if (laneIndex < 0) {\r\n // 收说明不是更新的当前模板 替换内存中的数据\r\n for (const template of this.treeTemplates) {\r\n const { lanes } = template;\r\n for (const lane of lanes) {\r\n if (lane.laneId == savedData.laneId) {\r\n const { lines } = lane;\r\n const lineIndex = lines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n lines.push(savedData);\r\n } else {\r\n this.$set(lines, lineIndex, savedData);\r\n }\r\n sortLaneLines(lane);\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n const lane = currentLanes[laneIndex];\r\n const currentLines = lane.lines;\r\n const lineIndex = currentLines.findIndex((line) => {\r\n return line.lineId == savedData.lineId;\r\n });\r\n if (lineIndex < 0) {\r\n currentLines.push(savedData);\r\n } else {\r\n this.$set(currentLines, lineIndex, savedData);\r\n }\r\n this.$set(currentLanes, laneIndex, lane);\r\n sortLaneLines(lane);\r\n // 以免每次保存都重新渲染\r\n this.onLineChange(savedData, ACTION_TYPE.UPSERT_LINE);\r\n return savedData;\r\n }\r\n });\r\n },\r\n delLane(data) {\r\n return this.strategy.delLane(data).then((delLane) => {\r\n // 删除内存中数据\r\n const { templateId } = delLane;\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(`template_id not found: '${templateId}'`);\r\n return;\r\n }\r\n const template = this.treeTemplates[index];\r\n const laneIndex = template.lanes.findIndex((lane) => lane.laneId == delLane.laneId);\r\n template.lanes.splice(laneIndex, 1);\r\n // 判断泳道是否在当前模板中\r\n if (this.currentTemplate.templateId == templateId) {\r\n // 是,则通知数据变更\r\n this.setDefaultAndNotify();\r\n }\r\n });\r\n },\r\n upsertLane(data) {\r\n return this.strategy.upsertLane(data).then((savedData) => {\r\n const index = this.treeTemplates.findIndex((template) => {\r\n return template.templateId == savedData.templateId;\r\n });\r\n if (index < 0) {\r\n console.warn(\"template not found\");\r\n } else {\r\n const template = this.treeTemplates[index];\r\n const lanes = template.lanes || [];\r\n const laneIndex = lanes.findIndex((lane) => lane.laneId == savedData.laneId);\r\n if (laneIndex < 0) {\r\n lanes.push(savedData);\r\n } else {\r\n this.$set(lanes, laneIndex, savedData);\r\n }\r\n sortLanes(template.lanes);\r\n if (template.templateId === this.currentTemplate.templateId) {\r\n this.setDefaultAndNotify();\r\n }\r\n }\r\n return savedData;\r\n });\r\n },\r\n delTemplate(data) {\r\n return this.strategy.deleteTemplate(data).then(() => {\r\n const index = this.treeTemplates.findIndex((item) => {\r\n return item.templateId === data.templateId;\r\n });\r\n this.treeTemplates.splice(index, 1);\r\n if (data.templateId == this.currentTemplate.templateId) {\r\n // 刷新当前模板\r\n this.setDefaultAndNotify();\r\n }\r\n });\r\n },\r\n upsertTemplate(data) {\r\n return this.strategy.upsertTemplate(data).then((savedData) => {\r\n if (savedData.isPublic == \"1\") {\r\n this.treeTemplates.forEach((template) => {\r\n template.isPublic = \"0\";\r\n });\r\n }\r\n // 发生了模板变更 更新内存数据\r\n const index = this.treeTemplates.findIndex((item) => {\r\n return item.templateId === savedData.templateId;\r\n });\r\n\r\n if (index >= 0) {\r\n const newTemplate = this.treeTemplates[index];\r\n const temp = Object.assign({}, newTemplate, savedData);\r\n this.$set(this.treeTemplates, index, temp);\r\n } else {\r\n this.treeTemplates.push(savedData);\r\n }\r\n sortTemplates(this.treeTemplates);\r\n this.setDefaultAndNotify();\r\n return savedData;\r\n });\r\n },\r\n onParentContextMenu(event) {\r\n const itemClassName = \".kd-lane-chart-lane-header\";\r\n const lineContext = event.target && (event.target.classList.contains(itemClassName) || event.target.closest(itemClassName));\r\n if (!lineContext) {\r\n event.preventDefault();\r\n const ctxRef = this.$refs.vueSimpleContextMenu;\r\n if (ctxRef) {\r\n ctxRef.hideContextMenu();\r\n }\r\n }\r\n },\r\n showContextMenu(event, item) {\r\n event.stopPropagation();\r\n this.$refs.vueSimpleContextMenu.showMenu(event, item);\r\n },\r\n optionClicked(event) {\r\n const { option, item } = event;\r\n this.contextItem = item;\r\n\r\n const itemIndex = this.customMenuList.findIndex((item) => {\r\n return item.key == option.key;\r\n });\r\n\r\n if (itemIndex < 0) {\r\n if (option.key == \"editTemplate\") {\r\n this.curveConfigVisible = true;\r\n } else if (option.key == \"restoreSetting\") {\r\n return this.restoreSetting();\r\n }\r\n } else {\r\n // 自定义菜单按钮\r\n this.$emit(\"onCustomMenuClicked\", event);\r\n }\r\n },\r\n restoreSetting() {\r\n return this.strategy.restoreSetting().then(() => {\r\n this.loadConfig();\r\n });\r\n },\r\n loadConfig() {\r\n this.isLoading = true;\r\n this.strategy\r\n .getUserTemplates()\r\n .then((dbDatas) => {\r\n const { templates = [], params = [] } = dbDatas;\r\n this.params = params;\r\n sortTemplates(templates);\r\n this.treeTemplates = templates;\r\n this.setDefaultAndNotify();\r\n })\r\n .catch((e) => {\r\n console.error(`加载配置失败: ${this.$props.strategy.caseId},${this.$props.strategy.versionCode},${e.message}`);\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n },\r\n onLineChange(line, type) {\r\n console.log(\"notify line change\", line, type);\r\n this.$emit(\"line-change\", { ...line, actionType: type });\r\n },\r\n setDefaultAndNotify() {\r\n const publicTemplates = this.treeTemplates.find((template) => template.isPublic === \"1\");\r\n if (publicTemplates) {\r\n this.currentTemplate = publicTemplates;\r\n } else {\r\n const sysTemplate = this.treeTemplates.find((template) => template.createUser == \"SYSTEM_USER\");\r\n if (sysTemplate) {\r\n sysTemplate.isPublic = \"1\";\r\n this.currentTemplate = sysTemplate;\r\n this.strategy.upsertTemplate(sysTemplate);\r\n } else {\r\n this.treeTemplates[0].isPublic = \"1\";\r\n this.currentTemplate = this.treeTemplates[0];\r\n this.strategy.upsertTemplate(this.currentTemplate);\r\n }\r\n }\r\n this.$emit(\"template-change\", this.currentTemplate);\r\n },\r\n },\r\n computed: {\r\n contextMenuOptions() {\r\n if (this.config.type == \"local\") {\r\n return [{ name: \"编辑模板\", key: \"editTemplate\" }, { name: \"恢复默认\", key: \"restoreSetting\" }, ...this.customMenuList];\r\n } else {\r\n return [{ name: \"编辑模板\", key: \"template\" }, ...this.customMenuList];\r\n }\r\n },\r\n paramsNameMap() {\r\n const result = {};\r\n for (const param of this.params) {\r\n result[param.paramId] = {\r\n paramName: param.paramName,\r\n paramUnit: param.paramUnit,\r\n };\r\n }\r\n return result;\r\n },\r\n /**\r\n * 计算当前模板中所有车道(lane)的最大行数。\r\n * @returns {number} 返回所有车道中的最大行数,如果没有车道则返回0。\r\n **/\r\n lineCount() {\r\n const { lanes = [] } = this.currentTemplate || {};\r\n const lineCount = Math.max(\r\n ...lanes.map((lane) => {\r\n return lane.lines?.length || 0;\r\n }),\r\n );\r\n\r\n return lineCount;\r\n },\r\n headerStyle() {\r\n const common = { gap: `${this.itemGap}px`, padding: `${this.headerPadding}px` };\r\n if (!this.currentTemplate) {\r\n return { ...common, height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const { lanes = [] } = this.currentTemplate;\r\n if (!lanes || lanes.length == 0) {\r\n return { ...common, height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const gapCount = Math.max(0, this.lineCount - 1);\r\n return {\r\n ...common,\r\n height: `${this.lineCount * this.headerItemHeight + this.headerPadding * 2 + gapCount * this.itemGap}px`,\r\n \"min-height\": \"60px\",\r\n };\r\n }\r\n }\r\n },\r\n slotHeaderStyle() {\r\n // return { height: \"30%\", \"min-height\": \"60px\" };\r\n if (!this.currentTemplate) {\r\n return { height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const { lanes = [] } = this.currentTemplate;\r\n if (!lanes || lanes.length == 0) {\r\n return { height: \"30%\", \"min-height\": \"60px\" };\r\n } else {\r\n const gapCount = Math.max(0, this.lineCount - 1);\r\n return {\r\n height: `${this.lineCount * this.headerItemHeight + this.headerPadding * 2 + gapCount * this.itemGap}px`,\r\n \"min-height\": \"60px\",\r\n };\r\n }\r\n }\r\n },\r\n darwAreaStyle() {\r\n const headerStyle = this.headerStyle;\r\n const heightNum = pxToNumber(headerStyle.height);\r\n const minHeightNum = pxToNumber(headerStyle[\"min-height\"]);\r\n // 取较大值作为实际高度\r\n const actualHeight = Math.max(heightNum, minHeightNum);\r\n return { top: `${actualHeight}px` };\r\n },\r\n },\r\n};\r\n</script>\r\n<style lang=\"scss\">\r\n.kd-lane-chart-container {\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n border: 1px solid var(--kd-lane-container-border-color, #333);\r\n display: flex;\r\n\r\n %common-lane-style {\r\n height: 100%;\r\n min-width: 0;\r\n overflow: hidden;\r\n z-index: 1;\r\n\r\n .kd-lane-chart-lane-header {\r\n max-height: 40%;\r\n border-bottom: 1px solid var(--kd-lane-container-border-color, #333);\r\n overflow: hidden;\r\n z-index: 2;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n .kd-lane-chart-lane-container,\r\n .kd-lane-chart-lane-slot-container {\r\n @extend %common-lane-style;\r\n }\r\n\r\n .border-left {\r\n border-left: 1px solid var(--kd-lane-container-border-color, #333);\r\n }\r\n\r\n .kd-lane-chart-container-draw-area {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 3;\r\n border: none;\r\n }\r\n}\r\n</style>\r\n","import KdLaneContainer from \"./chart-container.vue\";\r\n// 统一注册函数\r\nconst install = (Vue) => {\r\n Vue.component(KdLaneContainer.name, KdLaneContainer);\r\n};\r\n// 自动安装(当以script标签引入时)\r\nif (typeof window !== \"undefined\" && window.Vue) {\r\n window.Vue.use(install);\r\n}\r\nexport default { install };\r\n"],"names":["__vue_script__","script","CustomStrategy","constructor","strategy","getUserTemplates","upsertTemplate","data","delTemplate","deleteTemplate","upsertLane","delLane","lane","deleteLane","upsertLine","delLine","restoreSetting","Promise","resolve","ConfigDBManager","DB_NAME","MAX_UNICODE_CHAR","DB_VERSION","STORE_NAMES","TEMPLATES","LANES","LINES","PARAMS","CASE_VERSIONS","_db","_openDB","reject","request","indexedDB","open","onupgradeneeded","event","db","target","result","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onclose","onerror","Error","error","message","onblocked","closeDB","close","_compareVersion","newVersion","oldVersion","parseVersion","v","String","split","map","Number","newV","oldV","maxLen","Math","max","length","i","newSeg","oldSeg","_clearSceneData","caseId","then","transaction","tStore","objectStore","lStore","lineStore","cvStore","paramsStore","bound","IDBKeyRange","delete","oncomplete","e","_promisifyRequest","forceInitSceneConfig","versionCode","dataSource","config","setUpData","batchAddConfig","catch","err","templates","t","lanes","l","lines","line","params","p","caseVersion","updateTime","Date","checkConfigIntegrity","getCaseVersionByCaseId","getTemplatesByCaseId","randomTplId","templateId","getLanesByTemplateId","randomLaneId","laneId","getLinesByLaneId","_initSceneConfig","oldCaseVersion","compareResult","console","log","saveSceneConfig","Array","isArray","put","forEach","tpl","pStore","param","upsertCaseVersion","store","versionData","get","getConfigByCaseId","all","getParamsByCaseId","templatePromises","lanePromises","lanesWithLines","templatesWithLanes","getConfigByTemplateId","template","lineTasks","linesArray","index","getTemplateById","deleteCaseVersion","templateData","createDate","updateDate","range","getAll","laneData","getLaneById","filter","deleteLaneByLaneIds","laneIds","lineData","getLineById","lineId","deleteLineByIds","lineIds","upsertParam","paramData","getParamById","paramId","deleteParamById","dbHelper","isNumeric","val","isNaN","pxToNumber","pxStr","parseFloat","replace","sortLaneLines","sort","a","b","lineSortA","lineSort","lineSortB","sortLanes","sortA","sortB","sortTemplates","judgeRawDataType","strategyValidator","type","crudMethods","method","isFlatStructure","isTreeStructure","treeToFlatten","treeData","templateLanes","generateUUID","push","laneLines","simple","uuid","crypto","randomUUID","c","r","random","toString","DefaultLocalStrategy","flatData","ready","warn","newTemplateId","baseTemplate","linesP","results","allLines","linesByLane","newLaneId","createUser","undefined","isPublic","allT","PArray","allLaneIds","allLineIds","reduce","previousValue","currentValue","concat","getType","StrategyFactory","createStrategy","option","flatedData","LineEdit","TemplateEdit","LaneEdit","VueSimpleContextMenu","ACTION_TYPE","UPSERT_LINE","DELETE_LINE","HeaderItem","RealTimeCurveConfig","install","Vue","component","KdLaneContainer","name","window","use"],"mappings":";;;;;;AAmBA,GAAA,CAAA,GAAA,CAAA,aAAA,CAAA,CAAA;;AAEA,eAAA;AACA,EAAA,IAAA,EAAA,sBAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,OAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,IAAA,EAAA,IAAA;AACA,MAAA,SAAA,EAAA,IAAA;AACA,MAAA,UAAA,EAAA,IAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,QAAA,CAAA,KAAA,EAAA,IAAA,EAAA;AACA,MAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;;AAEA,MAAA,MAAA,IAAA,GAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,IAAA,EAAA;AACA,QAAA,OAAA;AACA,OAAA;;AAEA,MAAA,IAAA,CAAA,IAAA,CAAA,SAAA,IAAA,CAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,UAAA,GAAA,QAAA,CAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACA,QAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA,WAAA,CAAA;AACA,QAAA,IAAA,CAAA,UAAA,GAAA,IAAA,CAAA,YAAA,CAAA;AACA,QAAA,IAAA,CAAA,eAAA,CAAA,OAAA,CAAA,CAAA;AACA,OAAA;;AAEA,MAAA,IAAA,IAAA,CAAA,SAAA,GAAA,KAAA,CAAA,KAAA,IAAA,MAAA,CAAA,UAAA,EAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,IAAA,GAAA,KAAA,CAAA,KAAA,GAAA,IAAA,CAAA,SAAA,GAAA,CAAA,GAAA,IAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,IAAA,GAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,IAAA,CAAA;AACA,OAAA;;AAEA,MAAA,IAAA,IAAA,CAAA,UAAA,GAAA,KAAA,CAAA,KAAA,IAAA,MAAA,CAAA,WAAA,EAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,GAAA,GAAA,KAAA,CAAA,KAAA,GAAA,IAAA,CAAA,UAAA,GAAA,CAAA,GAAA,IAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,GAAA,GAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,IAAA,CAAA;AACA,OAAA;AACA,MAAA,IAAA,CAAA,SAAA,CAAA,GAAA,CAAA,iCAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,eAAA,GAAA;AACA,MAAA,MAAA,OAAA,GAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA;AACA,MAAA,IAAA,OAAA,EAAA;AACA,QAAA,OAAA,CAAA,SAAA,CAAA,MAAA,CAAA,iCAAA,CAAA,CAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,aAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,cAAA,GAAA;AACA,MAAA,IAAA,CAAA,eAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,MAAA,EAAA;AACA,MAAA,IAAA,CAAA,eAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,gBAAA,EAAA;AACA,QAAA,IAAA,EAAA,IAAA,CAAA,IAAA;AACA,QAAA,MAAA,EAAA,MAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,eAAA,CAAA,KAAA,EAAA;AACA,MAAA,IAAA,KAAA,CAAA,OAAA,KAAA,EAAA,EAAA;AACA,QAAA,IAAA,CAAA,eAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,OAAA,GAAA;AACA,IAAA,QAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,EAAA,IAAA,CAAA,eAAA,CAAA,CAAA;AACA,GAAA;AACA,EAAA,aAAA,GAAA;AACA,IAAA,QAAA,CAAA,mBAAA,CAAA,OAAA,EAAA,IAAA,CAAA,eAAA,CAAA,CAAA;AACA,GAAA;AACA,CAAA;;AC/FA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;;;;;ACzBA,SAAS,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,oBAAoB,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE;AAC7L,IAAI,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACzC,QAAQ,iBAAiB,GAAG,cAAc,CAAC;AAC3C,QAAQ,cAAc,GAAG,UAAU,CAAC;AACpC,QAAQ,UAAU,GAAG,KAAK,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AAC3E;AACA,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;AACrC,QAAQ,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzC,QAAQ,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;AAC3D,QAAQ,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AACjC;AACA,QAAQ,IAAI,oBAAoB,EAAE;AAClC,YAAY,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AACtC,SAAS;AACT,KAAK;AACL;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AACnC,KAAK;AACL,IAAI,IAAI,IAAI,CAAC;AACb,IAAI,IAAI,gBAAgB,EAAE;AAC1B;AACA,QAAQ,IAAI,GAAG,UAAU,OAAO,EAAE;AAClC;AACA,YAAY,OAAO;AACnB,gBAAgB,OAAO;AACvB,qBAAqB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3D,qBAAqB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzF;AACA,YAAY,IAAI,CAAC,OAAO,IAAI,OAAO,mBAAmB,KAAK,WAAW,EAAE;AACxE,gBAAgB,OAAO,GAAG,mBAAmB,CAAC;AAC9C,aAAa;AACb;AACA,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,aAAa;AACb;AACA,YAAY,IAAI,OAAO,IAAI,OAAO,CAAC,qBAAqB,EAAE;AAC1D,gBAAgB,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACpE,aAAa;AACb,SAAS,CAAC;AACV;AACA;AACA,QAAQ,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AACpC,KAAK;AACL,SAAS,IAAI,KAAK,EAAE;AACpB,QAAQ,IAAI,GAAG,UAAU;AACzB,cAAc,UAAU,OAAO,EAAE;AACjC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAChG,aAAa;AACb,cAAc,UAAU,OAAO,EAAE;AACjC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,aAAa,CAAC;AACd,KAAK;AACL,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;AAChC;AACA,YAAY,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;AAClD,YAAY,OAAO,CAAC,MAAM,GAAG,SAAS,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE;AAC3E,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,gBAAgB,OAAO,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClD,aAAa,CAAC;AACd,SAAS;AACT,aAAa;AACb;AACA,YAAY,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;AAClD,YAAY,OAAO,CAAC,YAAY,GAAG,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjF,SAAS;AACT,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB;;;AFvEA,MAAcA,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGFP,MAAMC,cAAc,CAAC;EAC1BC,WAAWA,CAACC,QAAQ,EAAE;IACpB,IAAI,CAACA,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,OAAO,IAAI,CAACD,QAAQ,CAACC,gBAAgB,EAAE,CAAA;AACzC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAACC,IAAI,EAAE;AACnB,IAAA,OAAO,IAAI,CAACH,QAAQ,CAACE,cAAc,CAACC,IAAI,CAAC,CAAA;AAC3C,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACD,IAAI,EAAE;AAChB,IAAA,OAAO,IAAI,CAACH,QAAQ,CAACK,cAAc,CAACF,IAAI,CAAC,CAAA;AAC3C,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,UAAUA,CAACH,IAAI,EAAE;AACf,IAAA,OAAO,IAAI,CAACH,QAAQ,CAACM,UAAU,CAACH,IAAI,CAAC,CAAA;AACvC,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEI,OAAOA,CAACC,IAAI,EAAE;AACZ,IAAA,OAAO,IAAI,CAACR,QAAQ,CAACS,UAAU,CAACD,IAAI,CAAC,CAAA;AACvC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,UAAUA,CAACP,IAAI,EAAE;AACf,IAAA,OAAO,IAAI,CAACH,QAAQ,CAACU,UAAU,CAACP,IAAI,CAAC,CAAA;AACvC,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEQ,OAAOA,CAACR,IAAI,EAAE;AACZ,IAAA,OAAO,IAAI,CAACH,QAAQ,CAACW,OAAO,CAACR,IAAI,CAAC,CAAA;AACpC,GAAA;;AAEA;AACF;AACA;AACA;AACES,EAAAA,cAAcA,GAAG;AACf,IAAA,IAAI,IAAI,CAACZ,QAAQ,CAACY,cAAc,EAAE;AAChC,MAAA,OAAO,IAAI,CAACZ,QAAQ,CAACY,cAAc,EAAE,CAAA;AACvC,KAAA;AACA,IAAA,OAAOC,OAAO,CAACC,OAAO,EAAE,CAAA;AAC1B,GAAA;AACF;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,CAAC;AACpB;EACA,OAAOC,OAAO,GAAG,8BAA8B,CAAA;EAC/C,OAAOC,gBAAgB,GAAG,QAAQ,CAAA;EAClC,OAAOC,UAAU,GAAG,CAAC,CAAA;AACrB,EAAA,OAAOC,WAAW,GAAG;AACnBC,IAAAA,SAAS,EAAE,WAAW;AACtBC,IAAAA,KAAK,EAAE,OAAO;AACdC,IAAAA,KAAK,EAAE,OAAO;AACdC,IAAAA,MAAM,EAAE,QAAQ;AAChBC,IAAAA,aAAa,EAAE,eAAA;GAChB,CAAA;;AAED;AACAC,EAAAA,GAAG,GAAG,IAAI,CAAA;;AAEV;AACF;AACA;AACA;AACEC,EAAAA,OAAOA,GAAG;AACR,IAAA,OAAO,IAAIb,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;MACtC,IAAI,IAAI,CAACF,GAAG,EAAE;AACZX,QAAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAAC,CAAA;AACjB,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,MAAMG,OAAO,GAAGC,SAAS,CAACC,IAAI,CAACf,eAAe,CAACC,OAAO,EAAED,eAAe,CAACG,UAAU,CAAC,CAAA;;AAEnF;AACAU,MAAAA,OAAO,CAACG,eAAe,GAAIC,KAAK,IAAK;AACnC,QAAA,MAAMC,EAAE,GAAGD,KAAK,CAACE,MAAM,CAACC,MAAM,CAAA;QAC9B,MAAM;AAAEhB,UAAAA,WAAAA;AAAY,SAAC,GAAGJ,eAAe,CAAA;;AAEvC;QACA,IAAI,CAACkB,EAAE,CAACG,gBAAgB,CAACC,QAAQ,CAAClB,WAAW,CAACK,aAAa,CAAC,EAAE;AAC5DS,UAAAA,EAAE,CAACK,iBAAiB,CAACnB,WAAW,CAACK,aAAa,EAAE;AAC9Ce,YAAAA,OAAO,EAAE,QAAA;AACX,WAAC,CAAC,CAAA;AACJ,SAAA;;AAEA;QACA,IAAI,CAACN,EAAE,CAACG,gBAAgB,CAACC,QAAQ,CAAClB,WAAW,CAACC,SAAS,CAAC,EAAE;AACxD;UACsBa,EAAE,CAACK,iBAAiB,CAACnB,WAAW,CAACC,SAAS,EAAE;AAChEmB,YAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAA;AAClC,WAAC,EAAC;AACJ,SAAA;;AAEA;QACA,IAAI,CAACN,EAAE,CAACG,gBAAgB,CAACC,QAAQ,CAAClB,WAAW,CAACE,KAAK,CAAC,EAAE;AACpD;UACkBY,EAAE,CAACK,iBAAiB,CAACnB,WAAW,CAACE,KAAK,EAAE;AACxDkB,YAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAA;AAC9B,WAAC,EAAC;AACJ,SAAA;;AAEA;QACA,IAAI,CAACN,EAAE,CAACG,gBAAgB,CAACC,QAAQ,CAAClB,WAAW,CAACG,KAAK,CAAC,EAAE;AACpD;UACkBW,EAAE,CAACK,iBAAiB,CAACnB,WAAW,CAACG,KAAK,EAAE;AACxDiB,YAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAA;AAC9B,WAAC,EAAC;AACJ,SAAA;;AAEA;QACA,IAAI,CAACN,EAAE,CAACG,gBAAgB,CAACC,QAAQ,CAAClB,WAAW,CAACI,MAAM,CAAC,EAAE;AACrD;UACmBU,EAAE,CAACK,iBAAiB,CAACnB,WAAW,CAACI,MAAM,EAAE;AAC1DgB,YAAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAA;AAC/B,WAAC,EAAC;AACJ,SAAA;OACD,CAAA;;AAED;AACAX,MAAAA,OAAO,CAACY,SAAS,GAAIR,KAAK,IAAK;AAC7B,QAAA,IAAI,CAACP,GAAG,GAAGO,KAAK,CAACE,MAAM,CAACC,MAAM,CAAA;AAC9B,QAAA,IAAI,CAACV,GAAG,CAACgB,OAAO,GAAG,MAAM;UACvB,IAAI,CAAChB,GAAG,GAAG,IAAI,CAAA;SAChB,CAAA;AACDX,QAAAA,OAAO,CAAC,IAAI,CAACW,GAAG,CAAC,CAAA;OAClB,CAAA;;AAED;AACAG,MAAAA,OAAO,CAACc,OAAO,GAAIV,KAAK,IAAK;AAC3BL,QAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,WAAWX,KAAK,CAACE,MAAM,CAACU,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA;OAC3D,CAAA;MAEDjB,OAAO,CAACkB,SAAS,GAAG,MAAM;AACxBnB,QAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;OAC1C,CAAA;AACH,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACEI,EAAAA,OAAOA,GAAG;AACR,IAAA,OAAO,IAAIlC,OAAO,CAAEC,OAAO,IAAK;MAC9B,IAAI,IAAI,CAACW,GAAG,EAAE;AACZ,QAAA,IAAI,CAACA,GAAG,CAACuB,KAAK,EAAE,CAAA;QAChB,IAAI,CAACvB,GAAG,GAAG,IAAI,CAAA;AACjB,OAAA;AACAX,MAAAA,OAAO,EAAE,CAAA;AACX,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEmC,EAAAA,eAAeA,CAACC,UAAU,EAAEC,UAAU,EAAE;AACtC,IAAA,MAAMC,YAAY,GAAIC,CAAC,IAAKC,MAAM,CAACD,CAAC,CAAC,CAACE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,CAAC,CAAA;AAC5D,IAAA,MAAMC,IAAI,GAAGN,YAAY,CAACF,UAAU,CAAC,CAAA;AACrC,IAAA,MAAMS,IAAI,GAAGP,YAAY,CAACD,UAAU,CAAC,CAAA;AACrC,IAAA,MAAMS,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACJ,IAAI,CAACK,MAAM,EAAEJ,IAAI,CAACI,MAAM,CAAC,CAAA;IACjD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC/B,MAAA,MAAMC,MAAM,GAAGP,IAAI,CAACM,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3B,MAAA,MAAME,MAAM,GAAGP,IAAI,CAACK,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3B,MAAA,IAAIC,MAAM,GAAGC,MAAM,EAAE,OAAO,CAAC,CAAA;AAC7B,MAAA,IAAID,MAAM,GAAGC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAChC,KAAA;AACA,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEC,eAAeA,CAACC,MAAM,EAAE;IACtB,OAAO,IAAI,CAAC1C,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAChC,CACEvD,eAAe,CAACI,WAAW,CAACK,aAAa,EACzCT,eAAe,CAACI,WAAW,CAACC,SAAS,EACrCL,eAAe,CAACI,WAAW,CAACE,KAAK,EACjCN,eAAe,CAACI,WAAW,CAACG,KAAK,EACjCP,eAAe,CAACI,WAAW,CAACI,MAAM,CACnC,EACD,WACF,CAAC,CAAA;QAED,MAAMgD,MAAM,GAAGD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;QAC7E,MAAMqD,MAAM,GAAGH,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;QACzE,MAAMqD,SAAS,GAAGJ,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;QAC5E,MAAMqD,OAAO,GAAGL,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,CAAA;QAClF,MAAMoD,WAAW,GAAGN,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AAE/E,QAAA,MAAMsD,KAAK,GAAGC,WAAW,CAACD,KAAK,CAAC,CAACT,MAAM,CAAC,EAAE,CAACA,MAAM,EAAErD,eAAe,CAACE,gBAAgB,CAAC,CAAC,CAAA;AACrFsD,QAAAA,MAAM,CAACQ,MAAM,CAACF,KAAK,CAAC,CAAA;AACpBJ,QAAAA,MAAM,CAACM,MAAM,CAACF,KAAK,CAAC,CAAA;AACpBH,QAAAA,SAAS,CAACK,MAAM,CAACF,KAAK,CAAC,CAAA;AACvBD,QAAAA,WAAW,CAACG,MAAM,CAACF,KAAK,CAAC,CAAA;AACzBF,QAAAA,OAAO,CAACI,MAAM,CAACX,MAAM,CAAC,CAAA;AAEtBE,QAAAA,WAAW,CAACU,UAAU,GAAG,MAAMlE,OAAO,EAAE,CAAA;QACxCwD,WAAW,CAAC5B,OAAO,GAAIuC,CAAC,IAAKtD,MAAM,CAAC,IAAIgB,KAAK,CAAC,QAAQsC,CAAC,CAAC/C,MAAM,CAACU,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AAClF,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEqC,iBAAiBA,CAACtD,OAAO,EAAE;AACzB,IAAA,OAAO,IAAIf,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;MACtCC,OAAO,CAACY,SAAS,GAAG,MAAM1B,OAAO,CAACc,OAAO,CAACO,MAAM,CAAC,CAAA;MACjDP,OAAO,CAACc,OAAO,GAAG,MAAMf,MAAM,CAACC,OAAO,CAACgB,KAAK,CAAC,CAAA;AAC/C,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEuC,EAAAA,oBAAoBA,CAACf,MAAM,EAAEgB,WAAW,EAAEC,UAAU,EAAE;AACpD,IAAA,IAAI,CAACjB,MAAM,IAAI,CAACgB,WAAW,EAAE;MAC3B,OAAOvE,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAA;AACnE,KAAA;IACA,OAAO,IAAI,CAACwB,eAAe,CAACC,MAAM,CAAC,CAChCC,IAAI,CAAC,MAAM;MACV,MAAMiB,MAAM,GAAG,IAAI,CAACC,SAAS,CAACnB,MAAM,EAAEgB,WAAW,EAAEC,UAAU,CAAC,CAAA;AAC9D,MAAA,OAAO,IAAI,CAACG,cAAc,CAACF,MAAM,CAAC,CAAA;AACpC,KAAC,CAAC,CACDG,KAAK,CAAEC,GAAG,IAAK;MACd,MAAM,IAAI/C,KAAK,CAAC,CAAA,YAAA,EAAe+C,GAAG,CAAC7C,OAAO,EAAE,CAAC,CAAA;AAC/C,KAAC,CAAC,CAAA;AACN,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACE0C,EAAAA,SAASA,CAACnB,MAAM,EAAEgB,WAAW,EAAEC,UAAU,EAAE;AACzC;IACA,MAAMM,SAAS,GAAGN,UAAU,CAACM,SAAS,CAACnC,GAAG,CAAEoC,CAAC,KAAM;AAAE,MAAA,GAAGA,CAAC;AAAExB,MAAAA,MAAAA;AAAO,KAAC,CAAC,CAAC,CAAA;IACrE,MAAMyB,KAAK,GAAGR,UAAU,CAACQ,KAAK,CAACrC,GAAG,CAAEsC,CAAC,KAAM;AAAE,MAAA,GAAGA,CAAC;AAAE1B,MAAAA,MAAAA;AAAO,KAAC,CAAC,CAAC,CAAA;IAC7D,MAAM2B,KAAK,GAAGV,UAAU,CAACU,KAAK,CAACvC,GAAG,CAAEwC,IAAI,KAAM;AAAE,MAAA,GAAGA,IAAI;AAAE5B,MAAAA,MAAAA;AAAO,KAAC,CAAC,CAAC,CAAA;IACnE,MAAM6B,MAAM,GAAGZ,UAAU,CAACY,MAAM,CAACzC,GAAG,CAAE0C,CAAC,KAAM;AAAE,MAAA,GAAGA,CAAC;AAAE9B,MAAAA,MAAAA;AAAO,KAAC,CAAC,CAAC,CAAA;IAE/D,OAAO;AACL+B,MAAAA,WAAW,EAAE;QAAE/B,MAAM;QAAEgB,WAAW;QAAEgB,UAAU,EAAE,IAAIC,IAAI,EAAC;OAAG;MAC5DV,SAAS;MACTE,KAAK;MACLE,KAAK;AACLE,MAAAA,MAAAA;KACD,CAAA;AACH,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEK,EAAAA,oBAAoBA,CAAClC,MAAM,EAAEgB,WAAW,EAAE;IACxC,OAAO,IAAI,CAACmB,sBAAsB,CAACnC,MAAM,CAAC,CAACC,IAAI,CAAE8B,WAAW,IAAK;MAC/D,IAAI,CAACA,WAAW,IAAIA,WAAW,CAACf,WAAW,KAAKA,WAAW,EAAE,OAAO,KAAK,CAAA;MACzE,OAAO,IAAI,CAACoB,oBAAoB,CAACpC,MAAM,CAAC,CAACC,IAAI,CAAEsB,SAAS,IAAK;AAC3D,QAAA,IAAIA,SAAS,CAAC5B,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAA;AACvC,QAAA,MAAM0C,WAAW,GAAGd,SAAS,CAAC,CAAC,CAAC,CAACe,UAAU,CAAA;AAC3C,QAAA,OAAO,IAAI,CAACC,oBAAoB,CAACvC,MAAM,EAAEqC,WAAW,CAAC,CAACpC,IAAI,CAAEwB,KAAK,IAAK;AACpE,UAAA,IAAIA,KAAK,CAAC9B,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAA;AACnC,UAAA,MAAM6C,YAAY,GAAGf,KAAK,CAAC,CAAC,CAAC,CAACgB,MAAM,CAAA;AACpC,UAAA,OAAO,IAAI,CAACC,gBAAgB,CAAC1C,MAAM,EAAEwC,YAAY,CAAC,CAACvC,IAAI,CAAE0B,KAAK,IAAKA,KAAK,CAAChC,MAAM,KAAK,CAAC,CAAC,CAAA;AACxF,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEgD,gBAAgBA,CAACzB,MAAM,EAAE;IACvB,MAAM;AAAEa,MAAAA,WAAAA;AAAY,KAAC,GAAGb,MAAM,CAAA;IAC9B,MAAM;MAAElB,MAAM;AAAEgB,MAAAA,WAAAA;AAAY,KAAC,GAAGe,WAAW,CAAA;IAE3C,OAAO,IAAI,CAACI,sBAAsB,CAACnC,MAAM,CAAC,CAACC,IAAI,CAAE2C,cAAc,IAAK;MAClE,IAAI,CAACA,cAAc,EAAE;AACnB,QAAA,OAAO,IAAI,CAACxB,cAAc,CAACF,MAAM,CAAC,CAAA;AACpC,OAAA;MAEA,MAAM2B,aAAa,GAAG,IAAI,CAAChE,eAAe,CAACmC,WAAW,EAAE4B,cAAc,CAAC5B,WAAW,CAAC,CAAA;MACnF,IAAI6B,aAAa,GAAG,CAAC,EAAE;AACrB,QAAA,OAAO,IAAI,CAAC9C,eAAe,CAACC,MAAM,CAAC,CAACC,IAAI,CAAC,MAAM,IAAI,CAACmB,cAAc,CAACF,MAAM,CAAC,CAAC,CAAA;AAC7E,OAAC,MAAM,IAAI2B,aAAa,KAAK,CAAC,EAAE;QAC9BC,OAAO,CAACC,GAAG,CAAC,CAAA,EAAA,EAAK/C,MAAM,CAAQgB,KAAAA,EAAAA,WAAW,SAAS,CAAC,CAAA;AACpD,QAAA,OAAOvE,OAAO,CAACC,OAAO,CAACkG,cAAc,CAAC,CAAA;AACxC,OAAC,MAAM;AACL,QAAA,MAAM,IAAIrE,KAAK,CAAC,CAAA,EAAA,EAAKyB,MAAM,CAAA,IAAA,EAAO4C,cAAc,CAAC5B,WAAW,CAAA,OAAA,EAAUA,WAAW,CAAA,CAAA,CAAG,CAAC,CAAA;AACvF,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEgC,EAAAA,eAAeA,CAAChD,MAAM,EAAEgB,WAAW,EAAEC,UAAU,EAAE;AAC/C,IAAA,IAAI,CAACjB,MAAM,IAAI,CAACgB,WAAW,EAAE;MAC3B,OAAOvE,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAC7D,KAAA;AACA,IAAA,IAAI,CAAC0E,KAAK,CAACC,OAAO,CAACjC,UAAU,CAACM,SAAS,CAAC,IAAI,CAAC0B,KAAK,CAACC,OAAO,CAACjC,UAAU,CAACQ,KAAK,CAAC,IAAI,CAACwB,KAAK,CAACC,OAAO,CAACjC,UAAU,CAACU,KAAK,CAAC,EAAE;MAChH,OAAOlF,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAChE,KAAA;IAEA,MAAM2C,MAAM,GAAG,IAAI,CAACC,SAAS,CAACnB,MAAM,EAAEgB,WAAW,EAAEC,UAAU,CAAC,CAAA;AAC9D,IAAA,OAAO,IAAI,CAAC0B,gBAAgB,CAACzB,MAAM,CAAC,CAAA;AACtC,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEE,cAAcA,CAACF,MAAM,EAAE;IACrB,OAAO,IAAI,CAAC5D,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAChC,CACEvD,eAAe,CAACI,WAAW,CAACK,aAAa,EACzCT,eAAe,CAACI,WAAW,CAACC,SAAS,EACrCL,eAAe,CAACI,WAAW,CAACE,KAAK,EACjCN,eAAe,CAACI,WAAW,CAACG,KAAK,EACjCP,eAAe,CAACI,WAAW,CAACI,MAAM,CACnC,EACD,WACF,CAAC,CAAA;;AAED;AACA+C,QAAAA,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,CAAC+F,GAAG,CAACjC,MAAM,CAACa,WAAW,CAAC,CAAA;;AAE1F;QACA,MAAM5B,MAAM,GAAGD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;AAC7EkE,QAAAA,MAAM,CAACK,SAAS,CAAC6B,OAAO,CAAEC,GAAG,IAAKlD,MAAM,CAACgD,GAAG,CAACE,GAAG,CAAC,CAAC,CAAA;;AAElD;QACA,MAAMhD,MAAM,GAAGH,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;AACzEiE,QAAAA,MAAM,CAACO,KAAK,CAAC2B,OAAO,CAAEhH,IAAI,IAAKiE,MAAM,CAAC8C,GAAG,CAAC/G,IAAI,CAAC,CAAC,CAAA;;AAEhD;QACA,MAAMkE,SAAS,GAAGJ,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;AAC5EgE,QAAAA,MAAM,CAACS,KAAK,CAACyB,OAAO,CAAExB,IAAI,IAAKtB,SAAS,CAAC6C,GAAG,CAACvB,IAAI,CAAC,CAAC,CAAA;;AAEnD;QACA,MAAM0B,MAAM,GAAGpD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AAC1E+D,QAAAA,MAAM,CAACW,MAAM,CAACuB,OAAO,CAAEG,KAAK,IAAKD,MAAM,CAACH,GAAG,CAACI,KAAK,CAAC,CAAC,CAAA;AAEnDrD,QAAAA,WAAW,CAACU,UAAU,GAAG,MAAMlE,OAAO,CAACwE,MAAM,CAAC,CAAA;QAC9ChB,WAAW,CAAC5B,OAAO,GAAIuC,CAAC,IAAKtD,MAAM,CAAC,IAAIgB,KAAK,CAAC,YAAYsC,CAAC,CAAC/C,MAAM,CAACU,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACtF,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;EACE+E,iBAAiBA,CAACzB,WAAW,EAAE;IAC7B,OAAO,IAAI,CAACzE,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,EAAE,WAAW,CAAC,CAAA;QAC5F,MAAMqG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,CAAA;AAEhF,QAAA,MAAMsG,WAAW,GAAG;AAClB1B,UAAAA,UAAU,EAAE,IAAIC,IAAI,EAAE;UACtB,GAAGF,WAAAA;SACJ,CAAA;AAED,QAAA,IAAI,CAACjB,iBAAiB,CAAC2C,KAAK,CAACN,GAAG,CAACO,WAAW,CAAC,CAAC,CAC3CzD,IAAI,CAAC,MAAMvD,OAAO,CAACgH,WAAW,CAAC,CAAC,CAChCrC,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,SAAA,EAAYC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACrE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE0D,sBAAsBA,CAACnC,MAAM,EAAE;IAC7B,OAAO,IAAI,CAAC1C,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,EAAE,UAAU,CAAC,CAAA;QAC3F,MAAMqG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,CAAA;AAEhF,QAAA,IAAI,CAAC0D,iBAAiB,CAAC2C,KAAK,CAACE,GAAG,CAAC3D,MAAM,CAAC,CAAC,CACtCC,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,IAAI,CAAC,CAAC,CACzCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,YAAYC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACrE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEmF,iBAAiBA,CAAC5D,MAAM,EAAE;IACxB,IAAI,CAACA,MAAM,EAAE;MACX,OAAOvD,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;AACjD,KAAA;;AAEA;AACA,IAAA,OAAO9B,OAAO,CAACoH,GAAG,CAAC,CAAC,IAAI,CAAC1B,sBAAsB,CAACnC,MAAM,CAAC,EAAE,IAAI,CAACoC,oBAAoB,CAACpC,MAAM,CAAC,EAAE,IAAI,CAAC8D,iBAAiB,CAAC9D,MAAM,CAAC,CAAC,CAAC,CACzHC,IAAI,CAAC,CAAC,CAAC8B,WAAW,EAAER,SAAS,EAAEM,MAAM,CAAC,KAAK;AAC1C;AACA,MAAA,MAAMkC,gBAAgB,GAAGxC,SAAS,CAACnC,GAAG,CAAEiE,GAAG,IAAK;AAC9C,QAAA,OAAO,IAAI,CAACd,oBAAoB,CAACvC,MAAM,EAAEqD,GAAG,CAACf,UAAU,CAAC,CAACrC,IAAI,CAAEwB,KAAK,IAAK;AACvE;AACA,UAAA,MAAMuC,YAAY,GAAGvC,KAAK,CAACrC,GAAG,CAAEhD,IAAI,IAAK;AACvC,YAAA,OAAO,IAAI,CAACsG,gBAAgB,CAAC1C,MAAM,EAAE5D,IAAI,CAACqG,MAAM,CAAC,CAACxC,IAAI,CAAE0B,KAAK,KAAM;AAAE,cAAA,GAAGvF,IAAI;AAAEuF,cAAAA,KAAAA;AAAM,aAAC,CAAC,CAAC,CAAA;AACzF,WAAC,CAAC,CAAA;UACF,OAAOlF,OAAO,CAACoH,GAAG,CAACG,YAAY,CAAC,CAAC/D,IAAI,CAAEgE,cAAc,KAAM;AACzD,YAAA,GAAGZ,GAAG;AACN5B,YAAAA,KAAK,EAAEwC,cAAAA;AACT,WAAC,CAAC,CAAC,CAAA;AACL,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;MAEF,OAAOxH,OAAO,CAACoH,GAAG,CAACE,gBAAgB,CAAC,CAAC9D,IAAI,CAAEiE,kBAAkB,KAAM;QACjEnC,WAAW;AACXR,QAAAA,SAAS,EAAE2C,kBAAkB;AAC7BrC,QAAAA,MAAAA;AACF,OAAC,CAAC,CAAC,CAAA;AACL,KAAC,CAAC,CACDR,KAAK,CAAEC,GAAG,IAAK;MACd,MAAM,IAAI/C,KAAK,CAAC,CAAA,SAAA,EAAY+C,GAAG,CAAC7C,OAAO,EAAE,CAAC,CAAA;AAC5C,KAAC,CAAC,CAAA;AACN,GAAA;AAEA0F,EAAAA,qBAAqBA,CAACnE,MAAM,EAAEsC,UAAU,EAAE;AACxC,IAAA,IAAI,CAACtC,MAAM,IAAI,CAACsC,UAAU,EAAE;MAC1B,OAAO7F,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;AACjD,KAAA;IACA,MAAM6F,QAAQ,GAAG,EAAE,CAAA;AACnB,IAAA,OAAO,IAAI,CAAC7B,oBAAoB,CAACvC,MAAM,EAAEsC,UAAU,CAAC,CACjDrC,IAAI,CAAEwB,KAAK,IAAK;AACf,MAAA,MAAM4C,SAAS,GAAG5C,KAAK,CAACrC,GAAG,CAAEhD,IAAI,IAAK;QACpC,OAAO,IAAI,CAACsG,gBAAgB,CAAC1C,MAAM,EAAE5D,IAAI,CAACqG,MAAM,CAAC,CAAA;AACnD,OAAC,CAAC,CAAA;MAEF,OAAOhG,OAAO,CAACoH,GAAG,CAACQ,SAAS,CAAC,CAACpE,IAAI,CAAEqE,UAAU,IAAK;AACjDA,QAAAA,UAAU,CAAClB,OAAO,CAAC,CAACzB,KAAK,EAAE4C,KAAK,KAAK;AACnC9C,UAAAA,KAAK,CAAC8C,KAAK,CAAC,CAAC5C,KAAK,GAAGA,KAAK,CAAA;AAC5B,SAAC,CAAC,CAAA;QACFyC,QAAQ,CAAC3C,KAAK,GAAGA,KAAK,CAAA;AACxB,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CACDxB,IAAI,CAAC,MAAM;AACV,MAAA,OAAO,IAAI,CAACuE,eAAe,CAACxE,MAAM,EAAEsC,UAAU,CAAC,CAAA;AACjD,KAAC,CAAC,CACDrC,IAAI,CAAElC,MAAM,IAAK;AAChBA,MAAAA,MAAM,CAAC0D,KAAK,GAAG2C,QAAQ,CAAC3C,KAAK,CAAA;AAC7B,MAAA,OAAOhF,OAAO,CAACC,OAAO,CAACqB,MAAM,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;AACN,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE0G,iBAAiBA,CAACzE,MAAM,EAAE;IACxB,OAAO,IAAI,CAAC1C,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,EAAE,WAAW,CAAC,CAAA;QAC5F,MAAMqG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACK,aAAa,CAAC,CAAA;AAEhF,QAAA,IAAI,CAAC0D,iBAAiB,CAAC2C,KAAK,CAAC9C,MAAM,CAACX,MAAM,CAAC,CAAC,CACzCC,IAAI,CAAC,MAAMvD,OAAO,EAAE,CAAC,CACrB2E,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,SAAA,EAAYC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACrE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;EACE3C,cAAcA,CAACsI,QAAQ,EAAE;IACvB,OAAO,IAAI,CAAC9G,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,IAAI,CAAC6G,QAAQ,CAACpE,MAAM,EAAE;AACpBzC,UAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;AACnC,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,MAAM2B,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAA;QACxF,MAAMyG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;AAC5E,QAAA,MAAM0H,YAAY,GAAG;AACnB,UAAA,GAAGN,QAAQ;AACXO,UAAAA,UAAU,EAAEP,QAAQ,CAACO,UAAU,GAAG,IAAI1C,IAAI,CAACmC,QAAQ,CAACO,UAAU,CAAC,GAAG,IAAI1C,IAAI,EAAE;AAC5E2C,UAAAA,UAAU,EAAER,QAAQ,CAACQ,UAAU,GAAG,IAAI3C,IAAI,CAACmC,QAAQ,CAACQ,UAAU,CAAC,GAAG,IAAA;SACnE,CAAA;QACD,OAAOF,YAAY,CAACjD,KAAK,CAAA;AACzB,QAAA,OAAO,IAAI,CAACX,iBAAiB,CAAC2C,KAAK,CAACN,GAAG,CAACuB,YAAY,CAAC,CAAC,CACnDzE,IAAI,CAAC,MAAMvD,OAAO,CAACgI,YAAY,CAAC,CAAC,CACjCrD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE+F,EAAAA,eAAeA,CAACxE,MAAM,EAAEsC,UAAU,EAAE;IAClC,OAAO,IAAI,CAAChF,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAA;QACvF,MAAMyG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;AAE5E,QAAA,IAAI,CAAC8D,iBAAiB,CAAC2C,KAAK,CAACE,GAAG,CAAC,CAAC3D,MAAM,EAAEsC,UAAU,CAAC,CAAC,CAAC,CACpDrC,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,IAAI,CAAC,CAAC,CACzCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE2D,oBAAoBA,CAACpC,MAAM,EAAE;IAC3B,OAAO,IAAI,CAAC1C,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,EAAE,UAAU,CAAC,CAAA;QACvF,MAAMyG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;AAC5E;AACA,QAAA,MAAM6H,KAAK,GAAGnE,WAAW,CAACD,KAAK,CAAC,CAACT,MAAM,CAAC,EAAE,CAACA,MAAM,EAAErD,eAAe,CAACE,gBAAgB,CAAC,CAAC,CAAA;AACrF,QAAA,IAAI,CAACiE,iBAAiB,CAAC2C,KAAK,CAACqB,MAAM,CAACD,KAAK,CAAC,CAAC,CACxC5E,IAAI,CAAElC,MAAM,IAAK;AAChBrB,UAAAA,OAAO,CAACqB,MAAM,IAAI,EAAE,CAAC,CAAA;AACvB,SAAC,CAAC,CACDsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,aAAaC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACtE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACExC,EAAAA,cAAcA,CAAC+D,MAAM,EAAEsC,UAAU,EAAE;IACjC,OAAO,IAAI,CAAChF,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAA;QACxF,MAAMyG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACC,SAAS,CAAC,CAAA;AAE5E,QAAA,IAAI,CAAC8D,iBAAiB,CAAC2C,KAAK,CAAC9C,MAAM,CAAC,CAACX,MAAM,EAAEsC,UAAU,CAAC,CAAC,CAAC,CACvDrC,IAAI,CAAC,MAAMvD,OAAO,EAAE,CAAC,CACrB2E,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;AACEvC,EAAAA,UAAUA,CAAC8D,MAAM,EAAE5D,IAAI,EAAE;IACvB,OAAO,IAAI,CAACkB,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,IAAI,CAACyC,MAAM,IAAI,CAAC5D,IAAI,CAACkG,UAAU,EAAE;AAC/B/E,UAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;AAC9C,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,MAAM2B,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,EAAE,WAAW,CAAC,CAAA;QACpF,MAAMwG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;AAExE,QAAA,MAAM8H,QAAQ,GAAG;AACf,UAAA,GAAG3I,IAAI;AACP4D,UAAAA,MAAM,EAAEA,MAAM;AACd4E,UAAAA,UAAU,EAAExI,IAAI,CAACwI,UAAU,GAAG,IAAI3C,IAAI,CAAC7F,IAAI,CAACwI,UAAU,CAAC,GAAG,IAAI3C,IAAI,EAAC;SACpE,CAAA;AAED,QAAA,IAAI,CAACnB,iBAAiB,CAAC2C,KAAK,CAACN,GAAG,CAAC4B,QAAQ,CAAC,CAAC,CACxC9E,IAAI,CAAC,MAAMvD,OAAO,CAACqI,QAAQ,CAAC,CAAC,CAC7B1D,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,OAAA,EAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEuG,EAAAA,WAAWA,CAAChF,MAAM,EAAEyC,MAAM,EAAE;IAC1B,OAAO,IAAI,CAACnF,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QACnF,MAAMwG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;AAExE,QAAA,IAAI,CAAC6D,iBAAiB,CAAC2C,KAAK,CAACE,GAAG,CAAC,CAAC3D,MAAM,EAAEyC,MAAM,CAAC,CAAC,CAAC,CAChDxC,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,IAAI,CAAC,CAAC,CACzCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE8D,EAAAA,oBAAoBA,CAACvC,MAAM,EAAEsC,UAAU,EAAE;IACvC,OAAO,IAAI,CAAChF,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QACnF,MAAMwG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;AACxE;AACA,QAAA,MAAM4H,KAAK,GAAGnE,WAAW,CAACD,KAAK,CAAC,CAACT,MAAM,CAAC,EAAE,CAACA,MAAM,EAAErD,eAAe,CAACE,gBAAgB,CAAC,CAAC,CAAA;QAErF,IAAI,CAACiE,iBAAiB,CAAC2C,KAAK,CAACqB,MAAM,CAACD,KAAK,CAAC,CAAC,CACxC5E,IAAI,CAAEwB,KAAK,IAAKA,KAAK,CAACwD,MAAM,CAAE7I,IAAI,IAAKA,IAAI,CAACkG,UAAU,KAAKA,UAAU,CAAC,CAAC,CACvErC,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,EAAE,CAAC,CAAC,CACvCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,UAAA,EAAaC,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AACtE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEyG,EAAAA,mBAAmBA,CAAClF,MAAM,EAAEmF,OAAO,EAAE;AACnC,IAAA,IAAI,CAAClC,KAAK,CAACC,OAAO,CAACiC,OAAO,CAAC,IAAIA,OAAO,CAACxF,MAAM,KAAK,CAAC,EAAE;AACnD,MAAA,OAAOlD,OAAO,CAACC,OAAO,EAAE,CAAA;AAC1B,KAAA;IAEA,OAAO,IAAI,CAACY,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,EAAE,WAAW,CAAC,CAAA;QACpF,MAAMwG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACE,KAAK,CAAC,CAAA;QAExEkI,OAAO,CAAC/F,GAAG,CAAEqD,MAAM,IAAK,IAAI,CAAC3B,iBAAiB,CAAC2C,KAAK,CAAC9C,MAAM,CAAC,CAACX,MAAM,EAAEyC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/EvC,QAAAA,WAAW,CAACU,UAAU,GAAG,MAAMlE,OAAO,EAAE,CAAA;QACxCwD,WAAW,CAAC5B,OAAO,GAAIuC,CAAC,IAAKtD,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUsC,CAAC,CAAC/C,MAAM,CAACU,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACpF,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;AACEnC,EAAAA,UAAUA,CAAC0D,MAAM,EAAE4B,IAAI,EAAE;IACvB,OAAO,IAAI,CAACtE,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,IAAI,CAACyC,MAAM,IAAI,CAAC4B,IAAI,CAACa,MAAM,EAAE;AAC3BlF,UAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;AAC1C,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,MAAM2B,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAA;QACpF,MAAMuG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;AAExE,QAAA,MAAMkI,QAAQ,GAAG;AACf,UAAA,GAAGxD,IAAI;AACP5B,UAAAA,MAAM,EAAEA,MAAM;AACd4E,UAAAA,UAAU,EAAEhD,IAAI,CAACgD,UAAU,GAAG,IAAI3C,IAAI,CAACL,IAAI,CAACgD,UAAU,CAAC,GAAG,IAAI3C,IAAI,EAAC;SACpE,CAAA;AAED,QAAA,IAAI,CAACnB,iBAAiB,CAAC2C,KAAK,CAACN,GAAG,CAACiC,QAAQ,CAAC,CAAC,CACxCnF,IAAI,CAAC,MAAMvD,OAAO,CAAC0I,QAAQ,CAAC,CAAC,CAC7B/D,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,OAAA,EAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE4G,EAAAA,WAAWA,CAACrF,MAAM,EAAEsF,MAAM,EAAE;IAC1B,OAAO,IAAI,CAAChI,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QACnF,MAAMuG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;AAExE,QAAA,IAAI,CAAC4D,iBAAiB,CAAC2C,KAAK,CAACE,GAAG,CAAC,CAAC3D,MAAM,EAAEsF,MAAM,CAAC,CAAC,CAAC,CAChDrF,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,IAAI,CAAC,CAAC,CACzCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEiE,EAAAA,gBAAgBA,CAAC1C,MAAM,EAAEyC,MAAM,EAAE;IAC/B,OAAO,IAAI,CAACnF,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QACnF,MAAMuG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;AACxE;AACA,QAAA,MAAM2H,KAAK,GAAGnE,WAAW,CAACD,KAAK,CAAC,CAACT,MAAM,CAAC,EAAE,CAACA,MAAM,EAAErD,eAAe,CAACE,gBAAgB,CAAC,CAAC,CAAA;QAErF,IAAI,CAACiE,iBAAiB,CAAC2C,KAAK,CAACqB,MAAM,CAACD,KAAK,CAAC,CAAC,CACxC5E,IAAI,CAAE0B,KAAK,IAAKA,KAAK,CAACsD,MAAM,CAAErD,IAAI,IAAKA,IAAI,CAACa,MAAM,KAAKA,MAAM,CAAC,CAAC,CAC/DxC,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,EAAE,CAAC,CAAC,CACvCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,UAAA,EAAaC,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AACtE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE8G,EAAAA,eAAeA,CAACvF,MAAM,EAAEwF,OAAO,EAAE;AAC/B;AACA,IAAA,IAAI,CAACvC,KAAK,CAACC,OAAO,CAACsC,OAAO,CAAC,IAAIA,OAAO,CAAC7F,MAAM,KAAK,CAAC,EAAE;AACnD,MAAA,OAAOlD,OAAO,CAACC,OAAO,EAAE,CAAA;AAC1B,KAAA;IACA,OAAO,IAAI,CAACY,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAA;QACpF,MAAMuG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACG,KAAK,CAAC,CAAA;;AAExE;QACAsI,OAAO,CAACpG,GAAG,CAAEkG,MAAM,IAAK,IAAI,CAACxE,iBAAiB,CAAC2C,KAAK,CAAC9C,MAAM,CAAC,CAACX,MAAM,EAAEsF,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/E;AACApF,QAAAA,WAAW,CAACU,UAAU,GAAG,MAAMlE,OAAO,EAAE,CAAA;QACxCwD,WAAW,CAAC5B,OAAO,GAAIuC,CAAC,IAAKtD,MAAM,CAAC,IAAIgB,KAAK,CAAC,YAAYsC,CAAC,CAAC/C,MAAM,CAACU,KAAK,CAACC,OAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACtF,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACA;AACF;AACA;AACA;AACA;EACEgH,WAAWA,CAAClC,KAAK,EAAE;IACjB,OAAO,IAAI,CAACjG,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,IAAI,CAACgG,KAAK,CAACvD,MAAM,EAAE;AACjBzC,UAAAA,MAAM,CAAC,IAAIgB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;AACnC,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,MAAM2B,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,EAAE,WAAW,CAAC,CAAA;QACrF,MAAMsG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AAEzE,QAAA,MAAMuI,SAAS,GAAG;AAChB,UAAA,GAAGnC,KAAK;AACRqB,UAAAA,UAAU,EAAErB,KAAK,CAACqB,UAAU,GAAG,IAAI3C,IAAI,CAACsB,KAAK,CAACqB,UAAU,CAAC,GAAG,IAAI3C,IAAI,EAAC;SACtE,CAAA;AAED,QAAA,IAAI,CAACnB,iBAAiB,CAAC2C,KAAK,CAACN,GAAG,CAACuC,SAAS,CAAC,CAAC,CACzCzF,IAAI,CAAC,MAAMvD,OAAO,CAACgJ,SAAS,CAAC,CAAC,CAC9BrE,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,CAAA,OAAA,EAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEkH,EAAAA,YAAYA,CAAC3F,MAAM,EAAE4F,OAAO,EAAE;IAC5B,OAAO,IAAI,CAACtI,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,EAAE,UAAU,CAAC,CAAA;QACpF,MAAMsG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AAEzE,QAAA,IAAI,CAAC2D,iBAAiB,CAAC2C,KAAK,CAACE,GAAG,CAAC,CAAC3D,MAAM,EAAE4F,OAAO,CAAC,CAAC,CAAC,CACjD3F,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,IAAI,CAAC,CAAC,CACzCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEqF,iBAAiBA,CAAC9D,MAAM,EAAE;IACxB,OAAO,IAAI,CAAC1C,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,EAAE,UAAU,CAAC,CAAA;QACpF,MAAMsG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AACzE;AACA,QAAA,MAAM0H,KAAK,GAAGnE,WAAW,CAACD,KAAK,CAAC,CAACT,MAAM,CAAC,EAAE,CAACA,MAAM,EAAErD,eAAe,CAACE,gBAAgB,CAAC,CAAC,CAAA;AAErF,QAAA,IAAI,CAACiE,iBAAiB,CAAC2C,KAAK,CAACqB,MAAM,CAACD,KAAK,CAAC,CAAC,CACxC5E,IAAI,CAAElC,MAAM,IAAKrB,OAAO,CAACqB,MAAM,IAAI,EAAE,CAAC,CAAC,CACvCsD,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,aAAaC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACtE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEoH,EAAAA,eAAeA,CAAC7F,MAAM,EAAE4F,OAAO,EAAE;IAC/B,OAAO,IAAI,CAACtI,OAAO,EAAE,CAAC2C,IAAI,CAAEpC,EAAE,IAAK;AACjC,MAAA,OAAO,IAAIpB,OAAO,CAAC,CAACC,OAAO,EAAEa,MAAM,KAAK;AACtC,QAAA,MAAM2C,WAAW,GAAGrC,EAAE,CAACqC,WAAW,CAAC,CAACvD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,EAAE,WAAW,CAAC,CAAA;QACrF,MAAMsG,KAAK,GAAGvD,WAAW,CAACE,WAAW,CAACzD,eAAe,CAACI,WAAW,CAACI,MAAM,CAAC,CAAA;AAEzE,QAAA,IAAI,CAAC2D,iBAAiB,CAAC2C,KAAK,CAAC9C,MAAM,CAAC,CAACX,MAAM,EAAE4F,OAAO,CAAC,CAAC,CAAC,CACpD3F,IAAI,CAAC,MAAMvD,OAAO,EAAE,CAAC,CACrB2E,KAAK,CAAE7C,KAAK,IAAKjB,MAAM,CAAC,IAAIgB,KAAK,CAAC,UAAUC,KAAK,CAACC,OAAO,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACnE,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;AACF,CAAA;AACO,MAAMqH,QAAQ,GAAG,IAAInJ,eAAe,EAAE;;ACr0BtC,SAASoJ,SAASA,CAACC,GAAG,EAAE;AAC7B,EAAA,OAAOA,GAAG,IAAI,IAAI,IAAIA,GAAG,KAAK,EAAE,IAAI,CAAC3G,MAAM,CAAC4G,KAAK,CAAC5G,MAAM,CAAC2G,GAAG,CAAC,CAAC,CAAA;AAChE,CAAA;AACO,SAASE,UAAUA,CAACC,KAAK,EAAE;EAChC,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAA;AACjD,EAAA,OAAOC,UAAU,CAACD,KAAK,CAACE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;AACjD,CAAA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAClK,IAAI,EAAE;AAClC;AACA,EAAA,IAAI,CAACA,IAAI,IAAI,CAAC6G,KAAK,CAACC,OAAO,CAAC9G,IAAI,CAACuF,KAAK,CAAC,EAAE,OAAA;;AAEzC;EACAvF,IAAI,CAACuF,KAAK,CAAC4E,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;AACxB,IAAA,MAAMC,SAAS,GAAGF,CAAC,CAACG,QAAQ,IAAI,CAAC,CAAA;AACjC,IAAA,MAAMC,SAAS,GAAGH,CAAC,CAACE,QAAQ,IAAI,CAAC,CAAA;IACjC,OAAOD,SAAS,GAAGE,SAAS,CAAA;AAC9B,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACA;AACA;AACO,SAASC,SAASA,CAACpF,KAAK,EAAE;AAC/B;AACA,EAAA,IAAI,CAACwB,KAAK,CAACC,OAAO,CAACzB,KAAK,CAAC,EAAE,OAAA;;AAE3B;AACAA,EAAAA,KAAK,CAAC8E,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;AACnB,IAAA,MAAMK,KAAK,GAAGN,CAAC,CAACD,IAAI,IAAI,CAAC,CAAA;AACzB,IAAA,MAAMQ,KAAK,GAAGN,CAAC,CAACF,IAAI,IAAI,CAAC,CAAA;IACzB,OAAOO,KAAK,GAAGC,KAAK,CAAA;AACtB,GAAC,CAAC,CAAA;;AAEF;EACAtF,KAAK,CAAC2B,OAAO,CAAEhH,IAAI,IAAKkK,aAAa,CAAClK,IAAI,CAAC,CAAC,CAAA;AAC9C,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS4K,aAAaA,CAACzF,SAAS,EAAE;AACvC;AACA,EAAA,IAAI,CAAC0B,KAAK,CAACC,OAAO,CAAC3B,SAAS,CAAC,IAAIA,SAAS,CAAC5B,MAAM,KAAK,CAAC,EAAE;AACvD,IAAA,OAAO4B,SAAS,CAAA;AAClB,GAAA;;AAEA;AACAA,EAAAA,SAAS,CAACgF,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;AACvB,IAAA,MAAMK,KAAK,GAAGN,CAAC,CAACD,IAAI,IAAI,CAAC,CAAA;AACzB,IAAA,MAAMQ,KAAK,GAAGN,CAAC,CAACF,IAAI,IAAI,CAAC,CAAA;IACzB,OAAOO,KAAK,GAAGC,KAAK,CAAA;AACtB,GAAC,CAAC,CAAA;;AAEF;EACAxF,SAAS,CAAC6B,OAAO,CAAEgB,QAAQ,IAAKyC,SAAS,CAACzC,QAAQ,CAAC3C,KAAK,CAAC,CAAC,CAAA;;AAE1D;AACA,EAAA,OAAOF,SAAS,CAAA;AAClB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0F,gBAAgBA,CAAClL,IAAI,EAAE;AACrC;AACA,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI,CAAA;;AAEtB;AACA,EAAA,IAAIA,IAAI,CAACuJ,MAAM,IAAIvJ,IAAI,CAAC0G,MAAM,EAAE;AAC9B,IAAA,OAAO,MAAM,CAAA;AACf,GAAA;AACA;AAAA,OACK,IAAI1G,IAAI,CAAC0G,MAAM,IAAI1G,IAAI,CAACuG,UAAU,IAAI,CAACvG,IAAI,CAACuJ,MAAM,EAAE;AACvD,IAAA,OAAO,MAAM,CAAA;AACf,GAAA;AACA;AAAA,OACK,IAAIvJ,IAAI,CAACuG,UAAU,EAAE;AACxB,IAAA,OAAO,UAAU,CAAA;AACnB,GAAA;AACA;OACK;AACH,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACF,CAAA;AACO,SAAS4E,iBAAiBA,CAAChG,MAAM,EAAE;AACxC;EACA,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;AACjD,IAAA,MAAM,IAAI3C,KAAK,CAAC,WAAW,CAAC,CAAA;AAC9B,GAAA;;AAEA;AACA,EAAA,IAAI,EAAE,MAAM,IAAI2C,MAAM,CAAC,EAAE;AACvB,IAAA,MAAM,IAAI3C,KAAK,CAAC,gBAAgB,CAAC,CAAA;AACnC,GAAA;;AAEA;EACA,IAAI,EAAE,QAAQ,IAAI2C,MAAM,CAAC,IAAI,EAAE,aAAa,IAAIA,MAAM,CAAC,EAAE;AACvD,IAAA,MAAM,IAAI3C,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAClD,GAAA;EAEA,MAAM;AAAE4I,IAAAA,IAAAA;AAAK,GAAC,GAAGjG,MAAM,CAAA;;AAEvB;EACA,IAAIiG,IAAI,KAAK,OAAO,EAAE;IACpB,IAAI,EAAE,YAAY,IAAIjG,MAAM,CAAC,IAAIA,MAAM,CAACD,UAAU,IAAI,IAAI,EAAE;AAC1D,MAAA,MAAM,IAAI1C,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAClD,KAAA;AAEA,IAAA,IAAI,EAAE,QAAQ,IAAI2C,MAAM,CAACD,UAAU,CAAC,EAAE;AACpC,MAAA,MAAM,IAAI1C,KAAK,CAAC,uCAAuC,CAAC,CAAA;AAC1D,KAAA;AACF,GAAC,MAAM,IAAI4I,IAAI,KAAK,QAAQ,EAAE;AAC5B;AACA,IAAA,MAAMC,WAAW,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAC3H,IAAA,KAAK,MAAMC,MAAM,IAAID,WAAW,EAAE;AAChC,MAAA,IAAI,OAAOlG,MAAM,CAACmG,MAAM,CAAC,KAAK,UAAU,EAAE;AACxC,QAAA,MAAM,IAAI9I,KAAK,CAAC,CAAG8I,EAAAA,MAAM,UAAU,CAAC,CAAA;AACtC,OAAA;AACF,KAAA;AACF,GAAC,MAAM;AACL,IAAA,MAAM,IAAI9I,KAAK,CAAC,6BAA6B,CAAC,CAAA;AAChD,GAAA;EAEA,OAAO,IAAI,CAAC;AACd,CAAA;;AA0BA;AACA;AACA;AACA;AACA;AACO,SAAS+I,eAAeA,CAACvL,IAAI,EAAE;AACpC;EACA,OACE,CAAC,CAACA,IAAI,IACNkH,KAAK,CAACC,OAAO,CAACnH,IAAI,CAACwF,SAAS,CAAC,IAC7B0B,KAAK,CAACC,OAAO,CAACnH,IAAI,CAAC0F,KAAK,CAAC,IACzBwB,KAAK,CAACC,OAAO,CAACnH,IAAI,CAAC4F,KAAK,CAAC,KACxB5F,IAAI,CAACwF,SAAS,CAAC5B,MAAM,KAAK,CAAC,IAAI,CAAC5D,IAAI,CAACwF,SAAS,CAAC,CAAC,CAAC,CAACE,KAAK,CAAC,CAAA;AAE7D,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS8F,eAAeA,CAACxL,IAAI,EAAE;AACpC;AACA,EAAA,IAAIkH,KAAK,CAACC,OAAO,CAACnH,IAAI,CAAC,EAAE;AACvB;IACA,OAAOA,IAAI,CAAC4D,MAAM,KAAK,CAAC,IAAK,CAAC,CAAC5D,IAAI,CAAC,CAAC,CAAC,IAAIkH,KAAK,CAACC,OAAO,CAACnH,IAAI,CAAC,CAAC,CAAC,CAAC0F,KAAK,CAAE,CAAA;AACzE,GAAA;AACA,EAAA,OAAO,CAAC,CAAC1F,IAAI,IAAIkH,KAAK,CAACC,OAAO,CAACnH,IAAI,CAACwF,SAAS,CAAC,KAAKxF,IAAI,CAACwF,SAAS,CAAC5B,MAAM,KAAK,CAAC,IAAIsD,KAAK,CAACC,OAAO,CAACnH,IAAI,CAACwF,SAAS,CAAC,CAAC,CAAC,CAACE,KAAK,CAAC,CAAC,CAAA;AAC3H,CAAA;;AAwCA;AACA;AACA;AACO,SAAS+F,aAAaA,CAACC,QAAQ,EAAE;EACtC,MAAMlG,SAAS,GAAG,EAAE,CAAA;EACpB,MAAME,KAAK,GAAG,EAAE,CAAA;EAChB,MAAME,KAAK,GAAG,EAAE,CAAA;AAEhB,EAAA,KAAK,MAAMyC,QAAQ,IAAIqD,QAAQ,EAAE;AAC/B;IACA,MAAM;AAAEhG,MAAAA,KAAK,EAAEiG,aAAa;MAAE,GAAGhD,YAAAA;AAAa,KAAC,GAAGN,QAAQ,CAAA;;AAE1D;AACA,IAAA,IAAI,CAACM,YAAY,CAACpC,UAAU,EAAE;AAC5BoC,MAAAA,YAAY,CAACpC,UAAU,GAAGqF,YAAY,EAAE,CAAA;AAC1C,KAAA;AAEApG,IAAAA,SAAS,CAACqG,IAAI,CAAClD,YAAY,CAAC,CAAA;AAE5B,IAAA,KAAK,MAAMtI,IAAI,IAAIsL,aAAa,IAAI,EAAE,EAAE;MACtC,MAAM;AAAE/F,QAAAA,KAAK,EAAEkG,SAAS;QAAE,GAAG9C,QAAAA;AAAS,OAAC,GAAG3I,IAAI,CAAA;;AAE9C;AACA2I,MAAAA,QAAQ,CAACzC,UAAU,GAAGoC,YAAY,CAACpC,UAAU,CAAA;;AAE7C;AACA,MAAA,IAAI,CAACyC,QAAQ,CAACtC,MAAM,EAAE;AACpBsC,QAAAA,QAAQ,CAACtC,MAAM,GAAGkF,YAAY,EAAE,CAAA;AAClC,OAAA;AAEAlG,MAAAA,KAAK,CAACmG,IAAI,CAAC7C,QAAQ,CAAC,CAAA;AAEpB,MAAA,KAAK,MAAMnD,IAAI,IAAIiG,SAAS,IAAI,EAAE,EAAE;AAClC;AACAjG,QAAAA,IAAI,CAACa,MAAM,GAAGsC,QAAQ,CAACtC,MAAM,CAAA;;AAE7B;AACA,QAAA,IAAI,CAACb,IAAI,CAAC0D,MAAM,EAAE;AAChB1D,UAAAA,IAAI,CAAC0D,MAAM,GAAGqC,YAAY,EAAE,CAAA;AAC9B,SAAA;AAEAhG,QAAAA,KAAK,CAACiG,IAAI,CAAChG,IAAI,CAAC,CAAA;AAClB,OAAA;AACF,KAAA;AACF,GAAA;EACA,OAAO;IAAEL,SAAS;IAAEE,KAAK;AAAEE,IAAAA,KAAAA;GAAO,CAAA;AACpC,CAAA;AAEO,SAASgG,YAAYA,CAACG,MAAM,GAAG,IAAI,EAAE;AAC1C;EACA,IAAIC,IAAI,GAAG,EAAE,CAAA;EACb,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,UAAU,EAAE;AACtDF,IAAAA,IAAI,GAAGC,MAAM,CAACC,UAAU,EAAE,CAAA;AAC5B,GAAC,MAAM;IACLF,IAAI,GAAG,sCAAsC,CAAC1B,OAAO,CAAC,OAAO,EAAE,UAAU6B,CAAC,EAAE;MAC1E,MAAMC,CAAC,GAAI1I,IAAI,CAAC2I,MAAM,EAAE,GAAG,EAAE,GAAI,CAAC,CAAA;AAClC,MAAA,MAAMnJ,CAAC,GAAGiJ,CAAC,KAAK,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG,CAAA;AACzC,MAAA,OAAOlJ,CAAC,CAACoJ,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvB,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA,EAAA,IAAIP,MAAM,EAAE;AACV;AACA,IAAA,OAAOC,IAAI,CAAC1B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC/B,GAAC,MAAM;AACL,IAAA,OAAO0B,IAAI,CAAA;AACb,GAAA;AACF;;AC1SO,MAAMO,oBAAoB,CAAC;EAChC3M,WAAWA,CAACqE,MAAM,EAAEgB,WAAW,EAAEC,UAAU,EAAEsH,QAAQ,GAAG,IAAI,EAAE;IAC5D,IAAI,CAACvI,MAAM,GAAGA,MAAM,CAAA;IACpB,IAAI,CAACgB,WAAW,GAAGA,WAAW,CAAA;IAC9B,IAAI,CAACC,UAAU,GAAGA,UAAU,CAAA;IAC5B,IAAI,CAACsH,QAAQ,GAAGA,QAAQ,CAAA;AACxB,IAAA,IAAI,CAACC,KAAK,GAAG1C,QAAQ,CAAC9C,eAAe,CAAChD,MAAM,EAAEgB,WAAW,EAAEC,UAAU,CAAC,CAACI,KAAK,CAAER,CAAC,IAAK;MAClFiC,OAAO,CAAC2F,IAAI,CAAC,CAAA,cAAA,EAAiB5H,CAAC,CAACpC,OAAO,EAAE,CAAC,CAAA;AAC1C;MACA,OAAOqH,QAAQ,CAAC/E,oBAAoB,CAACf,MAAM,EAAEgB,WAAW,EAAEC,UAAU,CAAC,CAAA;AACvE,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEpF,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,OAAO,IAAI,CAAC2M,KAAK,CAACvI,IAAI,CAAC,MAAM;AAC3B,MAAA,OAAO6F,QAAQ,CAAClC,iBAAiB,CAAC,IAAI,CAAC5D,MAAM,CAAC,CAAA;AAChD,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACElE,cAAcA,CAACsI,QAAQ,EAAE;AACvB,IAAA,IAAItC,CAAC,CAAA;AACL;AACA,IAAA,IAAI,CAACsC,QAAQ,CAAC9B,UAAU,EAAE;AACxB,MAAA,MAAMoG,aAAa,GAAGf,YAAY,EAAE,CAAA;MACpCvD,QAAQ,CAAC9B,UAAU,GAAGoG,aAAa,CAAA;MACnC,IAAItE,QAAQ,CAACuE,YAAY,EAAE;QACzB,MAAM1H,UAAU,GAAG,EAAE,CAAA;AACrB;AACAa,QAAAA,CAAC,GAAGgE,QAAQ,CACTvD,oBAAoB,CAAC,IAAI,CAACvC,MAAM,EAAEoE,QAAQ,CAACuE,YAAY,CAAC,CACxD1I,IAAI,CAAEwB,KAAK,IAAK;UACfR,UAAU,CAACQ,KAAK,GAAGA,KAAK,CAAA;AAExB,UAAA,MAAMmH,MAAM,GAAGnH,KAAK,CAACrC,GAAG,CAAEhD,IAAI,IAAK;YACjC,OAAO0J,QAAQ,CAACpD,gBAAgB,CAAC,IAAI,CAAC1C,MAAM,EAAE5D,IAAI,CAACqG,MAAM,CAAC,CAAA;AAC5D,WAAC,CAAC,CAAA;UACF,OAAOhG,OAAO,CAACoH,GAAG,CAAC+E,MAAM,CAAC,CAAC3I,IAAI,CAAE4I,OAAO,IAAK;YAC3C,MAAMC,QAAQ,GAAG,EAAE,CAAA;AACnB;YACA,MAAMC,WAAW,GAAGF,OAAO,CAAA;AAC3BE,YAAAA,WAAW,CAAC3F,OAAO,CAAC,CAACzB,KAAK,EAAE4C,KAAK,KAAK;AACpC,cAAA,MAAMyE,SAAS,GAAGrB,YAAY,EAAE,CAAA;cAChC1G,UAAU,CAACQ,KAAK,CAAC8C,KAAK,CAAC,CAAC9B,MAAM,GAAGuG,SAAS,CAAA;cAC1C/H,UAAU,CAACQ,KAAK,CAAC8C,KAAK,CAAC,CAACjC,UAAU,GAAGoG,aAAa,CAAA;cAClDzH,UAAU,CAACQ,KAAK,CAAC8C,KAAK,CAAC,CAAC0E,UAAU,GAAGC,SAAS,CAAA;AAC9CvH,cAAAA,KAAK,CAACyB,OAAO,CAAExB,IAAI,IAAK;AACtBA,gBAAAA,IAAI,CAAC0D,MAAM,GAAGqC,YAAY,EAAE,CAAA;gBAC5B/F,IAAI,CAACa,MAAM,GAAGuG,SAAS,CAAA;gBACvBpH,IAAI,CAACqH,UAAU,GAAGC,SAAS,CAAA;AAC3BJ,gBAAAA,QAAQ,CAAClB,IAAI,CAAChG,IAAI,CAAC,CAAA;AACrB,eAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;YACFX,UAAU,CAACU,KAAK,GAAGmH,QAAQ,CAAA;AAC7B,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CACD7I,IAAI,CAAC,MAAM;AACVgB,UAAAA,UAAU,CAACM,SAAS,GAAG,CAAC6C,QAAQ,CAAC,CAAA;AACnC,SAAC,CAAC,CACDnE,IAAI,CAAC,MAAM;UACVgB,UAAU,CAACY,MAAM,GAAG,EAAE,CAAA;AACtB,UAAA,MAAMX,MAAM,GAAG4E,QAAQ,CAAC3E,SAAS,CAAC,IAAI,CAACnB,MAAM,EAAE,IAAI,CAACgB,WAAW,EAAEC,UAAU,CAAC,CAAA;AAC5E,UAAA,OAAO6E,QAAQ,CAAC1E,cAAc,CAACF,MAAM,CAAC,CAAA;AACxC,SAAC,CAAC,CACDjB,IAAI,CAAC,MAAM;UACV,OAAO6F,QAAQ,CAACtB,eAAe,CAAC,IAAI,CAACxE,MAAM,EAAE0I,aAAa,CAAC,CAAA;AAC7D,SAAC,CAAC,CAAA;AACN,OAAC,MAAM;AACL5G,QAAAA,CAAC,GAAGgE,QAAQ,CAAChK,cAAc,CAACsI,QAAQ,CAAC,CAAA;AACvC,OAAA;AACF,KAAC,MAAM;AACLtC,MAAAA,CAAC,GAAGgE,QAAQ,CAAChK,cAAc,CAACsI,QAAQ,CAAC,CAAA;AACvC,KAAA;AAEA,IAAA,IAAIA,QAAQ,CAAC+E,QAAQ,KAAK,GAAG,EAAE;AAC7B,MAAA,OAAOrH,CAAC,CAAC7B,IAAI,CAAC,MAAM;AAClB,QAAA,OAAO6F,QAAQ,CACZ1D,oBAAoB,CAAC,IAAI,CAACpC,MAAM,CAAC,CACjCC,IAAI,CAAEsB,SAAS,IAAK;AACnB,UAAA,OAAOA,SAAS,CAAC0D,MAAM,CAAEzD,CAAC,IAAK;AAC7B,YAAA,OAAOA,CAAC,CAACc,UAAU,KAAK8B,QAAQ,CAAC9B,UAAU,CAAA;AAC7C,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CACDrC,IAAI,CAAEmJ,IAAI,IAAK;AACdA,UAAAA,IAAI,CAAChG,OAAO,CAAE5B,CAAC,IAAK;YAClBA,CAAC,CAAC2H,QAAQ,GAAG,GAAG,CAAA;AAClB,WAAC,CAAC,CAAA;AACF,UAAA,MAAME,MAAM,GAAGD,IAAI,CAAChK,GAAG,CAAEoC,CAAC,IAAK;AAC7B,YAAA,OAAOsE,QAAQ,CAAChK,cAAc,CAAC0F,CAAC,CAAC,CAAA;AACnC,WAAC,CAAC,CAAA;AACF,UAAA,OAAO/E,OAAO,CAACoH,GAAG,CAACwF,MAAM,CAAC,CAAA;AAC5B,SAAC,CAAC,CACDpJ,IAAI,CAAC,MAAM;UACV,OAAO6F,QAAQ,CAAC3B,qBAAqB,CAAC,IAAI,CAACnE,MAAM,EAAEoE,QAAQ,CAAC9B,UAAU,CAAC,CAAA;AACzE,SAAC,CAAC,CAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM;AACL,MAAA,OAAOR,CAAC,CAAA;AACV,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE7F,cAAcA,CAACF,IAAI,EAAE;AACnB,IAAA,OAAO+J,QAAQ,CACZvD,oBAAoB,CAAC,IAAI,CAACvC,MAAM,EAAEjE,IAAI,CAACuG,UAAU,CAAC,CAClDrC,IAAI,CAAEwB,KAAK,IAAK;MACf,MAAM6H,UAAU,GAAG7H,KAAK,CAACrC,GAAG,CAAEhD,IAAI,IAAKA,IAAI,CAACqG,MAAM,CAAC,CAAA;AAEnD,MAAA,IAAImG,MAAM,GAAGU,UAAU,CAAClK,GAAG,CAAEqD,MAAM,IAAK;QACtC,OAAOqD,QAAQ,CAACpD,gBAAgB,CAAC,IAAI,CAAC1C,MAAM,EAAEyC,MAAM,CAAC,CAAA;AACvD,OAAC,CAAC,CAAA;MAEF,OAAOhG,OAAO,CAACoH,GAAG,CAAC+E,MAAM,CAAC,CACvB3I,IAAI,CAAE4I,OAAO,IAAK;QACjB,MAAMU,UAAU,GAAGV,OAAO,CACvBW,MAAM,CAAC,CAACC,aAAa,EAAEC,YAAY,KAAK;AACvC,UAAA,OAAOD,aAAa,CAACE,MAAM,CAACD,YAAY,CAAC,CAAA;SAC1C,EAAE,EAAE,CAAC,CACLtK,GAAG,CAAEwC,IAAI,IAAKA,IAAI,CAAC0D,MAAM,CAAC,CAAA;QAC7B,OAAOQ,QAAQ,CAACP,eAAe,CAAC,IAAI,CAACvF,MAAM,EAAEuJ,UAAU,CAAC,CAAA;AAC1D,OAAC,CAAC,CACDtJ,IAAI,CAAC,MAAM;AACV,QAAA,OAAOxD,OAAO,CAACC,OAAO,CAAC4M,UAAU,CAAC,CAAA;AACpC,OAAC,CAAC,CAAA;AACN,KAAC,CAAC,CACDrJ,IAAI,CAAEqJ,UAAU,IAAK;MACpB,OAAOxD,QAAQ,CAACZ,mBAAmB,CAAC,IAAI,CAAClF,MAAM,EAAEsJ,UAAU,CAAC,CAAA;AAC9D,KAAC,CAAC,CACDrJ,IAAI,CAAC,MAAM;MACV,OAAO6F,QAAQ,CAAC7J,cAAc,CAAC,IAAI,CAAC+D,MAAM,EAAEjE,IAAI,CAACuG,UAAU,CAAC,CAAA;AAC9D,KAAC,CAAC,CACDrC,IAAI,CAAC,MAAM;AACV,MAAA,OAAOxD,OAAO,CAACC,OAAO,CAACX,IAAI,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;AACN,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,UAAUA,CAACE,IAAI,EAAE;AACf,IAAA,IAAI,CAACA,IAAI,CAACqG,MAAM,EAAE;AAChBrG,MAAAA,IAAI,CAACqG,MAAM,GAAGkF,YAAY,EAAE,CAAA;AAC9B,KAAA;AACA,IAAA,IAAI,CAACvL,IAAI,CAACuF,KAAK,EAAE;MACfvF,IAAI,CAACuF,KAAK,GAAG,EAAE,CAAA;AACjB,KAAA;IACA,OAAOmE,QAAQ,CAAC5J,UAAU,CAAC,IAAI,CAAC8D,MAAM,EAAE5D,IAAI,CAAC,CAAA;AAC/C,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACED,OAAOA,CAACC,IAAI,EAAE;IACZ,MAAM;MAAEuF,KAAK;AAAEc,MAAAA,MAAAA;AAAO,KAAC,GAAGrG,IAAI,CAAA;IAC9B,MAAMmN,UAAU,GAAG5H,KAAK,CAACvC,GAAG,CAAEwC,IAAI,IAAKA,IAAI,CAAC0D,MAAM,CAAC,CAAA;AACnD,IAAA,OAAOQ,QAAQ,CACZP,eAAe,CAAC,IAAI,CAACvF,MAAM,EAAEuJ,UAAU,CAAC,CACxCtJ,IAAI,CAAC,MAAM;MACV,OAAO6F,QAAQ,CAACZ,mBAAmB,CAAC,IAAI,CAAClF,MAAM,EAAE,CAACyC,MAAM,CAAC,CAAC,CAAA;AAC5D,KAAC,CAAC,CACDxC,IAAI,CAAC,MAAM;AACV,MAAA,OAAOxD,OAAO,CAACC,OAAO,CAACN,IAAI,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;AACN,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,UAAUA,CAACsF,IAAI,EAAE;AACf,IAAA,IAAI,CAACA,IAAI,CAAC0D,MAAM,EAAE;AAChB1D,MAAAA,IAAI,CAAC0D,MAAM,GAAGqC,YAAY,EAAE,CAAA;AAC9B,KAAA;AACA,IAAA,IAAI,CAAC/F,IAAI,CAACa,MAAM,EAAE;MAChB,OAAOhG,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAC7D,KAAA;IACA,OAAOuH,QAAQ,CAACxJ,UAAU,CAAC,IAAI,CAAC0D,MAAM,EAAE4B,IAAI,CAAC,CAAA;AAC/C,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACErF,OAAOA,CAACqF,IAAI,EAAE;AACZ,IAAA,IAAI,CAACA,IAAI,CAACa,MAAM,EAAE;MAChB,OAAOhG,OAAO,CAACc,MAAM,CAAC,IAAIgB,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAC7D,KAAA;AACA,IAAA,OAAOuH,QAAQ,CAACP,eAAe,CAAC,IAAI,CAACvF,MAAM,EAAE,CAAC4B,IAAI,CAAC0D,MAAM,CAAC,CAAC,CAAA;AAC7D,GAAA;;AAEA;AACF;AACA;AACA;AACE9I,EAAAA,cAAcA,GAAG;AACf,IAAA,OAAOsJ,QAAQ,CAAC/E,oBAAoB,CAAC,IAAI,CAACf,MAAM,EAAE,IAAI,CAACgB,WAAW,EAAE,IAAI,CAACC,UAAU,CAAC,CAAA;AACtF,GAAA;;AAEA;AACA2I,EAAAA,OAAOA,GAAG;AACR,IAAA,OAAO,eAAe,CAAA;AACxB,GAAA;AACF;;ACxQO,MAAMC,eAAe,CAAC;EAC3B,OAAOC,cAAcA,CAAClO,QAAQ,EAAE;AAC9B;AACA,IAAA,IAAIA,QAAQ,CAACuL,IAAI,KAAK,OAAO,EAAE;AAC7B,MAAA,IAAI4C,MAAM,CAAA;AACV,MAAA,IAAIzC,eAAe,CAAC1L,QAAQ,CAACqF,UAAU,CAAC,EAAE;AACxC8I,QAAAA,MAAM,GAAG;UAAE,GAAGnO,QAAAA;SAAU,CAAA;OACzB,MAAM,IAAI2L,eAAe,CAAC3L,QAAQ,CAACqF,UAAU,CAAC,EAAE;QAC/C,MAAM+I,UAAU,GAAGxC,aAAa,CAAC5L,QAAQ,CAACqF,UAAU,CAACM,SAAS,CAAC,CAAA;AAC/DwI,QAAAA,MAAM,GAAG;AAAE,UAAA,GAAGnO,QAAQ;AAAEqF,UAAAA,UAAU,EAAE;AAAE,YAAA,GAAG+I,UAAU;AAAEnI,YAAAA,MAAM,EAAEjG,QAAQ,CAACqF,UAAU,CAACY,MAAAA;AAAO,WAAA;SAAG,CAAA;AAC7F,OAAC,MAAM;AACL,QAAA,MAAM,IAAItD,KAAK,CAAC,YAAY,CAAC,CAAA;AAC/B,OAAA;MACA,MAAM;QAAEyB,MAAM;QAAEgB,WAAW;AAAEC,QAAAA,UAAAA;AAAW,OAAC,GAAG8I,MAAM,CAAA;MAClD,OAAO,IAAIzB,oBAAoB,CAACtI,MAAM,EAAEgB,WAAW,EAAEC,UAAU,EAAE,KAAK,CAAC,CAAA;AACzE,KAAC,MAAM;AACL,MAAA,OAAO,IAAIvF,cAAc,CAACE,QAAQ,CAAC,CAAA;AACrC,KAAA;AACF,GAAA;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBA,eAAA;AACA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,CAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,KAAA;AACA,IAAA,WAAA,EAAA;AACA,MAAA,IAAA,EAAA,OAAA;AACA,KAAA;AACA,IAAA,YAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,KAAA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,QAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,IAAA,CAAA,eAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACA,QAAA,YAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,MAAA,EAAA,KAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,QAAA,GAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,CAAA,KAAA,KAAA;AACA,QAAA,IAAA,CAAA,KAAA,EAAA;AACA,UAAA,OAAA;AACA,SAAA;AACA,QAAA,IAAA,OAAA,IAAA,CAAA,cAAA,KAAA,UAAA,EAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,CAAA,CAAA;AACA,UAAA,OAAA;AACA,SAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;AACA,QAAA,MAAA,OAAA,GAAA,EAAA,GAAA,IAAA,CAAA,QAAA,EAAA,CAAA;AACA,QAAA,IAAA,CAAA,OAAA,CAAA,MAAA,EAAA;AACA,UAAA,OAAA,CAAA,MAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACA,SAAA;AACA,QAAA,MAAA,MAAA,GAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA;AACA,QAAA,IAAA,MAAA,YAAA,OAAA,EAAA;AACA,UAAA,MAAA;AACA,aAAA,IAAA,CAAA,CAAA,GAAA,KAAA;AACA,cAAA,IAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA;AACA,aAAA,CAAA;AACA,aAAA,IAAA,CAAA,MAAA;AACA,cAAA,IAAA,CAAA,QAAA,CAAA;AACA,gBAAA,IAAA,EAAA,SAAA;AACA,gBAAA,OAAA,EAAA,MAAA;AACA,eAAA,CAAA,CAAA;AACA,aAAA,CAAA;AACA,aAAA,OAAA,CAAA,MAAA;AACA,cAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,QAAA,EAAA;AACA,IAAA,YAAA,GAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,YAAA,EAAA;AACA,QAAA,OAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,EAAA,CAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,OAAA;AACA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,EAAA;AACA,UAAA,GAAA,IAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,IAAA,KAAA;AACA,YAAA,OAAA;AACA,cAAA,IAAA,EAAA,IAAA,CAAA,YAAA;AACA,cAAA,KAAA,EAAA,IAAA,CAAA,UAAA;AACA,aAAA,CAAA;AACA,WAAA,CAAA;AACA,SAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,eAAA,EAAA;AACA,MAAA,IAAA,EAAA,IAAA;AACA,MAAA,OAAA,EAAA,UAAA,IAAA,EAAA;AACA,QAAA,IAAA,CAAA,QAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,CAAA;;;;;;AA/HA,MAAcJ,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACad,eAAA;AACA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,CAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,KAAA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA;AACA,IAAA,WAAA,EAAA;AACA,MAAA,IAAA,EAAA,OAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,QAAA,EAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACA,QAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,MAAA,EAAA,KAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,QAAA,GAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,CAAA,KAAA,KAAA;AACA,QAAA,IAAA,CAAA,KAAA,EAAA;AACA,UAAA,OAAA;AACA,SAAA;AACA,QAAA,IAAA,OAAA,IAAA,CAAA,UAAA,KAAA,UAAA,EAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,CAAA,CAAA;AACA,UAAA,OAAA;AACA,SAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;AACA,QAAA,MAAA,OAAA,GAAA,EAAA,GAAA,IAAA,CAAA,QAAA,EAAA,CAAA;AACA,QAAA,IAAA,CAAA,OAAA,CAAA,MAAA,EAAA;AACA,UAAA,OAAA,CAAA,MAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACA,SAAA;AACA,QAAA,MAAA,MAAA,GAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA;AACA,QAAA,IAAA,MAAA,YAAA,OAAA,EAAA;AACA,UAAA,MAAA;AACA,aAAA,IAAA,CAAA,CAAA,GAAA,KAAA;AACA,cAAA,IAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA;AACA,aAAA,CAAA;AACA,aAAA,IAAA,CAAA,MAAA;AACA,cAAA,IAAA,CAAA,QAAA,CAAA;AACA,gBAAA,IAAA,EAAA,SAAA;AACA,gBAAA,OAAA,EAAA,MAAA;AACA,eAAA,CAAA,CAAA;AACA,aAAA,CAAA;AACA,aAAA,OAAA,CAAA,MAAA;AACA,cAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,QAAA,EAAA,EAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,MAAA,IAAA,EAAA,IAAA;AACA,MAAA,OAAA,EAAA,UAAA,IAAA,EAAA;AACA,QAAA,IAAA,CAAA,QAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,CAAA;;;;;;AApFA,MAAcD,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACyCd,eAAA;AACA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,CAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,KAAA;AACA,IAAA,WAAA,EAAA;AACA,MAAA,IAAA,EAAA,OAAA;AACA,KAAA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,OAAA,GAAA,EAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,MAAA,eAAA,GAAA,CAAA,IAAA,EAAA,KAAA,EAAA,QAAA,KAAA;AACA,MAAA,IAAA,KAAA,CAAA,KAAA,CAAA,EAAA;AACA,QAAA,QAAA,CAAA,IAAA,KAAA,CAAA,QAAA,CAAA,CAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,QAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA,CAAA;AACA,IAAA,OAAA;AACA,MAAA,QAAA,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA,QAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACA,QAAA;AACA,UAAA,IAAA,EAAA,IAAA;AACA,UAAA,KAAA,EAAA,OAAA;AACA,SAAA;AACA,QAAA;AACA,UAAA,IAAA,EAAA,IAAA;AACA,UAAA,KAAA,EAAA,QAAA;AACA,SAAA;AACA,QAAA;AACA,UAAA,IAAA,EAAA,IAAA;AACA,UAAA,KAAA,EAAA,QAAA;AACA,SAAA;AACA,QAAA;AACA,UAAA,IAAA,EAAA,IAAA;AACA,UAAA,KAAA,EAAA,MAAA;AACA,SAAA;AACA,OAAA;AACA,MAAA,oBAAA,EAAA;AACA,QAAA,CAAA,EAAA,GAAA;AACA,QAAA,CAAA,EAAA,GAAA;AACA,QAAA,CAAA,EAAA,GAAA;AACA,QAAA,CAAA,EAAA,GAAA;AACA,OAAA;AACA,MAAA,KAAA,EAAA;AACA,QAAA,GAAA,EAAA;AACA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,SAAA;AACA,QAAA,QAAA,EAAA;AACA,UAAA;AACA,YAAA,QAAA,EAAA,IAAA;AACA,YAAA,OAAA,EAAA,eAAA;AACA,YAAA,OAAA,EAAA,MAAA;AACA,WAAA;AACA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA;AACA,SAAA;AACA,QAAA,GAAA,EAAA;AACA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,SAAA;AACA,QAAA,QAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,QAAA,SAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,QAAA,QAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,QAAA,OAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,QAAA,GAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA;AACA,SAAA,QAAA,EAAA;AACA,SAAA,IAAA,CAAA,MAAA;AACA,UAAA,IAAA,IAAA,CAAA,UAAA,YAAA,QAAA,EAAA;AACA;AACA,YAAA,MAAA,SAAA,GAAA,IAAA,CAAA,YAAA,EAAA,CAAA;AACA,YAAA,MAAA,WAAA,GAAA,IAAA,CAAA,QAAA,CAAA,WAAA,CAAA;AACA,YAAA,IAAA,SAAA,IAAA,WAAA,IAAA,WAAA,CAAA,SAAA,CAAA,EAAA;AACA,cAAA,MAAA,KAAA,GAAA,WAAA,CAAA,SAAA,CAAA,CAAA;AACA,cAAA,KAAA,CAAA,SAAA,GAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA;AACA,aAAA;AACA,YAAA,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA;AACA,YAAA,MAAA,MAAA,GAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AACA,YAAA,IAAA,MAAA,YAAA,OAAA,EAAA;AACA,cAAA,MAAA;AACA,iBAAA,IAAA,CAAA,CAAA,GAAA,KAAA;AACA,kBAAA,IAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA;AACA,iBAAA,CAAA;AACA,iBAAA,IAAA,CAAA,MAAA;AACA,kBAAA,IAAA,CAAA,QAAA,CAAA;AACA,oBAAA,IAAA,EAAA,SAAA;AACA,oBAAA,OAAA,EAAA,MAAA;AACA,mBAAA,CAAA,CAAA;AACA,iBAAA,CAAA;AACA,iBAAA,OAAA,CAAA,MAAA;AACA,kBAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,iBAAA,CAAA,CAAA;AACA,aAAA,MAAA;AACA,cAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA;AACA,aAAA;AACA,WAAA,MAAA;AACA,YAAA,OAAA,OAAA,CAAA,MAAA,CAAA,IAAA,KAAA,CAAA,WAAA,CAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA;AACA,SAAA,KAAA,CAAA,CAAA,CAAA,KAAA;AACA,UAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,QAAA,EAAA;AACA,MAAA,SAAA,EAAA,KAAA;AACA,MAAA,IAAA,EAAA,IAAA;AACA,MAAA,OAAA,CAAA,IAAA,EAAA;AACA;AACA,QAAA,MAAA,SAAA,GAAA,IAAA,CAAA,YAAA,EAAA,CAAA;AACA,QAAA,MAAA,WAAA,GAAA,IAAA,CAAA,WAAA,CAAA;AACA,QAAA,IAAA,cAAA,CAAA;AACA,QAAA,IAAA,SAAA,IAAA,WAAA,IAAA,WAAA,CAAA,SAAA,CAAA,EAAA;AACA,UAAA,MAAA,KAAA,GAAA,WAAA,CAAA,SAAA,CAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA;AACA,UAAA,IAAA,SAAA,EAAA;AACA,YAAA,cAAA,GAAA,SAAA,CAAA;AACA,WAAA;AACA,SAAA;AACA,QAAA,IAAA,cAAA,EAAA;AACA,UAAA,IAAA,CAAA,QAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,IAAA,CAAA,QAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,CAAA;;;;;;AArLA,MAAcD,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC2Ed,eAAA;AACA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,SAAA,CAAA;AACA,EAAA,OAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,aAAA,EAAA,IAAA,CAAA,aAAA;AACA,MAAA,WAAA,EAAA,IAAA,CAAA,WAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,UAAA,EAAA,YAAAwO,mBAAA,gBAAAC,mBAAA,YAAAC,mBAAA,wBAAAC,mBAAA,EAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,MAAA,SAAA;AACA,KAAA;AACA,IAAA,QAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,KAAA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA;AACA,IAAA,aAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,MAAA,OAAA,EAAA,MAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,MAAA,OAAA,EAAA,MAAA,EAAA;AACA,KAAA;AACA,IAAA,aAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,MAAA,EAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,mBAAA,EAAA,KAAA;AACA,MAAA,eAAA,EAAA,KAAA;AACA,MAAA,eAAA,EAAA,KAAA;AACA,MAAA,eAAA,EAAA,KAAA;AACA,MAAA,YAAA,EAAA,EAAA;AACA,MAAA,QAAA,EAAA,EAAA;AACA,MAAA,QAAA,EAAA,EAAA;AACA,MAAA,QAAA,EAAA,EAAA;AACA,MAAA,kBAAA,EAAA,KAAA;AACA,MAAA,YAAA,EAAA,EAAA;AACA,MAAA,cAAA,EAAA,EAAA;AACA,MAAA,UAAA,EAAA,SAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,GAAA,EAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,gBAAA,CAAA,IAAA,EAAA;AACA,MAAA,IAAA,CAAA,IAAA,EAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,MAAA,UAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AACA,MAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,OAAA,IAAA,CAAA,OAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA,UAAA,CAAA,SAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,UAAA,EAAA;AACA,MAAA,IAAA,CAAA,UAAA,GAAA,UAAA,CAAA;AACA,MAAA,IAAA,CAAA,WAAA,EAAA,CAAA;AACA,MAAA,MAAA,QAAA,GAAA,gBAAA,CAAA,UAAA,CAAA,CAAA;AACA,MAAA,QAAA,QAAA;AACA,QAAA,KAAA,UAAA;AACA;AACA,UAAA,IAAA,CAAA,mBAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,YAAA,GAAA,UAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,MAAA;AACA,UAAA,IAAA,CAAA,mBAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,QAAA,GAAA,UAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,MAAA;AACA;AACA,UAAA,IAAA,CAAA,mBAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,CAAA,QAAA,GAAA,UAAA,CAAA;AACA,UAAA,MAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,WAAA,GAAA;AACA,MAAA,MAAA,GAAA,GAAA,IAAA,CAAA,UAAA,CAAA;AACA,MAAA,IAAA,GAAA,EAAA;AACA,QAAA,MAAA,IAAA,GAAA,gBAAA,CAAA,GAAA,CAAA,CAAA;AACA,QAAA,QAAA,IAAA;AACA,UAAA,KAAA,UAAA;AACA,YAAA,IAAA,CAAA,YAAA,GAAA,CAAA,GAAA,CAAA,UAAA,CAAA,CAAA;AACA,YAAA,IAAA,CAAA,cAAA,GAAA,GAAA,CAAA,UAAA,CAAA;AACA,YAAA,MAAA;AACA,UAAA,KAAA,MAAA;AACA,YAAA,IAAA,CAAA,YAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA;AACA,YAAA,IAAA,CAAA,cAAA,GAAA,GAAA,CAAA,MAAA,CAAA;AACA,YAAA,MAAA;AACA,UAAA,KAAA,MAAA;AACA,YAAA,IAAA,CAAA,YAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA;AACA,YAAA,IAAA,CAAA,cAAA,GAAA,GAAA,CAAA,MAAA,CAAA;AACA,YAAA,MAAA;AACA,UAAA;AACA,YAAA,IAAA,CAAA,YAAA,GAAA,EAAA,CAAA;AACA,YAAA,IAAA,CAAA,cAAA,GAAA,EAAA,CAAA;AACA,YAAA,MAAA;AACA,SAAA;AACA,OAAA,MAAA;AACA,QAAA,IAAA,CAAA,YAAA,GAAA,EAAA,CAAA;AACA,QAAA,IAAA,CAAA,cAAA,GAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,IAAA,IAAA,CAAA,KAAA,CAAA,OAAA,EAAA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,aAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CAAA;AACA,OAAA;AACA;AACA,MAAA,IAAA,CAAA,OAAA,GAAA,CAAA,OAAA,EAAA,IAAA,IAAA,EAAA,CAAA,OAAA,EAAA,CAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,EAAA,MAAA,GAAA,EAAA,EAAA,IAAA,EAAA,GAAA,KAAA,CAAA;AACA,MAAA,QAAA,MAAA,CAAA,GAAA;AACA,QAAA,KAAA,aAAA;AACA,UAAA,IAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,SAAA;AACA,UAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,SAAA;AACA,UAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,UAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,MAAA;AACA,QAAA,KAAA,UAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,MAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,eAAA,GAAA;AACA,MAAA,MAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,oBAAA,CAAA;AACA,MAAA,IAAA,MAAA,EAAA;AACA,QAAA,MAAA,CAAA,eAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA;AACA,IAAA,gBAAA,CAAA,KAAA,EAAA,IAAA,EAAA,IAAA,EAAA;AACA,MAAA,MAAA,QAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,MAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,UAAA,IAAA,aAAA,EAAA;AACA,QAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA;AACA,QAAA,OAAA;AACA,OAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,KAAA,EAAA,IAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,KAAA,GAAA;AACA;AACA,MAAA,IAAA,CAAA,YAAA,GAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,CAAA,mBAAA,GAAA,KAAA,CAAA;AACA,KAAA;AACA,IAAA,QAAA,GAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,KAAA;AACA,IAAA,eAAA,CAAA,IAAA,EAAA;AACA,MAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA;AACA,MAAA,MAAA,EAAA,KAAA,EAAA,IAAA,GAAA,EAAA,EAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,KAAA,IAAA,CAAA,IAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,OAAA,UAAA,CAAA;AACA,OAAA,MAAA,IAAA,KAAA,IAAA,CAAA,IAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,OAAA,MAAA,CAAA;AACA,OAAA,MAAA,IAAA,KAAA,IAAA,CAAA,IAAA,IAAA,CAAA,MAAA,EAAA;AACA,QAAA,OAAA,MAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA,IAAA,CAAA;AACA,KAAA;AACA,IAAA,WAAA,GAAA;AACA;AACA,MAAA,IAAA,CAAA,mBAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,YAAA,GAAA,EAAA,QAAA,EAAA,GAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,GAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,OAAA,CAAA,QAAA,EAAA;AACA;AACA,MAAA,IAAA,CAAA,mBAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,QAAA,GAAA,EAAA,UAAA,EAAA,QAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA,QAAA,CAAA,KAAA,CAAA,MAAA,GAAA,CAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,QAAA,CAAA,QAAA,EAAA;AACA;AACA,MAAA,IAAA,CAAA,mBAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,CAAA,eAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,QAAA,GAAA,EAAA,MAAA,EAAA,QAAA,CAAA,MAAA,EAAA,MAAA,EAAA,GAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA;AACA,KAAA;;AAEA,IAAA,iBAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,kBAAA,EAAA,IAAA,EAAA;AACA,QAAA,iBAAA,EAAA,IAAA;AACA,QAAA,gBAAA,EAAA,IAAA;AACA,QAAA,IAAA,EAAA,SAAA;AACA,OAAA,CAAA;AACA,SAAA,IAAA,CAAA,MAAA;AACA,UAAA,QAAA,CAAA,MAAA,GAAA,GAAA,CAAA;AACA,UAAA,IAAA,CAAA,kBAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,IAAA,CAAA,WAAA,YAAA,QAAA,EAAA;AACA,YAAA,OAAA,IAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,OAAA,OAAA,CAAA,MAAA,CAAA,IAAA,KAAA,CAAA,WAAA,CAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA;AACA,SAAA,KAAA,CAAA,CAAA,CAAA,KAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,OAAA,IAAA,MAAA,CAAA,CAAA;AACA,SAAA,CAAA;AACA,SAAA,OAAA,CAAA,MAAA;AACA,UAAA,IAAA,CAAA,kBAAA,GAAA,KAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,kBAAA,EAAA,IAAA,EAAA;AACA,QAAA,iBAAA,EAAA,IAAA;AACA,QAAA,gBAAA,EAAA,IAAA;AACA,QAAA,IAAA,EAAA,SAAA;AACA,OAAA,CAAA;AACA,SAAA,IAAA,CAAA,MAAA;AACA,UAAA,QAAA,CAAA,MAAA,GAAA,GAAA,CAAA;AACA,UAAA,IAAA,CAAA,kBAAA,GAAA,IAAA,CAAA;AACA,UAAA,IAAA,IAAA,CAAA,OAAA,YAAA,QAAA,EAAA;AACA,YAAA,OAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,OAAA,OAAA,CAAA,MAAA,CAAA,IAAA,KAAA,CAAA,WAAA,CAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA;AACA,SAAA,KAAA,CAAA,MAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AACA,SAAA,CAAA;AACA,SAAA,OAAA,CAAA,MAAA;AACA,UAAA,IAAA,CAAA,kBAAA,GAAA,KAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,QAAA,CAAA,QAAA,EAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,kBAAA,EAAA,IAAA,EAAA;AACA,QAAA,iBAAA,EAAA,IAAA;AACA,QAAA,gBAAA,EAAA,IAAA;AACA,QAAA,IAAA,EAAA,SAAA;AACA,OAAA,CAAA;AACA,SAAA,IAAA,CAAA,MAAA;AACA,UAAA,QAAA,CAAA,MAAA,GAAA,GAAA,CAAA;AACA,UAAA,IAAA,IAAA,CAAA,OAAA,YAAA,QAAA,EAAA;AACA,YAAA,OAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,OAAA,OAAA,CAAA,MAAA,CAAA,IAAA,KAAA,CAAA,WAAA,CAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA;AACA,SAAA,KAAA,CAAA,CAAA,CAAA,KAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,OAAA,IAAA,MAAA,CAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,QAAA,EAAA;AACA,IAAA,kBAAA,GAAA;AACA,MAAA,QAAA,IAAA,CAAA,QAAA;AACA,QAAA,KAAA,UAAA;AACA,UAAA,OAAA;AACA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,SAAA,EAAA;AACA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,aAAA,EAAA;AACA,WAAA,CAAA;AACA,QAAA,KAAA,MAAA;AACA,UAAA,OAAA;AACA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,UAAA,EAAA;AACA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,SAAA,EAAA;AACA,WAAA,CAAA;AACA,QAAA,KAAA,MAAA;AACA,UAAA,OAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;AAEA,QAAA;AACA,UAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,QAAA,GAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,aAAA,EAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA;AACA,QAAA,MAAA,QAAA,GAAA,EAAA,CAAA;AACA,QAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,QAAA,KAAA;AACA,UAAA,MAAA,KAAA,GAAA,EAAA,GAAA,QAAA,EAAA,EAAA,EAAA,QAAA,CAAA,UAAA,EAAA,KAAA,EAAA,QAAA,CAAA,YAAA,EAAA,CAAA;AACA,UAAA,KAAA,CAAA,QAAA,GAAA,EAAA,CAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,KAAA,EAAA;AACA,YAAA,QAAA,CAAA,KAAA,GAAA,EAAA,CAAA;AACA,WAAA;;AAEA,UAAA,QAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,IAAA,EAAA,KAAA,KAAA;AACA,YAAA,MAAA,QAAA,GAAA,EAAA,GAAA,IAAA,EAAA,EAAA,EAAA,IAAA,CAAA,MAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,KAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA;AACA,YAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AACA,YAAA,IAAA,CAAA,QAAA,CAAA,KAAA,EAAA;AACA,cAAA,QAAA,CAAA,KAAA,GAAA,EAAA,CAAA;AACA,aAAA;AACA,YAAA,QAAA,CAAA,QAAA,GAAA,EAAA,CAAA;AACA,YAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,IAAA,KAAA;AACA,cAAA,MAAA,QAAA,GAAA,EAAA,GAAA,IAAA,EAAA,EAAA,EAAA,IAAA,CAAA,MAAA,EAAA,KAAA,EAAA,IAAA,CAAA,QAAA,IAAA,IAAA,CAAA,OAAA,EAAA,CAAA;AACA,cAAA,QAAA,CAAA,KAAA,GAAA,IAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,CAAA;AACA,cAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,WAAA,CAAA,CAAA;AACA,UAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,OAAA,QAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,YAAA,GAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,QAAA,EAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,OAAA,CAAA,GAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,KAAA,EAAA;AACA;AACA,IAAA,WAAA,EAAA;AACA,MAAA,SAAA,EAAA,IAAA;AACA,MAAA,IAAA,EAAA,IAAA;AACA,MAAA,OAAA,CAAA,GAAA,EAAA;AACA,QAAA,IAAA,CAAA,aAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,GAAA,CAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,aAAA,GAAA,EAAA;AACA,CAAA;;;;;;AAraA,MAAc5O,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFP,MAAM4O,WAAW,GAAG;AACzBC,EAAAA,WAAW,EAAE,YAAY;AACzBC,EAAAA,WAAW,EAAE,SAAA;AACf,CAAC;;;;;;;;;;;;;ACQD,eAAA;AACA,EAAA,KAAA,EAAA;AACA,IAAA,UAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA;AACA,IAAA,IAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,MAAA,EAAA;AACA,KAAA;AACA,IAAA,aAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,MAAA,EAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,KAAA;AACA,IAAA,SAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,SAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,OAAA,EAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA;AACA,MAAA,IAAA,CAAA,IAAA,EAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,MAAA,UAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AACA,MAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA,CAAA,EAAA,UAAA,CAAA,SAAA,CAAA,EAAA,UAAA,CAAA,SAAA,CAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,YAAA,GAAA;AACA,MAAA,MAAA,IAAA,GAAA,EAAA,GAAA,IAAA,CAAA,IAAA,EAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,MAAA,IAAA,GAAA,IAAA,IAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,GAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,IAAA,CAAA,MAAA,GAAA,GAAA,CAAA;AACA,OAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,YAAA,EAAA,IAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,QAAA,EAAA;AACA,IAAA,eAAA,GAAA;AACA,MAAA,IAAA,SAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,EAAA;AACA,QAAA,SAAA,GAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,SAAA,CAAA;AACA,OAAA;AACA,MAAA,IAAA,MAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,MAAA,GAAA,EAAA,UAAA,EAAA,CAAA,EAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,MAAA,GAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA,MAAA,CAAA;AACA,KAAA;AACA,IAAA,SAAA,GAAA;AACA,MAAA,IAAA,SAAA,CAAA;AACA;AACA,MAAA,IAAA,IAAA,CAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,EAAA;AACA,QAAA,SAAA,GAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,SAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA;AACA,QAAA,KAAA,EAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,SAAA;AACA,OAAA,CAAA;AACA,KAAA;AACA,IAAA,eAAA,GAAA;AACA,MAAA,IAAA,SAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,EAAA;AACA,QAAA,SAAA,GAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,SAAA,CAAA;AACA,OAAA;;AAEA,MAAA,IAAA,QAAA,CAAA;AACA,MAAA,IAAA,IAAA,CAAA,IAAA,CAAA,QAAA,IAAA,MAAA,EAAA;AACA,QAAA,IAAA,IAAA,CAAA,IAAA,CAAA,UAAA,EAAA;AACA,UAAA,QAAA,GAAA,EAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,QAAA,GAAA,EAAA,YAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA;AACA,SAAA;AACA,OAAA,MAAA;AACA,QAAA,QAAA,GAAA,EAAA,eAAA,EAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,EAAA,SAAA,IAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA;AACA,QAAA,MAAA,EAAA,CAAA,EAAA,IAAA,CAAA,UAAA,CAAA,EAAA,CAAA;AACA,QAAA,OAAA,EAAA,IAAA,CAAA,IAAA,CAAA,MAAA,IAAA,GAAA,GAAA,CAAA,GAAA,GAAA;AACA,QAAA,GAAA,QAAA;AACA,OAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,KAAA,EAAA,EAAA;AACA,CAAA;;;;;;AAlGA,MAAc/O,gBAAA,GAAAC,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgHd,aAAA;AACA,EAAA,IAAA,EAAA,iBAAA;AACA,EAAA,OAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,cAAA,EAAA,IAAA,CAAA,cAAA;AACA,MAAA,WAAA,EAAA,IAAA,CAAA,WAAA;AACA,MAAA,UAAA,EAAA,IAAA,CAAA,UAAA;AACA,MAAA,OAAA,EAAA,IAAA,CAAA,OAAA;AACA,MAAA,UAAA,EAAA,IAAA,CAAA,UAAA;AACA,MAAA,OAAA,EAAA,IAAA,CAAA,OAAA;AACA,MAAA,YAAA,EAAA,MAAA;AACA,QAAA,OAAA,IAAA,CAAA,SAAA,CAAA;AACA,OAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,UAAA,EAAA;AACA,gBAAA+O,mBAAA;AACA,yBAAAC,mBAAA;AACA,0BAAAL,mBAAA;AACA,IAAA,SAAA;AACA,GAAA;AACA,EAAA,KAAA,EAAA;AACA;AACA;AACA;AACA,IAAA,MAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,MAAA,SAAA,EAAA,iBAAA;AACA,KAAA;AACA,IAAA,aAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,gBAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,EAAA;AACA,KAAA;AACA,IAAA,OAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,cAAA,EAAA;AACA,MAAA,IAAA,EAAA,KAAA;AACA,MAAA,OAAA,EAAA,MAAA;AACA,QAAA,OAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,SAAA,EAAA;AACA,MAAA,IAAA,EAAA,MAAA;AACA,MAAA,OAAA,EAAA,SAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,IAAA,GAAA;AACA,IAAA,OAAA;AACA,MAAA,aAAA,EAAA,IAAA;AACA,MAAA,SAAA,EAAA,KAAA;AACA,MAAA,QAAA,EAAA,IAAA;AACA,MAAA,eAAA,EAAA,EAAA;AACA,MAAA,kBAAA,EAAA,KAAA;AACA,MAAA,MAAA,EAAA,EAAA;AACA,MAAA,WAAA,EAAA,SAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,GAAA;AACA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,eAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA;AACA,IAAA,IAAA,CAAA,UAAA,EAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,GAAA,EAAA;;AAEA,EAAA,OAAA,EAAA;AACA,IAAA,gBAAA,GAAA;AACA,MAAA,IAAA,QAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,IAAA,EAAA,KAAA,KAAA;AACA,QAAA,IAAA,CAAA,IAAA,GAAA,KAAA,CAAA;AACA,QAAA,OAAA,IAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,MAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,QAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,iBAAA,CAAA,KAAA,EAAA;AACA,MAAA,IAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,IAAA,KAAA,CAAA,KAAA,CAAA,OAAA,EAAA;AACA;AACA,QAAA,IAAA,IAAA,GAAA,SAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AACA,QAAA,MAAA,YAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,QAAA,YAAA,CAAA,OAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,MAAA,SAAA,GAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,IAAA,CAAA,EAAA;AACA,YAAA,IAAA,CAAA,MAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACA,YAAA,IAAA,CAAA,QAAA,GAAA,KAAA,CAAA,KAAA,CAAA,QAAA,IAAA,CAAA,CAAA;AACA,YAAA,IAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,cAAA,IAAA,QAAA,GAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,KAAA,EAAA,KAAA,KAAA;AACA,gBAAA,KAAA,CAAA,QAAA,GAAA,KAAA,CAAA;AACA,gBAAA,OAAA,IAAA,CAAA,cAAA,CAAA,KAAA,CAAA,CAAA;AACA,eAAA,CAAA,CAAA;AACA,cAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,gBAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,eAAA,CAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA,CAAA;AACA,OAAA,MAAA,IAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,EAAA,SAAA,CAAA,IAAA,KAAA,CAAA,OAAA,CAAA,OAAA,EAAA,CAGA,MAAA,IAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,EAAA,OAAA,CAAA,IAAA,KAAA,CAAA,KAAA,CAAA,OAAA,EAAA;AACA;AACA,QAAA,IAAA,IAAA,GAAA,SAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AACA,QAAA,IAAA,YAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,QAAA,YAAA,CAAA,OAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,IAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,EAAA;AACA,YAAA,IAAA,QAAA,GAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,KAAA,EAAA,KAAA,KAAA;AACA,cAAA,KAAA,CAAA,QAAA,GAAA,KAAA,CAAA;AACA,cAAA,OAAA,IAAA,CAAA,cAAA,CAAA,KAAA,CAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,YAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,cAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,aAAA,CAAA,CAAA;AACA,WAAA;AACA,SAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA;AACA,IAAA,cAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,YAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,QAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA;AACA,UAAA,KAAA,MAAA,QAAA,IAAA,IAAA,CAAA,aAAA,EAAA;AACA,YAAA,MAAA,EAAA,KAAA,EAAA,GAAA,QAAA,CAAA;AACA,YAAA,KAAA,MAAA,IAAA,IAAA,KAAA,EAAA;AACA,cAAA,IAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,EAAA;AACA,gBAAA,MAAA,EAAA,KAAA,EAAA,GAAA,IAAA,CAAA;AACA,gBAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,kBAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,iBAAA,CAAA,CAAA;AACA,gBAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,kBAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,iBAAA,MAAA;AACA,kBAAA,IAAA,CAAA,IAAA,CAAA,KAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,iBAAA;AACA,gBAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,gBAAA,MAAA;AACA,eAAA;AACA,aAAA;AACA,WAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,IAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA;AACA,UAAA,MAAA,YAAA,GAAA,IAAA,CAAA,KAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,YAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,WAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,YAAA,YAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,IAAA,CAAA,IAAA,CAAA,YAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,WAAA;AACA,UAAA,IAAA,CAAA,IAAA,CAAA,YAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AACA,UAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,UAAA,OAAA,SAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA;AACA,IAAA,cAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,KAAA,GAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,QAAA,KAAA;AACA,UAAA,OAAA,QAAA,CAAA,UAAA,IAAA,SAAA,CAAA,UAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,KAAA,GAAA,CAAA,EAAA;AACA,UAAA,OAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,QAAA,GAAA,IAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AACA,UAAA,MAAA,KAAA,GAAA,QAAA,CAAA,KAAA,IAAA,EAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,YAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,IAAA,CAAA,IAAA,CAAA,KAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,WAAA;AACA,UAAA,SAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AACA,SAAA;AACA,QAAA,OAAA,SAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,WAAA,GAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,UAAA,EAAA,OAAA,EAAA,CAAA;AACA,MAAA,MAAA,OAAA,GAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA;AACA,MAAA,IAAA,OAAA,EAAA;AACA,QAAA,OAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,IAAA,CAAA,qBAAA,EAAA,CAAA;AACA,UAAA,OAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,EAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,UAAA,CAAA,qBAAA,EAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,kBAAA,CAAA,IAAA,EAAA,IAAA,EAAA;AACA,MAAA,MAAA,cAAA,GAAA,SAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AACA,MAAA,IAAA,IAAA,KAAA,MAAA,EAAA;AACA,QAAA,OAAA,cAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,OAAA,cAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,WAAA,GAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,WAAA,EAAA,CAAA;AACA,KAAA;AACA,IAAA,OAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,QAAA,MAAA,YAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,QAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA;AACA,UAAA,KAAA,MAAA,QAAA,IAAA,IAAA,CAAA,aAAA,EAAA;AACA,YAAA,MAAA,EAAA,KAAA,EAAA,GAAA,QAAA,CAAA;AACA,YAAA,KAAA,MAAA,IAAA,IAAA,KAAA,EAAA;AACA,cAAA,IAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,EAAA;AACA,gBAAA,MAAA,EAAA,KAAA,EAAA,GAAA,IAAA,CAAA;AACA,gBAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,kBAAA,OAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,CAAA;AACA,iBAAA,CAAA,CAAA;AACA,gBAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,kBAAA,OAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,CAAA;AACA,iBAAA,MAAA;AACA,kBAAA,KAAA,CAAA,MAAA,CAAA,SAAA,EAAA,CAAA,CAAA,CAAA;AACA,iBAAA;AACA,gBAAA,MAAA;AACA,eAAA;AACA,aAAA;AACA,WAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,YAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,YAAA,OAAA,IAAA,CAAA,MAAA,IAAA,IAAA,CAAA,MAAA,CAAA;AACA,WAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,YAAA,OAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,YAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAAA,EAAA,CAAA,CAAA,CAAA;AACA,WAAA;AACA;AACA,UAAA,IAAA,CAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,WAAA,CAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,YAAA,GAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA;AACA,QAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA;AACA,UAAA,KAAA,MAAA,QAAA,IAAA,IAAA,CAAA,aAAA,EAAA;AACA,YAAA,MAAA,EAAA,KAAA,EAAA,GAAA,QAAA,CAAA;AACA,YAAA,KAAA,MAAA,IAAA,IAAA,KAAA,EAAA;AACA,cAAA,IAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,EAAA;AACA,gBAAA,MAAA,EAAA,KAAA,EAAA,GAAA,IAAA,CAAA;AACA,gBAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,kBAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,iBAAA,CAAA,CAAA;AACA,gBAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,kBAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,iBAAA,MAAA;AACA,kBAAA,IAAA,CAAA,IAAA,CAAA,KAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,iBAAA;AACA,gBAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA,gBAAA,MAAA;AACA,eAAA;AACA,aAAA;AACA,WAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,IAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA;AACA,UAAA,MAAA,YAAA,GAAA,IAAA,CAAA,KAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,YAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,YAAA,OAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA;AACA,WAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,YAAA,YAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,IAAA,CAAA,IAAA,CAAA,YAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,WAAA;AACA,UAAA,IAAA,CAAA,IAAA,CAAA,YAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AACA,UAAA,aAAA,CAAA,IAAA,CAAA,CAAA;AACA;AACA,UAAA,IAAA,CAAA,YAAA,CAAA,SAAA,EAAA,WAAA,CAAA,WAAA,CAAA,CAAA;AACA,UAAA,OAAA,SAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,OAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,OAAA,KAAA;AACA;AACA,QAAA,MAAA,EAAA,UAAA,EAAA,GAAA,OAAA,CAAA;AACA,QAAA,MAAA,KAAA,GAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,QAAA,KAAA;AACA,UAAA,OAAA,QAAA,CAAA,UAAA,IAAA,UAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,KAAA,GAAA,CAAA,EAAA;AACA,UAAA,OAAA,CAAA,IAAA,CAAA,CAAA,wBAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,UAAA,OAAA;AACA,SAAA;AACA,QAAA,MAAA,QAAA,GAAA,IAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AACA,QAAA,MAAA,SAAA,GAAA,QAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA,IAAA,CAAA,MAAA,IAAA,OAAA,CAAA,MAAA,CAAA,CAAA;AACA,QAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAAA,EAAA,CAAA,CAAA,CAAA;AACA;AACA,QAAA,IAAA,IAAA,CAAA,eAAA,CAAA,UAAA,IAAA,UAAA,EAAA;AACA;AACA,UAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,KAAA,GAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,QAAA,KAAA;AACA,UAAA,OAAA,QAAA,CAAA,UAAA,IAAA,SAAA,CAAA,UAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,KAAA,GAAA,CAAA,EAAA;AACA,UAAA,OAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,QAAA,GAAA,IAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AACA,UAAA,MAAA,KAAA,GAAA,QAAA,CAAA,KAAA,IAAA,EAAA,CAAA;AACA,UAAA,MAAA,SAAA,GAAA,KAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA,IAAA,CAAA,MAAA,IAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACA,UAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,YAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,WAAA,MAAA;AACA,YAAA,IAAA,CAAA,IAAA,CAAA,KAAA,EAAA,SAAA,EAAA,SAAA,CAAA,CAAA;AACA,WAAA;AACA,UAAA,SAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AACA,UAAA,IAAA,QAAA,CAAA,UAAA,KAAA,IAAA,CAAA,eAAA,CAAA,UAAA,EAAA;AACA,YAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,WAAA;AACA,SAAA;AACA,QAAA,OAAA,SAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,WAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA;AACA,QAAA,MAAA,KAAA,GAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,UAAA,KAAA,IAAA,CAAA,UAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,QAAA,IAAA,CAAA,aAAA,CAAA,MAAA,CAAA,KAAA,EAAA,CAAA,CAAA,CAAA;AACA,QAAA,IAAA,IAAA,CAAA,UAAA,IAAA,IAAA,CAAA,eAAA,CAAA,UAAA,EAAA;AACA;AACA,UAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,SAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,cAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,IAAA,SAAA,CAAA,QAAA,IAAA,GAAA,EAAA;AACA,UAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,QAAA,KAAA;AACA,YAAA,QAAA,CAAA,QAAA,GAAA,GAAA,CAAA;AACA,WAAA,CAAA,CAAA;AACA,SAAA;AACA;AACA,QAAA,MAAA,KAAA,GAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,UAAA,KAAA,SAAA,CAAA,UAAA,CAAA;AACA,SAAA,CAAA,CAAA;;AAEA,QAAA,IAAA,KAAA,IAAA,CAAA,EAAA;AACA,UAAA,MAAA,WAAA,GAAA,IAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AACA,UAAA,MAAA,IAAA,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAA,EAAA,SAAA,CAAA,CAAA;AACA,UAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,aAAA,EAAA,KAAA,EAAA,IAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AACA,SAAA;AACA,QAAA,aAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CAAA;AACA,QAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,QAAA,OAAA,SAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,mBAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,aAAA,GAAA,4BAAA,CAAA;AACA,MAAA,MAAA,WAAA,GAAA,KAAA,CAAA,MAAA,KAAA,KAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,IAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CAAA,CAAA;AACA,MAAA,IAAA,CAAA,WAAA,EAAA;AACA,QAAA,KAAA,CAAA,cAAA,EAAA,CAAA;AACA,QAAA,MAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,oBAAA,CAAA;AACA,QAAA,IAAA,MAAA,EAAA;AACA,UAAA,MAAA,CAAA,eAAA,EAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,eAAA,CAAA,KAAA,EAAA,IAAA,EAAA;AACA,MAAA,KAAA,CAAA,eAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,KAAA,EAAA,IAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,aAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,KAAA,CAAA;AACA,MAAA,IAAA,CAAA,WAAA,GAAA,IAAA,CAAA;;AAEA,MAAA,MAAA,SAAA,GAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,IAAA,KAAA;AACA,QAAA,OAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,GAAA,CAAA;AACA,OAAA,CAAA,CAAA;;AAEA,MAAA,IAAA,SAAA,GAAA,CAAA,EAAA;AACA,QAAA,IAAA,MAAA,CAAA,GAAA,IAAA,cAAA,EAAA;AACA,UAAA,IAAA,CAAA,kBAAA,GAAA,IAAA,CAAA;AACA,SAAA,MAAA,IAAA,MAAA,CAAA,GAAA,IAAA,gBAAA,EAAA;AACA,UAAA,OAAA,IAAA,CAAA,cAAA,EAAA,CAAA;AACA,SAAA;AACA,OAAA,MAAA;AACA;AACA,QAAA,IAAA,CAAA,KAAA,CAAA,qBAAA,EAAA,KAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,cAAA,GAAA;AACA,MAAA,OAAA,IAAA,CAAA,QAAA,CAAA,cAAA,EAAA,CAAA,IAAA,CAAA,MAAA;AACA,QAAA,IAAA,CAAA,UAAA,EAAA,CAAA;AACA,OAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,UAAA,GAAA;AACA,MAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA;AACA,MAAA,IAAA,CAAA,QAAA;AACA,SAAA,gBAAA,EAAA;AACA,SAAA,IAAA,CAAA,CAAA,OAAA,KAAA;AACA,UAAA,MAAA,EAAA,SAAA,GAAA,EAAA,EAAA,MAAA,GAAA,EAAA,EAAA,GAAA,OAAA,CAAA;AACA,UAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AACA,UAAA,aAAA,CAAA,SAAA,CAAA,CAAA;AACA,UAAA,IAAA,CAAA,aAAA,GAAA,SAAA,CAAA;AACA,UAAA,IAAA,CAAA,mBAAA,EAAA,CAAA;AACA,SAAA,CAAA;AACA,SAAA,KAAA,CAAA,CAAA,CAAA,KAAA;AACA,UAAA,OAAA,CAAA,KAAA,CAAA,CAAA,QAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AACA,SAAA,CAAA;AACA,SAAA,OAAA,CAAA,MAAA;AACA,UAAA,IAAA,CAAA,SAAA,GAAA,KAAA,CAAA;AACA,SAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA;AACA,MAAA,OAAA,CAAA,GAAA,CAAA,oBAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,aAAA,EAAA,EAAA,GAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,CAAA,CAAA;AACA,KAAA;AACA,IAAA,mBAAA,GAAA;AACA,MAAA,MAAA,eAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CAAA,QAAA,KAAA,QAAA,CAAA,QAAA,KAAA,GAAA,CAAA,CAAA;AACA,MAAA,IAAA,eAAA,EAAA;AACA,QAAA,IAAA,CAAA,eAAA,GAAA,eAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,MAAA,WAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CAAA,QAAA,KAAA,QAAA,CAAA,UAAA,IAAA,aAAA,CAAA,CAAA;AACA,QAAA,IAAA,WAAA,EAAA;AACA,UAAA,WAAA,CAAA,QAAA,GAAA,GAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,WAAA,CAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,WAAA,CAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,IAAA,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,QAAA,GAAA,GAAA,CAAA;AACA,UAAA,IAAA,CAAA,eAAA,GAAA,IAAA,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA;AACA,UAAA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,MAAA,IAAA,CAAA,KAAA,CAAA,iBAAA,EAAA,IAAA,CAAA,eAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,EAAA,QAAA,EAAA;AACA,IAAA,kBAAA,GAAA;AACA,MAAA,IAAA,IAAA,CAAA,MAAA,CAAA,IAAA,IAAA,OAAA,EAAA;AACA,QAAA,OAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,gBAAA,EAAA,EAAA,GAAA,IAAA,CAAA,cAAA,CAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,OAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,UAAA,EAAA,EAAA,GAAA,IAAA,CAAA,cAAA,CAAA,CAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,aAAA,GAAA;AACA,MAAA,MAAA,MAAA,GAAA,EAAA,CAAA;AACA,MAAA,KAAA,MAAA,KAAA,IAAA,IAAA,CAAA,MAAA,EAAA;AACA,QAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA;AACA,UAAA,SAAA,EAAA,KAAA,CAAA,SAAA;AACA,UAAA,SAAA,EAAA,KAAA,CAAA,SAAA;AACA,SAAA,CAAA;AACA,OAAA;AACA,MAAA,OAAA,MAAA,CAAA;AACA,KAAA;AACA;AACA;AACA;AACA;AACA,IAAA,SAAA,GAAA;AACA,MAAA,MAAA,EAAA,KAAA,GAAA,EAAA,EAAA,GAAA,IAAA,CAAA,eAAA,IAAA,EAAA,CAAA;AACA,MAAA,MAAA,SAAA,GAAA,IAAA,CAAA,GAAA;AACA,QAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,IAAA,KAAA;AACA,UAAA,OAAA,IAAA,CAAA,KAAA,EAAA,MAAA,IAAA,CAAA,CAAA;AACA,SAAA,CAAA;AACA,OAAA,CAAA;;AAEA,MAAA,OAAA,SAAA,CAAA;AACA,KAAA;AACA,IAAA,WAAA,GAAA;AACA,MAAA,MAAA,MAAA,GAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,eAAA,EAAA;AACA,QAAA,OAAA,EAAA,GAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,MAAA,EAAA,KAAA,GAAA,EAAA,EAAA,GAAA,IAAA,CAAA,eAAA,CAAA;AACA,QAAA,IAAA,CAAA,KAAA,IAAA,KAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACA,UAAA,OAAA,EAAA,GAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,QAAA,GAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA;AACA,UAAA,OAAA;AACA,YAAA,GAAA,MAAA;AACA,YAAA,MAAA,EAAA,CAAA,EAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA,gBAAA,GAAA,IAAA,CAAA,aAAA,GAAA,CAAA,GAAA,QAAA,GAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA;AACA,YAAA,YAAA,EAAA,MAAA;AACA,WAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,eAAA,GAAA;AACA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,eAAA,EAAA;AACA,QAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA;AACA,OAAA,MAAA;AACA,QAAA,MAAA,EAAA,KAAA,GAAA,EAAA,EAAA,GAAA,IAAA,CAAA,eAAA,CAAA;AACA,QAAA,IAAA,CAAA,KAAA,IAAA,KAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACA,UAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA;AACA,SAAA,MAAA;AACA,UAAA,MAAA,QAAA,GAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA;AACA,UAAA,OAAA;AACA,YAAA,MAAA,EAAA,CAAA,EAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA,gBAAA,GAAA,IAAA,CAAA,aAAA,GAAA,CAAA,GAAA,QAAA,GAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA;AACA,YAAA,YAAA,EAAA,MAAA;AACA,WAAA,CAAA;AACA,SAAA;AACA,OAAA;AACA,KAAA;AACA,IAAA,aAAA,GAAA;AACA,MAAA,MAAA,WAAA,GAAA,IAAA,CAAA,WAAA,CAAA;AACA,MAAA,MAAA,SAAA,GAAA,UAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CAAA;AACA,MAAA,MAAA,YAAA,GAAA,UAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAAA,CAAA;AACA;AACA,MAAA,MAAA,YAAA,GAAA,IAAA,CAAA,GAAA,CAAA,SAAA,EAAA,YAAA,CAAA,CAAA;AACA,MAAA,OAAA,EAAA,GAAA,EAAA,CAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;AACA,KAAA;AACA,GAAA;AACA,CAAA;;;;;;AAroBA,MAAc,cAAA,GAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDd;AACA,MAAMM,OAAO,GAAIC,GAAG,IAAK;EACvBA,GAAG,CAACC,SAAS,CAACC,iBAAe,CAACC,IAAI,EAAED,iBAAe,CAAC,CAAA;AACtD,CAAC,CAAA;AACD;AACA,IAAI,OAAOE,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACJ,GAAG,EAAE;AAC/CI,EAAAA,MAAM,CAACJ,GAAG,CAACK,GAAG,CAACN,OAAO,CAAC,CAAA;AACzB,CAAA;AACA,YAAe;AAAEA,EAAAA,OAAAA;AAAQ,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kd-lane-container",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "kd-lane-container",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",