@easyv/biz-components 1.0.26 → 1.0.27

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.
@@ -43,8 +43,16 @@ const AiModelSelectPanel = (props) => {
43
43
  clearTimeout(scrollTimer);
44
44
  };
45
45
  }, [showInputProviderId]);
46
+ useEffect(() => {
47
+ return () => {
48
+ setShowInputProviderId("");
49
+ setInputValue("");
50
+ };
51
+ }, []);
46
52
  const handleSelect = (modelProvider, model) => {
47
53
  onSelect == null ? void 0 : onSelect(modelProvider, model);
54
+ setShowInputProviderId("");
55
+ setInputValue("");
48
56
  };
49
57
  const renderTitle = (modelProvider) => {
50
58
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -109,6 +117,11 @@ const AiModelSelectPanel = (props) => {
109
117
  setInputValue("");
110
118
  }
111
119
  };
120
+ const handleBlur = () => {
121
+ if (!inputValue) {
122
+ setShowInputProviderId("");
123
+ }
124
+ };
112
125
  const isSelected = (value == null ? void 0 : value.modelProviderId) === modelProvider.id && (value == null ? void 0 : value.modelId) === (model == null ? void 0 : model.id);
113
126
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
114
127
  "div",
@@ -130,7 +143,7 @@ const AiModelSelectPanel = (props) => {
130
143
  value: inputValue,
131
144
  onChange: (value2) => setInputValue(value2),
132
145
  onPressEnter: handlePressEnter,
133
- onBlur: handlePressEnter,
146
+ onBlur: handleBlur,
134
147
  ref: inputRef
135
148
  }) : normalContent
136
149
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model-select-panel.es.js","sources":["../../../src/components/ai-model-select/ai-model-select-panel.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { EditOutlined, PlusOutlined } from '@easyv/react-icons';\nimport { InputRef } from 'antd';\nimport classNames from 'classnames';\nimport { produce } from 'immer';\nimport { IconBtn } from './iconBtn';\nimport { AiModel, AiModelServiceProvider } from './types';\n\nexport interface AiModelSelectPanelProps {\n className?: string;\n modelServiceProviderList: AiModelServiceProvider[];\n value?: {\n modelProviderId: string;\n modelId: string;\n };\n onSelect?: (AiModelServiceProvider: AiModelServiceProvider, model: AiModel) => void;\n style?: React.CSSProperties;\n titleClassName?: string;\n itemClassName?: string;\n renderInput: (props: {\n value: string;\n onChange: (value: string) => void;\n onPressEnter: () => void;\n onBlur: () => void;\n ref: React.Ref<InputRef>;\n }) => React.ReactNode;\n}\n\nexport const AiModelSelectPanel = (props: AiModelSelectPanelProps) => {\n const {\n className = '',\n modelServiceProviderList,\n value,\n onSelect,\n style,\n titleClassName,\n itemClassName,\n renderInput,\n } = props;\n\n const inputRef = useRef<InputRef>(null);\n\n const [customModelServiceProviderList, setCustomModelServiceProviderList] = useState(\n modelServiceProviderList.filter((item) => item.isCustom),\n );\n const [showInputProviderId, setShowInputProviderId] = useState<string>('');\n const [inputValue, setInputValue] = useState<string>('');\n\n const otherModelServiceProviderList = modelServiceProviderList.filter((item) => !item.isCustom);\n\n useEffect(() => {\n if (!showInputProviderId) return;\n\n // 聚焦到输入框\n const focusTimer = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n\n // 滚动到输入框位置\n const scrollTimer = setTimeout(() => {\n // 使用唯一选择器查找包含输入框的元素\n const targetElement = document.querySelector(`[data-provider-id=\"${showInputProviderId}\"]`);\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }, 0);\n\n return () => {\n clearTimeout(focusTimer);\n clearTimeout(scrollTimer);\n };\n }, [showInputProviderId]);\n\n const handleSelect = (modelProvider: AiModelServiceProvider, model: AiModel) => {\n onSelect?.(modelProvider, model);\n };\n\n const renderTitle = (modelProvider: AiModelServiceProvider) => {\n return (\n <div\n className={classNames(\n 'biz-h-6 biz-text-text-3 biz-px-3 biz-pt-1 biz-w-full',\n 'biz-flex biz-items-center biz-box-border biz-gap-2.5 biz-text-[14px]',\n titleClassName,\n )}\n title={modelProvider.name}\n >\n <div className='biz-w-0 biz-flex-1 biz-truncate'>{modelProvider.name}</div>\n {modelProvider.isCustom && modelProvider.modelList.length === 0 && (\n <IconBtn\n onClick={() => {\n setShowInputProviderId(modelProvider.id);\n }}\n icon={\n <PlusOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </div>\n );\n };\n\n const renderItem = (modelProvider: AiModelServiceProvider, model?: AiModel) => {\n if (modelProvider.isCustom) {\n if (modelProvider.id !== showInputProviderId && !modelProvider.modelList?.length) {\n return null;\n }\n }\n const normalContent = (\n <>\n <img src={modelProvider.iconSrc} className='biz-w-4 biz-h-4' />\n <div className='biz-truncate biz-w-0 biz-flex-1 biz-text-[14px]' title={model?.name}>\n {model?.name}\n </div>\n {modelProvider.isCustom && (\n <IconBtn\n onClick={(e) => {\n setShowInputProviderId(modelProvider.id);\n setInputValue(model?.name || '');\n e.stopPropagation();\n }}\n className='biz-hidden group-hover:!biz-flex'\n style={{ display: 'none' }}\n icon={\n <EditOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </>\n );\n\n const handlePressEnter = () => {\n if (inputValue) {\n setCustomModelServiceProviderList(\n produce(customModelServiceProviderList, (draft) => {\n const index = draft.findIndex((i) => i.id === modelProvider.id);\n if (index !== -1) {\n draft[index].modelList = [{ id: inputValue, name: inputValue }];\n }\n }),\n );\n setShowInputProviderId('');\n setInputValue('');\n }\n };\n\n const isSelected = value?.modelProviderId === modelProvider.id && value?.modelId === model?.id;\n\n return (\n <div\n key={model?.id || `input-${modelProvider.id}`}\n data-provider-id={modelProvider.id}\n className={classNames(\n 'biz-px-3 biz-py-[3px] biz-flex biz-items-center biz-gap-2',\n 'biz-text-text-2 biz-h-8 biz-w-full biz-box-border',\n 'hover:biz-bg-bg-white biz-cursor-pointer biz-group',\n isSelected && 'biz-bg-bg-white',\n itemClassName,\n )}\n onClick={() => {\n if (model && !showInputProviderId) {\n handleSelect(modelProvider, model);\n }\n }}\n >\n {showInputProviderId === modelProvider.id\n ? renderInput({\n value: inputValue,\n onChange: (value) => setInputValue(value),\n onPressEnter: handlePressEnter,\n onBlur: handlePressEnter,\n ref: inputRef,\n })\n : normalContent}\n </div>\n );\n };\n\n return (\n <div\n style={style}\n className={classNames(\n 'biz-bg-[#181B22] biz-border-one biz-rounded-[4px] biz-py-1 biz-h-[200px]',\n 'biz-flex biz-flex-col gap-1 biz-w-[160px] biz-max-h-[450px] biz-overflow-auto',\n className,\n )}\n >\n {otherModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {provider.modelList.map((model) => renderItem(provider, model))}\n </div>\n </div>\n ))}\n {customModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {renderItem(provider, provider.modelList[0])}\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"names":["jsxs","jsx","Fragment","value"],"mappings":"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"}
1
+ {"version":3,"file":"ai-model-select-panel.es.js","sources":["../../../src/components/ai-model-select/ai-model-select-panel.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { EditOutlined, PlusOutlined } from '@easyv/react-icons';\nimport { InputRef } from 'antd';\nimport classNames from 'classnames';\nimport { produce } from 'immer';\nimport { IconBtn } from './iconBtn';\nimport { AiModel, AiModelServiceProvider } from './types';\n\nexport interface AiModelSelectPanelProps {\n className?: string;\n modelServiceProviderList: AiModelServiceProvider[];\n value?: {\n modelProviderId: string;\n modelId: string;\n };\n onSelect?: (AiModelServiceProvider: AiModelServiceProvider, model: AiModel) => void;\n style?: React.CSSProperties;\n titleClassName?: string;\n itemClassName?: string;\n renderInput: (props: {\n value: string;\n onChange: (value: string) => void;\n onPressEnter: () => void;\n onBlur: () => void;\n ref: React.Ref<InputRef>;\n }) => React.ReactNode;\n}\n\nexport const AiModelSelectPanel = (props: AiModelSelectPanelProps) => {\n const {\n className = '',\n modelServiceProviderList,\n value,\n onSelect,\n style,\n titleClassName,\n itemClassName,\n renderInput,\n } = props;\n\n const inputRef = useRef<InputRef>(null);\n\n const [customModelServiceProviderList, setCustomModelServiceProviderList] = useState(\n modelServiceProviderList.filter((item) => item.isCustom),\n );\n const [showInputProviderId, setShowInputProviderId] = useState<string>('');\n const [inputValue, setInputValue] = useState<string>('');\n\n const otherModelServiceProviderList = modelServiceProviderList.filter((item) => !item.isCustom);\n\n useEffect(() => {\n if (!showInputProviderId) return;\n\n // 聚焦到输入框\n const focusTimer = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n\n // 滚动到输入框位置\n const scrollTimer = setTimeout(() => {\n // 使用唯一选择器查找包含输入框的元素\n const targetElement = document.querySelector(`[data-provider-id=\"${showInputProviderId}\"]`);\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }, 0);\n\n return () => {\n clearTimeout(focusTimer);\n clearTimeout(scrollTimer);\n };\n }, [showInputProviderId]);\n\n useEffect(() => {\n return () => {\n setShowInputProviderId('');\n setInputValue('');\n };\n }, []);\n\n const handleSelect = (modelProvider: AiModelServiceProvider, model: AiModel) => {\n onSelect?.(modelProvider, model);\n setShowInputProviderId('');\n setInputValue('');\n };\n\n const renderTitle = (modelProvider: AiModelServiceProvider) => {\n return (\n <div\n className={classNames(\n 'biz-h-6 biz-text-text-3 biz-px-3 biz-pt-1 biz-w-full',\n 'biz-flex biz-items-center biz-box-border biz-gap-2.5 biz-text-[14px]',\n titleClassName,\n )}\n title={modelProvider.name}\n >\n <div className='biz-w-0 biz-flex-1 biz-truncate'>{modelProvider.name}</div>\n {modelProvider.isCustom && modelProvider.modelList.length === 0 && (\n <IconBtn\n onClick={() => {\n setShowInputProviderId(modelProvider.id);\n }}\n icon={\n <PlusOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </div>\n );\n };\n\n const renderItem = (modelProvider: AiModelServiceProvider, model?: AiModel) => {\n if (modelProvider.isCustom) {\n if (modelProvider.id !== showInputProviderId && !modelProvider.modelList?.length) {\n return null;\n }\n }\n const normalContent = (\n <>\n <img src={modelProvider.iconSrc} className='biz-w-4 biz-h-4' />\n <div className='biz-truncate biz-w-0 biz-flex-1 biz-text-[14px]' title={model?.name}>\n {model?.name}\n </div>\n {modelProvider.isCustom && (\n <IconBtn\n onClick={(e) => {\n setShowInputProviderId(modelProvider.id);\n setInputValue(model?.name || '');\n e.stopPropagation();\n }}\n className='biz-hidden group-hover:!biz-flex'\n style={{ display: 'none' }}\n icon={\n <EditOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </>\n );\n\n const handlePressEnter = () => {\n if (inputValue) {\n setCustomModelServiceProviderList(\n produce(customModelServiceProviderList, (draft) => {\n const index = draft.findIndex((i) => i.id === modelProvider.id);\n if (index !== -1) {\n draft[index].modelList = [{ id: inputValue, name: inputValue }];\n }\n }),\n );\n setShowInputProviderId('');\n setInputValue('');\n }\n };\n\n const handleBlur = () => {\n if (!inputValue) {\n setShowInputProviderId('');\n }\n };\n\n const isSelected = value?.modelProviderId === modelProvider.id && value?.modelId === model?.id;\n\n return (\n <div\n key={model?.id || `input-${modelProvider.id}`}\n data-provider-id={modelProvider.id}\n className={classNames(\n 'biz-px-3 biz-py-[3px] biz-flex biz-items-center biz-gap-2',\n 'biz-text-text-2 biz-h-8 biz-w-full biz-box-border',\n 'hover:biz-bg-bg-white biz-cursor-pointer biz-group',\n isSelected && 'biz-bg-bg-white',\n itemClassName,\n )}\n onClick={() => {\n if (model && !showInputProviderId) {\n handleSelect(modelProvider, model);\n }\n }}\n >\n {showInputProviderId === modelProvider.id\n ? renderInput({\n value: inputValue,\n onChange: (value) => setInputValue(value),\n onPressEnter: handlePressEnter,\n onBlur: handleBlur,\n ref: inputRef,\n })\n : normalContent}\n </div>\n );\n };\n\n return (\n <div\n style={style}\n className={classNames(\n 'biz-bg-[#181B22] biz-border-one biz-rounded-[4px] biz-py-1 biz-h-[200px]',\n 'biz-flex biz-flex-col gap-1 biz-w-[160px] biz-max-h-[450px] biz-overflow-auto',\n className,\n )}\n >\n {otherModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {provider.modelList.map((model) => renderItem(provider, model))}\n </div>\n </div>\n ))}\n {customModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {renderItem(provider, provider.modelList[0])}\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"names":["jsxs","jsx","Fragment","value"],"mappings":";;;;;;AA4Ba,MAAA,qBAAqB,CAAC,UAAmC;AAC9D,QAAA;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEE,QAAA,WAAW,OAAiB,IAAI;AAEhC,QAAA,CAAC,gCAAgC,iCAAiC,IAAI;AAAA,IAC1E,yBAAyB,OAAO,CAAC,SAAS,KAAK,QAAQ;AAAA,EACzD;AACA,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAAiB,EAAE;AACzE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAiB,EAAE;AAEvD,QAAM,gCAAgC,yBAAyB,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ;AAE9F,YAAU,MAAM;AACd,QAAI,CAAC,oBAAqB;AAGpB,UAAA,aAAa,WAAW,MAAM;;AAClC,qBAAS,YAAT,mBAAkB;AAAA,OACjB,CAAC;AAGE,UAAA,cAAc,WAAW,MAAM;AAEnC,YAAM,gBAAgB,SAAS,cAAc,sBAAsB,mBAAmB,IAAI;AAC1F,UAAI,eAAe;AACjB,sBAAc,eAAe;AAAA,UAC3B,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,QAAA,CACT;AAAA,MAAA;AAAA,OAEF,CAAC;AAEJ,WAAO,MAAM;AACX,mBAAa,UAAU;AACvB,mBAAa,WAAW;AAAA,IAC1B;AAAA,EAAA,GACC,CAAC,mBAAmB,CAAC;AAExB,YAAU,MAAM;AACd,WAAO,MAAM;AACX,6BAAuB,EAAE;AACzB,oBAAc,EAAE;AAAA,IAClB;AAAA,EACF,GAAG,EAAE;AAEC,QAAA,eAAe,CAAC,eAAuC,UAAmB;AAC9E,yCAAW,eAAe;AAC1B,2BAAuB,EAAE;AACzB,kBAAc,EAAE;AAAA,EAClB;AAEM,QAAA,cAAc,CAAC,kBAA0C;AAE3D,WAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,cAAc;AAAA,QAErB,UAAA;AAAA,UAAAC,kCAAA,IAAC,OAAI,EAAA,WAAU,mCAAmC,UAAA,cAAc,MAAK;AAAA,UACpE,cAAc,YAAY,cAAc,UAAU,WAAW,KAC5DA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAM;AACb,uCAAuB,cAAc,EAAE;AAAA,cACzC;AAAA,cACA,MACEA,kCAAAA,IAAC,cAAa,EAAA,WAAU,wEAAwE,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAEpG;AAAA,MAAA;AAAA,IAEJ;AAAA,EAEJ;AAEM,QAAA,aAAa,CAAC,eAAuC,UAAoB;;AAC7E,QAAI,cAAc,UAAU;AAC1B,UAAI,cAAc,OAAO,uBAAuB,GAAC,mBAAc,cAAd,mBAAyB,SAAQ;AACzE,eAAA;AAAA,MAAA;AAAA,IACT;AAEF,UAAM,gBAEFD,kCAAAA,KAAAE,kBAAA,UAAA,EAAA,UAAA;AAAA,MAAAD,kCAAA,IAAC,OAAI,EAAA,KAAK,cAAc,SAAS,WAAU,mBAAkB;AAAA,MAC7DA,kCAAAA,IAAC,SAAI,WAAU,mDAAkD,OAAO,+BAAO,MAC5E,yCAAO,KACV,CAAA;AAAA,MACC,cAAc,YACbA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,CAAC,MAAM;AACd,mCAAuB,cAAc,EAAE;AACzB,2BAAA,+BAAO,SAAQ,EAAE;AAC/B,cAAE,gBAAgB;AAAA,UACpB;AAAA,UACA,WAAU;AAAA,UACV,OAAO,EAAE,SAAS,OAAO;AAAA,UACzB,MACEA,kCAAAA,IAAC,cAAa,EAAA,WAAU,wEAAwE,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEpG,GAEJ;AAGF,UAAM,mBAAmB,MAAM;AAC7B,UAAI,YAAY;AACd;AAAA,UACE,QAAQ,gCAAgC,CAAC,UAAU;AAC3C,kBAAA,QAAQ,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE;AAC9D,gBAAI,UAAU,IAAI;AACV,oBAAA,KAAK,EAAE,YAAY,CAAC,EAAE,IAAI,YAAY,MAAM,YAAY;AAAA,YAAA;AAAA,UAEjE,CAAA;AAAA,QACH;AACA,+BAAuB,EAAE;AACzB,sBAAc,EAAE;AAAA,MAAA;AAAA,IAEpB;AAEA,UAAM,aAAa,MAAM;AACvB,UAAI,CAAC,YAAY;AACf,+BAAuB,EAAE;AAAA,MAAA;AAAA,IAE7B;AAEA,UAAM,cAAa,+BAAO,qBAAoB,cAAc,OAAM,+BAAO,cAAY,+BAAO;AAG1F,WAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,oBAAkB,cAAc;AAAA,QAChC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACT,cAAA,SAAS,CAAC,qBAAqB;AACjC,yBAAa,eAAe,KAAK;AAAA,UAAA;AAAA,QAErC;AAAA,QAEC,UAAA,wBAAwB,cAAc,KACnC,YAAY;AAAA,UACV,OAAO;AAAA,UACP,UAAU,CAACE,WAAU,cAAcA,MAAK;AAAA,UACxC,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,KAAK;AAAA,QAAA,CACN,IACD;AAAA,MAAA;AAAA,OAvBC,+BAAO,OAAM,SAAS,cAAc,EAAE;AAAA,IAwB7C;AAAA,EAEJ;AAGE,SAAAH,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEC,UAAA;AAAA,QAA8B,8BAAA,IAAI,CAAC,aAClCA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAA;AAAA,cAAA,YAAY,QAAQ;AAAA,cACpBC,kCAAAA,IAAA,OAAA,EAAI,WAAU,0CACZ,UAAS,SAAA,UAAU,IAAI,CAAC,UAAU,WAAW,UAAU,KAAK,CAAC,EAChE,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UANK,SAAS;AAAA,QAAA,CAQjB;AAAA,QACA,+BAA+B,IAAI,CAAC,aACnCD,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAA;AAAA,cAAA,YAAY,QAAQ;AAAA,cACrBC,kCAAAA,IAAC,OAAI,EAAA,WAAU,0CACZ,UAAA,WAAW,UAAU,SAAS,UAAU,CAAC,CAAC,EAC7C,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UANK,SAAS;AAAA,QAQjB,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAEJ;"}