{"version":3,"file":"index.cjs","sources":["../src/context/BMapContext.ts","../src/drivers/capabilityMatrix.ts","../src/utils/handle.ts","../src/utils/debugWarn.ts","../src/drivers/unsupported.ts","../src/utils/pointEquals.ts","../src/drivers/v4Driver.ts","../src/utils/sdk.ts","../src/drivers/v3Driver.ts","../src/drivers/createDriver.ts","../src/loader/stableHash.ts","../src/loader/registry.ts","../src/loader/index.ts","../src/utils/stableStringify.ts","../src/provider/BMapProvider.tsx","../src/const/index.ts","../src/constants/index.ts","../src/context/MapContext.ts","../src/context/OverlayTargetContext.ts","../src/components/Map/MapRef.ts","../src/utils/useLatest.ts","../src/components/Map/Map.tsx","../src/utils/createComponent.tsx","../src/components/Overlay/InfoWindow.tsx","../src/components/Overlay/CustomOverlay.tsx","../src/components/Overlay/MapMask.tsx","../src/components/Overlay/SimpleInfoWindow.tsx","../src/components/Overlay/PlaceDetail.tsx","../src/components/Overlay/index.tsx","../src/components/Overlay/PlaceDetailPanel.tsx","../src/components/Control/index.tsx","../src/components/Control/CustomControl.tsx","../src/components/Layer/TrafficLayer.tsx","../src/components/Layer/FeatureLayer.tsx","../src/components/Layer/FillLayer.tsx","../src/components/Layer/DOMLayer.tsx","../src/components/Layer/PointIconLayer.tsx","../src/components/Layer/PointShapeLayer.tsx","../src/components/Layer/LineLayer.tsx","../src/components/Layer/ThreeLayer.tsx","../src/components/Layer/index.tsx","../src/components/Menu/index.tsx","../src/components/Panorama/PanoramaRef.ts","../src/components/Panorama/index.tsx","../src/hooks/useMap.ts","../src/hooks/useMapReady.ts","../src/hooks/useDriver.ts","../src/hooks/useMapRef.ts","../src/hooks/useCapabilities.ts","../src/hooks/useMapEvent.ts","../src/hooks/useMapStatus.ts","../src/hooks/useRawOverlay.ts","../src/hooks/useRawControl.ts","../src/components/Overlay/RawOverlay.tsx","../src/components/Control/RawControl.tsx","../src/hooks/useSymbol.ts","../src/hooks/useIcon.ts","../src/hooks/services/useRenderMap.ts","../src/hooks/services/useServiceTimeout.ts","../src/hooks/services/useLocalSearch.ts","../src/hooks/services/useGeocoder.ts","../src/hooks/services/useBoundary.ts","../src/hooks/services/useGeolocation.ts","../src/hooks/services/useLocalCity.ts","../src/hooks/services/useConvertor.ts","../src/hooks/services/usePanoramaService.ts","../src/hooks/services/renderHelpers.ts","../src/hooks/services/useDrivingRoute.ts","../src/hooks/services/useWalkingRoute.ts","../src/hooks/services/useRidingRoute.ts","../src/hooks/services/useTransitRoute.ts","../src/hooks/services/useBusLineSearch.ts","../src/hooks/services/useAutocomplete.ts","../src/hooks/services/usePlaceDetail.ts","../src/hooks/services/useTruckRoute.ts","../src/errorBoundary/BMapErrorBoundary.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { BMapVersion, LoaderStatus } from '../types';\nimport type { BMapDriver } from '../drivers/types';\n\nexport interface BMapContextValue {\n  status: LoaderStatus;\n  driver: BMapDriver | null;\n  version: BMapVersion;\n  error: Error | null;\n}\n\nexport const BMapContext = createContext<BMapContextValue>({\n  status: 'loading',\n  driver: null,\n  version: '4.0',\n  error: null,\n});\n\nexport function useBMapContext(): BMapContextValue {\n  return useContext(BMapContext);\n}\n","// AUTO-GENERATED by scripts/gen-capability-matrix.ts from bmap-jsapi-dts.\n//\n// 当前为框架种子版本：手动列出主要能力，待 gen 脚本接入后自动覆盖。\n//\n// 命名规范（消除歧义）：\n// - 类存在性：PascalCase 类名，如 `Prism`、`Marker`、`NavigationControl3D`、`RidingRoute`\n// - 类方法/Map 方法：`ClassName.method`，如 `Map.flyTo`、`Map.enableMapClick`、`Marker.openInfoWindow`\n// - 这样用户 `caps.has('Map.flyTo')` 一眼能看出是 Map 的 flyTo 方法；\n//   `caps.has('Prism')` 能看出是 Prism 类是否存在。\n\nimport type { Capability } from '../types';\n\n// ── 4.0+ Map 视角与动画方法 ──\nconst V4_MAP_VIEW: Capability[] = [\n  'Map.flyTo', 'Map.setHeading', 'Map.getHeading', 'Map.setTilt', 'Map.getTilt',\n  'Map.startViewAnimation', 'Map.pauseViewAnimation', 'Map.continueViewAnimation', 'Map.cancelViewAnimation',\n  'Map.restrictBounds', 'Map.setDisplayOptions', 'Map.setOptions',\n  'Map.enableRotate', 'Map.disableRotate', 'Map.enableTilt', 'Map.disableTilt',\n  'Map.enableRotateGestures', 'Map.disableRotateGestures',\n  'Map.enableTiltGestures', 'Map.disableTiltGestures',\n  'Map.enableResizeOnCenter', 'Map.disableResizeOnCenter',\n];\n\n// ── 4.0+ 图层类（class 本身存在性） ──\nconst V4_LAYER_CLASS: Capability[] = [\n  'NormalLayer', 'GeoJSONLayer', 'DistrictLayer',\n  'RasterTileLayer', 'WMSLayer', 'WMTSLayer', 'XYZLayer', 'MVTLayer',\n  'FillLayer', 'DOMLayer',\n  'PointIconLayer', 'PointShapeLayer',\n  'LineLayer', 'PixelLayer', 'BaiduLayer', 'ThreeLayer',\n];\n\n// ── 4.0+ Map 图层方法 ──\nconst V4_MAP_LAYER: Capability[] = [\n  'Map.addNormalLayer', 'Map.removeNormalLayer',\n  'Map.addGeoJSONLayer', 'Map.removeGeoJSONLayer',\n  'Map.addDistrictLayer', 'Map.removeDistrictLayer',\n  'Map.setTrafficOn', 'Map.setTrafficOff',\n];\n\n// ── 4.0+ 覆盖物类 ──\nconst V4_OVERLAY: Capability[] = [\n  // 注：Rectangle 在源码快照 publicListForMap.js 未导出，但运行时 CDN 版 BMapGL 存在（driver 实测可用）\n  'Prism', 'Rectangle', 'BezierCurve', 'CustomOverlay', 'GroundPoint', 'Marker3D', 'SimpleInfoWindow', 'MapMask',\n];\n\n// ── 4.0+ 控件类 ──\nconst V4_CONTROL: Capability[] = [\n  'NavigationControl3D', 'ZoomControl', 'LogoControl',\n];\n\n// ── 4.0+ 服务类 ──\nconst V4_SERVICE: Capability[] = [\n  'PlaceDetail', 'PlaceDetailPanel',\n];\n\n// ── 4.0+ 其他公开类（SDK publicListForMap.js 导出、react-bmap 暂未封装） ──\nconst V4_MISC: Capability[] = [\n  'MapConfig', 'SVGSymbol', 'PolylineMultipart', 'ParkingSpot', 'IndoorManager', 'DistanceTool',\n  'Animation', 'ViewAnimation', 'Transitions', 'Event', 'GeoJSONParse', 'Entity', 'DrivingRouteLine', 'XYZProjection',\n];\n\n// ── 4.0+ Map 实用方法 ──\nconst V4_MAP_UTIL: Capability[] = [\n  'Map.getScreenshot', 'Map.lnglatToMercator', 'Map.mercatorToLnglat',\n  'Map.isLoaded', 'Map.getCoordType', 'Map.getMinZoom', 'Map.getMaxZoom',\n  'Map.getContainerSize', 'Map.getZoomUnits',\n  'Map.addSpots', 'Map.getSpots', 'Map.removeSpots', 'Map.clearSpots', 'Map.hightlightSpotByUid',\n  'Map.addMapLabels', 'Map.removeMapLabels',\n  'Map.enablePreferredLanguage', 'Map.disablePreferredLanguage',\n  'Marker.openInfoWindow', // 4.0+ Marker 打开信息窗口\n  'Map.destroy',           // 4.0+ 显式销毁\n  'Map.checkResize',       // 4.0+ resize API\n];\n\n// ── 3.0-only Map 方法 ──\nconst V3_MAP_ONLY: Capability[] = [\n  'Map.enableMapClick', 'Map.disableMapClick',\n  'Map.enable3DBuilding', 'Map.disable3DBuilding',\n  'Map.highResolutionEnabled',\n  'Map.setCurrentCity',\n  'Map.setPanorama', 'Map.getPanorama',\n  // Hotspot v4 也支持（publicListForMap.js 导出 + SpotManager），故归 COMMON 而非此处\n  'Map.openInfoWindow',    // 3.0-only map.openInfoWindow（v4 移到 Marker）\n  'Map.closeInfoWindow',\n  'Map.addTileLayer', 'Map.removeTileLayer', 'Map.getTileLayer',\n];\n\n// ── 3.0-only 覆盖物/图层 ──\nconst V3_OVERLAY_ONLY: Capability[] = [\n  'CustomLayer',           // v4 无此类（对应物是 CustomHtmlLayer/DOMLayer）\n  'PanoramaFlashInterface',// v3 publish.js:82 导出，v4 无\n  'PointCollection',       // @removed 4.0，仅 v3（@baidumap/jsapi-v4-types 无此类）\n];\n\n// ── 全版本共有（隐式：v3 与 v4 共有） ──\nconst COMMON: Capability[] = [\n  // 基础 Map 类（全版本）\n  'Map',\n  // 基础 Map 命令（全版本）\n  'Map.setCenter', 'Map.setZoom', 'Map.centerAndZoom', 'Map.panTo', 'Map.panBy',\n  'Map.setViewport', 'Map.getViewport', 'Map.zoomIn', 'Map.zoomOut', 'Map.reset',\n  'Map.getCenter', 'Map.getZoom', 'Map.getBounds', 'Map.getSize', 'Map.getDistance',\n  'Map.pointToPixel', 'Map.pixelToPoint', 'Map.pointToOverlayPixel', 'Map.overlayPixelToPoint',\n  // 交互开关（全版本）\n  'Map.enableDragging', 'Map.disableDragging',\n  'Map.enableScrollWheelZoom', 'Map.disableScrollWheelZoom',\n  'Map.enableDoubleClickZoom', 'Map.disableDoubleClickZoom',\n  'Map.enableKeyboard', 'Map.disableKeyboard',\n  'Map.enableInertialDragging', 'Map.disableInertialDragging',\n  'Map.enableContinuousZoom', 'Map.disableContinuousZoom',\n  'Map.enablePinchToZoom', 'Map.disablePinchToZoom',\n  'Map.enableAutoResize', 'Map.disableAutoResize',\n  // enableIconInfoWindow/disableIconInfoWindow：全版本可调用。3.0 下转发到\n  // enableMapClick/disableMapClick，其内部会异步加载 mapclick 模块，点击底图\n  // 标注本身就会创建并弹出 InfoWindow，效果与 4.0 基本等价，归入\"全版本\"。\n  'Map.enableIconInfoWindow', 'Map.disableIconInfoWindow',\n  // addControl/removeControl：v3 与 v4 均有（@baidumap/jsapi-v4-types core/Map.d.ts:730/743 确认 v4 存在）\n  'Map.addControl', 'Map.removeControl',\n  // 个性化样式：setMapStyle 两版本均有（v4 types core/Map.d.ts:870 确认）；\n  // setMapStyleV2 v3Driver 实测可用，v4 同名转发，归 COMMON\n  'Map.setMapStyle', 'Map.setMapStyleV2',\n  'Map.clearOverlays', 'Map.getOverlays', 'Map.addOverlay', 'Map.removeOverlay',\n  // 覆盖物（全版本）\n  'Overlay', // 公开抽象基类\n  'Marker', 'Label', 'Polyline', 'Polygon', 'Circle',\n  'GroundOverlay', 'InfoWindow', 'Symbol', 'Icon', 'IconSequence',\n  'Hotspot',\n  // 控件（全版本）\n  'Control', // 公开抽象基类\n  'NavigationControl', 'ScaleControl', 'OverviewMapControl', 'MapTypeControl',\n  'CopyrightControl', 'Copyright', 'GeolocationControl', 'PanoramaControl',\n  'CityListControl',\n  // 注：LocationControl 的 SDK 类仅 4.0 存在，但 react-bmap 用 GeolocationControl 别名实现，两个版本均可用\n  'LocationControl',\n  // 图层（全版本）\n  'TileLayer', 'TrafficLayer', 'CanvasLayer', 'PanoramaCoverageLayer',\n  // 服务（全版本）\n  'LocalSearch', 'Geocoder', 'DrivingRoute', 'WalkingRoute', 'TransitRoute',\n  'RidingRoute', 'Geolocation', 'LocalCity', 'TruckRoute',\n  'BusLineSearch', 'Autocomplete', 'Boundary', 'Convertor', 'PanoramaService', 'RouteSearch',\n  // 坐标投影（全版本公开类）\n  'Projection', 'MercatorProjection', 'PerspectiveProjection',\n  // 全景（全版本）\n  'Panorama', 'PanoramaLabel',\n  // 右键菜单\n  'ContextMenu', 'MenuItem',\n];\n\nconst v3Set = new Set<Capability>([...COMMON, ...V3_MAP_ONLY, ...V3_OVERLAY_ONLY]);\nconst v4Set = new Set<Capability>([\n  ...COMMON, ...V4_MAP_VIEW, ...V4_LAYER_CLASS, ...V4_MAP_LAYER, ...V4_OVERLAY, ...V4_CONTROL, ...V4_SERVICE, ...V4_MAP_UTIL, ...V4_MISC,\n]);\n\nexport const CAPABILITY_MATRIX: Record<'3.0' | '4.0', ReadonlySet<Capability>> = {\n  '3.0': v3Set,\n  '4.0': v4Set,\n};\n","/**\n * Brand handle 工具。\n *\n * 框架对外暴露的 Map/Overlay/... 都是 brand handle（`{ __brand, raw }`），\n * 传给 SDK 前需要解包出内部的 raw 实例。集中在此处理，\n * 避免在各 hook / 组件里散落 `(x as any).__brand` / `(x as any).raw`。\n */\n\ninterface BrandHandle {\n  readonly __brand: string;\n  readonly raw: unknown;\n}\n\n/** 判断值是否为 brand handle。 */\nexport function isHandle(value: unknown): value is BrandHandle {\n  return typeof value === 'object' && value !== null && '__brand' in value;\n}\n\n/** 若是 brand handle 则解包出内部 raw SDK 实例，否则原样返回。 */\nexport function unwrapHandle(value: unknown): unknown {\n  return isHandle(value) ? value.raw : value;\n}\n","/**\n * 开发期非抛出型告警。\n *\n * 用途：包住那些「用户明确要求某个操作、但 SDK 静默失败」的 catch —— 例如\n * Layer.setData 没渲染、Map 的属性 setter 没生效。这些位置以前是 `catch { /* noop *\\/ }`，\n * 故障被完全吞掉，开发时无从排查。\n *\n * 设计约束：\n * - 只在非 production 打印（对齐 v4Driver 里的 env 判断），避免污染线上 console。\n * - 绝不抛异常：这些 catch 多在 React effect 回调里，抛出会破坏渲染树。日志本身也 try 兜底。\n * - 不走 reportUnsupported：那是「能力不支持」语义、且 throw 模式会抛错；这里是\n *   受支持操作的运行时失败，只需可观测，不改变控制流。\n */\nexport function debugWarn(context: string, cause?: unknown): void {\n  if (cause !== undefined) devWarn(`${context} 调用失败：`, cause);\n  else devWarn(`${context} 调用失败`);\n}\n\n/**\n * 开发期提示（原文输出，不追加「调用失败」）。\n *\n * 用途：不是调用失败、但用户几乎一定会误解的场景 —— 例如把某个 option prop 改回\n * undefined，框架没有 SDK 默认值可以还原，只能保持原状。这类「符合实现、但违背直觉」\n * 的行为不说出来就是静默失效。\n */\nexport function devWarn(message: string, cause?: unknown): void {\n  try {\n    // 不依赖 @types/node：从 globalThis 上安全读取，浏览器里 process 不存在时按 dev 处理\n    const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env;\n    if (env?.NODE_ENV === 'production') return;\n    if (typeof console === 'undefined') return;\n    if (cause !== undefined) console.warn(`[react-bmap] ${message}`, cause);\n    else console.warn(`[react-bmap] ${message}`);\n  } catch {\n    // 日志绝不能反过来把调用方搞崩\n  }\n}\n","import type { BMapVersion, Capability, UnsupportedBehavior } from '../types';\nimport { debugWarn } from '../utils/debugWarn';\n\n/**\n * 不支持能力异常。\n * 在 throw 策略下抛此异常；用户可用 try/catch 或 ErrorBoundary 捕获。\n */\nexport class UnsupportedCapabilityError extends Error {\n  constructor(public capability: Capability, public version: BMapVersion) {\n    super(`[react-bmap] ${capability} is not supported in JSAPI ${version}`);\n    this.name = 'UnsupportedCapabilityError';\n  }\n}\n\n/**\n * 报告不支持的能力。根据 behavior：\n * - 'throw'：抛 UnsupportedCapabilityError\n * - 'warn'：dev console.warn，正常返回（调用方返回兜底值）\n * - 'ignore'：静默，正常返回（调用方返回兜底值）\n *\n * 只用于「确实不支持」：能力矩阵里没有，或原生成员不存在。\n * 「成员存在但执行时抛错」请走 reportCallFailure，不要塞到这里 ——\n * 那会把真实的运行时错误说成版本问题，排障时反而被误导。\n *\n * 用于命令（返回 void）：throw 抛错；warn/ignore noop。\n */\nexport function reportUnsupported(\n  capability: Capability,\n  version: BMapVersion,\n  behavior: UnsupportedBehavior,\n): void {\n  if (behavior === 'throw') {\n    throw new UnsupportedCapabilityError(capability, version);\n  }\n  if (behavior === 'warn' && typeof console !== 'undefined') {\n    console.warn(`[react-bmap] ${capability} not supported in JSAPI ${version} (noop)`);\n  }\n  // 'ignore' 或 'warn' 走到这里返回 undefined\n}\n\n/**\n * 判断一个错误是不是「成员根本不存在」。\n *\n * 依据的是 JS 引擎自己产出的 TypeError 文案（`x is not a function` /\n * `x is not a constructor`），V8/JSC/SpiderMonkey 都是这套措辞；不是匹配 SDK\n * 的字符串，所以 SDK 压缩混淆换版本也不会失效。判错的最坏后果只是日志分类不准，\n * 不会引入新的失败路径。\n */\nexport function isMissingMember(e: unknown): boolean {\n  return e instanceof TypeError && /is not a (function|constructor)/.test(e.message);\n}\n\n/**\n * 调用原生 API 失败时的统一出口，按错误性质分流：\n * - 成员不存在 → reportUnsupported，语义是「这个版本没这能力」\n * - 成员存在但抛错（参数非法、SDK 内部空指针、销毁竞态……）→ debugWarn 带上原始错误\n *\n * 后者刻意不抛：behavior='throw' 的语义是「能力不支持时抛」，而且这些 catch 大多在\n * React effect / cleanup 里，抛出会连带整棵树。\n */\nexport function reportCallFailure(\n  capability: Capability,\n  version: BMapVersion,\n  behavior: UnsupportedBehavior,\n  error: unknown,\n): void {\n  if (isMissingMember(error)) {\n    reportUnsupported(capability, version, behavior);\n    return;\n  }\n  debugWarn(capability, error);\n}\n\n/**\n * Getter 不支持时的兜底。先 reportUnsupported，然后返回类型断言的兜底值。\n * - number 类型建议返回 NaN（业务可用 Number.isNaN 检测）\n * - 对象类型字段为 undefined\n *\n * 调用方需根据语义传 fallback：\n *   return unsupportedValue('getHeading', '3.0', behavior, NaN);\n */\nexport function unsupportedValue<T>(\n  capability: Capability,\n  version: BMapVersion,\n  behavior: UnsupportedBehavior,\n  fallback: T,\n): T {\n  reportUnsupported(capability, version, behavior);\n  return fallback;\n}\n\n/**\n * tryOp 工具：在 throw 模式下捕获 UnsupportedCapabilityError，转成 Result。\n * 业务想优雅处理时使用：\n *   const r = tryOp(() => mapRef.flyTo(...));\n *   if (!r.ok) { /* fallback *\\/ }\n */\nexport type OpResult<T> = { ok: true; value: T } | { ok: false; reason: 'unsupported'; capability: Capability };\nexport function tryOp<T>(fn: () => T): OpResult<T> {\n  try {\n    return { ok: true, value: fn() };\n  } catch (e) {\n    if (e instanceof UnsupportedCapabilityError) {\n      return { ok: false, reason: 'unsupported', capability: e.capability };\n    }\n    throw e;\n  }\n}\n","import type { Point } from '../types';\n\n/**\n * 经纬度误差容忍比较，避免浮点误差导致受控循环。\n */\nexport function pointEquals(a: Point | null | undefined, b: Point | null | undefined, eps = 1e-7): boolean {\n  if (!a || !b) return a === b;\n  return Math.abs(a.lng - b.lng) <= eps && Math.abs(a.lat - b.lat) <= eps;\n}\n\nexport function pointToPlain(p: unknown): Point | null {\n  if (!p) return null;\n  const r = p as { lng?: number; lat?: number };\n  if (typeof r.lng !== 'number' || typeof r.lat !== 'number') return null;\n  return { lng: r.lng, lat: r.lat };\n}\n","import type { BMapVersion, Capability, UnsupportedBehavior } from '../types';\nimport type {\n  Bounds,\n  ControlHandle,\n  LayerHandle,\n  MapHandle,\n  OverlayHandle,\n  Pixel,\n  Point,\n  ServiceHandle,\n  Size,\n} from '../types';\nimport type { BMapDriver } from './types';\nimport type { BMapSDK } from '../utils/sdk';\nimport { CAPABILITY_MATRIX } from './capabilityMatrix';\nimport { unwrapHandle } from '../utils/handle';\nimport { reportCallFailure, reportUnsupported, unsupportedValue } from './unsupported';\nimport { debugWarn } from '../utils/debugWarn';\nimport { pointToPlain } from '../utils/pointEquals';\n\n// ─────────────── Handle 工厂 ───────────────\nconst mapHandle = (raw: unknown): MapHandle => ({ __brand: 'MapHandle', raw });\nconst overlayHandle = (raw: unknown, type: string): OverlayHandle => ({ __brand: 'OverlayHandle', raw, type });\nconst controlHandle = (raw: unknown, type: string): ControlHandle => ({ __brand: 'ControlHandle', raw, type });\nconst layerHandle = (raw: unknown, kind: LayerHandle['kind']): LayerHandle => ({ __brand: 'LayerHandle', raw, kind });\nconst serviceHandle = (raw: unknown, isNull: boolean): ServiceHandle => ({ __brand: 'ServiceHandle', raw, isNull });\n\nconst rawOf = (h: { raw: unknown }) => h.raw as any;\nconst rawMap = (m: MapHandle) => rawOf(m);\n\n// CanvasLayer 在 SDK 内部是 overlay（实例上 _type === 'overlay'），Map.addLayer 会\n// 拒收并打印 \"unknown layer type\"，必须走 addOverlay。和 v3Driver 的分派保持一致。\n// 只认 kind：DOMLayer / FeatureLayer 之类也可能带 _type === 'overlay'，但 addLayer 收得下，\n// 按 _type 探测会把它们一起改道，反而挂不上内容。\nconst isOverlayLikeLayer = (l: LayerHandle) => l.kind === 'canvas';\n\n// v4 的 Map.addLayer 靠实例上的 isXxxLayer 标记分派，认不出就打 \"unknown layer type\"。\nconst LAYER_BRANDS = ['isNormalLayer', 'isGeoJSONLayer', 'isTileLayer', 'isDistrictLayer', 'isCustomHtmlLayer', 'isWebGLLayer'];\n// PixelLayer / MVTLayer / BaiduVectorLayer 是包在真正 TileLayer 外面的一层壳：TileLayer 挂在\n// .layer 上，壳自己一个标记都没有。SDK 里只有 addTileLayer/removeTileLayer 会拆这层壳，\n// 但那两个方法又会打 \"deprecated, use addLayer instead\" —— 两条路都有警告。\n// 所以自己先拆壳，再交给 addLayer：命中的还是同一条 _addTileLayer 分支，两条警告都不会出现。\nconst unwrapTileWrapper = (raw: any) => {\n  if (!raw || LAYER_BRANDS.some(b => raw[b])) return raw;\n  return raw.layer?.isTileLayer ? raw.layer : raw;\n};\n\n// ─── 碰撞检测（SDK v4.0 有 enableCollisionDetection/rank 属性但未实现碰撞逻辑，框架补齐） ───\nconst collisionState = new WeakMap<object, { hidden: boolean; userVisible: boolean }>();\nconst collisionManagers = new WeakMap<object, CollisionManager>();\nconst overlayToCM = new WeakMap<object, CollisionManager>();\n\n// 已 destroy 的原生 Map 实例。React 卸载时父组件 <Map> 的 layout cleanup 先跑 destroyMap，\n// 子组件（右键菜单等）的 passive cleanup 后跑，此时地图容器已被清空 —— 需要据此跳过那些\n// 会去摸 DOM 的 detach 调用。\nconst destroyedMaps = new WeakSet<object>();\n\nclass CollisionManager {\n  private mapRaw: any;\n  private markers = new Set<any>();\n  private unsub: (() => void) | null = null;\n  private rafId: number | null = null;\n  private retryCount = 0;\n  pendingContainers = false;\n\n  constructor(mapRaw: any) {\n    this.mapRaw = mapRaw;\n    const evalFn = () => this.schedule();\n    try {\n      const moveFn = () => evalFn();\n      const zoomFn = () => evalFn();\n      mapRaw.addEventListener('moveend', moveFn);\n      mapRaw.addEventListener('zoomend', zoomFn);\n      this.unsub = () => {\n        try { mapRaw.removeEventListener?.('moveend', moveFn); } catch { /* ignore */ }\n        try { mapRaw.removeEventListener?.('zoomend', zoomFn); } catch { /* ignore */ }\n      };\n    } catch { /* ignore */ }\n  }\n\n  register(rawMarker: any) {\n    this.markers.add(rawMarker);\n    collisionState.set(rawMarker, { hidden: false, userVisible: true });\n    overlayToCM.set(rawMarker, this);\n    this.retryCount = 0;\n    this.schedule();\n  }\n  unregister(rawMarker: any) {\n    this.markers.delete(rawMarker);\n    collisionState.delete(rawMarker);\n    overlayToCM.delete(rawMarker);\n  }\n\n  clear() {\n    for (const m of this.markers) collisionState.delete(m);\n    this.markers.clear();\n  }\n\n  schedule() {\n    if (this.rafId != null) return;\n    this.rafId = requestAnimationFrame(() => { this.rafId = null; this.evaluate(); });\n  }\n\n  evaluate() {\n    if (this.markers.size < 2) return;\n    const entries: Array<{ raw: any; px: { x: number; y: number }; rank: number }> = [];\n    for (const m of this.markers) {\n      try {\n        const pos = m.getPosition?.();\n        if (!pos) continue;\n        const px = this.mapRaw.pointToPixel?.(pos);\n        if (!px || typeof px.x !== 'number') continue;\n        entries.push({ raw: m, px: { x: px.x, y: px.y }, rank: m.getRank?.() ?? 0 });\n      } catch { /* ignore */ }\n    }\n    if (entries.length < 2) return;\n\n    const THRESHOLD_SQ = 32 * 32;\n    for (const e of entries) { const s = collisionState.get(e.raw); if (s) s.hidden = false; }\n\n    for (let i = 0; i < entries.length; i++) {\n      for (let j = i + 1; j < entries.length; j++) {\n        const a = entries[i], b = entries[j];\n        const dx = a.px.x - b.px.x, dy = a.px.y - b.px.y;\n        const distSq = dx * dx + dy * dy;\n        if (distSq < THRESHOLD_SQ) {\n          if (a.rank > b.rank) { const s = collisionState.get(a.raw); if (s) s.hidden = true; }\n          else if (b.rank > a.rank) { const s = collisionState.get(b.raw); if (s) s.hidden = true; }\n        }\n      }\n    }\n\n    for (const e of entries) {\n      const s = collisionState.get(e.raw);\n      if (!s) continue;\n      try {\n        const container = e.raw._container ?? e.raw.domElement;\n        if (s.hidden && s.userVisible !== false) {\n          try { e.raw.hide?.(); } catch { /* ignore */ }\n          if (container) container.style.display = 'none';\n          else this.pendingContainers = true; // 容器未就绪，稍后重试\n        } else if (!s.hidden && s.userVisible !== false) {\n          if (container) container.style.display = '';\n          try { e.raw.show?.(); } catch { /* ignore */ }\n        }\n      } catch { /* ignore */ }\n    }\n    if (this.pendingContainers) { this.pendingContainers = false; if (this.retryCount++ < 5) setTimeout(() => this.schedule(), 300); }\n  }\n\n  destroy() {\n    this.unsub?.();\n    if (this.rafId != null) cancelAnimationFrame(this.rafId);\n    this.clear();\n  }\n}\n\n// Point / Pixel / Bounds 转换\n// SDK 形参统一用 BMapSDK（构造器签名来自官方 @baidumap/jsapi-v4-types），\n// 这一层的参数与返回值因此是真实类型，几何转换写错会在编译期暴露。\nfunction toRawPoint(SDK: BMapSDK, p: Point | null | undefined): BMap.Point {\n  if (!p) return p as unknown as BMap.Point;\n  if (p instanceof SDK.Point) return p;\n  return new SDK.Point(p.lng, p.lat);\n}\n/** 官方 IconOptions 只声明了 anchor/imageOffset/imageSize，其余几项是 SDK 额外支持的 */\ntype RawIconOptions = BMap.IconOptions & {\n  infoWindowAnchor?: BMap.Size;\n  printImageUrl?: string;\n  srcset?: string;\n};\n/** 把 plain icon 对象 {url, size, imageOffset, imageSize, anchor} 转成 SDK Icon 实例；\n *  或 {symbol: {path/shapeType, ...}} 转成 SDK Symbol 实例（矢量图标）。 */\nfunction toRawIcon(SDK: BMapSDK, icon: any): any {\n  if (!icon) return icon;\n  if (icon.raw) return icon.raw;                   // 已是 Handle 包装的 SDK 实例\n  // Symbol 变体：{ symbol: { path | shapeType, fillColor, ... } } → SDK Symbol 实例\n  if (icon.symbol && typeof icon.symbol === 'object') {\n    const s = icon.symbol;\n    const path = s.path ?? s.shapeType;\n    if (path !== undefined) {\n      const symOpts: BMap.SymbolOptions = {};\n      if (s.anchor) symOpts.anchor = new SDK.Size(s.anchor.width, s.anchor.height);\n      if (typeof s.fillColor === 'string') symOpts.fillColor = s.fillColor;\n      if (typeof s.fillOpacity === 'number') symOpts.fillOpacity = s.fillOpacity;\n      if (typeof s.scale === 'number') symOpts.scale = s.scale;\n      if (typeof s.rotation === 'number') symOpts.rotation = s.rotation;\n      if (typeof s.strokeColor === 'string') symOpts.strokeColor = s.strokeColor;\n      if (typeof s.strokeOpacity === 'number') symOpts.strokeOpacity = s.strokeOpacity;\n      if (typeof s.strokeWeight === 'number') symOpts.strokeWeight = s.strokeWeight;\n      return new SDK.Symbol(path, symOpts);\n    }\n  }\n  if (!icon.url) return icon;                      // 无法转换，透传\n  if (!icon.size) {\n    console.warn('[react-bmap] PlainIcon.size is required');\n    return icon;\n  }\n  const sz = new SDK.Size(icon.size.width, icon.size.height);\n  // v3 SDK 的 imageOffset 用 CSS background-position 语义（负值=右移），v4 用正值=裁剪起点\n      const isV3 = typeof (globalThis as { BMapGL?: unknown }).BMapGL === 'undefined';\n  const opts: RawIconOptions = {};\n  if (icon.imageOffset) {\n    const off = isV3\n      ? new SDK.Size(-icon.imageOffset.width, -icon.imageOffset.height)\n      : new SDK.Size(icon.imageOffset.width, icon.imageOffset.height);\n    opts.imageOffset = off;\n  }\n  if (icon.imageSize) opts.imageSize = new SDK.Size(icon.imageSize.width, icon.imageSize.height);\n  if (icon.anchor) opts.anchor = new SDK.Size(icon.anchor.width, icon.anchor.height);\n  if (icon.infoWindowAnchor) opts.infoWindowAnchor = new SDK.Size(icon.infoWindowAnchor.width, icon.infoWindowAnchor.height);\n  if (icon.printImageUrl) opts.printImageUrl = icon.printImageUrl;\n  if (icon.srcset) opts.srcset = icon.srcset;\n  const inst = new SDK.Icon(icon.url, sz, opts);\n  // v3 SDK 构造函数不接受 imageSize，需要额外调 setImageSize\n  if (icon.imageSize && typeof inst.setImageSize === 'function') {\n    inst.setImageSize(new SDK.Size(icon.imageSize.width, icon.imageSize.height));\n  }\n  return inst;\n}\n/** 把 plain offset {width, height} 转成 SDK Size */\nfunction toRawSize(SDK: BMapSDK, s: Partial<Size> | null | undefined): BMap.Size {\n  if (!s) return s as unknown as BMap.Size;\n  if (s instanceof SDK.Size) return s;\n  return new SDK.Size(s.width ?? 0, s.height ?? 0);\n}\n/**\n * option key → SDK getter/setter 方法名。\n * SDK 绝大多数属性走规则命名（icon → getIcon/setIcon），直接由 key 推导；不规则的列在别名表里。\n * 推导出的方法不存在时（如 enableDragging 只有 enable/disable、没有 getter），\n * 快照阶段会跳过该 key，交由上层告警 —— 这就是「能还原就还原、还原不了就说出来」的分界。\n */\nconst OPTION_ACCESSOR_ALIAS: Record<string, { get: string; set: string }> = {\n  url: { get: 'getImageUrl', set: 'setImageUrl' },\n  imageURL: { get: 'getImageUrl', set: 'setImageURL' },\n};\nfunction optionAccessor(key: string): { get: string; set: string } {\n  const alias = OPTION_ACCESSOR_ALIAS[key];\n  if (alias) return alias;\n  const cap = key.charAt(0).toUpperCase() + key.slice(1);\n  return { get: `get${cap}`, set: `set${cap}` };\n}\nfunction toRawPoints(SDK: BMapSDK, path: Point[] | null | undefined): BMap.Point[] {\n  return Array.isArray(path) ? path.map(p => toRawPoint(SDK, p)) : (path as any);\n}\n/** BezierCurve 的控制点是二维数组：每组对应一段路径的 1~2 个控制点 */\nfunction toRawPointGroups(SDK: BMapSDK, groups: Point[][] | null | undefined): BMap.Point[][] {\n  return Array.isArray(groups) ? groups.map(g => toRawPoints(SDK, g)) : (groups as any);\n}\n/** 判断是否为多坐标串（Point[][]），Prism 的 constructor 同时接受两种形式 */\nfunction isNestedPath(path: unknown): path is Point[][] {\n  return Array.isArray(path) && Array.isArray(path[0]);\n}\n/** Prism 路径：单坐标串走 toRawPoints，多坐标串逐串转换 */\nfunction toRawPathOrPaths(SDK: BMapSDK, path: Point[] | Point[][] | null | undefined): BMap.Point[] | BMap.Point[][] {\n  return isNestedPath(path) ? toRawPointGroups(SDK, path) : toRawPoints(SDK, path as Point[]);\n}\n/** 编辑态节点图标 node/nodeT：把 {url,size} 图标配置转成 SDK Icon 实例写入 ctorOpts（enableEditing 时生效） */\nfunction applyEditNodeIcons(SDK: BMapSDK, raw: Record<string, unknown> | undefined, ctorOpts: Record<string, unknown>): void {\n  if (raw?.node) ctorOpts.node = toRawIcon(SDK, raw.node);\n  if (raw?.nodeT) ctorOpts.nodeT = toRawIcon(SDK, raw.nodeT);\n}\nfunction toRawPixel(SDK: BMapSDK, p: Pixel | null | undefined): BMap.Pixel {\n  if (!p) return p as unknown as BMap.Pixel;\n  if (p instanceof SDK.Pixel) return p;\n  return new SDK.Pixel(p.x, p.y);\n}\nfunction toRawBounds(SDK: BMapSDK, b: Bounds | null | undefined): BMap.Bounds {\n  if (!b) return b as unknown as BMap.Bounds;\n  if (b instanceof SDK.Bounds) return b;\n  return new SDK.Bounds(toRawPoint(SDK, b.sw), toRawPoint(SDK, b.ne));\n}\nfunction toPlainPoint(p: any): Point | null {\n  return pointToPlain(p);\n}\nfunction toPlainBounds(b: any): Bounds | null {\n  if (!b) return null;\n  const sw = typeof b.getSouthWest === 'function' ? b.getSouthWest() : b.sw ?? b.southWest;\n  const ne = typeof b.getNorthEast === 'function' ? b.getNorthEast() : b.ne ?? b.northEast;\n  const swP = toPlainPoint(sw);\n  const neP = toPlainPoint(ne);\n  if (!swP || !neP) return null;\n  return { sw: swP, ne: neP };\n}\nfunction toPlainSize(s: any): Size | null {\n  if (!s) return null;\n  return { width: s.width ?? 0, height: s.height ?? 0 };\n}\nfunction toPlainPixel(p: any): Pixel | null {\n  if (!p) return null;\n  return { x: p.x ?? 0, y: p.y ?? 0 };\n}\n\nfunction toRawControlOptions(SDK: any, options: unknown): Record<string, unknown> {\n  const raw = options as Record<string, unknown> | null | undefined;\n  const out: Record<string, unknown> = {};\n  if (!raw) return out;\n  for (const [key, value] of Object.entries(raw)) {\n    if (value === undefined || value === null) continue;\n    if (key === 'children' || key === 'visible') continue;\n    if (key.startsWith('on') && key !== 'onLocationStart' && key !== 'onChangeBefore' && key !== 'onChangeAfter' && key !== 'onChangeSuccess' && key !== 'onOpen' && key !== 'onClose') continue;\n    if (key === 'offset' || key === 'size') out[key] = toRawSize(SDK, value);\n    else if (key === 'locationIcon') out[key] = toRawIcon(SDK, value);\n    else if (key === 'mapTypes' && Array.isArray(value)) out[key] = value.map(v => (v && typeof v === 'object' && 'raw' in v ? rawOf(v as any) : v));\n    else if (key !== 'showStreetLayer' && key !== 'copyrights') out[key] = value;\n  }\n  return out;\n}\n\nfunction applyCopyrights(SDK: any, control: any, copyrights: unknown): void {\n  if (!Array.isArray(copyrights)) return;\n  for (const item of copyrights) {\n    if (!item || typeof item !== 'object') continue;\n    const rawItem: Record<string, unknown> = { ...(item as Record<string, unknown>) };\n    if (rawItem.bounds) rawItem.bounds = toRawBounds(SDK, rawItem.bounds as Bounds);\n    control.addCopyright?.(rawItem);\n  }\n}\n\n/**\n * setOverlayOptions 里实际有 SDK setter 分支的属性名。\n * 组件的 optionProps 声明了但这里没有的属性，运行时修改不会生效（静默失效），\n * 由 warnUnhandledOverlayOptions 在 dev 下提示。新增分支时记得同步这个集合。\n */\nconst HANDLED_OVERLAY_OPTION_KEYS = new Set([\n  'strokeColor', 'strokeWeight', 'strokeOpacity', 'strokeStyle',\n  'fillColor', 'fillOpacity',\n  'topFillColor', 'topFillOpacity', 'sideFillColor', 'sideFillOpacity',\n  'enableEditing', 'enableDragging', 'enableMassClear',\n  'radius', 'bounds', 'controlPoints', 'altitude',\n  'url', 'imageURL', 'displayOnMinLevel', 'displayOnMaxLevel',\n  'rotation', 'title', 'content', 'styles', 'opacity',\n  'height', 'fillColor', 'fillOpacity', 'shape', 'size',\n  'icon', 'anchor', 'zIndex', 'offset',\n  'size', 'scale', 'shape', 'color', 'path',\n  'imageOffset', 'imageSize', 'infoWindowAnchor', 'printImageUrl', 'srcset',\n  'text', 'userData',\n  'point', 'rotationInit', 'properties',\n  'rank', 'rotationOrigin',\n  // visible 不走 setOverlayOptions，由 showOverlay/hideOverlay 单独处理\n  'visible',\n]);\n\nconst warnedOverlayOptionKeys = new Set<string>();\n\n/**\n * dev 下提示 optionProps 声明了但 driver 未实现的属性。\n * 这类问题类型检查发现不了（optionProps 只是字符串数组），\n * 只会表现为「改了 prop 没反应」，很难排查。每个 type.key 只警告一次，避免刷屏。\n */\nfunction warnUnhandledOverlayOptions(type: string, o: Record<string, unknown>): void {\n  // 不依赖 @types/node：从 globalThis 上安全读取，浏览器里 process 不存在时按 dev 处理\n  const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env;\n  if (env?.NODE_ENV === 'production') return;\n  if (typeof console === 'undefined') return;\n  for (const k of Object.keys(o)) {\n    if (HANDLED_OVERLAY_OPTION_KEYS.has(k)) continue;\n    const seen = `${type}.${k}`;\n    if (warnedOverlayOptionKeys.has(seen)) continue;\n    warnedOverlayOptionKeys.add(seen);\n    console.warn(\n      `[react-bmap] ${type} 的 \"${k}\" 声明在 optionProps 里，`\n      + '但 v4Driver.setOverlayOptions 没有对应的 SDK setter 分支，运行时修改该 prop 不会生效。'\n      + '要么补上分支，要么把它移到 ctorOnlyProps（改动时重建覆盖物）。',\n    );\n  }\n}\n\n/**\n * v4 Driver — 4.0 baseline 实现。\n * 直接 1:1 调用 window.BMap 上的类与方法；缺的能力（3.0-only）按 unsupportedBehavior 处理。\n *\n * opts.version 只影响日志文案（v3Driver 复用本实现，\n * 不传的话 3.0 会话里也会打成 \"JSAPI 4.0\"）。\n * capabilities 仍固定取 4.0 矩阵：v3Driver 依赖这一点绕过能力检查直建 v3-only 的类。\n */\nexport function createV4Driver(\n  rawSDK: any,\n  opts: { unsupportedBehavior: UnsupportedBehavior; version?: BMapVersion },\n): BMapDriver {\n  const capabilities = CAPABILITY_MATRIX['4.0'];\n  const behavior = opts.unsupportedBehavior;\n  const version = opts.version ?? '4.0';\n\n  // 通用工具：调原生方法，失败按错误性质分流\n  // （成员不存在 = 不支持，其余 = 运行时失败）\n  const callRaw = (cap: Capability, fn: () => void) => {\n    try { fn(); } catch (e: any) {\n      if (e?.name === 'UnsupportedCapabilityError') throw e;\n      reportCallFailure(cap, version, behavior, e);\n    }\n  };\n  const getRaw = <T,>(cap: Capability, fn: () => T, fallback: T): T => {\n    try { const v = fn(); return v ?? fallback; } catch (e: any) {\n      if (e?.name === 'UnsupportedCapabilityError') throw e;\n      // getter 无论如何都得给出兜底值；错误分类交给 reportCallFailure，不在这里重复一遍。\n      reportCallFailure(cap, version, behavior, e);\n      return fallback;\n    }\n  };\n\n  // 类工厂：capabilities 不含 → null / isNull\n  const createOverlayFactory = <T>(cap: Capability, ctor: () => T, type: string): OverlayHandle | null => {\n    if (!capabilities.has(cap)) { reportUnsupported(cap, version, behavior); return null; }\n    try { return overlayHandle(ctor(), type); }\n    catch (e) { reportCallFailure(cap, version, behavior, e); return null; }\n  };\n  const createControlFactory = <T>(cap: Capability, ctor: () => T, type: string): ControlHandle | null => {\n    if (!capabilities.has(cap)) { reportUnsupported(cap, version, behavior); return null; }\n    try { return controlHandle(ctor(), type); }\n    catch (e) { reportCallFailure(cap, version, behavior, e); return null; }\n  };\n  const createLayerFactory = <T>(cap: Capability, ctor: () => T, kind: LayerHandle['kind']): LayerHandle | null => {\n    if (!capabilities.has(cap)) { reportUnsupported(cap, version, behavior); return null; }\n    try { return layerHandle(ctor(), kind); }\n    catch (e) { reportCallFailure(cap, version, behavior, e); return null; }\n  };\n  const createServiceFactory = <T>(cap: Capability, ctor: () => T): ServiceHandle => {\n    if (!capabilities.has(cap)) return serviceHandle(null, true);\n    // 构造失败要留痕：服务类静默变成 isNull handle，业务只会看到\"什么都没发生\"。\n    try { return serviceHandle(ctor(), false); }\n    catch (e) { debugWarn(cap, e); return serviceHandle(null, true); }\n  };\n\n  return {\n    version,\n    rawSDK,\n    capabilities,\n    unsupportedBehavior: behavior,\n\n    // ─────────────── 1. Map 工厂 ───────────────\n    createMap(container, options) {\n      // 无 options 时只传 1 个参数：new Map(container) vs new Map(container, {})\n      // SDK 可能检查 arguments.length 走不同初始化路径，影响 pane 结构和 marker DOM\n      const hasOpts = options && typeof options === 'object' && Object.keys(options).length > 0;\n      const map = hasOpts ? new rawSDK.Map(container, options) : new rawSDK.Map(container);\n      collisionManagers.set(map, new CollisionManager(map));\n      return mapHandle(map);\n    },\n    destroyMap(handle) {\n      const map = rawMap(handle);\n      destroyedMaps.add(map);\n      collisionManagers.get(map)?.destroy();\n      collisionManagers.delete(map);\n      try { map.clearOverlays?.(); } catch { /* ignore */ }\n      // 先移除所有图层，防止 SDK 异步瓦片加载在 destroy 后崩溃\n      try {\n        const layers = (map as any).getLayers?.() ?? [];\n        for (const layer of layers) { try { (map as any).removeLayer?.(layer); } catch { /* ignore */ } }\n      } catch { /* ignore */ }\n      if (typeof map.destroy === 'function') {\n        try { map.destroy(); } catch { /* ignore */ }\n      } else {\n        const c = typeof map.getContainer === 'function' ? map.getContainer() : null;\n        if (c) try { c.replaceChildren?.(); } catch { /* ignore */ }\n      }\n    },\n\n    // ─────────────── 2. 交互开关 ───────────────\n    enableDragging: (map) => callRaw('Map.enableDragging', () => rawMap(map).enableDragging()),\n    disableDragging: (map) => callRaw('Map.disableDragging', () => rawMap(map).disableDragging()),\n    enableInertialDragging: (map) => callRaw('Map.enableInertialDragging', () => rawMap(map).enableInertialDragging()),\n    disableInertialDragging: (map) => callRaw('Map.disableInertialDragging', () => rawMap(map).disableInertialDragging()),\n    enableScrollWheelZoom: (map) => callRaw('Map.enableScrollWheelZoom', () => rawMap(map).enableScrollWheelZoom()),\n    disableScrollWheelZoom: (map) => callRaw('Map.disableScrollWheelZoom', () => rawMap(map).disableScrollWheelZoom()),\n    enableContinuousZoom: (map) => callRaw('Map.enableContinuousZoom', () => rawMap(map).enableContinuousZoom()),\n    disableContinuousZoom: (map) => callRaw('Map.disableContinuousZoom', () => rawMap(map).disableContinuousZoom()),\n    enableResizeOnCenter: (map) => callRaw('Map.enableResizeOnCenter', () => rawMap(map).enableResizeOnCenter()),\n    disableResizeOnCenter: (map) => callRaw('Map.disableResizeOnCenter', () => rawMap(map).disableResizeOnCenter()),\n    enableDoubleClickZoom: (map) => callRaw('Map.enableDoubleClickZoom', () => rawMap(map).enableDoubleClickZoom()),\n    disableDoubleClickZoom: (map) => callRaw('Map.disableDoubleClickZoom', () => rawMap(map).disableDoubleClickZoom()),\n    enableKeyboard: (map) => callRaw('Map.enableKeyboard', () => rawMap(map).enableKeyboard()),\n    disableKeyboard: (map) => callRaw('Map.disableKeyboard', () => rawMap(map).disableKeyboard()),\n    enablePinchToZoom: (map) => callRaw('Map.enablePinchToZoom', () => rawMap(map).enablePinchToZoom()),\n    disablePinchToZoom: (map) => callRaw('Map.disablePinchToZoom', () => rawMap(map).disablePinchToZoom()),\n    enableRotate: (map) => callRaw('Map.enableRotate', () => rawMap(map).enableRotate()),\n    disableRotate: (map) => callRaw('Map.disableRotate', () => rawMap(map).disableRotate()),\n    enableRotateGestures: (map) => callRaw('Map.enableRotateGestures', () => rawMap(map).enableRotateGestures()),\n    disableRotateGestures: (map) => callRaw('Map.disableRotateGestures', () => rawMap(map).disableRotateGestures()),\n    enableTilt: (map) => callRaw('Map.enableTilt', () => rawMap(map).enableTilt()),\n    disableTilt: (map) => callRaw('Map.disableTilt', () => rawMap(map).disableTilt()),\n    enableTiltGestures: (map) => callRaw('Map.enableTiltGestures', () => rawMap(map).enableTiltGestures()),\n    disableTiltGestures: (map) => callRaw('Map.disableTiltGestures', () => rawMap(map).disableTiltGestures()),\n    enableAutoResize: (map) => callRaw('Map.enableAutoResize', () => rawMap(map).enableAutoResize()),\n    disableAutoResize: (map) => callRaw('Map.disableAutoResize', () => rawMap(map).disableAutoResize()),\n    enableIconInfoWindow: (map) => callRaw('Map.enableIconInfoWindow', () => rawMap(map).enableIconInfoWindow()),\n    disableIconInfoWindow: (map) => callRaw('Map.disableIconInfoWindow', () => rawMap(map).disableIconInfoWindow()),\n\n    // ─────────────── 3. 视角 ───────────────\n    setHeading: (map, h, o) => callRaw('Map.setHeading', () => rawMap(map).setHeading(h, o)),\n    getHeading: (map) => getRaw('Map.getHeading', () => rawMap(map).getHeading(), NaN),\n    setTilt: (map, t, o) => callRaw('Map.setTilt', () => rawMap(map).setTilt(t, o)),\n    getTilt: (map) => getRaw('Map.getTilt', () => rawMap(map).getTilt(), NaN),\n    getCurrentMaxTilt: (map) => getRaw('Map.getCurrentMaxTilt', () => rawMap(map).getCurrentMaxTilt(), NaN),\n\n    // ─────────────── 4. 缩放级别 ───────────────\n    setMinZoom: (map, z) => callRaw('Map.setMinZoom', () => rawMap(map).setMinZoom(z)),\n    setMaxZoom: (map, z) => callRaw('Map.setMaxZoom', () => rawMap(map).setMaxZoom(z)),\n    getMinZoom: (map) => getRaw('Map.getMinZoom', () => rawMap(map).getMinZoom(), NaN),\n    getMaxZoom: (map) => getRaw('Map.getMaxZoom', () => rawMap(map).getMaxZoom(), NaN),\n\n    // ─────────────── 5. resize ───────────────\n    checkResize: (map) => callRaw('Map.checkResize', () => rawMap(map).checkResize()),\n    resize: (map) => callRaw('Map.checkResize', () => rawMap(map).checkResize?.()),\n    setSize: (map, size) => callRaw('Map.setSize', () => { rawMap(map).setSize?.(size); }),\n    zoomTo: (map, level, point) => callRaw('Map.zoomTo', () => { const m = rawMap(map); if (point) m.zoomTo?.(level, toRawPixel(rawSDK, point as Pixel)); else m.zoomTo?.(level); }),\n\n    // ─────────────── 6. 显示配置 ───────────────\n    setDisplayOptions: (map, o) => callRaw('Map.setDisplayOptions', () => rawMap(map).setDisplayOptions(o)),\n    setOptions: (map, o) => callRaw('Map.setOptions', () => rawMap(map).setOptions(o)),\n\n    // ─────────────── 7. 容器信息 ───────────────\n    getSize: (map) => getRaw('Map.getSize', () => toPlainSize(rawMap(map).getSize()) ?? { width: 0, height: 0 }, { width: 0, height: 0 }),\n    getContainerSize: (map) => getRaw('Map.getContainerSize', () => toPlainSize(rawMap(map).getContainerSize()) ?? { width: 0, height: 0 }, { width: 0, height: 0 }),\n    getZoomUnits: (map) => getRaw('Map.getZoomUnits', () => rawMap(map).getZoomUnits(), NaN),\n    getContainer: (map) => getRaw('Map.getContainer', () => rawMap(map).getContainer(), document.createElement('div')),\n\n    // ─────────────── 8. 坐标转换 ───────────────\n    pixelToPoint: (map, p, o) => getRaw('Map.pixelToPoint', () => toPlainPoint(rawMap(map).pixelToPoint(toRawPixel(rawSDK, p), o)) ?? ({ lng: NaN, lat: NaN } as Point), { lng: NaN, lat: NaN } as Point),\n    pointToPixel: (map, p, o) => getRaw('Map.pointToPixel', () => toPlainPixel(rawMap(map).pointToPixel(toRawPoint(rawSDK, p), o)) ?? { x: 0, y: 0 }, { x: 0, y: 0 }),\n    lnglatToMercator: (map, lng, lat) => getRaw('Map.lnglatToMercator', () => rawMap(map).lnglatToMercator(lng, lat) ?? [NaN, NaN], [NaN, NaN] as [number, number]),\n    mercatorToLnglat: (map, x, y) => getRaw('Map.mercatorToLnglat', () => rawMap(map).mercatorToLnglat(x, y) ?? [NaN, NaN], [NaN, NaN] as [number, number]),\n    pointToOverlayPixel: (map, p, o) => getRaw('Map.pointToOverlayPixel', () => toPlainPixel(rawMap(map).pointToOverlayPixel(toRawPoint(rawSDK, p), o)) ?? { x: 0, y: 0 }, { x: 0, y: 0 }),\n    overlayPixelToPoint: (map, p, o) => getRaw('Map.overlayPixelToPoint', () => toPlainPoint(rawMap(map).overlayPixelToPoint(toRawPixel(rawSDK, p), o)) ?? ({ lng: NaN, lat: NaN } as Point), { lng: NaN, lat: NaN } as Point),\n    getDistance: (map, a, b) => getRaw('Map.getDistance', () => rawMap(map).getDistance(toRawPoint(rawSDK, a), toRawPoint(rawSDK, b)), NaN),\n\n    // ─────────────── 9. 地图状态 ───────────────\n    isLoaded: (map) => getRaw('Map.isLoaded', () => (typeof rawMap(map).isLoaded === 'function' ? rawMap(map).isLoaded() : true), true),\n    getCoordType: (map) => getRaw('Map.getCoordType', () => rawMap(map).getCoordType(), ''),\n    getMapTypeId: (map) => getRaw('Map.getMapTypeId', () => rawMap(map).getMapTypeId?.() ?? rawMap(map).getMapType?.() ?? '', ''),\n    getMapCoordType: (map) => getRaw('Map.getMapCoordType', () => rawMap(map).getMapCoordType?.(), ''),\n    getMapStyleId: (map) => getRaw('Map.getMapStyleId', () => rawMap(map).getMapStyleId?.(), ''),\n    getAreaStyleId: (map) => getRaw('Map.getAreaStyleId', () => rawMap(map).getAreaStyleId?.(), ''),\n    getRenderType: (map) => getRaw('Map.getRenderType', () => rawMap(map).getRenderType?.(), ''),\n    isCanvasMap: (map) => getRaw('Map.isCanvasMap', () => rawMap(map).isCanvasMap?.() ?? false, false),\n    getProjection: (map) => getRaw('Map.getProjection', () => rawMap(map).getProjection?.(), null),\n    getSolarInfo: (map, date) => getRaw('Map.getSolarInfo', () => rawMap(map).getSolarInfo?.(date), null),\n    getTileId: (map, p, level) => getRaw('Map.getTileId', () => rawMap(map).getTileId?.(toRawPoint(rawSDK, p), level), ''),\n    getPoiByUid: (map, uid, cb) => callRaw('Map.getPoiByUid', () => rawMap(map).getPoiByUid?.(uid, cb)),\n    getPanes: (map) => getRaw('Map.getPanes', () => rawMap(map).getPanes?.(), null),\n    getInfoWindow: (map) => getRaw('Map.getInfoWindow', () => { const iw = rawMap(map).getInfoWindow?.(); return iw ? overlayHandle(iw, 'infoWindow') : null; }, null),\n\n    // ─────────────── 10. Spots / 标注 ───────────────\n    addSpots: (map, s, o) => getRaw('Map.addSpots', () => rawMap(map).addSpots(s, o) ?? '', ''),\n    getSpots: (map, id) => getRaw('Map.getSpots', () => rawMap(map).getSpots(id) ?? [], []),\n    removeSpots: (map, id) => callRaw('Map.removeSpots', () => rawMap(map).removeSpots(id)),\n    clearSpots: (map) => callRaw('Map.clearSpots', () => rawMap(map).clearSpots()),\n    resetSpotStatus: (map) => callRaw('Map.resetSpotStatus', () => rawMap(map).resetSpotStatus?.()),\n    hightlightSpotByUid: (map, uid, tilePosStr) => callRaw('Map.hightlightSpotByUid', () => rawMap(map).hightlightSpotByUid(uid, tilePosStr)),\n    addAreaSpot: (map, a, o) => getRaw('Map.addAreaSpot', () => rawMap(map).addAreaSpot(a, o) ?? '', ''),\n    getAreaSpot: (map, id) => getRaw('Map.getAreaSpot', () => rawMap(map).getAreaSpot(id) ?? [], []),\n    removeAreaSpot: (map, id) => callRaw('Map.removeAreaSpot', () => rawMap(map).removeAreaSpot(id)),\n    clearAreaSpots: (map) => callRaw('Map.clearAreaSpots', () => rawMap(map).clearAreaSpots()),\n    clearLabels: (map) => callRaw('Map.clearLabels', () => rawMap(map).clearLabels?.()),\n    addMapLabels: (map, l) => getRaw('Map.addMapLabels', () => rawMap(map).addMapLabels(l) ?? [], []),\n    removeMapLabels: (map, u) => callRaw('Map.removeMapLabels', () => rawMap(map).removeMapLabels(u)),\n    getIconByClickPosition: (map, p) => getRaw('Map.getIconByClickPosition', () => rawMap(map).getIconByClickPosition?.(toRawPixel(rawSDK, p)) ?? null, null),\n    setBounds: (map, b) => callRaw('Map.setBounds', () => rawMap(map).setBounds?.(toRawBounds(rawSDK, b))),\n\n    // ─────────────── 11. 视野控制 ───────────────\n    centerAndZoom: (map, c, z, o) => callRaw('Map.centerAndZoom', () => {\n      const m = rawMap(map);\n      if (typeof c === 'string') m.centerAndZoom(c, z, o);\n      else m.centerAndZoom(toRawPoint(rawSDK, c), z, o);\n    }),\n    panTo: (map, c, o) => callRaw('Map.panTo', () => rawMap(map).panTo(toRawPoint(rawSDK, c as Point), o)),\n    panBy: (map, x, y, o) => callRaw('Map.panBy', () => rawMap(map).panBy(x, y, o)),\n    flyTo: (map, c, z, o) => callRaw('Map.flyTo', () => rawMap(map).flyTo(toRawPoint(rawSDK, c), z, o)),\n    reset: (map) => callRaw('Map.reset', () => rawMap(map).reset()),\n    setCenter: (map, c, o) => callRaw('Map.setCenter', () => rawMap(map).setCenter(typeof c === 'string' ? c : toRawPoint(rawSDK, c), o)),\n    getCenter: (map) => getRaw('Map.getCenter', () => toPlainPoint(rawMap(map).getCenter()) ?? ({ lng: NaN, lat: NaN } as Point), { lng: NaN, lat: NaN } as Point),\n    setViewport: (map, v, o) => callRaw('Map.setViewport', () => rawMap(map).setViewport(Array.isArray(v) ? toRawPoints(rawSDK, v) : v, o)),\n    getViewport: (map, v, o) => getRaw('Map.getViewport', () => rawMap(map).getViewport(Array.isArray(v) ? toRawPoints(rawSDK, v) : v, o), null),\n    setZoom: (map, z, o) => callRaw('Map.setZoom', () => rawMap(map).setZoom(z, o)),\n    getZoom: (map) => getRaw('Map.getZoom', () => rawMap(map).getZoom(), NaN),\n    zoomIn: (map, zc) => callRaw('Map.zoomIn', () => rawMap(map).zoomIn(zc && toRawPoint(rawSDK, zc))),\n    zoomOut: (map, zc) => callRaw('Map.zoomOut', () => rawMap(map).zoomOut(zc && toRawPoint(rawSDK, zc))),\n    getBounds: (map) => getRaw('Map.getBounds', () => toPlainBounds(rawMap(map).getBounds()) ?? ({ sw: { lng: NaN, lat: NaN }, ne: { lng: NaN, lat: NaN } }), { sw: { lng: NaN, lat: NaN }, ne: { lng: NaN, lat: NaN } }),\n    restrictBounds: (map, b) => callRaw('Map.restrictBounds', () => rawMap(map).restrictBounds(b ? toRawBounds(rawSDK, b) : null)),\n\n    // ─────────────── 12. 地图类型 ───────────────\n    setMapType: (map, t) => callRaw('Map.setMapType', () => rawMap(map).setMapType(t)),\n    getMapType: (map) => getRaw('Map.getMapType', () => rawMap(map).getMapType?.() ?? '', ''),\n\n    // ─────────────── 13. 控件 / 右键菜单 ───────────────\n    addControl: (map, c) => callRaw('Map.addControl', () => rawMap(map).addControl(rawOf(c))),\n    removeControl: (map, c) => callRaw('Map.removeControl', () => rawMap(map).removeControl(rawOf(c))),\n    setControlOptions: (c, options) => {\n      try {\n        const raw = rawOf(c);\n        const opts = toRawControlOptions(rawSDK, options);\n        if (opts.anchor !== undefined) raw.setAnchor?.(opts.anchor);\n        if (opts.offset !== undefined) raw.setOffset?.(opts.offset);\n        if (c.type === 'navigation' && opts.type !== undefined) raw.setType?.(opts.type);\n        if (c.type === 'scale' && (options as any)?.unit !== undefined) raw.setUnit?.((options as any).unit);\n        if (c.type === 'overview') {\n          if (opts.size !== undefined) raw.setSize?.(opts.size);\n          if ((options as any)?.isOpen !== undefined) {\n            // v3 没有 isOpen() 方法，读 _opts.isOpen；changeView 是 toggle，只在状态不同时调\n            const currentOpen = typeof raw.isOpen === 'function' ? raw.isOpen() : (raw as any)._opts?.isOpen;\n            const desired = (options as any).isOpen;\n            if (currentOpen !== desired) raw.changeView?.();\n          }\n        }\n        if ((c.type === 'geolocation' || c.type === 'location') && raw.setOptions) raw.setOptions(opts);\n        if (c.type === 'mapType' && (options as any)?.showStreetLayer !== undefined) raw.showStreetLayer?.((options as any).showStreetLayer);\n        if (c.type === 'copyright') applyCopyrights(rawSDK, raw, (options as any)?.copyrights);\n      } catch { /* ignore */ }\n    },\n    showControl: (c) => { try { rawOf(c).show?.(); } catch { /* ignore */ } },\n    hideControl: (c) => { try { rawOf(c).hide?.(); } catch { /* ignore */ } },\n    addContextMenu: (target, menu) => callRaw('Map.addContextMenu', () => rawOf(target).addContextMenu(rawOf(menu))),\n    removeContextMenu: (target, menu) => {\n      const raw = rawOf(target);\n      // SDK 的 ContextMenu.remove() 是裸的 this.P.parentNode.removeChild(this.P)，不判空 parentNode。\n      // 地图 destroy 后容器已被清空，菜单 DOM 连 parentNode 都没了 —— 这时地图本身都不在了，\n      // 没什么需要摘的，直接跳过，避免报成\"能力不支持\"的误导性警告。\n      if (destroyedMaps.has(raw) || destroyedMaps.has(raw?.getMap?.())) return;\n      callRaw('Map.removeContextMenu', () => raw.removeContextMenu(rawOf(menu)));\n    },\n\n    // ─────────────── 14. 覆盖物 ───────────────\n    addOverlay: (map, o) => {\n      callRaw('Map.addOverlay', () => rawMap(map).addOverlay(rawOf(o)));\n      const raw = rawOf(o);\n      if (raw?._config?.enableCollisionDetection) {\n        collisionManagers.get(rawMap(map))?.register(raw);\n      }\n    },\n    removeOverlay: (map, o) => {\n      const raw = rawOf(o);\n      collisionManagers.get(rawMap(map))?.unregister(raw);\n      // 在 removeOverlay 前先关闭编辑：Circle/Polyline/Polygon 的编辑句柄\n      // 在 overlay 被移除时若仍激活，会触发 \"Cannot read properties of null\"。\n      try { raw?.disableEditing?.(); } catch { /* ignore */ }\n      callRaw('Map.removeOverlay', () => rawMap(map).removeOverlay(raw));\n    },\n    clearOverlays: (map) => {\n      collisionManagers.get(rawMap(map))?.clear();\n      callRaw('Map.clearOverlays', () => rawMap(map).clearOverlays());\n    },\n    getOverlays: (map) => getRaw('Map.getOverlays', () => (rawMap(map).getOverlays() ?? []).map((o: any) => overlayHandle(o, inferOverlayType(o))), []),\n\n    // Label 挂到 Marker：marker.setLabel 会把 label 定位到 marker 的 point，并随 marker 定位/拖拽跟随。\n    setMarkerLabel: (marker, label) => callRaw('Marker.setLabel', () => rawOf(marker)?.setLabel?.(rawOf(label))),\n    // SDK 没有官方「解除 label」API（setLabel(null) 会因 instanceof 检查被忽略）：\n    // 兜底隐藏 label 实例并清掉 marker 内部引用，避免 label 组件卸载后残留在 marker 上。\n    removeMarkerLabel: (marker, label) => {\n      try {\n        rawOf(label)?.hide?.();\n        const m = rawOf(marker);\n        if (m?._config && m._config.label === rawOf(label)) m._config.label = null;\n        // 触发 marker 重绘，让清掉的 label 立即从画面消失\n        try { m?.setPoint?.(m.getPosition?.() ?? m.point); } catch { /* ignore */ }\n      } catch { /* ignore */ }\n    },\n\n    // ─────────────── 15. 图层 ───────────────\n    addLayer: (map, l) => {\n      if (isOverlayLikeLayer(l)) { callRaw('Map.addOverlay', () => rawMap(map).addOverlay(rawOf(l))); return; }\n      callRaw('Map.addLayer', () => rawMap(map).addLayer(unwrapTileWrapper(rawOf(l))));\n    },\n    removeLayer: (map, l) => {\n      if (isOverlayLikeLayer(l)) { callRaw('Map.removeOverlay', () => rawMap(map).removeOverlay(rawOf(l))); return; }\n      callRaw('Map.removeLayer', () => rawMap(map).removeLayer(unwrapTileWrapper(rawOf(l))));\n    },\n    addTileLayer: (map, l) => callRaw('Map.addTileLayer', () => rawMap(map).addTileLayer(rawOf(l))),\n    removeTileLayer: (map, l) => callRaw('Map.removeTileLayer', () => rawMap(map).removeTileLayer(rawOf(l))),\n    getTileLayer: (map, t) => {\n      if (!capabilities.has('Map.getTileLayer')) { reportUnsupported('Map.getTileLayer', version, behavior); return null; }\n      const r = rawMap(map).getTileLayer?.(t);\n      return r ? layerHandle(r, 'tile') : null;\n    },\n    addGeoJSONLayer: (map, l) => callRaw('Map.addGeoJSONLayer', () => rawMap(map).addGeoJSONLayer(rawOf(l))),\n    removeGeoJSONLayer: (map, l) => callRaw('Map.removeGeoJSONLayer', () => rawMap(map).removeGeoJSONLayer(rawOf(l))),\n    addDistrictLayer: (map, l) => callRaw('Map.addDistrictLayer', () => rawMap(map).addDistrictLayer(rawOf(l))),\n    removeDistrictLayer: (map, l) => callRaw('Map.removeDistrictLayer', () => rawMap(map).removeDistrictLayer(rawOf(l))),\n    addNormalLayer: (map, l) => callRaw('Map.addNormalLayer', () => rawMap(map).addNormalLayer(rawOf(l))),\n    removeNormalLayer: (map, l) => callRaw('Map.removeNormalLayer', () => rawMap(map).removeNormalLayer(rawOf(l))),\n    setTrafficOn: (map) => callRaw('Map.setTrafficOn', () => rawMap(map).setTrafficOn()),\n    setTrafficOff: (map) => callRaw('Map.setTrafficOff', () => rawMap(map).setTrafficOff()),\n    showOverlayContainer: (map) => callRaw('Map.showOverlayContainer', () => rawMap(map).showOverlayContainer?.()),\n    hideOverlayContainer: (map) => callRaw('Map.hideOverlayContainer', () => rawMap(map).hideOverlayContainer?.()),\n\n    // ─────────────── 16. 信息窗口（v4 由 Marker 承载） ───────────────\n    openInfoWindow: (target, iw, point) => {\n      const t = rawOf(target);\n      if (typeof t.openInfoWindow === 'function') {\n        callRaw('Marker.openInfoWindow', () => t.openInfoWindow(rawOf(iw), point && toRawPoint(rawSDK, point)));\n      } else {\n        reportUnsupported('Marker.openInfoWindow', version, behavior);\n      }\n    },\n    closeInfoWindow: (target) => callRaw('Map.closeInfoWindow', () => rawOf(target).closeInfoWindow?.()),\n    openSimpleInfoWindow: (map, iw, point) => callRaw('Map.openSimpleInfoWindow', () => rawMap(map).openSimpleInfoWindow?.(rawOf(iw), toRawPoint(rawSDK, point))),\n    closeSimpleInfoWindow: (map) => callRaw('Map.closeSimpleInfoWindow', () => rawMap(map).closeSimpleInfoWindow?.()),\n\n    // ─────────────── 17. 样式 / 主题 ───────────────\n    setMapStyle: (map, o) => callRaw('Map.setMapStyle', () => rawMap(map).setMapStyle(o)),\n    setMapStyleV2: (map, o) => callRaw('Map.setMapStyleV2', () => rawMap(map).setMapStyleV2(o)),\n    setTheme: (map, t, cv) => callRaw('Map.setTheme', () => rawMap(map).setTheme(t, cv)),\n    setCopyrightOffset: (map, l, c) => callRaw('Map.setCopyrightOffset', () => rawMap(map).setCopyrightOffset(l, c)),\n    setDefaultCursor: (map, c) => callRaw('Map.setDefaultCursor', () => rawMap(map).setDefaultCursor(c)),\n    getDefaultCursor: (map) => getRaw('Map.getDefaultCursor', () => rawMap(map).getDefaultCursor?.() ?? '', ''),\n    setDraggingCursor: (map, c) => callRaw('Map.setDraggingCursor', () => rawMap(map).setDraggingCursor(c)),\n    getDraggingCursor: (map) => getRaw('Map.getDraggingCursor', () => rawMap(map).getDraggingCursor?.() ?? '', ''),\n    setOverlayMoveCursor: (map, c) => callRaw('Map.setOverlayMoveCursor', () => rawMap(map).setOverlayMoveCursor?.(c)),\n\n    // ─────────────── 18. 视角动画 ───────────────\n    // pause/continue/cancel 在没有进行中的动画时会抛 TypeError（读 _viewAnimationController 为 undefined），\n    // 这是 SDK 正常行为，不算\"不支持\"，静默吞掉即可。\n    startViewAnimation: (map, a) => getRaw('Map.startViewAnimation', () => rawMap(map).startViewAnimation(a) ?? 0, 0),\n    pauseViewAnimation: (map, a) => { try { rawMap(map).pauseViewAnimation?.(a); } catch { /* 无进行中动画 */ } },\n    continueViewAnimation: (map, a) => { try { rawMap(map).continueViewAnimation?.(a); } catch { /* 无进行中动画 */ } },\n    cancelViewAnimation: (map, a) => { try { rawMap(map).cancelViewAnimation?.(a); } catch { /* 无进行中动画 */ } },\n\n    // ─────────────── 19. 截图 ───────────────\n    getScreenshot: (map) => getRaw('Map.getScreenshot', () => rawMap(map).getScreenshot?.() ?? rawMap(map).getMapScreenshot?.() ?? '', ''),\n\n    // ─────────────── 20. 地球模式 ───────────────\n    isSupportEarth: (map) => getRaw('Map.isSupportEarth', () => rawMap(map).isSupportEarth?.() ?? false, false),\n    getEarth: (map) => getRaw('Map.getEarth', () => rawMap(map).getEarth?.(), null),\n    showEarthBoundary: (map) => callRaw('Map.showEarthBoundary', () => rawMap(map).showEarthBoundary?.()),\n    hideEarthBoundary: (map) => callRaw('Map.hideEarthBoundary', () => rawMap(map).hideEarthBoundary?.()),\n    setEarthMaxZoom: (map, z) => callRaw('Map.setEarthMaxZoom', () => rawMap(map).setEarthMaxZoom?.(z)),\n    setEarthMinZoom: (map, z) => callRaw('Map.setEarthMinZoom', () => rawMap(map).setEarthMinZoom?.(z)),\n\n    // ─────────────── 21. 室内 ───────────────\n    showIndoor: (map, uid, floor) => callRaw('Map.showIndoor', () => rawMap(map).showIndoor?.(uid, floor)),\n    setIndoor: (map, uid, floor) => callRaw('Map.setIndoor', () => rawMap(map).setIndoor?.(uid, floor)),\n    getIndoorInfo: (map) => getRaw('Map.getIndoorInfo', () => rawMap(map).getIndoorInfo?.() ?? null, null),\n    initIndoorLayer: (map, opts) => getRaw('Map.initIndoorLayer', () => rawMap(map).initIndoorLayer?.(opts), null),\n    setNormalMapDisplay: (map, display) => callRaw('Map.setNormalMapDisplay', () => rawMap(map).setNormalMapDisplay?.(display)),\n    getVectorContainer: (map) => getRaw('Map.getVectorContainer', () => rawMap(map).getVectorContainer?.(), null),\n\n    // ─────────────── 22. 街景图层 ───────────────\n    showStreetLayer: (map, s) => callRaw('Map.showStreetLayer', () => rawMap(map).showStreetLayer?.(s)),\n    hideStreetLayer: (map) => callRaw('Map.hideStreetLayer', () => rawMap(map).hideStreetLayer?.()),\n    isStreetLayerShow: (map) => getRaw('Map.isStreetLayerShow', () => rawMap(map).isStreetLayerShow?.() ?? false, false),\n    showVectorStreetLayer: (map) => callRaw('Map.showVectorStreetLayer', () => rawMap(map).showVectorStreetLayer?.()),\n    hideVectorStreetLayer: (map) => callRaw('Map.hideVectorStreetLayer', () => rawMap(map).hideVectorStreetLayer?.()),\n\n    // ─────────────── 23. 语言 ───────────────\n    getLanguage: (map) => getRaw('Map.getLanguage', () => rawMap(map).getLanguage?.() ?? '', ''),\n    changeLanguage: (map, l) => callRaw('Map.changeLanguage', () => rawMap(map).changeLanguage?.(l)),\n    enablePreferredLanguage: (map, l) => callRaw('Map.enablePreferredLanguage', () => rawMap(map).enablePreferredLanguage?.(l)),\n    disablePreferredLanguage: (map) => callRaw('Map.disablePreferredLanguage', () => rawMap(map).disablePreferredLanguage?.()),\n\n    // ─────────────── 24. 私有 / 焦点遮罩 / 自定义 HTML 图层 ───────────────\n    setLock: (map, l) => callRaw('Map.setLock', () => rawMap(map).setLock?.(l)),\n    setPrivateRegions: (map, r) => callRaw('Map.setPrivateRegions', () => rawMap(map).setPrivateRegions?.(r)),\n    getPrivateRegions: (map) => getRaw('Map.getPrivateRegions', () => rawMap(map).getPrivateRegions?.() ?? [], []),\n    setPrivateStatus: (map, s) => callRaw('Map.setPrivateStatus', () => rawMap(map).setPrivateStatus?.(s)),\n    getPrivateStatus: (map) => getRaw('Map.getPrivateStatus', () => rawMap(map).getPrivateStatus?.() ?? false, false),\n    setCustomArea: (map, c) => callRaw('Map.setCustomArea', () => {\n      const cfg = (c ?? {}) as { area?: Point[]; [k: string]: unknown };\n      // area 用普通经纬度传入，这里转成原生 Point（已是 Point 实例则原样返回）\n      const rawCfg = Array.isArray(cfg.area) ? { ...cfg, area: toRawPoints(rawSDK, cfg.area) } : cfg;\n      return rawMap(map).setCustomArea?.(rawCfg);\n    }),\n    addFocusMask: (map, m) => callRaw('Map.addFocusMask', () => rawMap(map).addFocusMask?.(m)),\n    removeFocusMask: (map, m) => callRaw('Map.removeFocusMask', () => rawMap(map).removeFocusMask?.(m)),\n    clearFocusMasks: (map) => callRaw('Map.clearFocusMasks', () => rawMap(map).clearFocusMasks?.()),\n    addCustomHtmlLayer: (map, l) => callRaw('Map.addCustomHtmlLayer', () => rawMap(map).addCustomHtmlLayer?.(l)),\n    removeCustomHtmlLayer: (map, l) => callRaw('Map.removeCustomHtmlLayer', () => rawMap(map).removeCustomHtmlLayer?.(l)),\n    addParkingSpot: (map, l) => callRaw('Map.addParkingSpot', () => rawMap(map).addParkingSpot?.(l)),\n    removeParkingSpot: (map, p) => callRaw('Map.removeParkingSpot', () => rawMap(map).removeParkingSpot?.(p)),\n\n    // ─────────────── 25. 3.0-only（v4 不支持） ───────────────\n    enableMapClick: () => reportUnsupported('Map.enableMapClick', version, behavior),\n    disableMapClick: () => reportUnsupported('Map.disableMapClick', version, behavior),\n    enable3DBuilding: () => reportUnsupported('Map.enable3DBuilding', version, behavior),\n    disable3DBuilding: () => reportUnsupported('Map.disable3DBuilding', version, behavior),\n    setPanorama: () => reportUnsupported('Map.setPanorama', version, behavior),\n    getPanorama: () => unsupportedValue('Map.getPanorama', version, behavior, null),\n    setCurrentCity: () => reportUnsupported('Map.setCurrentCity', version, behavior),\n    highResolutionEnabled: (map) => getRaw('Map.highResolutionEnabled', () => rawMap(map).highResolutionEnabled?.() ?? false, false),\n    addHotspot: (map, h) => { try { rawMap(map).addHotspot?.(rawOf(h)); } catch { /* ignore */ } },\n    removeHotspot: (map, h) => { try { rawMap(map).removeHotspot?.(rawOf(h)); } catch { /* ignore */ } },\n    clearHotspots: (map) => { try { rawMap(map).clearHotspots?.(); } catch { /* ignore */ } },\n\n    // ─────────────── 26. Overlay 工厂 ───────────────\n    createMarker: (p, o) => {\n      // v3 SDK 可能检查 arguments.length：new Marker(point) vs new Marker(point, undefined) 走不同路径。\n      // 必须确保无 opts 时只传 1 个参数。\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.icon) ctorOpts.icon = toRawIcon(rawSDK, raw.icon);\n      if (raw?.offset) ctorOpts.offset = toRawSize(rawSDK, raw.offset);\n      // 以下选项 SDK 没有 setter 方法，只能在 constructor 设置\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.raiseOnDrag === 'boolean') ctorOpts.raiseOnDrag = raw.raiseOnDrag;\n      if (typeof raw?.draggingCursor === 'string') ctorOpts.draggingCursor = raw.draggingCursor;\n      if (typeof raw?.enableCollisionDetection === 'boolean') ctorOpts.enableCollisionDetection = raw.enableCollisionDetection;\n      if (typeof raw?.enableDraggingMap === 'boolean') ctorOpts.enableDraggingMap = raw.enableDraggingMap;\n      if (typeof raw?.baseZIndex === 'number') ctorOpts.baseZIndex = raw.baseZIndex;\n      if (typeof raw?.restrictDraggingArea === 'boolean') ctorOpts.restrictDraggingArea = raw.restrictDraggingArea;\n      if (typeof raw?.anchor === 'number') ctorOpts.anchor = raw.anchor;\n      // shadow @removed 4.0，v3 only；icon 类型转换同样适用\n      if (raw?.shadow) ctorOpts.shadow = toRawIcon(rawSDK, raw.shadow);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      const point = toRawPoint(rawSDK, p);\n      return createOverlayFactory('Marker', () =>\n        hasOpts ? new rawSDK.Marker(point, ctorOpts) : new rawSDK.Marker(point),\n      'marker');\n    },\n    createLabel: (c, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.offset) ctorOpts.offset = toRawSize(rawSDK, raw.offset);\n      if (raw?.position) ctorOpts.position = toRawPoint(rawSDK, raw.position as Point);\n      if (typeof raw?.anchor === 'number') ctorOpts.anchor = raw.anchor;\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.width === 'number' && raw.width > 0) ctorOpts.width = raw.width;\n      // SDK 的 OverlayInternal.setConfig 对 styles 是「整体替换」而非合并，用户传 styles 会覆盖掉\n      // Label 默认的 whiteSpace:'nowrap'（单行），导致文字变多行。这里在用户未显式指定 whiteSpace 时\n      // 补回 nowrap，保持与原生 JSAPI 一致的单行显示（用户仍可显式传 whiteSpace:'normal' 换行）。\n      if (raw?.styles && typeof raw.styles === 'object') {\n        const s = raw.styles as Record<string, unknown>;\n        ctorOpts.styles = ('whiteSpace' in s) ? s : { whiteSpace: 'nowrap', ...s };\n      }\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Label', () =>\n        hasOpts ? new rawSDK.Label(c, ctorOpts) : new rawSDK.Label(c),\n      'label');\n    },\n    createPolyline: (p, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      const strokeFields = ['strokeColor', 'strokeWeight', 'strokeOpacity', 'strokeStyle', 'strokeLineCap', 'strokeLineJoin'];\n      for (const f of strokeFields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableEditing === 'boolean') ctorOpts.enableEditing = raw.enableEditing;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.geodesic === 'boolean') ctorOpts.geodesic = raw.geodesic;\n      if (typeof raw?.linkRight === 'boolean') ctorOpts.linkRight = raw.linkRight;\n      if (typeof raw?.clip === 'boolean') ctorOpts.clip = raw.clip;\n      if (typeof raw?.coordType === 'string') ctorOpts.coordType = raw.coordType;\n      if (raw?.icons) ctorOpts.icons = (raw.icons as unknown[]).map(ic =>\n        ic && typeof ic === 'object' && 'raw' in ic ? rawOf(ic as any) : ic,\n      );\n      if (raw?.dashArray) ctorOpts.dashArray = raw.dashArray;\n      if (raw?.strokeTexture) ctorOpts.strokeTexture = raw.strokeTexture;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      applyEditNodeIcons(rawSDK, raw, ctorOpts);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Polyline', () =>\n        hasOpts ? new rawSDK.Polyline(toRawPoints(rawSDK, p), ctorOpts) : new rawSDK.Polyline(toRawPoints(rawSDK, p)),\n      'polyline');\n    },\n    createPolygon: (p, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      const fields = ['strokeColor', 'fillColor', 'strokeWeight', 'strokeOpacity', 'fillOpacity', 'strokeStyle', 'strokeLineCap', 'strokeLineJoin'];\n      for (const f of fields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableEditing === 'boolean') ctorOpts.enableEditing = raw.enableEditing;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.linkRight === 'boolean') ctorOpts.linkRight = raw.linkRight;\n      if (typeof raw?.coordType === 'string') ctorOpts.coordType = raw.coordType;\n      if (raw?.dashArray) ctorOpts.dashArray = raw.dashArray;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      applyEditNodeIcons(rawSDK, raw, ctorOpts);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      // path 支持单坐标串 Point[] 或多坐标串 Point[][]（镂空/多环，对齐 JSAPI）\n      const rawPath = toRawPathOrPaths(rawSDK, p as Point[] | Point[][]);\n      return createOverlayFactory('Polygon', () =>\n        hasOpts ? new rawSDK.Polygon(rawPath, ctorOpts) : new rawSDK.Polygon(rawPath),\n      'polygon');\n    },\n    createCircle: (c, r, o) => {\n      const raw = o as Record<string, unknown>;\n      // enableEditing 不传给 constructor：SDK 在 constructor 阶段初始化编辑句柄时\n      // 会访问内部 path 数组（Circle 没有 path，只有 center+radius），\n      // 导致 \"Cannot read properties of null (reading '0')\"。\n      // 改为创建后用 rAF 延迟调用 enableEditing()，此时 overlay 已 addOverlay 到地图。\n      const wantEditing = raw?.enableEditing === true;\n      const ctorOpts: Record<string, unknown> = {};\n      const fields = ['strokeColor', 'fillColor', 'strokeWeight', 'strokeOpacity', 'fillOpacity', 'strokeStyle'];\n      for (const f of fields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.coordType === 'string') ctorOpts.coordType = raw.coordType;\n      if (raw?.dashArray) ctorOpts.dashArray = raw.dashArray;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      applyEditNodeIcons(rawSDK, raw, ctorOpts);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Circle', () => {\n        const inst = hasOpts\n          ? new rawSDK.Circle(toRawPoint(rawSDK, c), r, ctorOpts)\n          : new rawSDK.Circle(toRawPoint(rawSDK, c), r);\n        if (wantEditing) {\n          const rafId = requestAnimationFrame(() => {\n            try { inst.enableEditing?.(); } catch { /* ignore */ }\n          });\n          const origRemove = inst.remove?.bind(inst);\n          if (origRemove) inst.remove = function () { cancelAnimationFrame(rafId); return origRemove(); };\n        }\n        return inst;\n      }, 'circle');\n    },\n    createRectangle: (b, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      const fields = ['strokeColor', 'fillColor', 'strokeWeight', 'strokeOpacity', 'fillOpacity', 'strokeStyle'];\n      for (const f of fields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.linkRight === 'boolean') ctorOpts.linkRight = raw.linkRight;\n      if (typeof raw?.coordType === 'string') ctorOpts.coordType = raw.coordType;\n      if (raw?.dashArray) ctorOpts.dashArray = raw.dashArray;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      applyEditNodeIcons(rawSDK, raw, ctorOpts);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Rectangle', () =>\n        hasOpts\n          ? new rawSDK.Rectangle(toRawBounds(rawSDK, b), ctorOpts)\n          : new rawSDK.Rectangle(toRawBounds(rawSDK, b)),\n      'rectangle');\n    },\n    createBezierCurve: (p, cp, o) => {\n      const raw = o as Record<string, unknown>;\n      // P2: controlPoints 兜底，防止漏传导致 SDK 抛错被误报为 unsupported\n      const safeCp = Array.isArray(cp) ? cp : [];\n      // P1: controlPoints 组数必须 >= path.length - 1，否则 SDK 内部索引越界\n      const pathLen = Array.isArray(p) ? p.length : 0;\n      if (safeCp.length < Math.max(0, pathLen - 1)) {\n        // eslint-disable-next-line no-console\n        console.warn(`[react-bmap] BezierCurve: controlPoints 需要 ${pathLen - 1} 组，实际 ${safeCp.length} 组，已自动补齐`);\n        while (safeCp.length < pathLen - 1) safeCp.push([{ lng: 0, lat: 0 }]);\n      }\n      const ctorOpts: Record<string, unknown> = {};\n      const fields = ['strokeColor', 'strokeWeight', 'strokeOpacity', 'strokeStyle'];\n      for (const f of fields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.enableEditing === 'boolean') ctorOpts.enableEditing = raw.enableEditing;\n      if (raw?.dashArray) ctorOpts.dashArray = raw.dashArray;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      applyEditNodeIcons(rawSDK, raw, ctorOpts);\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      // controlPoints 是第 2 个位置参数，opts 是第 3 个，顺序不能省\n      return createOverlayFactory('BezierCurve', () =>\n        hasOpts\n          ? new rawSDK.BezierCurve(toRawPoints(rawSDK, p), toRawPointGroups(rawSDK, safeCp), ctorOpts)\n          : new rawSDK.BezierCurve(toRawPoints(rawSDK, p), toRawPointGroups(rawSDK, safeCp)),\n      'bezierCurve');\n    },\n    createPrism: (p, altitude, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      const fields = ['topFillColor', 'topFillOpacity', 'sideFillColor', 'sideFillOpacity'];\n      for (const f of fields) { if (raw?.[f] !== undefined) ctorOpts[f] = raw[f]; }\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      // altitude 是第 2 个位置参数，opts 是第 3 个，顺序不能省\n      return createOverlayFactory('Prism', () =>\n        hasOpts\n          ? new rawSDK.Prism(toRawPathOrPaths(rawSDK, p), altitude, ctorOpts)\n          : new rawSDK.Prism(toRawPathOrPaths(rawSDK, p), altitude),\n      'prism');\n    },\n    createGroundOverlay: (b, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (typeof raw?.opacity === 'number') ctorOpts.opacity = raw.opacity;\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      // url 可以是图片/视频地址，也可以是 canvas 元素（type='canvas'）\n      if (raw?.url !== undefined) {\n        ctorOpts.url = raw.url;\n        // v3 SDK 不识别 url，用 imageURL 作为 fallback\n        if (typeof raw.url === 'string' && typeof raw.imageURL !== 'string') ctorOpts.imageURL = raw.url;\n      }\n      if (typeof raw?.displayOnMinLevel === 'number') ctorOpts.displayOnMinLevel = raw.displayOnMinLevel;\n      if (typeof raw?.displayOnMaxLevel === 'number') ctorOpts.displayOnMaxLevel = raw.displayOnMaxLevel;\n      if (typeof raw?.imageURL === 'string') ctorOpts.imageURL = raw.imageURL;\n      if (typeof raw?.stretch === 'boolean') ctorOpts.stretch = raw.stretch;\n      if (typeof raw?.type === 'string') ctorOpts.type = raw.type;\n      if (typeof raw?.top === 'boolean') ctorOpts.top = raw.top;\n      if (typeof raw?.isReDraw === 'boolean') ctorOpts.isReDraw = raw.isReDraw;\n      if (typeof raw?.drawHook === 'function') ctorOpts.drawHook = raw.drawHook;\n      // zIndex 不是 SDK 的 constructor 选项，只能通过 setZIndex 设置，故不放进 ctorOpts\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('GroundOverlay', () =>\n        hasOpts\n          ? new rawSDK.GroundOverlay(toRawBounds(rawSDK, b), ctorOpts)\n          : new rawSDK.GroundOverlay(toRawBounds(rawSDK, b)),\n      'groundOverlay');\n    },\n    createGroundPoint: (p, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      // GroundPointOptions 自身字段\n      if (typeof raw?.url === 'string') ctorOpts.url = raw.url;\n      if (raw?.size) ctorOpts.size = toRawSize(rawSDK, raw.size as Size);\n      if (raw?.anchor) ctorOpts.anchor = toRawSize(rawSDK, raw.anchor as Size);\n      if (typeof raw?.scale === 'number') ctorOpts.scale = raw.scale;\n      if (typeof raw?.rotation === 'number') ctorOpts.rotation = raw.rotation;\n      if (raw?.offset) ctorOpts.offset = toRawSize(rawSDK, raw.offset as Size);\n      if (typeof raw?.level === 'number') ctorOpts.level = raw.level;\n      // 继承自 GroundOverlayOptions 的字段\n      if (typeof raw?.opacity === 'number') ctorOpts.opacity = raw.opacity;\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableClicking === 'boolean') ctorOpts.enableClicking = raw.enableClicking;\n      if (typeof raw?.displayOnMinLevel === 'number') ctorOpts.displayOnMinLevel = raw.displayOnMinLevel;\n      if (typeof raw?.displayOnMaxLevel === 'number') ctorOpts.displayOnMaxLevel = raw.displayOnMaxLevel;\n      if (typeof raw?.imageURL === 'string') ctorOpts.imageURL = raw.imageURL;\n      // type/top/isReDraw/drawHook 继承自 GroundOverlayOptions\n      if (typeof raw?.type === 'string') ctorOpts.type = raw.type;\n      if (typeof raw?.top === 'boolean') ctorOpts.top = raw.top;\n      if (typeof raw?.isReDraw === 'boolean') ctorOpts.isReDraw = raw.isReDraw;\n      if (typeof raw?.drawHook === 'function') ctorOpts.drawHook = raw.drawHook;\n      // zIndex 不是 constructor 选项（见 GroundOverlayOptions 注释），跳过\n      // Bug fix: SDK GroundPoint 构造函数直接读 options.size，不传 options 会崩溃\n      return createOverlayFactory('GroundPoint', () =>\n        new rawSDK.GroundPoint(toRawPoint(rawSDK, p), ctorOpts),\n      'groundPoint');\n    },\n    createPointCollection: (p, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.shape !== undefined) ctorOpts.shape = raw.shape;\n      if (typeof raw?.color === 'string') ctorOpts.color = raw.color;\n      if (raw?.size !== undefined) ctorOpts.size = raw.size;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('PointCollection', () =>\n        hasOpts ? new rawSDK.PointCollection(toRawPoints(rawSDK, p), ctorOpts) : new rawSDK.PointCollection(toRawPoints(rawSDK, p)),\n      'pointCollection');\n    },\n    createInfoWindow: (c, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (typeof raw?.width === 'number') ctorOpts.width = raw.width;\n      if (typeof raw?.height === 'number') ctorOpts.height = raw.height;\n      if (typeof raw?.maxWidth === 'number') ctorOpts.maxWidth = raw.maxWidth;\n      if (raw?.offset) ctorOpts.offset = toRawSize(rawSDK, raw.offset as Size);\n      if (typeof raw?.title === 'string') ctorOpts.title = raw.title;\n      if (typeof raw?.enableAutoPan === 'boolean') ctorOpts.enableAutoPan = raw.enableAutoPan;\n      if (typeof raw?.enableCloseOnClick === 'boolean') ctorOpts.enableCloseOnClick = raw.enableCloseOnClick;\n      if (typeof raw?.enableMessage === 'boolean') ctorOpts.enableMessage = raw.enableMessage;\n      if (typeof raw?.message === 'string') ctorOpts.message = raw.message;\n      if (typeof raw?.maxContent === 'string') ctorOpts.maxContent = raw.maxContent;\n      if (typeof raw?.enableMaximize === 'boolean') ctorOpts.enableMaximize = raw.enableMaximize;\n      if (typeof raw?.enableSearchTool === 'boolean') ctorOpts.enableSearchTool = raw.enableSearchTool;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('InfoWindow', () =>\n        hasOpts ? new rawSDK.InfoWindow(c, ctorOpts) : new rawSDK.InfoWindow(c),\n      'infoWindow');\n    },\n    createSymbol: (path, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.anchor) ctorOpts.anchor = toRawSize(rawSDK, raw.anchor as Size);\n      if (typeof raw?.fillColor === 'string') ctorOpts.fillColor = raw.fillColor;\n      if (typeof raw?.fillOpacity === 'number') ctorOpts.fillOpacity = raw.fillOpacity;\n      if (typeof raw?.scale === 'number') ctorOpts.scale = raw.scale;\n      if (typeof raw?.rotation === 'number') ctorOpts.rotation = raw.rotation;\n      if (typeof raw?.strokeColor === 'string') ctorOpts.strokeColor = raw.strokeColor;\n      if (typeof raw?.strokeOpacity === 'number') ctorOpts.strokeOpacity = raw.strokeOpacity;\n      if (typeof raw?.strokeWeight === 'number') ctorOpts.strokeWeight = raw.strokeWeight;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Symbol', () =>\n        hasOpts ? new rawSDK.Symbol(path, ctorOpts) : new rawSDK.Symbol(path),\n      'symbol');\n    },\n    createIcon: (url, size, o) => {\n      const raw = o as Record<string, unknown>;\n  const isV3 = typeof (globalThis as { BMapGL?: unknown }).BMapGL === 'undefined';\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.anchor) ctorOpts.anchor = toRawSize(rawSDK, raw.anchor as Size);\n      // v3 的 imageOffset 用 CSS background-position 语义（负值=右移），v4 用正值=裁剪起点\n      if (raw?.imageOffset) {\n        const off = raw.imageOffset as Size;\n        ctorOpts.imageOffset = isV3\n          ? new rawSDK.Size(-off.width, -off.height)\n          : toRawSize(rawSDK, off);\n      }\n      if (raw?.imageSize) ctorOpts.imageSize = toRawSize(rawSDK, raw.imageSize as Size);\n      if (raw?.infoWindowAnchor) ctorOpts.infoWindowAnchor = toRawSize(rawSDK, raw.infoWindowAnchor as Size);\n      if (typeof raw?.printImageUrl === 'string') ctorOpts.printImageUrl = raw.printImageUrl;\n      if (raw?.srcset) ctorOpts.srcset = raw.srcset;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      const imgSize = raw?.imageSize ? toRawSize(rawSDK, raw.imageSize as Size) : null;\n      return createOverlayFactory('Icon', () => {\n        const inst = hasOpts\n          ? new rawSDK.Icon(url, new rawSDK.Size(size.width, size.height), ctorOpts)\n          : new rawSDK.Icon(url, new rawSDK.Size(size.width, size.height));\n        // v3 SDK 构造函数不接受 imageSize，需要额外调 setImageSize\n        if (imgSize && typeof inst.setImageSize === 'function') inst.setImageSize(imgSize);\n        return inst;\n      }, 'icon');\n    },\n    createIconSequence: (sym, offset, repeat, fr) => createOverlayFactory('IconSequence', () => new rawSDK.IconSequence(sym ? rawOf(sym) : undefined, offset, repeat ?? '', fr), 'iconSequence'),\n    createHotspot: (p, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (typeof raw?.text === 'string') ctorOpts.text = raw.text;\n      if (Array.isArray(raw?.offsets)) ctorOpts.offsets = raw.offsets;\n      if (raw?.userData !== undefined) ctorOpts.userData = raw.userData;\n      if (typeof raw?.minZoom === 'number') ctorOpts.minZoom = raw.minZoom;\n      if (typeof raw?.maxZoom === 'number') ctorOpts.maxZoom = raw.maxZoom;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Hotspot', () =>\n        hasOpts ? new rawSDK.Hotspot(toRawPoint(rawSDK, p), ctorOpts) : new rawSDK.Hotspot(toRawPoint(rawSDK, p)),\n      'hotspot');\n    },\n    createCustomOverlay: (domCreate, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (raw?.point) ctorOpts.point = toRawPoint(rawSDK, raw.point as Point);\n      if (raw?.anchors) ctorOpts.anchors = raw.anchors;\n      if (typeof raw?.offsetX === 'number') ctorOpts.offsetX = raw.offsetX;\n      if (typeof raw?.offsetY === 'number') ctorOpts.offsetY = raw.offsetY;\n      if (typeof raw?.rotation === 'number') ctorOpts.rotation = raw.rotation;\n      if (typeof raw?.rotationInit === 'number') ctorOpts.rotationInit = raw.rotationInit;\n      if (typeof raw?.minZoom === 'number') ctorOpts.minZoom = raw.minZoom;\n      if (typeof raw?.maxZoom === 'number') ctorOpts.maxZoom = raw.maxZoom;\n      if (raw?.properties !== undefined) ctorOpts.properties = raw.properties;\n      if (typeof raw?.fixBottom === 'boolean') ctorOpts.fixBottom = raw.fixBottom;\n      if (typeof raw?.useTranslate === 'boolean') ctorOpts.useTranslate = raw.useTranslate;\n      if (typeof raw?.autoFollowHeadingChanged === 'boolean') ctorOpts.autoFollowHeadingChanged = raw.autoFollowHeadingChanged;\n      if (typeof raw?.zIndex === 'number') ctorOpts.zIndex = raw.zIndex;\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      if (typeof raw?.enableDraggingMap === 'boolean') ctorOpts.enableDraggingMap = raw.enableDraggingMap;\n      return createOverlayFactory('CustomOverlay', () =>\n        new rawSDK.CustomOverlay(domCreate ?? (() => document.createElement('div')), ctorOpts),\n      'customOverlay');\n    },\n    createMarker3D: (p, height, o) => {\n      const raw = o as Record<string, unknown>;\n      const ctorOpts: Record<string, unknown> = {};\n      if (typeof raw?.shape === 'number') ctorOpts.shape = raw.shape;\n      if (typeof raw?.size === 'number') ctorOpts.size = raw.size;\n      if (typeof raw?.fillColor === 'string') ctorOpts.fillColor = raw.fillColor;\n      if (typeof raw?.fillOpacity === 'number') ctorOpts.fillOpacity = raw.fillOpacity;\n      if (typeof raw?.enableMassClear === 'boolean') ctorOpts.enableMassClear = raw.enableMassClear;\n      const hasOpts = Object.keys(ctorOpts).length > 0;\n      return createOverlayFactory('Marker3D', () =>\n        hasOpts\n          ? new rawSDK.Marker3D(toRawPoint(rawSDK, p), height, ctorOpts)\n          : new rawSDK.Marker3D(toRawPoint(rawSDK, p), height),\n      'marker3d');\n    },\n\n    // ─────────────── 27. Overlay 属性 setter ───────────────\n    setOverlayPosition: (ov, p) => {\n      try {\n        const r = rawOf(ov);\n        // Circle 用 setCenter，GroundPoint 用 setPoint，其余用 setPosition\n        if (ov.type === 'circle') r.setCenter?.(toRawPoint(rawSDK, p));\n        else if (ov.type === 'groundPoint') r.setPoint?.(toRawPoint(rawSDK, p));\n        else r.setPosition?.(toRawPoint(rawSDK, p));\n      } catch { /* ignore */ }\n    },\n    setOverlayPath: (ov, path) => {\n      try {\n        // PointCollection 用 setPoints 而非 setPath\n        if (ov.type === 'pointCollection') {\n          rawOf(ov).setPoints?.(toRawPoints(rawSDK, path as Point[]));\n          return;\n        }\n        if (isNestedPath(path)) {\n          // 只有 Polygon 的 setPath 支持多坐标串（Point[][]，镂空/多环，对齐 JSAPI）。\n          // 其余（如 Prism）无法用多坐标串更新，交由 ctorOnlyProps/key 重建处理。\n          if (ov.type === 'polygon') rawOf(ov).setPath?.(toRawPointGroups(rawSDK, path));\n          return;\n        }\n        rawOf(ov).setPath?.(toRawPoints(rawSDK, path as Point[]));\n      } catch { /* ignore */ }\n    },\n    setOverlayOptions: (ov, options) => {\n      const r = rawOf(ov);\n      const o = options as Record<string, unknown>;\n      warnUnhandledOverlayOptions(ov.type, o);\n      try {\n        if (typeof o.strokeColor === 'string') r.setStrokeColor?.(o.strokeColor);\n        if (typeof o.strokeWeight === 'number') r.setStrokeWeight?.(o.strokeWeight);\n        if (typeof o.strokeOpacity === 'number') r.setStrokeOpacity?.(o.strokeOpacity);\n        if (typeof o.strokeStyle === 'string') r.setStrokeStyle?.(o.strokeStyle);\n        if (o.enableEditing === true) r.enableEditing?.();\n        else if (o.enableEditing === false && ov.type !== 'circle') r.disableEditing?.();\n        if (typeof o.fillColor === 'string') r.setFillColor?.(o.fillColor);\n        if (typeof o.fillOpacity === 'number') r.setFillOpacity?.(o.fillOpacity);\n        // Prism 专属：顶面/侧面填充分开设置，空字符串表示无填充，所以用 typeof 判断而非真值判断\n        if (typeof o.topFillColor === 'string') r.setTopFillColor?.(o.topFillColor);\n        if (typeof o.topFillOpacity === 'number') r.setTopFillOpacity?.(o.topFillOpacity);\n        if (typeof o.sideFillColor === 'string') r.setSideFillColor?.(o.sideFillColor);\n        if (typeof o.sideFillOpacity === 'number') r.setSideFillOpacity?.(o.sideFillOpacity);\n        if (typeof o.radius === 'number' && ov.type === 'circle') r.setRadius?.(o.radius);\n        if (o.bounds && (ov.type === 'rectangle' || ov.type === 'groundOverlay')) r.setBounds?.(toRawBounds(rawSDK, o.bounds as Bounds));\n        if (o.controlPoints && ov.type === 'bezierCurve') r.setControlPoints?.(toRawPointGroups(rawSDK, o.controlPoints as Point[][]));\n        if (typeof o.altitude === 'number' && ov.type === 'prism') r.setAltitude?.(o.altitude);\n        // GroundOverlay / GroundPoint 共有（按 type 收窄，避免命中其他同名属性）。\n        // url 为 canvas 元素时没有对应 setter（SDK 的 setImage 只接受地址），\n        // canvas 场景本来就应保持同一元素、靠 isReDraw + drawHook 每帧重采集内容，所以只处理字符串。\n        // setImage 是 @since 4.0；v3 上为 undefined，此时靠 imageURL → setImageURL 生效。\n        if (ov.type === 'groundOverlay' || ov.type === 'groundPoint') {\n          if (typeof o.url === 'string') r.setImage?.(o.url);\n          if (typeof o.imageURL === 'string') r.setImageURL?.(o.imageURL);\n          else if (typeof o.url === 'string') r.setImageURL?.(o.url); // v3 fallback\n          if (typeof o.displayOnMinLevel === 'number') r.setDisplayOnMinLevel?.(o.displayOnMinLevel);\n          if (typeof o.displayOnMaxLevel === 'number') r.setDisplayOnMaxLevel?.(o.displayOnMaxLevel);\n        }\n        // GroundPoint 专属 setter：size/scale。anchor 是 Size（与 Marker 的 number 枚举不同）。\n        if (ov.type === 'groundPoint') {\n          if (o.size && typeof o.size === 'object') r.setSize?.(toRawSize(rawSDK, o.size as Size));\n        }\n        // GroundPoint / Symbol 共有：scale\n        if (typeof o.scale === 'number' && (ov.type === 'groundPoint' || ov.type === 'symbol')) r.setScale?.(o.scale);\n        // Symbol 专属：path 是 SVG path 字符串或符号常量（非 Point[]），走 setPath 而非 setOverlayPath\n        if (ov.type === 'symbol' && o.path !== undefined) r.setPath?.(o.path);\n        // Icon 专属 setter：url→setImageUrl, size→setSize, imageOffset/imageSize/infoWindowAnchor→各自 setter,\n        // printImageUrl→setPrintImageUrl（@removed 4.0）, srcset→setImageSrcset（@since 4.0 @hide）\n        if (ov.type === 'icon') {\n          if (typeof o.url === 'string') r.setImageUrl?.(o.url);\n          if (o.size && typeof o.size === 'object') r.setSize?.(toRawSize(rawSDK, o.size as Size));\n          if (o.imageOffset && typeof o.imageOffset === 'object') r.setImageOffset?.(toRawSize(rawSDK, o.imageOffset as Size));\n          if (o.imageSize && typeof o.imageSize === 'object') r.setImageSize?.(toRawSize(rawSDK, o.imageSize as Size));\n          if (o.infoWindowAnchor && typeof o.infoWindowAnchor === 'object') r.setInfoWindowAnchor?.(toRawSize(rawSDK, o.infoWindowAnchor as Size));\n          if (typeof o.printImageUrl === 'string') r.setPrintImageUrl?.(o.printImageUrl);\n          if (o.srcset) r.setImageSrcset?.(o.srcset);\n        }\n        // PointCollection 专属：SDK 没有 setColor/setShape/setSize，只有 setStyles(opts) 批量设置。\n        // shape/color/size 任一变化时收集当前值整体传给 setStyles。\n        if (ov.type === 'pointCollection') {\n          const styles: Record<string, unknown> = {};\n          if (o.shape !== undefined) styles.shape = o.shape;\n          if (typeof o.color === 'string') styles.color = o.color;\n          if (o.size !== undefined) styles.size = o.size;\n          if (Object.keys(styles).length > 0) r.setStyles?.(styles);\n        }\n        // rotation=0 在 v4 下安全，v3 下会导致命中区域塌缩（但影响较小，允许设置以支持重置）\n        if (typeof o.rotation === 'number') r.setRotation?.(o.rotation);\n        if (typeof o.title === 'string') r.setTitle?.(o.title);\n        if (typeof o.content === 'string') r.setContent?.(o.content);\n        // Hotspot 专属：setText / setUserData（@removed 4.0，仅 v3）\n        if (ov.type === 'hotspot') {\n          if (typeof o.text === 'string') r.setText?.(o.text);\n          if (o.userData !== undefined) r.setUserData?.(o.userData);\n        }\n        // CustomOverlay 专属（@since 4.0）：setPoint / setRotationOrigin / setProperties\n        if (ov.type === 'customOverlay') {\n          if (o.point) r.setPoint?.(toRawPoint(rawSDK, o.point as Point));\n          if (typeof o.rotationInit === 'number') r.setRotationOrigin?.(o.rotationInit);\n          if (o.properties !== undefined) r.setProperties?.(o.properties);\n        }\n        // Marker3D 专属 setter（shape/size 无 setter，走 ctorOnlyProps 重建）\n        if (ov.type === 'marker3d') {\n          if (typeof o.height === 'number') r.setHeight?.(o.height);\n          if (typeof o.fillColor === 'string') r.setFillColor?.(o.fillColor);\n          if (typeof o.fillOpacity === 'number') r.setFillOpacity?.(o.fillOpacity);\n        }\n        // Label 专属\n        if (o.styles && typeof o.styles === 'object') r.setStyles?.(o.styles);\n        if (typeof o.opacity === 'number') {\n          if (ov.type === 'marker' && typeof r.setOptions === 'function') r.setOptions({ opacity: o.opacity });\n          else r.setOpacity?.(o.opacity);\n        }\n        if (o.icon !== undefined) r.setIcon?.(toRawIcon(rawSDK, o.icon));\n        // Marker/Label 的 anchor 是 ControlAnchor 枚举（number）；GroundPoint/Symbol/Icon 的 anchor 是 Size\n        if (typeof o.anchor === 'number') r.setAnchor?.(o.anchor);\n        else if (o.anchor && typeof o.anchor === 'object' && (ov.type === 'groundPoint' || ov.type === 'symbol' || ov.type === 'icon')) r.setAnchor?.(toRawSize(rawSDK, o.anchor as Size));\n        // SDK Marker 默认不可拖拽，必须主动调 enable/disable 控制。\n        // undefined 时不干预（用 SDK 默认行为，即不可拖拽）。\n        if (o.enableDragging === true) r.enableDragging?.();\n        else if (o.enableDragging === false) r.disableDragging?.();\n        if (o.enableMassClear === true) r.enableMassClear?.();\n        else if (o.enableMassClear === false) r.disableMassClear?.();\n        if (typeof o.zIndex === 'number') r.setZIndex?.(o.zIndex);\n        if (o.offset) r.setOffset?.(toRawSize(rawSDK, o.offset));\n        // Marker v4+ 专属 setter\n        if (typeof o.color === 'string' && ov.type === 'marker') r.setColor?.(o.color);\n        if (typeof o.rank === 'number' && ov.type === 'marker') { r.setRank?.(o.rank); overlayToCM.get(r)?.schedule(); }\n        if (typeof o.rotationOrigin === 'number' && ov.type === 'marker') r.setRotationOrigin?.(o.rotationOrigin);\n      } catch { /* ignore */ }\n    },\n\n    // ─────────────── 27b. Overlay 默认值快照 / 还原 ───────────────\n    // prop 从有值变回 undefined 时，框架需要「SDK 默认值」才能真正复原。SDK 没有 unset 语义，\n    // 唯一可靠来源是实例自己的 getter：挂载后先读一份，之后按需写回。\n    snapshotOverlayOptions: (ov, keys) => {\n      const out: Record<string, unknown> = {};\n      const r = rawOf(ov);\n      if (!r) return out;\n      for (const k of keys) {\n        const { get, set } = optionAccessor(k);\n        // setter 不存在就不必记 —— 记了也写不回去，只会让上层误判为「已还原」\n        if (typeof r[get] !== 'function' || typeof r[set] !== 'function') continue;\n        try {\n          const v = r[get]();\n          if (v !== undefined && v !== null) out[k] = v;\n        } catch { /* getter 抛错等同于读不到 */ }\n      }\n      return out;\n    },\n    restoreOverlayOptions: (ov, snapshot) => {\n      const failed: string[] = [];\n      const r = rawOf(ov);\n      for (const [k, v] of Object.entries(snapshot)) {\n        const { set } = optionAccessor(k);\n        if (!r || typeof r[set] !== 'function') { failed.push(k); continue; }\n        // 快照里存的已经是 SDK 原始对象，不能再过 toRawXxx 转换\n        try { r[set](v); } catch { failed.push(k); }\n      }\n      return failed;\n    },\n\n    // ─────────────── 27c. Overlay 可见性 / PlaceDetail ───────────────\n    showOverlay: (ov) => {\n      const raw = rawOf(ov);\n      const s = collisionState.get(raw);\n      if (s) { s.userVisible = true; if (s.hidden) return; }\n      try { raw.show?.(); } catch { /* ignore */ }\n      const c = raw?.getContainer?.() ?? raw?._container;\n      if (c) c.style.display = '';\n    },\n    hideOverlay: (ov) => {\n      const raw = rawOf(ov);\n      const s = collisionState.get(raw);\n      if (s) s.userVisible = false;\n      try { raw.hide?.(); } catch { /* ignore */ }\n      const c = raw?.getContainer?.() ?? raw?._container;\n      if (c) c.style.display = 'none';\n    },\n    openPlaceDetail: (marker, pd) => callRaw('Marker.openPlaceDetail', () => rawOf(marker).openPlaceDetail?.(rawOf(pd))),\n    closePlaceDetail: (marker) => { try { rawOf(marker).closePlaceDetail?.(); } catch { /* ignore */ } },\n\n    // ─────────────── 28. Control 工厂 ───────────────\n    createNavigationControl: (o) => createControlFactory('NavigationControl', () => new rawSDK.NavigationControl(toRawControlOptions(rawSDK, o)), 'navigation'),\n    createNavigationControl3D: (o) => createControlFactory('NavigationControl3D', () => new rawSDK.NavigationControl3D(toRawControlOptions(rawSDK, o)), 'navigation3D'),\n    createScaleControl: (o) => createControlFactory('ScaleControl', () => new rawSDK.ScaleControl(toRawControlOptions(rawSDK, o)), 'scale'),\n    createOverviewMapControl: (o) => createControlFactory('OverviewMapControl', () => new rawSDK.OverviewMapControl(toRawControlOptions(rawSDK, o)), 'overview'),\n    createMapTypeControl: (o) => createControlFactory('MapTypeControl', () => new rawSDK.MapTypeControl(toRawControlOptions(rawSDK, o)), 'mapType'),\n    createCopyrightControl: (o) => createControlFactory('CopyrightControl', () => { const c = new rawSDK.CopyrightControl(toRawControlOptions(rawSDK, o)); applyCopyrights(rawSDK, c, (o as any)?.copyrights); return c; }, 'copyright'),\n    createGeolocationControl: (o) => createControlFactory('GeolocationControl', () => new rawSDK.GeolocationControl(toRawControlOptions(rawSDK, o)), 'geolocation'),\n    createPanoramaControl: () => createControlFactory('PanoramaControl', () => new rawSDK.PanoramaControl(), 'panorama'),\n    createZoomControl: (o) => createControlFactory('ZoomControl', () => new rawSDK.ZoomControl(toRawControlOptions(rawSDK, o)), 'zoom'),\n    createCityListControl: (o) => createControlFactory('CityListControl', () => new rawSDK.CityListControl(toRawControlOptions(rawSDK, o)), 'cityList'),\n    createLocationControl: (o) => createControlFactory('GeolocationControl', () => new rawSDK.GeolocationControl(toRawControlOptions(rawSDK, o)), 'geolocation'),\n    createLogoControl: (o) => createControlFactory('LogoControl', () => new rawSDK.LogoControl(toRawControlOptions(rawSDK, o)), 'logo'),\n    createControl: (o) => createControlFactory('Control', () => { const c = new rawSDK.Control(); Object.assign(c, toRawControlOptions(rawSDK, o)); return c; }, 'custom'),\n    createCustomControl: (domCreate, o) => createControlFactory('Control', () => {\n      // 动态继承 BMap.Control，重写 initialize：SDK 在 map.addControl() 时通过内部\n      // _i() 调用它——_i() 会先执行 initialize() 拿到 DOM 并赋给 this._container，\n      // *之后* 才用 `this._opts = this._opts || {printable:false}` 兜底初始化 _opts，\n      // 再调用 _setPosition()（内部即 this.setAnchor(this._opts.anchor)）。\n      //\n      // 所以 anchor/offset 不能在 initialize() 内部调用 setAnchor/setOffset——此刻\n      // _opts 还是 undefined，setAnchor 内部访问 this._opts.offset 会直接抛错。\n      // 必须把 _opts 的初始化提前到 initialize() 里、_i() 兜底赋值之前，这样 _i()\n      // 自带的 _setPosition() 会用到我们预置的 anchor，再显式补一次 setOffset\n      // （_setPosition 只处理 anchor，不处理 offset）。\n      //\n      // defaultAnchor/defaultOffset 必须显式设置：Control.d.ts 明确要求\"自定义控件时\n      // 需提供此属性\"，原生 setAnchor 内部用 `this._opts.offset || this.defaultOffset`\n      // 兜底——不传 offset 时若 defaultOffset 也是 undefined，会读 undefined.width 报错。\n      const opts = toRawControlOptions(rawSDK, o);\n      class CustomControlImpl extends rawSDK.Control {\n        defaultAnchor = 0; // BMAP_ANCHOR_TOP_LEFT\n        defaultOffset = new rawSDK.Size(0, 0);\n        initialize(map: BMap.Map) {\n          const div = domCreate();\n          map.getContainer().appendChild(div);\n          this._opts = { printable: false, anchor: opts.anchor };\n          if (opts.offset !== undefined) this.setOffset(opts.offset);\n          return div;\n        }\n      }\n      const c = new CustomControlImpl();\n      return c;\n    }, 'custom'),\n\n    // ─────────────── 29. Layer 工厂 ───────────────\n    createTileLayer: (o) => createLayerFactory('TileLayer', () => new rawSDK.TileLayer(o), 'tile'),\n    createNormalLayer: (o) => createLayerFactory('NormalLayer', () => new rawSDK.NormalLayer(o), 'normal'),\n    createGeoJSONLayer: (o) => {\n      const opts = o as Record<string, unknown>;\n      const layerName = (opts?.layerName as string) || 'react-bmap-geojson';\n      return createLayerFactory('GeoJSONLayer', () => new rawSDK.GeoJSONLayer(layerName, opts), 'geojson');\n    },\n    createDistrictLayer: (o) => createLayerFactory('DistrictLayer', () => new rawSDK.DistrictLayer(o), 'district'),\n    createTrafficLayer: (o) => createLayerFactory('TrafficLayer', () => new rawSDK.TrafficLayer(o), 'traffic'),\n    createCustomLayer: (o) => createLayerFactory('CustomLayer', () => new rawSDK.CustomLayer(o), 'custom'),\n    createCanvasLayer: (o) => createLayerFactory('CanvasLayer', () => new rawSDK.CanvasLayer(o), 'canvas'),\n\n    // 高级图层（4.0+）\n    createRasterTileLayer: (o) => createLayerFactory('RasterTileLayer', () => new rawSDK.RasterTileLayer(o), 'tile'),\n    createWMSLayer: (o) => createLayerFactory('WMSLayer', () => new rawSDK.WMSLayer(o), 'tile'),\n    createWMTSLayer: (o) => createLayerFactory('WMTSLayer', () => new rawSDK.WMTSLayer(o), 'tile'),\n    createXYZLayer: (o) => createLayerFactory('XYZLayer', () => new rawSDK.XYZLayer(o), 'tile'),\n    createMVTLayer: (o) => createLayerFactory('MVTLayer', () => new rawSDK.MVTLayer(o), 'tile'),\n    createFeatureLayer: (o) => createLayerFactory('FeatureLayer', () => new rawSDK.FeatureLayer(o), 'custom'),\n    createFillLayer: (o) => createLayerFactory('FillLayer', () => new rawSDK.FillLayer(o), 'custom'),\n    createDOMLayer: (o) => createLayerFactory('DOMLayer', () => {\n      // DOMLayer 构造函数签名: (createDOM: Function, opts?: DOMLayerOptions)\n      const createDOM = (o as any)?.createDOM;\n      if (!createDOM) throw new Error('DOMLayer requires createDOM function');\n      const { createDOM: _cd, ...opts } = o as any;\n      return new rawSDK.DOMLayer(createDOM, opts);\n    }, 'custom'),\n    createPointIconLayer: (o) => createLayerFactory('PointIconLayer', () => new rawSDK.PointIconLayer(o), 'custom'),\n    createPointShapeLayer: (o) => createLayerFactory('PointShapeLayer', () => new rawSDK.PointShapeLayer(o), 'custom'),\n    createPanoramaCoverageLayer: (o) => createLayerFactory('PanoramaCoverageLayer', () => new rawSDK.PanoramaCoverageLayer(o), 'custom'),\n    createLineLayer: (o) => createLayerFactory('LineLayer', () => new rawSDK.LineLayer(o), 'custom'),\n    createPixelLayer: (o) => createLayerFactory('PixelLayer', () => new rawSDK.PixelLayer(o), 'custom'),\n    createBaiduLayer: (o) => createLayerFactory('BaiduLayer', () => new rawSDK.BaiduLayer(o), 'custom'),\n    createThreeLayer: (o) => createLayerFactory('ThreeLayer', () => new rawSDK.ThreeLayer(o), 'custom'),\n\n    // ─────────────── 30. ContextMenu ───────────────\n    createContextMenu: (o) => createOverlayFactory('ContextMenu', () => new rawSDK.ContextMenu(o), 'contextMenu'),\n    createMenuItem: (text, cb, o) => createOverlayFactory('MenuItem', () => new rawSDK.MenuItem(text, cb, o), 'menuItem'),\n    addMenuItem: (menu, item, idx) => { try { rawOf(menu).addItem?.(rawOf(item), idx); } catch { /* ignore */ } },\n    removeMenuItem: (menu, item) => { try { rawOf(menu).removeItem?.(rawOf(item)); } catch { /* ignore */ } },\n\n    // ─────────────── 31. Panorama ───────────────\n    createPanorama: (container, o) => {\n      if (!capabilities.has('Panorama')) { reportUnsupported('Panorama', version, behavior); return null; }\n      try { return mapHandle(new rawSDK.Panorama(container, o)); }\n      catch (e) { reportCallFailure('Panorama', version, behavior, e); return null; }\n    },\n    createPanoramaLabel: (o) => {\n      const opts = o as Record<string, unknown>;\n      const content = (opts?.content as string) || '';\n      const labelOpts: Record<string, unknown> = {};\n      if (opts?.position) labelOpts.position = toRawPoint(rawSDK, opts.position as Point);\n      if (typeof opts?.altitude === 'number') labelOpts.altitude = opts.altitude;\n      if (typeof opts?.displayDistance === 'boolean') labelOpts.displayDistance = opts.displayDistance;\n      if (opts?.customStyle) labelOpts.customStyle = opts.customStyle;\n      return createOverlayFactory('PanoramaLabel', () => new rawSDK.PanoramaLabel(content, labelOpts), 'panoramaLabel');\n    },\n    destroyPanorama: (handle) => { try { rawOf(handle).destroy?.(); } catch { /* ignore */ } },\n\n    // ─────────────── 32. 服务工厂 ───────────────\n    createLocalSearch: (loc, o) => createServiceFactory('LocalSearch', () => new rawSDK.LocalSearch(unwrapHandle(loc), o)),\n    createGeocoder: () => createServiceFactory('Geocoder', () => new rawSDK.Geocoder()),\n    createDrivingRoute: (o) => createServiceFactory('DrivingRoute', () => new rawSDK.DrivingRoute((o as any)?.location, o)),\n    createWalkingRoute: (o) => createServiceFactory('WalkingRoute', () => new rawSDK.WalkingRoute((o as any)?.location, o)),\n    createRidingRoute: (o) => createServiceFactory('RidingRoute', () => new rawSDK.RidingRoute((o as any)?.location, o)),\n    createTransitRoute: (o) => createServiceFactory('TransitRoute', () => new rawSDK.TransitRoute((o as any)?.location, o)),\n    createBusLineSearch: (o) => createServiceFactory('BusLineSearch', () => new rawSDK.BusLineSearch((o as any)?.location, o)),\n    createAutocomplete: (o) => createServiceFactory('Autocomplete', () => new rawSDK.Autocomplete(o)),\n    createBoundary: () => createServiceFactory('Boundary', () => new rawSDK.Boundary()),\n    createGeolocation: (o) => createServiceFactory('Geolocation', () => new rawSDK.Geolocation(o)),\n    createLocalCity: (o) => createServiceFactory('LocalCity', () => new rawSDK.LocalCity(o)),\n    createPlaceDetail: (o) => createServiceFactory('PlaceDetail', () => {\n      const container = (o as any)?.container ?? document.createElement('div');\n      const rawMap = (o as any)?.map;\n      const opts: Record<string, unknown> = { ...(o as Record<string, unknown>), map: rawMap };\n      return new rawSDK.PlaceDetail(container, opts);\n    }),\n    createConvertor: () => createServiceFactory('Convertor', () => new rawSDK.Convertor()),\n    createPanoramaService: () => createServiceFactory('PanoramaService', () => new rawSDK.PanoramaService()),\n    createTruckRoute: (o) => createServiceFactory('TruckRoute', () => {\n      if (!rawSDK.TruckRoute) throw new Error('TruckRoute not exposed in runtime SDK');\n      return new rawSDK.TruckRoute((o as any)?.location, o);\n    }),\n\n    searchService(service, query, callbacks) {\n      const raw = rawOf(service);\n      if (!raw) return () => {};\n      let cancelled = false;\n      const safeCb = <T,>(fn?: (data: T) => void) => (data: T) => { if (!cancelled) fn?.(data); };\n      if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(safeCb(callbacks.onSuccess));\n      else if (typeof raw.setSearchComplete === 'function') raw.setSearchComplete(safeCb(callbacks.onSuccess));\n      try { raw.search?.(query); } catch (err) { (safeCb(callbacks.onError as any))(err as Error); }\n      return () => { cancelled = true; };\n    },\n    getServiceResults(service) {\n      const raw = rawOf(service);\n      if (!raw || typeof raw.getResults !== 'function') return null;\n      return raw.getResults();\n    },\n\n    // ─────────────── 33. 事件 ───────────────\n    addEventListener(target, type, handler) {\n      const raw = rawOf(target);\n      raw.addEventListener?.(type, handler);\n      return () => raw.removeEventListener?.(type, handler);\n    },\n    removeEventListener(target, type, handler) {\n      rawOf(target).removeEventListener?.(type, handler);\n    },\n  };\n}\n\nfunction inferOverlayType(raw: any): string {\n  return (raw?.constructor?.name ?? 'unknown').toLowerCase();\n}\n","/**\n * 全局 BMap SDK 访问入口。\n *\n * SDK 脚本由 jsapi-loader 注入到全局（v3 为 `BMap`，v4 的 `BMapGL` 出于兼容\n * 也会挂 `BMap` 别名）。这里集中收敛对全局对象的类型断言，\n * 避免在各 hook / 组件里散落 `(globalThis as any).BMap`。\n *\n * 构造器签名直接取自官方类型包 `@baidumap/jsapi-v4-types` 的全局 `BMap` 命名空间，\n * 所以 `new SDK.Point(...)` 得到的是真正的 `BMap.Point`，而不是 `unknown`。\n */\n\n/**\n * 官方类型包尚未声明、但本库运行时确实会用到的构造器。\n *\n * 这里只补「官方缺、我们用」的部分 —— 官方补齐后应当从此处删掉，\n * 而不是让手写声明和官方声明长期并存。\n */\ninterface BMapSDKExtras {\n  /** v4 的地图遮罩层，官方类型包未声明；见 components/Overlay/MapMask.tsx */\n  readonly MapMask: new (points: BMap.Point[], opts?: Record<string, unknown>) => unknown;\n  /** v4 的简易信息窗，官方类型包未声明；见 components/Overlay/SimpleInfoWindow.tsx */\n  readonly SimpleInfoWindow: new (\n    content: string | HTMLElement,\n    opts?: Record<string, unknown>,\n  ) => unknown;\n}\n\n/**\n * 运行时全局 SDK 对象的类型。\n *\n * - `typeof BMap`：官方命名空间里的全部构造器与常量，带完整参数/返回值签名\n * - `BMapSDKExtras`：补齐官方尚未声明的成员\n * - 索引签名：v3/v4 之间成员存在差异，未知成员以 `unknown` 兜底，由调用方自行断言\n *\n * 交集类型下，已声明的成员优先于索引签名解析，因此 `SDK.Point` 仍是精确类型。\n */\nexport type BMapSDK = typeof BMap & BMapSDKExtras & { readonly [key: string]: unknown };\n\n/** globalThis 上的 `BMap` 由官方类型声明为必选，这里统一收敛成可选形态的一次断言。 */\nconst globalScope = globalThis as unknown as { BMap?: BMapSDK };\n\n/**\n * 获取全局 BMap SDK 对象；若脚本尚未注入则抛出清晰错误。\n * 适用于随后直接访问 `SDK.Point` 等构造器的调用方 —— 相比原先返回\n * undefined 后触发的 `Cannot read properties of undefined`，这里给出可读的失败原因。\n */\nexport function getSDK(): BMapSDK {\n  const sdk = globalScope.BMap;\n  if (!sdk) {\n    throw new Error('[react-bmap] BMap SDK 尚未加载，请确认地图脚本已由 jsapi-loader 注入完成。');\n  }\n  return sdk;\n}\n\n/**\n * 获取全局 BMap SDK 对象；未注入时返回 undefined。\n * 供可优雅降级的调用方使用（如运行时常量回退、组件在 SDK 缺失时静默跳过）。\n */\nexport function tryGetSDK(): BMapSDK | undefined {\n  return globalScope.BMap;\n}\n","import type { UnsupportedBehavior } from '../types';\nimport type { OverlayHandle } from '../types';\nimport type { BMapDriver } from './types';\nimport type { Point } from '../types';\nimport { CAPABILITY_MATRIX } from './capabilityMatrix';\nimport { createV4Driver } from './v4Driver';\nimport { reportCallFailure, reportUnsupported, unsupportedValue } from './unsupported';\nimport { getSDK } from '../utils/sdk';\n\n/**\n * v3 Driver — 3.0 适配。\n * - 复用 v4 driver 的通用骨架\n * - 3.0-only 方法真实实现\n * - 4.0-only 方法走 unsupported\n * - capabilities 用 v3 矩阵（与 v4 区分）\n */\nexport function createV3Driver(rawSDK: any, opts: { unsupportedBehavior: UnsupportedBehavior }): BMapDriver {\n  const behavior = opts.unsupportedBehavior;\n  const version = '3.0' as const;\n\n  // version 传给 base：v4Driver 内部日志文案要说 \"JSAPI 3.0\"，否则 v3 会话里全打成 4.0\n  const base = createV4Driver(rawSDK, { ...opts, version });\n\n  const v3Only: Partial<BMapDriver> = {\n    // 3.0-only Map 命令真实实现\n    enableMapClick: (map) => { (map.raw as any).enableMapClick?.(); },\n    disableMapClick: (map) => { (map.raw as any).disableMapClick?.(); },\n    enable3DBuilding: (map) => { try { (map.raw as any).enable3DBuilding?.(); } catch { /* BuildingLayer may not be defined */ } },\n    disable3DBuilding: (map) => { try { (map.raw as any).disable3DBuilding?.(); } catch { /* BuildingLayer may not be defined */ } },\n    setPanorama: (map, pano) => { try { if (pano) (map.raw as any).setPanorama?.(pano); } catch { /* ignore */ } },\n    getPanorama: (map) => (map.raw as any).getPanorama?.() ?? null,\n    setCurrentCity: (map, city) => { (map.raw as any).setCurrentCity?.(city); },\n    highResolutionEnabled: (map) => (map.raw as any).highResolutionEnabled?.() ?? false,\n    addHotspot: (map, h) => { try { if (h?.raw) (map.raw as any).addHotspot?.(h.raw); } catch { /* ignore */ } },\n    removeHotspot: (map, h) => { (map.raw as any).removeHotspot?.(h.raw); },\n    clearHotspots: (map) => { (map.raw as any).clearHotspots?.(); },\n\n    // v3 的 setMapType 直接调用原生方法。\n    // 3.0 的 map.mapType 存的是 MapType 实例，内部用 === 比较（this.mapType === mapType），\n    // 不是字符串比较；react-bmap 的 BMAP_NORMAL_MAP/BMAP_SATELLITE_MAP/BMAP_HYBRID_MAP\n    // 常量统一导出字符串（供 4.0/GL 使用，见 v4Driver 的 normalizeMapTypeRequest 逻辑），\n    // 3.0 收到字符串会跟内部 MapType 实例永远不相等，视觉上\"看起来生效但内部状态错了\"。\n    // 这里把三个约定字符串换成 3.0 SDK 挂在全局 window 上的真实 MapType 实例（反查\n    // jsapi-core-3-0/src/scripts/bmap/exports.js:147-152 的 exportSymbol(window, {...})\n    // 确认挂载位置是 window 顶层，不是 window.BMap 上）。\n    setMapType: (map, t) => {\n      const raw = map.raw as any;\n      if (typeof window !== 'undefined') {\n        const w = window as any;\n        if (t === 'B_NORMAL_MAP') t = w.BMAP_NORMAL_MAP ?? t;\n        else if (t === 'B_SATELLITE_MAP') t = w.BMAP_SATELLITE_MAP ?? t;\n        else if (t === 'B_STREET_MAP') t = w.BMAP_HYBRID_MAP ?? t;\n      }\n      raw.setMapType?.(t);\n    },\n\n    // 3.0 的自定义控件：不复用 v4Driver 的 ES6 class extends 实现——3.0 的 Control\n    // 用 baidu.lang.inherits(subClass, superClass) 构建原型链（反查\n    // jsapi-core-3-0/lib/tangram.js:1282-1299 确认，只是把 superClass.prototype 塞进\n    // 一个空函数的 prototype 再 new 出来，subClass.prototype 上的自身属性逐个拷贝过去，\n    // 不走标准的 constructor 调用链），跟 ES6 class 语义不完全兼容，直接 extends 容易在\n    // 字段初始化时序上出问题。这里改用 Object.create 手动搭原型链，贴近 3.0 自身写法：\n    // new 一个空构造函数、prototype 指向 Control.prototype，再显式调用 Control.call(inst)\n    // 跑一遍构造函数体（对照 Control.js:15-42，设置 _map/_container/_type 等字段）。\n    createCustomControl: (domCreate, o) => {\n      try {\n        // 不依赖 v4Driver 内部私有的 toRawControlOptions（其逻辑覆盖 4.0-only 字段，\n        // 3.0 自定义控件只需要 anchor/offset），自己取这两个字段。\n        const raw = (o ?? {}) as Record<string, unknown>;\n        const anchor = raw.anchor;\n        const offsetRaw = raw.offset as { width: number; height: number } | undefined;\n        const ControlCtor = rawSDK.Control as new () => any;\n        const SizeCtor = rawSDK.Size as new (w: number, h: number) => unknown;\n        const offset = offsetRaw ? new SizeCtor(offsetRaw.width, offsetRaw.height) : undefined;\n\n        const proto = Object.create(ControlCtor.prototype);\n        proto.initialize = function (map: any) {\n          const container = map?.container ?? map?.getContainer?.();\n          if (!container) return undefined;\n          const div = domCreate();\n          container.appendChild(div);\n          // 必须先赋 _container、再调用 setAnchor()/setOffset() 让 SDK 自身方法完成\n          // 校验 + DOM 定位；手动摸 this._opts 内部结构会导致 anchor 值不生效\n          // （_setPosition 最终读到的值不对，实测确认过）。\n          this._container = div;\n          this.setAnchor(anchor);\n          if (offset !== undefined) this.setOffset(offset);\n          return div;\n        };\n        // defaultAnchor/defaultOffset：3.0 的 setAnchor/setOffset 内部用\n        // `this._opts.offset || this[\"defaultOffset\"]` 兜底，不设置的话在没传\n        // offset 时会读 undefined.width 报错（对照 Control.js:150/157）。\n        proto.defaultAnchor = 0; // BMAP_ANCHOR_TOP_LEFT\n        proto.defaultOffset = new SizeCtor(0, 0);\n\n        const instance = Object.create(proto);\n        ControlCtor.call(instance);\n        return { __brand: 'ControlHandle' as const, raw: instance, type: 'custom' };\n      } catch (e) {\n        reportCallFailure('Control', version, behavior, e);\n        return null;\n      }\n    },\n\n    // Hotspot 是 v3-only，v4Driver 的 createOverlayFactory 闭包捕获了 v4 能力矩阵\n    // （Hotspot 不在 v4 矩阵中），所以必须在这里直接创建，绕过能力检查\n    createHotspot: (p, o) => {\n      try {\n        const raw = o as Record<string, unknown>;\n        const ctorOpts: Record<string, unknown> = {};\n        if (typeof raw?.text === 'string') ctorOpts.text = raw.text;\n        if (Array.isArray(raw?.offsets)) ctorOpts.offsets = raw.offsets;\n        if (raw?.userData !== undefined) ctorOpts.userData = raw.userData;\n        if (typeof raw?.minZoom === 'number') ctorOpts.minZoom = raw.minZoom;\n        if (typeof raw?.maxZoom === 'number') ctorOpts.maxZoom = raw.maxZoom;\n        const hasOpts = Object.keys(ctorOpts).length > 0;\n        const point = new rawSDK.Point((p as Point).lng, (p as Point).lat);\n        const inst = hasOpts ? new rawSDK.Hotspot(point, ctorOpts) : new rawSDK.Hotspot(point);\n        return { __brand: 'OverlayHandle', raw: inst, type: 'hotspot' } as OverlayHandle;\n      } catch (e) { reportCallFailure('Hotspot', version, behavior, e); return null; }\n    },\n\n    // PointCollection 同理：@removed 4.0，在 v4 矩阵中不存在，闭包检查会 block\n    createPointCollection: (p, o) => {\n      try {\n        const raw = o as Record<string, unknown>;\n        const ctorOpts: Record<string, unknown> = {};\n        if (raw?.shape !== undefined) ctorOpts.shape = raw.shape;\n        if (typeof raw?.color === 'string') ctorOpts.color = raw.color;\n        if (typeof raw?.size === 'number') ctorOpts.size = raw.size;\n        const hasOpts = Object.keys(ctorOpts).length > 0;\n        const points = (p as Point[]).map(pt => new rawSDK.Point(pt.lng, pt.lat));\n        const inst = hasOpts ? new rawSDK.PointCollection(points, ctorOpts) : new rawSDK.PointCollection(points);\n        return { __brand: 'OverlayHandle', raw: inst, type: 'pointCollection' } as OverlayHandle;\n      } catch (e) { reportCallFailure('PointCollection', version, behavior, e); return null; }\n    },\n\n    // 3.0 的 setMapStyle 和 setMapStyleV2 均可用\n    setMapStyle: (map, options) => { (map.raw as any).setMapStyle?.(options); },\n    setMapStyleV2: (map, options) => { (map.raw as any).setMapStyleV2?.(options); },\n\n    // 3.0 坐标转换\n    lnglatToMercator: (map, lng, lat) => {\n      try {\n        const MP = rawSDK?.MercatorProjection;\n        if (MP) {\n          const proj = new MP();\n          if (typeof proj.lngLatToMercator === 'function') {\n            const r = proj.lngLatToMercator(new rawSDK.Point(lng, lat));\n            if (r) return [r.lng ?? r.x, r.lat ?? r.y] as [number, number];\n          }\n        }\n        const m = map.raw as any;\n        if (typeof m.lnglatToMercator === 'function') {\n          const r = m.lnglatToMercator(lng, lat);\n          if (r) return [r.lng ?? r.x, r.lat ?? r.y] as [number, number];\n        }\n      } catch { /* ignore */ }\n      return [NaN, NaN] as [number, number];\n    },\n    mercatorToLnglat: (map, x, y) => {\n      try {\n        const MP = rawSDK?.MercatorProjection;\n        if (MP) {\n          const proj = new MP();\n          if (typeof proj.mercatorToLngLat === 'function') {\n            const r = proj.mercatorToLngLat({ x, y });\n            if (r) return [r.lng ?? r.x, r.lat ?? r.y] as [number, number];\n          }\n        }\n        const m = map.raw as any;\n        if (typeof m.mercatorToLnglat === 'function') {\n          const r = m.mercatorToLnglat(x, y);\n          if (r) return [r.lng ?? r.x, r.lat ?? r.y] as [number, number];\n        }\n      } catch { /* ignore */ }\n      return [NaN, NaN] as [number, number];\n    },\n\n    // 3.0 信息窗口通过 map.openInfoWindow\n    openInfoWindow: (target, iw, point) => {\n      const t = (target as any).raw;\n      if (typeof t.openInfoWindow === 'function') {\n        const SDK = getSDK();\n        const pt = point && new SDK.Point(point.lng, point.lat);\n        t.openInfoWindow((iw as any).raw, pt);\n      }\n    },\n\n    // 4.0+ 全部走 unsupported（命令 noop，getter 返回兜底）\n    flyTo: () => reportUnsupported('Map.flyTo', version, behavior),\n    setHeading: () => reportUnsupported('Map.setHeading', version, behavior),\n    getHeading: () => unsupportedValue('Map.getHeading', version, behavior, NaN),\n    setTilt: () => reportUnsupported('Map.setTilt', version, behavior),\n    getTilt: () => unsupportedValue('Map.getTilt', version, behavior, NaN),\n    getCurrentMaxTilt: () => unsupportedValue('Map.getCurrentMaxTilt', version, behavior, NaN),\n    startViewAnimation: () => unsupportedValue('Map.startViewAnimation', version, behavior, 0),\n    pauseViewAnimation: () => reportUnsupported('Map.pauseViewAnimation', version, behavior),\n    continueViewAnimation: () => reportUnsupported('Map.continueViewAnimation', version, behavior),\n    cancelViewAnimation: () => reportUnsupported('Map.cancelViewAnimation', version, behavior),\n    setDisplayOptions: () => reportUnsupported('Map.setDisplayOptions', version, behavior),\n    setOptions: () => reportUnsupported('Map.setOptions', version, behavior),\n    restrictBounds: () => reportUnsupported('Map.restrictBounds', version, behavior),\n    enableRotate: () => reportUnsupported('Map.enableRotate', version, behavior),\n    disableRotate: () => reportUnsupported('Map.disableRotate', version, behavior),\n    enableRotateGestures: () => reportUnsupported('Map.enableRotateGestures', version, behavior),\n    disableRotateGestures: () => reportUnsupported('Map.disableRotateGestures', version, behavior),\n    enableTilt: () => reportUnsupported('Map.enableTilt', version, behavior),\n    disableTilt: () => reportUnsupported('Map.disableTilt', version, behavior),\n    enableTiltGestures: () => reportUnsupported('Map.enableTiltGestures', version, behavior),\n    disableTiltGestures: () => reportUnsupported('Map.disableTiltGestures', version, behavior),\n    enableResizeOnCenter: () => reportUnsupported('Map.enableResizeOnCenter', version, behavior),\n    disableResizeOnCenter: () => reportUnsupported('Map.disableResizeOnCenter', version, behavior),\n    // 3.0 没有独立的 enableIconInfoWindow API，但 enableMapClick 内部会异步加载\n    // mapclick 模块（对照 jsapi-core-3-0/src/scripts/bmap/services/Mapclick/\n    // Mapclick_Impl.js:441-475），点击底图标注时本身就会创建 InfoWindow 并弹出，\n    // 所以转发到 enableMapClick/disableMapClick 后效果与 4.0 基本等价（点击可点、\n    // 自动弹窗），不是能力降级。\n    enableIconInfoWindow: (map) => { (map.raw as any).enableMapClick?.(); },\n    disableIconInfoWindow: (map) => { (map.raw as any).disableMapClick?.(); },\n    setTheme: () => reportUnsupported('Map.setTheme', version, behavior),\n    getMapTypeId: () => unsupportedValue('Map.getMapTypeId', version, behavior, ''),\n    getMapCoordType: () => unsupportedValue('Map.getMapCoordType', version, behavior, ''),\n    getMapStyleId: () => unsupportedValue('Map.getMapStyleId', version, behavior, ''),\n    getAreaStyleId: () => unsupportedValue('Map.getAreaStyleId', version, behavior, ''),\n    getRenderType: () => unsupportedValue('Map.getRenderType', version, behavior, ''),\n    isCanvasMap: () => unsupportedValue('Map.isCanvasMap', version, behavior, false),\n    getContainerSize: (map) => (map.raw as any).getContainerSize?.() ?? (map.raw as any).getSize(),\n    getZoomUnits: () => unsupportedValue('Map.getZoomUnits', version, behavior, NaN),\n    isLoaded: (map) => (typeof (map.raw as any).isLoaded === 'function' ? (map.raw as any).isLoaded() : true),\n    getCoordType: (map) => (typeof (map.raw as any).getCoordType === 'function' ? (map.raw as any).getCoordType() : ''),\n    getProjection: (map) => (map.raw as any).getProjection?.() ?? null,\n    getSolarInfo: () => unsupportedValue('Map.getSolarInfo', version, behavior, null),\n    getTileId: () => unsupportedValue('Map.getTileId', version, behavior, ''),\n    getPoiByUid: () => reportUnsupported('Map.getPoiByUid', version, behavior),\n    setLock: () => reportUnsupported('Map.setLock', version, behavior),\n    setPrivateRegions: () => reportUnsupported('Map.setPrivateRegions', version, behavior),\n    getPrivateRegions: () => unsupportedValue('Map.getPrivateRegions', version, behavior, []),\n    setPrivateStatus: () => reportUnsupported('Map.setPrivateStatus', version, behavior),\n    getPrivateStatus: () => unsupportedValue('Map.getPrivateStatus', version, behavior, false),\n    setCustomArea: () => reportUnsupported('Map.setCustomArea', version, behavior),\n    addFocusMask: () => reportUnsupported('Map.addFocusMask', version, behavior),\n    removeFocusMask: () => reportUnsupported('Map.removeFocusMask', version, behavior),\n    clearFocusMasks: () => reportUnsupported('Map.clearFocusMasks', version, behavior),\n    addCustomHtmlLayer: () => reportUnsupported('Map.addCustomHtmlLayer', version, behavior),\n    removeCustomHtmlLayer: () => reportUnsupported('Map.removeCustomHtmlLayer', version, behavior),\n    addParkingSpot: () => reportUnsupported('Map.addParkingSpot', version, behavior),\n    removeParkingSpot: () => reportUnsupported('Map.removeParkingSpot', version, behavior),\n    isSupportEarth: () => unsupportedValue('Map.isSupportEarth', version, behavior, false),\n    getEarth: () => unsupportedValue('Map.getEarth', version, behavior, null),\n    showEarthBoundary: () => reportUnsupported('Map.showEarthBoundary', version, behavior),\n    hideEarthBoundary: () => reportUnsupported('Map.hideEarthBoundary', version, behavior),\n    setEarthMaxZoom: () => reportUnsupported('Map.setEarthMaxZoom', version, behavior),\n    setEarthMinZoom: () => reportUnsupported('Map.setEarthMinZoom', version, behavior),\n    showIndoor: () => reportUnsupported('Map.showIndoor', version, behavior),\n    setIndoor: () => reportUnsupported('Map.setIndoor', version, behavior),\n    getIndoorInfo: () => unsupportedValue('Map.getIndoorInfo', version, behavior, null),\n    showStreetLayer: () => reportUnsupported('Map.showStreetLayer', version, behavior),\n    hideStreetLayer: () => reportUnsupported('Map.hideStreetLayer', version, behavior),\n    isStreetLayerShow: () => unsupportedValue('Map.isStreetLayerShow', version, behavior, false),\n    showVectorStreetLayer: () => reportUnsupported('Map.showVectorStreetLayer', version, behavior),\n    hideVectorStreetLayer: () => reportUnsupported('Map.hideVectorStreetLayer', version, behavior),\n    getLanguage: () => unsupportedValue('Map.getLanguage', version, behavior, ''),\n    changeLanguage: () => reportUnsupported('Map.changeLanguage', version, behavior),\n    enablePreferredLanguage: () => reportUnsupported('Map.enablePreferredLanguage', version, behavior),\n    disablePreferredLanguage: () => reportUnsupported('Map.disablePreferredLanguage', version, behavior),\n    addSpots: () => unsupportedValue('Map.addSpots', version, behavior, ''),\n    getSpots: () => unsupportedValue('Map.getSpots', version, behavior, []),\n    removeSpots: () => reportUnsupported('Map.removeSpots', version, behavior),\n    clearSpots: () => reportUnsupported('Map.clearSpots', version, behavior),\n    resetSpotStatus: () => reportUnsupported('Map.resetSpotStatus', version, behavior),\n    hightlightSpotByUid: () => reportUnsupported('Map.hightlightSpotByUid', version, behavior),\n    addAreaSpot: () => unsupportedValue('Map.addAreaSpot', version, behavior, ''),\n    getAreaSpot: () => unsupportedValue('Map.getAreaSpot', version, behavior, []),\n    removeAreaSpot: () => reportUnsupported('Map.removeAreaSpot', version, behavior),\n    clearAreaSpots: () => reportUnsupported('Map.clearAreaSpots', version, behavior),\n    clearLabels: () => reportUnsupported('Map.clearLabels', version, behavior),\n    addMapLabels: () => unsupportedValue('Map.addMapLabels', version, behavior, []),\n    removeMapLabels: () => reportUnsupported('Map.removeMapLabels', version, behavior),\n    getIconByClickPosition: () => unsupportedValue('Map.getIconByClickPosition', version, behavior, null),\n    setBounds: () => reportUnsupported('Map.setBounds', version, behavior),\n    getScreenshot: () => unsupportedValue('Map.getScreenshot', version, behavior, ''),\n    setCopyrightOffset: () => reportUnsupported('Map.setCopyrightOffset', version, behavior),\n    setOverlayMoveCursor: () => reportUnsupported('Map.setOverlayMoveCursor', version, behavior),\n    addNormalLayer: () => reportUnsupported('Map.addNormalLayer', version, behavior),\n    removeNormalLayer: () => reportUnsupported('Map.removeNormalLayer', version, behavior),\n    addGeoJSONLayer: () => reportUnsupported('Map.addGeoJSONLayer', version, behavior),\n    removeGeoJSONLayer: () => reportUnsupported('Map.removeGeoJSONLayer', version, behavior),\n    addDistrictLayer: () => reportUnsupported('Map.addDistrictLayer', version, behavior),\n    removeDistrictLayer: () => reportUnsupported('Map.removeDistrictLayer', version, behavior),\n    setTrafficOn: () => reportUnsupported('Map.setTrafficOn', version, behavior),\n    setTrafficOff: () => reportUnsupported('Map.setTrafficOff', version, behavior),\n    addLayer: (map, l) => {\n      const raw = (l as any).raw;\n      const kind = (l as any).kind;\n      // 瓦片类图层走 addTileLayer；CanvasLayer/CustomLayer 等走 addOverlay\n      if (kind === 'tile' || typeof raw?.getTilesUrl === 'function') {\n        (map.raw as any).addTileLayer?.(raw);\n      } else {\n        (map.raw as any).addOverlay?.(raw);\n      }\n    },\n    removeLayer: (map, l) => {\n      const raw = (l as any).raw;\n      const kind = (l as any).kind;\n      if (kind === 'tile' || typeof raw?.getTilesUrl === 'function') {\n        (map.raw as any).removeTileLayer?.(raw);\n      } else {\n        (map.raw as any).removeOverlay?.(raw);\n      }\n    },\n    showOverlayContainer: () => reportUnsupported('Map.showOverlayContainer', version, behavior),\n    hideOverlayContainer: () => reportUnsupported('Map.hideOverlayContainer', version, behavior),\n\n    // 4.0+ 服务在 v3 不支持（工厂返回 isNull: true）\n    createPlaceDetail: () => ({ __brand: 'ServiceHandle' as const, raw: null, isNull: true }),\n\n    // 4.0+ 类不存在 → null\n    createNavigationControl3D: () => { reportUnsupported('NavigationControl3D', version, behavior); return null; },\n    createZoomControl: () => { reportUnsupported('ZoomControl', version, behavior); return null; },\n    createLogoControl: () => { reportUnsupported('LogoControl', version, behavior); return null; },\n    createRectangle: () => { reportUnsupported('Rectangle', version, behavior); return null; },\n    createBezierCurve: () => { reportUnsupported('BezierCurve', version, behavior); return null; },\n    createPrism: () => { reportUnsupported('Prism', version, behavior); return null; },\n    createGroundPoint: () => { reportUnsupported('GroundPoint', version, behavior); return null; },\n    createCustomOverlay: () => { reportUnsupported('CustomOverlay', version, behavior); return null; },\n    createMarker3D: () => { reportUnsupported('Marker3D', version, behavior); return null; },\n    openSimpleInfoWindow: () => reportUnsupported('Map.openSimpleInfoWindow', version, behavior),\n    closeSimpleInfoWindow: () => reportUnsupported('Map.closeSimpleInfoWindow', version, behavior),\n    createNormalLayer: () => { reportUnsupported('NormalLayer', version, behavior); return null; },\n    createGeoJSONLayer: () => { reportUnsupported('GeoJSONLayer', version, behavior); return null; },\n    createDistrictLayer: () => { reportUnsupported('DistrictLayer', version, behavior); return null; },\n    // 4.0+ 高级图层在 v3 不支持\n    createRasterTileLayer: () => { reportUnsupported('RasterTileLayer', version, behavior); return null; },\n    createWMSLayer: () => { reportUnsupported('WMSLayer', version, behavior); return null; },\n    createWMTSLayer: () => { reportUnsupported('WMTSLayer', version, behavior); return null; },\n    createXYZLayer: () => { reportUnsupported('XYZLayer', version, behavior); return null; },\n    createMVTLayer: () => { reportUnsupported('MVTLayer', version, behavior); return null; },\n    createFeatureLayer: () => { reportUnsupported('FeatureLayer', version, behavior); return null; },\n    createFillLayer: () => { reportUnsupported('FillLayer', version, behavior); return null; },\n    createDOMLayer: () => { reportUnsupported('DOMLayer', version, behavior); return null; },\n    createPointIconLayer: () => { reportUnsupported('PointIconLayer', version, behavior); return null; },\n    createPointShapeLayer: () => { reportUnsupported('PointShapeLayer', version, behavior); return null; },\n    // PanoramaCoverageLayer：v3 SDK 也导出该类（publish.js:81），走 base 的真实实现\n    // v3-only 图层在 v3 直接创建（v4 capability 闭包不包含这些类）\n    createCustomLayer: (o) => {\n      try { return { __brand: 'LayerHandle' as const, raw: new rawSDK.CustomLayer(o), kind: 'custom' } as any; }\n      catch (e) { reportCallFailure('CustomLayer', version, behavior, e); return null; }\n    },\n    createCanvasLayer: (o) => {\n      try { return { __brand: 'LayerHandle' as const, raw: new rawSDK.CanvasLayer(o), kind: 'canvas' } as any; }\n      catch (e) { reportCallFailure('CanvasLayer', version, behavior, e); return null; }\n    },\n  };\n\n  return {\n    ...base,\n    ...v3Only,\n    version,\n    capabilities: CAPABILITY_MATRIX['3.0'],\n  };\n}\n","import type { BMapVersion, UnsupportedBehavior } from '../types';\nimport type { BMapDriver } from './types';\nimport { createV4Driver } from './v4Driver';\nimport { createV3Driver } from './v3Driver';\n\n/**\n * 根据 version 选择 driver：\n * - '3.0'：使用 v3Driver\n * - 其它任何值（'4.0' / '4.1' / '5.0' / ...）：使用 v4Driver（按 4.0 baseline 处理）\n *\n * jsapi-loader 始终按用户传入的 version 加载真实 SDK，与 driver 选择无关。\n * 未显式支持的版本统一按 4.0 处理（DESIGN.md「框架内没定义 4.0 后的版本，按 4.0 版本处理」）。\n */\nexport function createDriver(\n  version: BMapVersion,\n  rawSDK: unknown,\n  opts: { unsupportedBehavior: UnsupportedBehavior },\n): BMapDriver {\n  if (version === '3.0') {\n    return createV3Driver(rawSDK as any, opts);\n  }\n  // '4.0' 及以后的所有版本统一走 v4Driver\n  return createV4Driver(rawSDK as any, opts);\n}\n\nexport { createV4Driver, createV3Driver };\nexport type { BMapDriver } from './types';\n","/** 稳定 hash，做 loader 缓存 key */\nexport function stableHash(value: unknown): string {\n  if (value === null || typeof value !== 'object') return String(value);\n  if (Array.isArray(value)) return `[${value.map(stableHash).join(',')}]`;\n  const keys = Object.keys(value as Record<string, unknown>).sort();\n  return `{${keys.map(k => `${k}:${stableHash((value as Record<string, unknown>)[k])}`).join(',')}}`;\n}\n","import type { BMapVersion, LoadKeyComponents } from '../types';\nimport { stableHash } from './stableHash';\n\ninterface RegistryEntry {\n  promise: Promise<unknown>;\n  loadKey: string;\n  components: LoadKeyComponents;\n}\n\nconst globalRegistry: Map<string, RegistryEntry> = new Map();\n\nexport function buildLoadKey(c: LoadKeyComponents): string {\n  return stableHash({\n    v: c.version,\n    ak: c.ak,\n    host: c.serviceHost ?? '',\n    lang: c.language ?? '',\n    plugins: (c.plugins ?? []).slice().sort(),\n  });\n}\n\nexport function getExisting(loadKey: string): RegistryEntry | undefined {\n  return globalRegistry.get(loadKey);\n}\n\nexport function register(loadKey: string, components: LoadKeyComponents, promise: Promise<unknown>): void {\n  globalRegistry.set(loadKey, { promise, loadKey, components });\n  promise.catch(() => globalRegistry.delete(loadKey));\n}\n\nexport function getAllEntries(): RegistryEntry[] {\n  return Array.from(globalRegistry.values());\n}\n\nexport function detectConflict(loadKey: string, requested: LoadKeyComponents): LoadKeyComponents | null {\n  // 同页面只能加载一个版本/AK 组合\n  for (const entry of globalRegistry.values()) {\n    if (entry.loadKey !== loadKey) return entry.components;\n  }\n  void requested;\n  return null;\n}\n\nexport type { BMapVersion, LoadKeyComponents };\n","import type { BMapVersion } from '../types';\nimport { buildLoadKey, getExisting, register, detectConflict, getAllEntries } from './registry';\nimport type { LoadKeyComponents } from '../types';\n\nexport interface LoaderResult {\n  rawSDK: unknown;\n  version: BMapVersion;\n  loadKey: string;\n}\n\n/**\n * 加载 JSAPI 的统一入口。\n *\n * - 通过 @baidumap/jsapi-loader 加载。\n * - 缓存以 loadKey 去重，不重复注入脚本。\n * - 冲突（不同 loadKey）触发 onLoadConflict，返回已加载的 entry。\n * - **不修改 window.BMap / BMapGL 原型、不做命名空间别名**。\n */\nexport async function loadJSAPI(components: LoadKeyComponents, opts: {\n  protocol?: 'http' | 'https';\n  timeout?: number;\n  globalConfig?: Record<string, unknown>;\n  onLoadConflict?: (current: LoadKeyComponents, requested: LoadKeyComponents) => void;\n}): Promise<LoaderResult> {\n  const loadKey = buildLoadKey(components);\n  const existing = getExisting(loadKey);\n  if (existing) {\n    const raw = await existing.promise;\n    return { rawSDK: raw, version: components.version, loadKey };\n  }\n\n  const conflict = detectConflict(loadKey, components);\n  if (conflict) {\n    opts.onLoadConflict?.(conflict, components);\n    // 不强行覆盖已加载的 SDK，返回已存在的\n    for (const entry of getAllEntries()) {\n      if (entry.loadKey !== loadKey) {\n        const raw = await entry.promise;\n        return { rawSDK: raw, version: entry.components.version, loadKey: entry.loadKey };\n      }\n    }\n  }\n\n  const promise = doLoad(components, opts);\n  register(loadKey, components, promise);\n  const rawSDK = await promise;\n  return { rawSDK, version: components.version, loadKey };\n}\n\nasync function doLoad(components: LoadKeyComponents, opts: {\n  protocol?: 'http' | 'https';\n  timeout?: number;\n  globalConfig?: Record<string, unknown>;\n}): Promise<unknown> {\n  // @baidumap/jsapi-loader 默认 export 含 load/reset/getStatus\n  const mod: any = await import('@baidumap/jsapi-loader');\n  const Loader = mod.default ?? mod;\n\n  // loader.load 返回对应的命名空间对象（3.0/4.0/未来版本 → window.BMap）\n  // 注意：jsapi-loader 自身类型只声明了 '3.0' | 'gl' | '4.0'，但实际接受任意字符串。\n  // 这里把用户传入的 version 原样透传（包括未来的 '4.1' / '5.0' 等）。\n  return Loader.load({\n    ak: components.ak,\n    version: components.version as '3.0' | 'gl' | '4.0',\n    ...(components.serviceHost ? { serviceHost: components.serviceHost } : {}),\n    ...(opts.protocol ? { protocol: opts.protocol } : {}),\n    ...(opts.timeout ? { timeout: opts.timeout } : {}),\n    ...(opts.globalConfig ? { globalConfig: opts.globalConfig } : {}),\n  });\n}\n","/**\n * 把对象/数组序列化为稳定字符串，作为 effect 依赖用。\n * 处理 path 等每次 render 新引用的对象，避免覆盖物/服务无意义重建。\n * 遇到 DOM 元素 / 函数 / handle 时返回类型标记，不递归进去。\n *\n * undefined 与 null 输出不同标记：组件里「没传这个 prop」和「显式传 null」\n * 会走不同的 SDK 代码路径，依赖比较必须能区分，否则两者互换时 effect 不重跑。\n * 真正的循环引用由 seen 集合兜底（普通对象也可能自引用，光挡 DOM 不够）。\n */\nexport function stableStringify(value: unknown): string {\n  return serialize(value, new WeakSet());\n}\n\nfunction serialize(value: unknown, seen: WeakSet<object>): string {\n  if (value === undefined) return 'undefined';\n  if (value === null) return 'null';\n  if (typeof value === 'function') return 'fn';\n  if (typeof value !== 'object') return String(value);\n  // DOM 元素 / 节点 — 不递归\n  if (typeof HTMLElement !== 'undefined' && value instanceof HTMLElement) return '<HTMLElement>';\n  if (typeof Node !== 'undefined' && value instanceof Node) return '<Node>';\n  // 带品牌标记的 handle — 不递归\n  if ('__brand' in (value as any)) return '<handle>';\n  if (seen.has(value as object)) return '<circular>';\n  seen.add(value as object);\n  // 只在「当前递归路径」上标记：同一个对象作为兄弟节点出现两次是合法的\n  // （如 [point, point]），出栈后必须移除，否则会被误判成循环。\n  let out: string;\n  if (Array.isArray(value)) {\n    out = `[${value.map(v => serialize(v, seen)).join(',')}]`;\n  } else {\n    const keys = Object.keys(value as Record<string, unknown>).sort();\n    out = `{${keys.map(k => `${k}:${serialize((value as Record<string, unknown>)[k], seen)}`).join(',')}}`;\n  }\n  seen.delete(value as object);\n  return out;\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n  BMapVersion,\n  LoadKeyComponents,\n  UnsupportedBehavior,\n} from '../types';\nimport type { BMapContextValue } from '../context/BMapContext';\nimport { BMapContext } from '../context/BMapContext';\nimport { createDriver } from '../drivers/createDriver';\nimport { loadJSAPI } from '../loader';\nimport { stableStringify } from '../utils/stableStringify';\n\nexport interface BMapProviderProps {\n  ak: string;\n  version?: BMapVersion;\n  protocol?: 'http' | 'https';\n  serviceHost?: string;\n  language?: string;\n  plugins?: string[];\n  timeout?: number;\n  globalConfig?: Record<string, unknown>;\n  unsupportedBehavior?: UnsupportedBehavior;\n  onError?: (err: Error) => void;\n  onLoadConflict?: (current: LoadKeyComponents, requested: LoadKeyComponents) => void;\n  fallback?: React.ReactNode;\n  errorFallback?: React.ReactNode;\n  children?: React.ReactNode;\n}\n\n/**\n * 加载 JSAPI 并创建 driver，把 driver 写入 Context。\n *\n * 设计要点（DESIGN.md §4）：\n * - loadKey 含 version/ak/serviceHost/language/plugins，去重缓存。\n * - generation token 防超时后到达的脚本覆盖。\n * - SSR：window 访问全 guard，status 保持 loading。\n * - 不修改 SDK 原型。\n */\nexport function BMapProvider({\n  ak,\n  version = '4.0',\n  protocol,\n  serviceHost,\n  language,\n  plugins,\n  timeout,\n  globalConfig,\n  unsupportedBehavior = 'warn',\n  onError,\n  onLoadConflict,\n  fallback = null,\n  errorFallback = null,\n  children,\n}: BMapProviderProps) {\n  const [state, setState] = useState<BMapContextValue>({\n    status: 'loading',\n    driver: null,\n    version,\n    error: null,\n  });\n\n  const generationRef = useRef(0);\n  const onErrorRef = useRef(onError);\n  onErrorRef.current = onError;\n  // onLoadConflict 用 ref 持有，避免内联函数进依赖数组导致 driver 反复重建\n  const onLoadConflictRef = useRef(onLoadConflict);\n  onLoadConflictRef.current = onLoadConflict;\n\n  const components: LoadKeyComponents = useMemo(\n    () => ({ version, ak, serviceHost, language, plugins }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [version, ak, serviceHost, language, (plugins ?? []).join('|')],\n  );\n\n  // globalConfig 是内容型配置：按值（而非引用）决定是否需要重新加载，\n  // 避免用户传内联对象 globalConfig={{...}} 时每次渲染都重建 driver。\n  const globalConfigKey = stableStringify(globalConfig);\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return; // SSR\n\n    let cancelled = false;\n    const my = ++generationRef.current;\n\n    loadJSAPI(components, {\n      protocol,\n      timeout,\n      globalConfig,\n      onLoadConflict: (current, requested) => onLoadConflictRef.current?.(current, requested),\n    })\n      .then(({ rawSDK, version: real }) => {\n        if (cancelled || my !== generationRef.current) return;\n        const driver = createDriver(real, rawSDK, { unsupportedBehavior });\n        setState({ status: 'ready', driver, version: real, error: null });\n      })\n      .catch((err: unknown) => {\n        if (cancelled || my !== generationRef.current) return;\n        const error = err instanceof Error ? err : new Error(String(err));\n        setState(s => ({ ...s, status: 'error', error }));\n        if (onErrorRef.current) {\n          onErrorRef.current(error);\n        } else if (typeof console !== 'undefined') {\n          // 兜底日志：加载失败时下方会渲染 errorFallback（默认 null），整棵子树消失。\n          // 用户没传 onError 时若连日志都没有，看到的就只是白屏，最常见的 ak / 白名单\n          // 问题无从排查。这里不走 debugWarn：production 也必须能看到。\n          console.error(\n            '[react-bmap] 地图脚本加载失败，<BMapProvider> 的子树不会渲染。' +\n            '请检查 ak 是否有效、是否配置了域名白名单、网络能否访问百度地图服务。' +\n            '可传入 onError 自行处理该错误，或用 errorFallback 指定降级 UI。',\n            error,\n          );\n        }\n      });\n\n    return () => {\n      cancelled = true;\n      generationRef.current++; // 让旧 promise 失效\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [components, protocol, timeout, globalConfigKey, unsupportedBehavior]);\n\n  if (state.status === 'loading') return <>{fallback}</>;\n  if (state.status === 'error') return <>{errorFallback}</>;\n\n  return <BMapContext.Provider value={state}>{children}</BMapContext.Provider>;\n}\n","/**\n * SDK 常量定义 — 从 dts const/ 目录映射。\n * 这些常量在运行时由 SDK (BMapGL/BMap) 提供，这里导出静态值供类型安全和 IntelliSense 使用。\n * 注意：v3 和 v4 的常量值可能不同，运行时应优先使用 SDK 全局对象上的常量。\n */\nimport { tryGetSDK } from '../utils/sdk';\n\n// ─── Anchor（控件停靠位置） ───\nexport const BMAP_ANCHOR_TOP_LEFT = 0;\nexport const BMAP_ANCHOR_TOP_RIGHT = 1;\nexport const BMAP_ANCHOR_BOTTOM_LEFT = 2;\nexport const BMAP_ANCHOR_BOTTOM_RIGHT = 3;\nexport const BMAP_ANCHOR_TOP_CENTER = 4;\nexport const BMAP_ANCHOR_MIDDLE_LEFT = 5;\nexport const BMAP_ANCHOR_CENTER = 6;\nexport const BMAP_ANCHOR_MIDDLE_RIGHT = 7;\nexport const BMAP_ANCHOR_BOTTOM_CENTER = 8;\nexport type ControlAnchor = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\n// ─── StatusCodes（服务状态码） ───\nexport const BMAP_STATUS_SUCCESS = 0;\nexport const BMAP_STATUS_CITY_LIST = 1;\nexport const BMAP_STATUS_UNKNOWN_LOCATION = 2;\nexport const BMAP_STATUS_UNKNOWN_ROUTE = 3;\nexport const BMAP_STATUS_INVALID_KEY = 4;\nexport const BMAP_STATUS_INVALID_REQUEST = 5;\nexport const BMAP_STATUS_PERMISSION_DENIED = 6;\nexport const BMAP_STATUS_SERVICE_UNAVAILABLE = 7;\nexport const BMAP_STATUS_TIMEOUT = 8;\nexport type ServiceStatus = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\n// ─── DrivingPolicy（驾车策略） ───\nexport const BMAP_DRIVING_POLICY_DEFAULT = 0;\nexport const BMAP_DRIVING_POLICY_DESTANCE = 2;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS = 3;\nexport const BMAP_DRIVING_POLICY_FIRST_HIGHWAYS = 4;\nexport const BMAP_DRIVING_POLICY_AVOID_CONGESTION = 5;\nexport const BMAP_DRIVING_POLICY_AVOID_PAY = 6;\nexport const BMAP_DRIVING_POLICY_HIGHWAYS_AVOID_CONGESTION = 7;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION = 8;\nexport const BMAP_DRIVING_POLICY_AVOID_CONGESTION_PAY = 9;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION_PAY = 10;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_PAY = 11;\nexport const BMAP_DRIVING_POLICY_DISTANCE_PRIORITY = 12;\nexport const BMAP_DRIVING_POLICY_TIME_PRIORITY = 13;\nexport type DrivingPolicy = 0 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13;\n\n// ─── TransitPolicy（公交策略） ───\nexport const BMAP_TRANSIT_POLICY_RECOMMEND = 0;\nexport const BMAP_TRANSIT_POLICY_LEAST_TRANSFER = 1;\nexport const BMAP_TRANSIT_POLICY_LEAST_WALKING = 2;\nexport const BMAP_TRANSIT_POLICY_AVOID_SUBWAYS = 3;\nexport const BMAP_TRANSIT_POLICY_LEAST_TIME = 4;\nexport const BMAP_TRANSIT_POLICY_FIRST_SUBWAYS = 5;\nexport type TransitPolicy = 0 | 1 | 2 | 3 | 4 | 5;\n\n// ─── MapType（地图类型） ───\nexport const BMAP_NORMAL_MAP = 0;\nexport const BMAP_PERSPECTIVE_MAP = 1;\nexport const BMAP_SATELLITE_MAP = 2;\nexport const BMAP_HYBRID_MAP = 3;\nexport type MapType = 0 | 1 | 2 | 3;\n\n// ─── Animation（动画） ───\nexport const BMAP_ANIMATION_BOUNCE = 2;\nexport const BMAP_ANIMATION_DROP = 1;\nexport type Animation = 1 | 2;\n\n// ─── LengthUnit（长度单位） ───\nexport const BMAP_UNIT_METRIC = 'metric';\nexport const BMAP_UNIT_IMPERIAL = 'us';\nexport type LengthUnit = 'metric' | 'us';\n\n// ─── Language（语言） ───\nexport const BMAP_LANG_CN = 0;\nexport const BMAP_LANG_EN = 1;\nexport type Language = 0 | 1;\n\n// ─── NavigationControlType ───\nexport const BMAP_NAVIGATION_CONTROL_LARGE = 0;\nexport const BMAP_NAVIGATION_CONTROL_SMALL = 1;\nexport const BMAP_NAVIGATION_CONTROL_PAN = 2;\nexport const BMAP_NAVIGATION_CONTROL_ZOOM = 3;\nexport type NavigationControlType = 0 | 1 | 2 | 3;\n\n// ─── MapTypeControlType ───\nexport const BMAP_MAPTYPE_CONTROL_HORIZONTAL = 0;\nexport const BMAP_MAPTYPE_CONTROL_DROPDOWN = 1;\nexport const BMAP_MAPTYPE_CONTROL_MAP = 2;\nexport type MapTypeControlType = 0 | 1 | 2;\n\n// ─── SymbolShapeType ───\n// 注意：SDK 实际的形状常量是 BMap_Symbol_SHAPE_*（1-14），定义在 src/constants/index.ts。\n// 这里不再重复定义，使用那边的常量和 SymbolShapeType 类型。\n\n// ─── ShapeType（PointShapeLayer 形状） ───\nexport const BMAP_SHAPE_CIRCLE = 1;\nexport const BMAP_SHAPE_RECTANGLE = 3;\nexport type ShapeType = 1 | 3;\n\n/**\n * 从 SDK 全局对象获取运行时常量（v3/v4 值可能不同）。\n * 优先使用 SDK 运行时值，回退到静态值。\n */\nexport function getSdkConstant(name: string, fallback: number): number {\n  const SDK = tryGetSDK();\n  return (SDK?.[name] as number | undefined) ?? fallback;\n}\n","/**\n * 全量 BMAP_* 常量 — 从 bmap-jsapi-dts/src/const/*.d.ts 转录。\n */\n\n// ─── ControlAnchor ───\nexport const BMAP_ANCHOR_TOP_LEFT = 0;\nexport const BMAP_ANCHOR_TOP_RIGHT = 1;\nexport const BMAP_ANCHOR_BOTTOM_LEFT = 2;\nexport const BMAP_ANCHOR_BOTTOM_RIGHT = 3;\nexport const BMAP_ANCHOR_TOP_CENTER = 4;\nexport const BMAP_ANCHOR_BOTTOM_CENTER = 5;\nexport const BMAP_ANCHOR_LEFT_CENTER = 6;\nexport const BMAP_ANCHOR_RIGHT_CENTER = 7;\nexport const BMAP_ANCHOR_CENTER = 8;\nexport type ControlAnchor = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\n// ─── MapTypeId ───\nexport const BMAP_NORMAL_MAP = 'B_NORMAL_MAP';\nexport const BMAP_SATELLITE_MAP = 'B_SATELLITE_MAP';\n// 注意：混合图内部并非独立类型，SDK 源码里 BMAP_HYBRID_MAP_ID = 'B_STREET_MAP'\n// （反查 jsapi-webgl-1-0/src/scripts/BMap/Map.js:522）。normalizeMapTypeRequest()\n// 在 4.0 兼容模式下会把 'B_STREET_MAP' 转换成「卫星图 + showStreetLayer: true」\n// 两个信号；纯 GL 模式（apiVersionIsGL() === true）下不转换，直接透传。\nexport const BMAP_HYBRID_MAP = 'B_STREET_MAP';\nexport const BMAP_EARTH_MAP = 'B_EARTH_MAP';\nexport type MapTypeId = string;\n\n// ─── NavigationControlType ───\nexport const BMAP_NAVIGATION_CONTROL_LARGE = 0;\nexport const BMAP_NAVIGATION_CONTROL_SMALL = 1;\nexport const BMAP_NAVIGATION_CONTROL_PAN = 2;\nexport const BMAP_NAVIGATION_CONTROL_ZOOM = 3;\nexport type NavigationControlType = 0 | 1 | 2 | 3;\n\n// ─── MapTypeControlType ───\nexport const BMAP_MAPTYPE_CONTROL_HORIZONTAL = 0;\nexport const BMAP_MAPTYPE_CONTROL_DROPDOWN = 1;\nexport const BMAP_MAPTYPE_CONTROL_MAP = 2;\nexport type MapTypeControlType = 0 | 1 | 2;\n\n// ─── Animation ───\nexport const BMAP_ANIMATION_DROP = 1;\nexport const BMAP_ANIMATION_BOUNCE = 2;\nexport type MarkerAnimation = 1 | 2;\n\n// ─── StatusCodes ───\nexport const BMAP_STATUS_SUCCESS = 0;\nexport const BMAP_STATUS_CITY_LIST = 1;\nexport const BMAP_STATUS_UNKNOWN_LOCATION = 2;\nexport const BMAP_STATUS_UNKNOWN_ROUTE = 3;\nexport const BMAP_STATUS_INVALID_KEY = 4;\nexport const BMAP_STATUS_INVALID_REQUEST = 5;\nexport const BMAP_STATUS_PERMISSION_DENIED = 6;\nexport const BMAP_STATUS_SERVICE_UNAVAILABLE = 7;\nexport const BMAP_STATUS_TIMEOUT = 8;\nexport type ServiceStatus = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\n// ─── DrivingPolicy ───\nexport const BMAP_DRIVING_POLICY_DEFAULT = 0;\nexport const BMAP_DRIVING_POLICY_DESTANCE = 2;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS = 3;\nexport const BMAP_DRIVING_POLICY_FIRST_HIGHWAYS = 4;\nexport const BMAP_DRIVING_POLICY_AVOID_CONGESTION = 5;\nexport const BMAP_DRIVING_POLICY_AVOID_PAY = 6;\nexport const BMAP_DRIVING_POLICY_HIGHWAYS_AVOID_CONGESTION = 7;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION = 8;\nexport const BMAP_DRIVING_POLICY_AVOID_CONGESTION_PAY = 9;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION_PAY = 10;\nexport const BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_PAY = 11;\nexport const BMAP_DRIVING_POLICY_DISTANCE_PRIORITY = 12;\nexport const BMAP_DRIVING_POLICY_TIME_PRIORITY = 13;\nexport type DrivingPolicy = 0 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13;\n\n// ─── TransitPolicy ───\nexport const BMAP_TRANSIT_POLICY_RECOMMEND = 0;\nexport const BMAP_TRANSIT_POLICY_LEAST_TRANSFER = 1;\nexport const BMAP_TRANSIT_POLICY_LEAST_WALKING = 2;\nexport const BMAP_TRANSIT_POLICY_AVOID_SUBWAYS = 3;\nexport const BMAP_TRANSIT_POLICY_LEAST_TIME = 4;\nexport const BMAP_TRANSIT_POLICY_FIRST_SUBWAYS = 5;\nexport type TransitPolicy = 0 | 1 | 2 | 3 | 4 | 5;\n\n// ─── TransitType ───\nexport const BMAP_TRANSIT_TYPE_IN_CITY = 0;\nexport const BMAP_TRANSIT_TYPE_CROSS_CITY = 1;\nexport type TransitType = 0 | 1;\n\n// ─── TransitVehicleType ───\nexport const BMAP_TRANSIT_TYPE_POLICY_TRAIN = 0;\nexport const BMAP_TRANSIT_TYPE_POLICY_AIRPLANE = 1;\nexport const BMAP_TRANSIT_TYPE_POLICY_COACH = 2;\nexport type TransitVehicleType = 0 | 1 | 2;\n\n// ─── TransitPlanType ───\nexport const BMAP_TRANSIT_PLAN_TYPE_ROUTE = 0;\nexport const BMAP_TRANSIT_PLAN_TYPE_LINE = 1;\nexport type TransitPlanType = 0 | 1;\n\n// ─── IntercityPolicy ───\nexport const BMAP_INTERCITY_POLICY_LEAST_TIME = 0;\nexport const BMAP_INTERCITY_POLICY_EARLY_START = 1;\nexport const BMAP_INTERCITY_POLICY_CHEAP_PRICE = 2;\nexport type IntercityPolicy = 0 | 1 | 2;\n\n// ─── Language ───\nexport const BMAP_LANGUAGE_ZH = 'zh';\nexport const BMAP_LANGUAGE_EN = 'en';\nexport const BMAP_LANGUAGE_ZH_TW = 'zh-TW';\nexport const BMAP_LANGUAGE_ES = 'es';\nexport const BMAP_LANGUAGE_PT = 'pt';\nexport const BMAP_LANGUAGE_FR = 'fr';\nexport const BMAP_LANGUAGE_DE = 'de';\nexport const BMAP_LANGUAGE_TH = 'th';\nexport const BMAP_LANGUAGE_JA = 'ja';\nexport const BMAP_LANGUAGE_KO = 'ko';\nexport const BMAP_LANGUAGE_TR = 'tr';\nexport const BMAP_LANGUAGE_IT = 'it';\nexport const BMAP_LANGUAGE_RU = 'ru';\nexport const BMAP_LANGUAGE_MS = 'ms';\nexport const BMAP_LANGUAGE_VI = 'vi';\nexport const BMAP_LANGUAGE_ID = 'id';\nexport type Language = string;\n\n// ─── LengthUnit ───\nexport const BMAP_UNIT_METRIC = 'metric';\nexport const BMAP_UNIT_IMPERIAL = 'us';\nexport type LengthUnit = 'metric' | 'us';\n\n// ─── CoordType ───\nexport const BMAP_COORD_MERCATOR = 'BMAP_COORD_MERCATOR';\nexport const BMAP_COORD_GCJ02 = 'BMAP_COORD_GCJ02';\nexport const BMAP_COORD_BD09 = 'BMAP_COORD_BD09';\nexport const BMAP_COORD_GCJ02MERCATOR = 'BMAP_COORD_GCJ02MERCATOR';\nexport const BMAP_COORD_WGS84 = 'BMAP_COORD_WGS84';\nexport const BMAP_COORD_EPSG3857 = 'BMAP_COORD_EPSG3857';\nexport type CoordType = string;\n\n// ─── SymbolShapeType ───\nexport const BMap_Symbol_SHAPE_CIRCLE = 1;\nexport const BMap_Symbol_SHAPE_RECTANGLE = 2;\nexport const BMap_Symbol_SHAPE_RHOMBUS = 3;\nexport const BMap_Symbol_SHAPE_STAR = 4;\nexport const BMap_Symbol_SHAPE_BACKWARD_CLOSED_ARROW = 5;\nexport const BMap_Symbol_SHAPE_FORWARD_CLOSED_ARROW = 6;\nexport const BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW = 7;\nexport const BMap_Symbol_SHAPE_FORWARD_OPEN_ARROW = 8;\nexport const BMap_Symbol_SHAPE_POINT = 9;\nexport const BMap_Symbol_SHAPE_PLANE = 10;\nexport const BMap_Symbol_SHAPE_CAMERA = 11;\nexport const BMap_Symbol_SHAPE_WARNING = 12;\nexport const BMap_Symbol_SHAPE_SMILE = 13;\nexport const BMap_Symbol_SHAPE_CLOCK = 14;\nexport type SymbolShapeType = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14;\n\n// ─── ShapeType (PointCollection) ───\nexport const BMAP_POINT_SHAPE_STAR = 1;\nexport const BMAP_POINT_SHAPE_WATERDROP = 2;\nexport const BMAP_POINT_SHAPE_CIRCLE = 3;\nexport const BMAP_POINT_SHAPE_SQUARE = 4;\nexport const BMAP_POINT_SHAPE_RHOMBUS = 5;\nexport type ShapeType = 1 | 2 | 3 | 4 | 5;\n\n// ─── PointShapeLayer ShapeType（4.0+；对应 SDK PointShapeLayer.ShapeType）───\n// 用于 PointShapeLayer 的 style.shapeType（注意与上面 PointCollection 的 BMAP_POINT_SHAPE_* 取值不同）\nexport const BMAP_POINT_SHAPE_LAYER_CIRCLE = 0;\nexport const BMAP_POINT_SHAPE_LAYER_SQUARE = 1;\nexport const BMAP_POINT_SHAPE_LAYER_TRIANGLE = 2;\nexport const BMAP_POINT_SHAPE_LAYER_DIAMOND = 3;\nexport const BMAP_POINT_SHAPE_LAYER_CROSS = 4;\nexport const BMAP_POINT_SHAPE_LAYER_ARROW = 5;\nexport const BMAP_POINT_SHAPE_LAYER_ARROW_TAIL = 6;\nexport const BMAP_POINT_SHAPE_LAYER_STAR = 7;\nexport const BMAP_POINT_SHAPE_LAYER_WATERDROP = 9;\nexport type PointShapeLayerShapeType = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9;\n\n// ─── SizeType (PointCollection) ───\nexport const BMAP_POINT_SIZE_TINY = 1;\nexport const BMAP_POINT_SIZE_SMALLER = 2;\nexport const BMAP_POINT_SIZE_SMALL = 3;\nexport const BMAP_POINT_SIZE_NORMAL = 4;\nexport const BMAP_POINT_SIZE_BIG = 5;\nexport const BMAP_POINT_SIZE_BIGGER = 6;\nexport const BMAP_POINT_SIZE_HUGE = 7;\nexport type SizeType = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n// ─── Marker3DShapeType ───\nexport const BMAP_SHAPE_CIRCLE = 1;\nexport const BMAP_SHAPE_RECT = 2;\nexport type Marker3DShapeType = 1 | 2;\n\n// ─── HighlightModes ───\nexport const BMAP_HIGHLIGHT_STEP = 1;\nexport const BMAP_HIGHLIGHT_ROUTE = 2;\nexport type HighlightMode = 1 | 2;\n\n// ─── POIType ───\nexport const BMAP_POI_TYPE_NORMAL = 0;\nexport const BMAP_POI_TYPE_BUSSTOP = 1;\nexport const BMAP_POI_TYPE_BUSLINE = 2;\nexport const BMAP_POI_TYPE_SUBSTOP = 3;\nexport const BMAP_POI_TYPE_SUBLINE = 4;\nexport type POIType = 0 | 1 | 2 | 3 | 4;\n\n// ─── Mode ───\nexport const BMAP_MODE_DRIVING = 'driving';\nexport const BMAP_MODE_TRANSIT = 'transit';\nexport const BMAP_MODE_WALKING = 'walking';\nexport const BMAP_MODE_NAVIGATION = 'navigation';\nexport type Mode = 'driving' | 'transit' | 'walking' | 'navigation';\n\n// ─── RouteStatus ───\nexport const BMAP_ROUTE_STATUS_NORMAL = 0;\nexport const BMAP_ROUTE_STATUS_EMPTY = 1;\nexport const BMAP_ROUTE_STATUS_ADDRESS = 2;\nexport type RouteStatus = 0 | 1 | 2;\n\n// ─── RouteType ───\nexport const BMAP_ROUTE_TYPE_WALKING = 2;\nexport const BMAP_ROUTE_TYPE_DRIVING = 3;\nexport const BMAP_ROUTE_TYPE_RIDING = 6;\nexport type RouteType = 2 | 3 | 6;\n\n// ─── TrafficStatus ───\nexport const BMAP_TRAFFICE_STATUS_NONE = 0;\nexport const BMAP_TRAFFICE_STATUS_NORMAL = 1;\nexport const BMAP_TRAFFICE_STATUS_SLOW = 2;\nexport const BMAP_TRAFFICE_STATUS_JAM = 3;\nexport type TrafficStatus = 0 | 1 | 2 | 3;\n\n// ─── PointDensityType ───\nexport const BMAP_POINT_DENSITY_HIGH = 200;\nexport const BMAP_POINT_DENSITY_MEDIUM = 100;\nexport const BMAP_POINT_DENSITY_LOW = 50;\nexport type PointDensityType = 200 | 100 | 50;\n\n// ─── ContextMenuIcon ───\nexport const BMAP_CONTEXT_MENU_ICON_ZOOMIN: string = 'BMAP_CONTEXT_MENU_ICON_ZOOMIN';\nexport const BMAP_CONTEXT_MENU_ICON_ZOOMOUT: string = 'BMAP_CONTEXT_MENU_ICON_ZOOMOUT';\nexport type ContextMenuIcon = string;\n\n// ─── LineType ───\nexport const BMAP_LINE_TYPE_BUS = 0;\nexport const BMAP_LINE_TYPE_SUBWAY = 1;\nexport const BMAP_LINE_TYPE_FERRY = 2;\nexport const BMAP_LINE_TYPE_TRAIN = 3;\nexport const BMAP_LINE_TYPE_AIRPLANE = 4;\nexport const BMAP_LINE_TYPE_COACH = 5;\nexport type LineType = 0 | 1 | 2 | 3 | 4 | 5;\n\n// ─── Panorama POIType（4.0；Panorama.setPanoramaPOIType 用）───\nexport const BMAP_PANORAMA_POI_HOTEL = 'hotel';\nexport const BMAP_PANORAMA_POI_CATERING = 'catering';\nexport const BMAP_PANORAMA_POI_MOVIE = 'movie';\nexport const BMAP_PANORAMA_POI_TRANSIT = 'transit';\nexport const BMAP_PANORAMA_POI_INDOOR_SCENE = 'indoor_scene';\nexport const BMAP_PANORAMA_POI_NONE = 'none';\nexport type PanoramaPOIType = 'hotel' | 'catering' | 'movie' | 'transit' | 'indoor_scene' | 'none';\n\n// ─── Panorama SceneType（getSceneType 返回值）───\nexport const BMAP_PANORAMA_STREET_SCENE = 'street';\nexport const BMAP_PANORAMA_INDOOR_SCENE = 'inter';\nexport type PanoramaSceneType = 'street' | 'inter';\n","import { createContext, useContext } from 'react';\nimport type { MapHandle } from '../types';\nimport type { BMapDriver } from '../drivers/types';\n\nexport interface MapContextValue {\n  map: MapHandle | null;\n  driver: BMapDriver;\n}\n\nexport const MapContext = createContext<MapContextValue | null>(null);\n\nexport function useMapContext(): MapContextValue {\n  const ctx = useContext(MapContext);\n  if (!ctx) {\n    throw new Error('[react-bmap] useMapContext must be used within <Map>');\n  }\n  return ctx;\n}\n","import { createContext, useContext, useRef, useSyncExternalStore } from 'react';\nimport type { OverlayHandle, MapHandle } from '../types';\n\n/**\n * OverlayTargetContext — 嵌套组件（MarkerClusterer/ContextMenu 等）的目标注入。\n *\n * 例：\n * - <MarkerClusterer> 提供该 context，<Marker> 读取后调 clusterer.addMarker。\n * - <Marker> 提供该 context，<ContextMenu> 读取后挂到 marker 而不是 map。\n *\n * 设计要点（修复了 ctxTarget 通过 useState 传播导致的子组件首渲染读到 null 的问题）：\n * - Context 持有 **store**（身份稳定，仅创建一次），暴露 subscribe/getTarget。\n * - 消费者通过 useSyncExternalStore 订阅 target 变化，store 内部用 ref 同步更新：\n *   父组件 useLayoutEffect 创建 handle 后立即写入 ref 并通知订阅者，\n *   React 会在同一 commit 周期内同步触发订阅者重渲染，避免「先挂到 map 再切到 marker」的时序错位。\n */\nexport interface OverlayTargetStore {\n  type: 'clusterer' | 'overlay' | 'marker' | 'map';\n  /** 订阅 target 变化；返回取消订阅函数 */\n  subscribe: (cb: () => void) => () => void;\n  /** 同步读取当前 target（父级尚未挂载时为 null） */\n  getTarget: () => OverlayHandle | MapHandle | null;\n  addOverlay?: (overlay: OverlayHandle) => void;\n  removeOverlay?: (overlay: OverlayHandle) => void;\n}\n\n/**\n * useOverlayTarget 返回的快照对象。\n * 身份稳定：仅当 store 或内部 target 引用变化时才换新对象，便于在 effect deps 中使用。\n */\nexport interface OverlayTargetValue {\n  type: 'clusterer' | 'overlay' | 'marker' | 'map';\n  target: OverlayHandle | MapHandle | null;\n  addOverlay?: (overlay: OverlayHandle) => void;\n  removeOverlay?: (overlay: OverlayHandle) => void;\n}\n\n/** @deprecated 用 OverlayTargetStore / OverlayTargetValue 替代。保留别名以兼容旧导入。 */\nexport type OverlayTargetContextValue = OverlayTargetStore;\n\nexport const OverlayTargetContext = createContext<OverlayTargetStore | null>(null);\n\nconst emptySubscribe = () => () => {};\nconst emptyGetTarget = (): OverlayHandle | MapHandle | null => null;\n\n/**\n * 读取父级 overlay 目标的实时快照。\n *\n * - 父级未提供 context（如直接挂在 <Map> 下）→ 返回 null，调用方按 map 兜底。\n * - 父级已提供但 target 尚未就绪（父级首次渲染、handle 在 layout effect 中创建）→ 返回 `{ target: null }`，\n *   父级 effect 完成后会通过 useSyncExternalStore 同步通知本组件重渲染，无需等待额外 commit。\n *\n * 返回值 identity 严格稳定：仅当 store.type 或 target 引用变化时才换新对象。\n * 故意不用 useMemo —— React 18+ 的 useMemo 可能「忘记」缓存导致重渲染时返回新对象，\n * 进而触发消费方 effect deps 变化 → cleanup+remount menu → SDK 内部状态被搞坏。\n */\nexport function useOverlayTarget(): OverlayTargetValue | null {\n  const store = useContext(OverlayTargetContext);\n  // store 为 null 时也要提供稳定的空 snapshot，避免 useSyncExternalStore 报错。\n  const target = useSyncExternalStore(\n    store ? store.subscribe : emptySubscribe,\n    store ? store.getTarget : emptyGetTarget,\n    emptyGetTarget,\n  );\n  // 用 ref + 引用对比替代 useMemo，确保 identity 完全稳定（不被 React 「忘记」）。\n  const lastRef = useRef<OverlayTargetValue | null>(null);\n  if (store) {\n    const last = lastRef.current;\n    if (!last\n      || last.target !== target\n      || last.type !== store.type\n      || last.addOverlay !== store.addOverlay\n      || last.removeOverlay !== store.removeOverlay) {\n      lastRef.current = {\n        type: store.type,\n        target,\n        addOverlay: store.addOverlay,\n        removeOverlay: store.removeOverlay,\n      };\n    }\n  } else {\n    lastRef.current = null;\n  }\n  return lastRef.current;\n}\n","import type { BMapDriver } from '../../drivers/types';\nimport type {\n  Bounds, ControlHandle, LayerHandle, MapHandle, OverlayHandle,\n  Pixel, Point, Size,\n} from '../../types';\n\n/**\n * MapRef — 命令式句柄，全量透传 driver 方法。\n *\n * 签名与 bmap-jsapi-dts 的 Map 类一致。\n * 不支持时由 driver 内部按 unsupportedBehavior 处理。\n */\nexport class MapRefImpl {\n  constructor(private map: MapHandle, private driver: BMapDriver) {}\n\n  // ─── 交互开关 ───\n  enableDragging(): void { this.driver.enableDragging(this.map); }\n  disableDragging(): void { this.driver.disableDragging(this.map); }\n  enableInertialDragging(): void { this.driver.enableInertialDragging(this.map); }\n  disableInertialDragging(): void { this.driver.disableInertialDragging(this.map); }\n  enableScrollWheelZoom(): void { this.driver.enableScrollWheelZoom(this.map); }\n  disableScrollWheelZoom(): void { this.driver.disableScrollWheelZoom(this.map); }\n  enableContinuousZoom(): void { this.driver.enableContinuousZoom(this.map); }\n  disableContinuousZoom(): void { this.driver.disableContinuousZoom(this.map); }\n  enableResizeOnCenter(): void { this.driver.enableResizeOnCenter(this.map); }\n  disableResizeOnCenter(): void { this.driver.disableResizeOnCenter(this.map); }\n  enableDoubleClickZoom(): void { this.driver.enableDoubleClickZoom(this.map); }\n  disableDoubleClickZoom(): void { this.driver.disableDoubleClickZoom(this.map); }\n  enableKeyboard(): void { this.driver.enableKeyboard(this.map); }\n  disableKeyboard(): void { this.driver.disableKeyboard(this.map); }\n  enablePinchToZoom(): void { this.driver.enablePinchToZoom(this.map); }\n  disablePinchToZoom(): void { this.driver.disablePinchToZoom(this.map); }\n  enableRotate(): void { this.driver.enableRotate(this.map); }\n  disableRotate(): void { this.driver.disableRotate(this.map); }\n  enableRotateGestures(): void { this.driver.enableRotateGestures(this.map); }\n  disableRotateGestures(): void { this.driver.disableRotateGestures(this.map); }\n  enableTilt(): void { this.driver.enableTilt(this.map); }\n  disableTilt(): void { this.driver.disableTilt(this.map); }\n  enableTiltGestures(): void { this.driver.enableTiltGestures(this.map); }\n  disableTiltGestures(): void { this.driver.disableTiltGestures(this.map); }\n  enableAutoResize(): void { this.driver.enableAutoResize(this.map); }\n  disableAutoResize(): void { this.driver.disableAutoResize(this.map); }\n\n  // ─── 视角 ───\n  setHeading(heading: number, options?: unknown): void { this.driver.setHeading(this.map, heading, options); }\n  getHeading(): number { return this.driver.getHeading(this.map); }\n  setTilt(tilt: number, options?: unknown): void { this.driver.setTilt(this.map, tilt, options); }\n  getTilt(): number { return this.driver.getTilt(this.map); }\n  getCurrentMaxTilt(): number { return this.driver.getCurrentMaxTilt(this.map); }\n\n  // ─── 缩放级别 ───\n  setMinZoom(zoom: number): void { this.driver.setMinZoom(this.map, zoom); }\n  setMaxZoom(zoom: number): void { this.driver.setMaxZoom(this.map, zoom); }\n  getMinZoom(): number { return this.driver.getMinZoom(this.map); }\n  getMaxZoom(): number { return this.driver.getMaxZoom(this.map); }\n\n  // ─── resize ───\n  checkResize(): void { this.driver.checkResize(this.map); }\n  resize(): void { this.driver.resize(this.map); }\n  setSize(size: { width: number; height: number }): void { this.driver.setSize(this.map, size); }\n  zoomTo(level: number, point?: unknown): void { this.driver.zoomTo(this.map, level, point); }\n\n  // ─── 显示配置 ───\n  setDisplayOptions(options: unknown): void { this.driver.setDisplayOptions(this.map, options); }\n  setOptions(options: unknown): void { this.driver.setOptions(this.map, options); }\n\n  // ─── 容器信息 ───\n  getSize(): Size { return this.driver.getSize(this.map); }\n  getContainerSize(): Size { return this.driver.getContainerSize(this.map); }\n  getZoomUnits(): number { return this.driver.getZoomUnits(this.map); }\n  getContainer(): HTMLElement { return this.driver.getContainer(this.map); }\n\n  // ─── 坐标转换 ───\n  pixelToPoint(pixel: Pixel, options?: unknown): Point { return this.driver.pixelToPoint(this.map, pixel, options); }\n  pointToPixel(point: Point, options?: unknown): Pixel { return this.driver.pointToPixel(this.map, point, options); }\n  lnglatToMercator(lng: number, lat: number): [number, number] { return this.driver.lnglatToMercator(this.map, lng, lat); }\n  mercatorToLnglat(mcLng: number, mcLat: number): [number, number] { return this.driver.mercatorToLnglat(this.map, mcLng, mcLat); }\n  pointToOverlayPixel(point: Point, options?: unknown): Pixel { return this.driver.pointToOverlayPixel(this.map, point, options); }\n  overlayPixelToPoint(pixel: Pixel, options?: unknown): Point { return this.driver.overlayPixelToPoint(this.map, pixel, options); }\n  getDistance(start: Point, end: Point): number { return this.driver.getDistance(this.map, start, end); }\n\n  // ─── 地图状态 ───\n  isLoaded(): boolean { return this.driver.isLoaded(this.map); }\n  getCoordType(): string { return this.driver.getCoordType(this.map); }\n  getMapTypeId(): string { return this.driver.getMapTypeId(this.map); }\n  getMapCoordType(): string { return this.driver.getMapCoordType(this.map); }\n  getMapStyleId(): string { return this.driver.getMapStyleId(this.map); }\n  getAreaStyleId(): string { return this.driver.getAreaStyleId(this.map); }\n  getRenderType(): string { return this.driver.getRenderType(this.map); }\n  isCanvasMap(): boolean { return this.driver.isCanvasMap(this.map); }\n  getProjection(): unknown { return this.driver.getProjection(this.map); }\n\n  getSolarInfo(date: Date): unknown { return this.driver.getSolarInfo(this.map, date); }\n  getTileId(point: Point, level: number): string { return this.driver.getTileId(this.map, point, level); }\n  getPoiByUid(uid: string, callback: (poi: unknown) => void): void { this.driver.getPoiByUid(this.map, uid, callback); }\n  getPanes(): unknown { return this.driver.getPanes(this.map); }\n  getInfoWindow(): OverlayHandle | null { return this.driver.getInfoWindow(this.map); }\n\n  // ─── Spots / 标注 ───\n  addSpots(spots: unknown[], options?: unknown): string { return this.driver.addSpots(this.map, spots, options); }\n  getSpots(id: string): unknown[] { return this.driver.getSpots(this.map, id); }\n  removeSpots(id: string): void { this.driver.removeSpots(this.map, id); }\n  clearSpots(): void { this.driver.clearSpots(this.map); }\n  resetSpotStatus(): void { this.driver.resetSpotStatus(this.map); }\n  hightlightSpotByUid(uid: string, tilePosStr: string): void { this.driver.hightlightSpotByUid(this.map, uid, tilePosStr); }\n  addAreaSpot(areaSpot: number[], options?: unknown): string { return this.driver.addAreaSpot(this.map, areaSpot, options); }\n  getAreaSpot(id: string): number[] { return this.driver.getAreaSpot(this.map, id); }\n  removeAreaSpot(id: string): void { this.driver.removeAreaSpot(this.map, id); }\n  clearAreaSpots(): void { this.driver.clearAreaSpots(this.map); }\n  clearLabels(): void { this.driver.clearLabels(this.map); }\n  addMapLabels(labels: unknown[]): string[] { return this.driver.addMapLabels(this.map, labels); }\n  removeMapLabels(labelUids: string[]): void { this.driver.removeMapLabels(this.map, labelUids); }\n  getIconByClickPosition(clickPosition: Pixel): unknown | null { return this.driver.getIconByClickPosition(this.map, clickPosition); }\n  setBounds(bounds: Bounds): void { this.driver.setBounds(this.map, bounds); }\n\n  // ─── 视野控制 ───\n  centerAndZoom(center: Point | string, zoom?: number, options?: unknown): void { this.driver.centerAndZoom(this.map, center, zoom, options); }\n  panTo(center: Point, options?: unknown): void { this.driver.panTo(this.map, center, options); }\n  panBy(x: number, y: number, options?: unknown): void { this.driver.panBy(this.map, x, y, options); }\n  flyTo(center: Point, zoom: number, options?: unknown): void { this.driver.flyTo(this.map, center, zoom, options); }\n  reset(): void { this.driver.reset(this.map); }\n  setCenter(center: Point | string, options?: unknown): void { this.driver.setCenter(this.map, center, options); }\n  getCenter(): Point { return this.driver.getCenter(this.map); }\n  setViewport(view: Point[] | Bounds, viewportOptions?: unknown): void { this.driver.setViewport(this.map, view, viewportOptions); }\n  getViewport(view: Point[] | Bounds, viewportOptions?: unknown): unknown { return this.driver.getViewport(this.map, view, viewportOptions); }\n  setZoom(zoom: number, options?: unknown): void { this.driver.setZoom(this.map, zoom, options); }\n  getZoom(): number { return this.driver.getZoom(this.map); }\n  zoomIn(zoomCenter?: Point): void { this.driver.zoomIn(this.map, zoomCenter); }\n  zoomOut(zoomCenter?: Point): void { this.driver.zoomOut(this.map, zoomCenter); }\n  getBounds(): Bounds { return this.driver.getBounds(this.map); }\n  restrictBounds(bounds: Bounds | null): void { this.driver.restrictBounds(this.map, bounds); }\n\n  // ─── 地图类型 ───\n  setMapType(mapTypeId: string | number): void { this.driver.setMapType(this.map, mapTypeId); }\n  getMapType(): string { return this.driver.getMapType(this.map); }\n\n  // ─── 控件 / 右键菜单 ───\n  addControl(control: ControlHandle): void { this.driver.addControl(this.map, control); }\n  removeControl(control: ControlHandle): void { this.driver.removeControl(this.map, control); }\n  addContextMenu(menu: OverlayHandle): void { this.driver.addContextMenu(this.map, menu); }\n  removeContextMenu(menu: OverlayHandle): void { this.driver.removeContextMenu(this.map, menu); }\n\n  // ─── 覆盖物 ───\n  addOverlay(overlay: OverlayHandle): void { this.driver.addOverlay(this.map, overlay); }\n  removeOverlay(overlay: OverlayHandle): void { this.driver.removeOverlay(this.map, overlay); }\n  clearOverlays(): void { this.driver.clearOverlays(this.map); }\n  getOverlays(): OverlayHandle[] { return this.driver.getOverlays(this.map); }\n\n  // ─── 图层 ───\n  addLayer(layer: LayerHandle): void { this.driver.addLayer(this.map, layer); }\n  removeLayer(layer: LayerHandle): void { this.driver.removeLayer(this.map, layer); }\n  addTileLayer(layer: LayerHandle): void { this.driver.addTileLayer(this.map, layer); }\n  removeTileLayer(layer: LayerHandle): void { this.driver.removeTileLayer(this.map, layer); }\n  getTileLayer(mapType: string): LayerHandle | null { return this.driver.getTileLayer(this.map, mapType); }\n  addGeoJSONLayer(layer: LayerHandle): void { this.driver.addGeoJSONLayer(this.map, layer); }\n  removeGeoJSONLayer(layer: LayerHandle): void { this.driver.removeGeoJSONLayer(this.map, layer); }\n  addDistrictLayer(layer: LayerHandle): void { this.driver.addDistrictLayer(this.map, layer); }\n  removeDistrictLayer(layer: LayerHandle): void { this.driver.removeDistrictLayer(this.map, layer); }\n  addNormalLayer(layer: LayerHandle): void { this.driver.addNormalLayer(this.map, layer); }\n  removeNormalLayer(layer: LayerHandle): void { this.driver.removeNormalLayer(this.map, layer); }\n  setTrafficOn(): void { this.driver.setTrafficOn(this.map); }\n  setTrafficOff(): void { this.driver.setTrafficOff(this.map); }\n  showOverlayContainer(): void { this.driver.showOverlayContainer(this.map); }\n  hideOverlayContainer(): void { this.driver.hideOverlayContainer(this.map); }\n\n  // ─── 信息窗口 ───\n  openInfoWindow(iw: OverlayHandle, point?: Point): void { this.driver.openInfoWindow(this.map, iw, point); }\n  closeInfoWindow(): void { this.driver.closeInfoWindow(this.map); }\n\n  // ─── 样式 / 主题 ───\n  setMapStyle(config: unknown): void { this.driver.setMapStyle(this.map, config); }\n  setMapStyleV2(options: unknown): void { this.driver.setMapStyleV2(this.map, options); }\n  setTheme(theme: string, customVars?: Record<string, string>): void { this.driver.setTheme(this.map, theme, customVars); }\n  setCopyrightOffset(logo: unknown, cpy: unknown): void { this.driver.setCopyrightOffset(this.map, logo, cpy); }\n  setDefaultCursor(cursor: string): void { this.driver.setDefaultCursor(this.map, cursor); }\n  getDefaultCursor(): string { return this.driver.getDefaultCursor(this.map); }\n  setDraggingCursor(cursor: string): void { this.driver.setDraggingCursor(this.map, cursor); }\n  getDraggingCursor(): string { return this.driver.getDraggingCursor(this.map); }\n  setOverlayMoveCursor(cursor: string): void { this.driver.setOverlayMoveCursor(this.map, cursor); }\n\n  // ─── 视角动画 ───\n  startViewAnimation(viewAnimation: unknown): number { return this.driver.startViewAnimation(this.map, viewAnimation); }\n  pauseViewAnimation(viewAnimation?: unknown): void { this.driver.pauseViewAnimation(this.map, viewAnimation); }\n  continueViewAnimation(viewAnimation?: unknown): void { this.driver.continueViewAnimation(this.map, viewAnimation); }\n  cancelViewAnimation(viewAnimation?: unknown): void { this.driver.cancelViewAnimation(this.map, viewAnimation); }\n\n  // ─── 截图 ───\n  getScreenshot(): string { return this.driver.getScreenshot(this.map); }\n\n  // ─── 地球模式 ───\n  isSupportEarth(): boolean { return this.driver.isSupportEarth(this.map); }\n  getEarth(): unknown { return this.driver.getEarth(this.map); }\n  showEarthBoundary(): void { this.driver.showEarthBoundary(this.map); }\n  hideEarthBoundary(): void { this.driver.hideEarthBoundary(this.map); }\n  setEarthMaxZoom(zoom: number): void { this.driver.setEarthMaxZoom(this.map, zoom); }\n  setEarthMinZoom(zoom: number): void { this.driver.setEarthMinZoom(this.map, zoom); }\n\n  // ─── 室内 ───\n  showIndoor(uid: string, floor: number): void { this.driver.showIndoor(this.map, uid, floor); }\n  setIndoor(uid: string, floor: number): void { this.driver.setIndoor(this.map, uid, floor); }\n  getIndoorInfo(): unknown | null { return this.driver.getIndoorInfo(this.map); }\n  initIndoorLayer(opts?: unknown): unknown { return this.driver.initIndoorLayer(this.map, opts); }\n  setNormalMapDisplay(display: boolean): void { this.driver.setNormalMapDisplay(this.map, display); }\n  getVectorContainer(): unknown { return this.driver.getVectorContainer(this.map); }\n\n  // ─── 街景图层 ───\n  showStreetLayer(show: boolean): void { this.driver.showStreetLayer(this.map, show); }\n  hideStreetLayer(): void { this.driver.hideStreetLayer(this.map); }\n  isStreetLayerShow(): boolean { return this.driver.isStreetLayerShow(this.map); }\n  showVectorStreetLayer(): void { this.driver.showVectorStreetLayer(this.map); }\n  hideVectorStreetLayer(): void { this.driver.hideVectorStreetLayer(this.map); }\n\n  // ─── 语言 ───\n  getLanguage(): string { return this.driver.getLanguage(this.map); }\n  changeLanguage(language: string): void { this.driver.changeLanguage(this.map, language); }\n  enablePreferredLanguage(language: string): void { this.driver.enablePreferredLanguage(this.map, language); }\n  disablePreferredLanguage(): void { this.driver.disablePreferredLanguage(this.map); }\n\n  // ─── 私有 / 焦点遮罩 / 自定义 HTML 图层 ───\n  setLock(lock: boolean): void { this.driver.setLock(this.map, lock); }\n  setPrivateRegions(regions: unknown[]): void { this.driver.setPrivateRegions(this.map, regions); }\n  getPrivateRegions(): unknown[] { return this.driver.getPrivateRegions(this.map); }\n  setPrivateStatus(isOn: boolean): void { this.driver.setPrivateStatus(this.map, isOn); }\n  getPrivateStatus(): boolean { return this.driver.getPrivateStatus(this.map); }\n  setCustomArea(config: unknown): void { this.driver.setCustomArea(this.map, config); }\n  addFocusMask(mask: unknown): void { this.driver.addFocusMask(this.map, mask); }\n  removeFocusMask(mask: unknown): void { this.driver.removeFocusMask(this.map, mask); }\n  clearFocusMasks(): void { this.driver.clearFocusMasks(this.map); }\n  addCustomHtmlLayer(layer: unknown): void { this.driver.addCustomHtmlLayer(this.map, layer); }\n  removeCustomHtmlLayer(layer: unknown): void { this.driver.removeCustomHtmlLayer(this.map, layer); }\n  addParkingSpot(layer: unknown): void { this.driver.addParkingSpot(this.map, layer); }\n  removeParkingSpot(parking: unknown): void { this.driver.removeParkingSpot(this.map, parking); }\n\n  // ─── 3.0-only ───\n  enableMapClick(): void { this.driver.enableMapClick(this.map); }\n  disableMapClick(): void { this.driver.disableMapClick(this.map); }\n  enable3DBuilding(): void { this.driver.enable3DBuilding(this.map); }\n  disable3DBuilding(): void { this.driver.disable3DBuilding(this.map); }\n  setPanorama(pano: unknown): void { this.driver.setPanorama(this.map, pano); }\n  getPanorama(): unknown { return this.driver.getPanorama(this.map); }\n  setCurrentCity(city: string): void { this.driver.setCurrentCity(this.map, city); }\n  highResolutionEnabled(): boolean { return this.driver.highResolutionEnabled(this.map); }\n  addHotspot(hotspot: OverlayHandle): void { this.driver.addHotspot(this.map, hotspot); }\n  removeHotspot(hotspot: OverlayHandle): void { this.driver.removeHotspot(this.map, hotspot); }\n  clearHotspots(): void { this.driver.clearHotspots(this.map); }\n\n  // ─── 事件 ───\n  addEventListener(type: string, handler: (raw: unknown) => void): () => void {\n    return this.driver.addEventListener(this.map, type, handler);\n  }\n  removeEventListener(type: string, handler: (raw: unknown) => void): void {\n    this.driver.removeEventListener(this.map, type, handler);\n  }\n\n  // ─── Map 维护 ───\n  destroy(): void { this.driver.destroyMap(this.map); }\n}\n\nexport type MapRef = MapRefImpl;\n","import { useRef } from 'react';\n\n/**\n * 始终持有最新值，避免在事件订阅中拿到旧闭包。\n * 用于 useMapEvent 等 Hook 内部：订阅一次，调用时读最新 handler。\n */\nexport function useLatest<T>(value: T): React.MutableRefObject<T> {\n  const ref = useRef(value);\n  ref.current = value;\n  return ref;\n}\n","import { forwardRef, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { MapContext } from '../../context/MapContext';\nimport type { MapHandle, Point, Bounds, MapMouseEvent, MapMoveEvent, MapZoomEvent, MapEvent } from '../../types';\nimport { MapRefImpl } from './MapRef';\nimport type { MapRef } from './MapRef';\nimport { useLatest } from '../../utils/useLatest';\nimport { pointEquals } from '../../utils/pointEquals';\nimport type { DisplayOptions } from '../../types/core';\n\n/** 个性化生效区域配置（setCustomArea，4.0+，2.0.3 新增）。 */\nexport interface MapCustomArea {\n  /** 生效区域边界点（普通经纬度 { lng, lat }，组件内部转成原生 Point） */\n  area: Point[];\n  /** 区域内个性化样式，形如 { styleJson: [...] } */\n  style: unknown;\n  /** 生效前的全局个性化调用参数，默认 { styleJson: [] }（setCustomArea 依赖全局个性化管线已初始化） */\n  globalStyle?: unknown;\n}\n\nexport interface MapProps {\n  // 受控\n  // 仅支持坐标 { lng, lat }；按地名/城市名定位请用 ref.centerAndZoom(cityName) 或\n  // ref.setCenter(cityName)（原生 SDK 支持字符串，但字符串无法与受控状态做等值比较，\n  // 故此处不接受 string）。\n  center?: Point;\n  zoom?: number;\n  heading?: number;\n  tilt?: number;\n  // 非受控\n  defaultCenter?: Point;\n  defaultZoom?: number;\n  defaultHeading?: number;\n  defaultTilt?: number;\n  // SDK MapOptions 透传（除受控字段）\n  options?: Record<string, unknown>;\n  // 显示元素配置（仅 4.0+ 生效，低版本 noop+warn）\n  displayOptions?: DisplayOptions;\n  // 样式（按版本选；不存在的版本会 throw/warn）。\n  // 首帧样式随地图构造参数传给 SDK，避免「先默认样式再切自定义」的配色闪烁（见下方创建逻辑）。\n  // 注意：React StrictMode 开发期会双重挂载（mount→unmount→mount），受百度 SDK 异步销毁 +\n  // 版权控件创建时序影响，自定义样式下 logo/版权文字可能短暂闪现一下；这是开发期现象，\n  // 生产构建（无双挂载）不受影响。\n  mapStyle?: unknown;\n  mapStyleV2?: unknown;\n  /**\n   * 个性化生效区域（setCustomArea，4.0+，3.0 不支持，2.0.3 新增）。传 false/undefined 不设置。\n   * 只在指定多边形区域内应用一套个性化样式，区域外维持全局样式。\n   * setCustomArea 依赖全局个性化管线，应用前组件会先调用一次 setMapStyle（默认空样式，可用 globalStyle 覆盖）。\n   * 首帧随地图创建同步下发（在 tilesloaded 暴露 map 之前），避免「先默认建筑样式再切区域个性化」的闪烁。\n   * 从对象切到 false：SDK 无官方清除 API，组件会对上一次区域重新下发空样式（styleJson: []）使其恢复默认渲染。\n   */\n  customArea?: MapCustomArea | false;\n  // 交互开关（受控；undefined 表示不主动控制，由 SDK 默认值决定）\n  enableDragging?: boolean;\n  enableInertialDragging?: boolean;\n  enableScrollWheelZoom?: boolean;\n  enableContinuousZoom?: boolean;\n  enableResizeOnCenter?: boolean;\n  enableDoubleClickZoom?: boolean;\n  enableKeyboard?: boolean;\n  enablePinchToZoom?: boolean;\n  enableRotate?: boolean;\n  enableRotateGestures?: boolean;\n  enableTilt?: boolean;\n  enableTiltGestures?: boolean;\n  enableAutoResize?: boolean;\n  /**\n   * 开启点击底图标注后自动展示信息窗口，同时会开启底图标注点击。\n   * 3.0 下等价转发到 enableMapClick/disableMapClick，其内部会自动弹出信息窗，\n   * 效果与 4.0 基本一致。\n   */\n  enableIconInfoWindow?: boolean;\n  /**\n   * 启用首选语言（4.0+，3.0 不支持）。传 BMAP_LANGUAGE_* 常量；\n   * false 或 undefined 均表示不主动启用/不控制，false 时会调用 disablePreferredLanguage。\n   */\n  enablePreferredLanguage?: string | false;\n  // 缩放范围\n  minZoom?: number;\n  maxZoom?: number;\n  // 拖拽范围限制（受控；undefined 不主动控制）。\n  // 注意：原生 SDK 的 restrictBounds 一旦设置过就没有官方 API 能撤销，\n  // 因此这里不接受 null（避免误导用户以为能借此清除限制）。\n  bounds?: Bounds;\n  // 地图类型\n  mapType?: string | number;\n  // 光标\n  defaultCursor?: string;\n  draggingCursor?: string;\n  // 主题\n  theme?: string;\n  // 回调\n  onReady?: (map: MapHandle) => void;\n  onCenterChange?: (point: Point) => void;\n  onZoomChange?: (zoom: number) => void;\n  onHeadingChange?: (heading: number) => void;\n  onTiltChange?: (tilt: number) => void;\n  // 鼠标事件\n  onClick?: (e: MapMouseEvent) => void;\n  onDblClick?: (e: MapMouseEvent) => void;\n  onRightClick?: (e: MapMouseEvent) => void;\n  onMouseMove?: (e: MapMouseEvent) => void;\n  onMouseDown?: (e: MapMouseEvent) => void;\n  onMouseUp?: (e: MapMouseEvent) => void;\n  onMouseOver?: (e: MapMouseEvent) => void;\n  onMouseOut?: (e: MapMouseEvent) => void;\n  // 拖拽 / 移动\n  onDragStart?: (e: MapMoveEvent) => void;\n  onDragging?: (e: MapMoveEvent) => void;\n  onDragEnd?: (e: MapMoveEvent) => void;\n  onMoveStart?: (e: MapMoveEvent) => void;\n  onMoving?: (e: MapMoveEvent) => void;\n  onMoveEnd?: (e: MapMoveEvent) => void;\n  // 缩放\n  onZoomStart?: (e: MapZoomEvent) => void;\n  onZooming?: (e: MapZoomEvent) => void;\n  onZoomEnd?: (e: MapZoomEvent) => void;\n  // 其他\n  onResize?: (e: MapEvent) => void;\n  onTilesLoaded?: (e: MapEvent) => void;\n  onMapTypeChange?: (e: MapEvent) => void;\n  onTouchStart?: (e: MapMouseEvent) => void;\n  onTouchMove?: (e: MapMouseEvent) => void;\n  onTouchEnd?: (e: MapMouseEvent) => void;\n  onLongPress?: (e: MapMouseEvent) => void;\n  // DOM\n  className?: string;\n  style?: CSSProperties;\n  errorFallback?: ReactNode;\n  children?: ReactNode;\n}\n\n/**\n * Map 容器组件（DESIGN.md §5）。\n *\n * - useLayoutEffect 创建地图，避免首帧空白。\n * - 完整 cleanup：clearOverlays、destroy 或清空 container。\n * - StrictMode 安全。\n * - 受控循环抑制：internalUpdateRef + pointEquals(1e-7)。\n */\nexport const Map = forwardRef<MapRef, MapProps>(function Map(props, ref) {\n  const {\n    center, zoom, heading, tilt,\n    defaultCenter, defaultZoom, defaultHeading, defaultTilt,\n    options, displayOptions, mapStyle, mapStyleV2, customArea,\n    enableDragging, enableInertialDragging, enableScrollWheelZoom, enableContinuousZoom,\n    enableResizeOnCenter, enableDoubleClickZoom, enableKeyboard, enablePinchToZoom,\n    enableRotate, enableRotateGestures, enableTilt: enableTiltProp, enableTiltGestures,\n    enableAutoResize, enableIconInfoWindow, enablePreferredLanguage,\n    minZoom, maxZoom, bounds, mapType, defaultCursor, draggingCursor, theme,\n    onReady, onCenterChange, onZoomChange, onHeadingChange, onTiltChange,\n    onClick, onDblClick, onRightClick, onMouseMove, onMouseDown, onMouseUp, onMouseOver, onMouseOut,\n    onDragStart, onDragging, onDragEnd, onMoveStart, onMoving, onMoveEnd,\n    onZoomStart, onZooming, onZoomEnd, onResize, onTilesLoaded, onMapTypeChange,\n    onTouchStart, onTouchMove, onTouchEnd, onLongPress,\n    className, style, errorFallback = null, children,\n  } = props;\n\n  const { driver, status } = useBMapContext();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [map, setMap] = useState<MapHandle | null>(null);\n\n  const onReadyRef = useLatest(onReady);\n  const onCenterChangeRef = useLatest(onCenterChange);\n  const onZoomChangeRef = useLatest(onZoomChange);\n  const onHeadingChangeRef = useLatest(onHeadingChange);\n  const onTiltChangeRef = useLatest(onTiltChange);\n  const internalUpdateRef = useRef(false);\n\n  // 把 ref 同步为最新 MapRefImpl（支持 ref 对象与 callback ref）\n  useEffect(() => {\n    if (!ref) return;\n    const instance = map && driver ? new MapRefImpl(map, driver) : null;\n    if (typeof ref === 'function') {\n      ref(instance);\n    } else {\n      (ref as React.MutableRefObject<MapRef | null>).current = instance;\n    }\n  }, [map, driver, ref]);\n\n  // ─── 创建地图（useLayoutEffect + 完整 cleanup） ───\n  useLayoutEffect(() => {\n    if (status !== 'ready' || !driver || !containerRef.current) return;\n\n    // SDK GL bug 抑制器：\n    // v4 GL 渲染器在 marker 图标 image.onload 时调用 getVertexInfoForGL → _buildVertexForEachRender，\n    // 此时纹理管线可能还没就绪 → \"Cannot read properties of undefined (reading 'width')\"。\n    // marker 最终能正常渲染，此 error 不影响功能。精准抑制只此一类错误。\n    //\n    // 第二类：destroy 之后 SDK 内部残留的瓦片/raf/setTimeout 回调仍会跑一次，读到已经被置空的\n    // 内部引用 → \"Cannot read properties of null (reading 'tileInfo' / 'style' …)\"。这些回调不\n    // 经过我们的调用栈，callRaw 的 try/catch 抓不到，只能在 teardown 窗口内按 error 事件吞掉。\n    // 第二类判定收紧（避免误伤宿主工程）：仅吞 teardown 窗口内、来源为百度地图 SDK\n    // 脚本本身（event.filename 命中百度 CDN/BMapGL）、且读取的是已知 SDK 内部属性的 null\n    // 错误；宿主工程抛出的同类错误（filename 非百度 CDN 或属性名不在白名单）一律放行。\n    const SDK_FILENAME = /baidu\\.com|mapopen\\.baidu|bmapgl|BMapGL/i;\n    const SDK_NULL_PROPS = /^(?:tileInfo|style|tile|tiles|layer|gl|ctx|canvas|texture|buffer|program|shader)$/i;\n    const OUR_MARK = /\\.tsx|\\.jsx|react-bmap/;\n    let tearingDown = false;\n    const glErrorHandler = (event: ErrorEvent) => {\n      const msg = event.message || '';\n      const stack = (event.error as Error)?.stack || '';\n      if (msg.includes(\"'width'\") && (stack.includes('getVertexInfoForGL') || stack.includes('_buildVertexForEachRender'))) {\n        event.preventDefault();\n        event.stopPropagation();\n        return;\n      }\n      const propMatch = msg.match(/Cannot read propert(?:y|ies) of null \\(reading '([^']+)'\\)/);\n      if (\n        tearingDown &&\n        SDK_FILENAME.test(event.filename || '') &&\n        SDK_NULL_PROPS.test(propMatch?.[1] || '') &&\n        !OUR_MARK.test(stack)\n      ) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    };\n    window.addEventListener('error', glErrorHandler, true);\n\n    // 构造 SDK 选项时**不带** center/zoom/heading/tilt\n    const initial: Record<string, unknown> = { ...options };\n    Object.keys(initial).forEach(k => initial[k] === undefined && delete initial[k]);\n    // 把首帧样式随构造选项一起传给 SDK（对应原生 new BMap.Map(id, {style: ...})）：\n    // 若等 createMap 完成后再调用 setMapStyle/setMapStyleV2，SDK 已经用默认样式渲染过\n    // 一帧甚至发出了默认样式的瓦片请求，肉眼会看到「先出现默认地图，再切换成自定义样式」\n    // 的闪烁。mapStyleV2 优先于 mapStyle（与下面运行时切换 effect 的优先级一致）。\n    const initialStyle = mapStyleV2 ?? mapStyle;\n    if (initialStyle !== undefined) initial.style = initialStyle;\n\n    const handle = driver.createMap(containerRef.current, initial);\n\n    // ★ 必须 centerAndZoom 初始化后地图才能用（dts 明确要求）\n    // 首次渲染的视角设置属于「初始化」而非「用户交互引起的移动」，原生 new BMap.Map(id, options)\n    // 传 center/zoom/heading/tilt 时是没有动画的；这里改用 API 补设，需显式传 noAnimation:true\n    // 才能还原原生构造函数的无动画效果，否则首帧会出现一次不必要的飞入动画。\n    const initCenter = defaultCenter ?? center;\n    const initZoom = defaultZoom ?? zoom ?? 11;\n    if (initCenter) {\n      try {\n        driver.centerAndZoom(handle, initCenter, initZoom, { noAnimation: true });\n      } catch (e) {\n        console.warn('[react-bmap] centerAndZoom failed, map may be uninitialized', e);\n      }\n    }\n    // heading/tilt 初始值（仅 4.0+ 生效，低版本 noop+warn）\n    const initHeading = defaultHeading ?? heading;\n    const initTilt = defaultTilt ?? tilt;\n    if (initHeading != null) {\n      try { driver.setHeading(handle, initHeading, { noAnimation: true }); } catch { /* ignore */ }\n    }\n    if (initTilt != null) {\n      try { driver.setTilt(handle, initTilt, { noAnimation: true }); } catch { /* ignore */ }\n    }\n\n    // 地图类型：首帧同步应用（centerAndZoom 之后、tilesloaded 暴露 map 之前），避免\n    // 「先默认普通图、再切卫星/混合/地球」的闪烁。此刻瓦片刚随 centerAndZoom 开始加载、\n    // 尚未真正绘制，先把类型定好，首批瓦片即为目标类型。复用 driver.setMapType 的版本归一化\n    // （v3 把 B_* 字符串换成 SDK 实例；GL 内部 normalizeMapTypeRequest 处理 B_STREET_MAP 等）。\n    if (mapType !== undefined) {\n      try { driver.setMapType(handle, mapType); } catch { /* ignore */ }\n    }\n\n    // 个性化生效区域（customArea）：首帧同步应用，避免「先默认建筑样式、再切区域个性化」的闪烁。\n    // 与 initial.style 同理——但 setCustomArea/setMapStyle 只能在 createMap 之后以方法调用，\n    // 所以放在这里（centerAndZoom 初始化之后、tilesloaded 暴露 map 之前）尽早下发。\n    // customArea 取创建时的闭包值即可（首帧初值）；后续变化由下方运行时 effect 处理。\n    if (customArea) {\n      try {\n        driver.setMapStyle(handle, customArea.globalStyle ?? { styleJson: [] });\n        driver.setCustomArea(handle, { area: customArea.area, style: customArea.style });\n      } catch { /* v3 不支持 */ }\n    }\n\n    // 显示元素配置（displayOptions）：首帧同步应用，避免「先渲染出 POI/建筑、再隐藏」的闪烁。\n    // 与 mapType/customArea 同理——在 centerAndZoom 之后、tilesloaded 暴露 map 之前尽早下发，\n    // 让首批瓦片就按目标显示配置渲染（如 poi:false 首帧即不出 POI）。后续变化由下方运行时 effect 处理。\n    if (displayOptions !== undefined) {\n      try { driver.setDisplayOptions(handle, displayOptions); } catch { /* v3 不支持 */ }\n    }\n\n    // 延迟暴露 map 实例：\n    // v4 GL 的 WebGL 渲染器需要完成首帧瓦片渲染后，纹理/顶点管线才就绪。\n    // 如果在 tilesloaded 之前添加 overlay，marker 默认图标的 image onload 触发时，\n    // GL 顶点构建器访问未初始化的纹理尺寸 → \"Cannot read properties of undefined (reading 'width')\"。\n    // 等 tilesloaded 事件（GL 首帧渲染完成），再 setMap 让子组件挂载。\n    // v3 无 GL 渲染，tilesloaded 几乎立即触发；加 500ms fallback 防止事件丢失卡死。\n    const unsubs: Array<() => void> = [];\n    let mapReady = false;\n    const markReady = () => {\n      if (mapReady) return;\n      mapReady = true;\n      setMap(handle);\n      onReadyRef.current?.(handle);\n    };\n    unsubs.push(driver.addEventListener(handle, 'tilesloaded', markReady));\n    const fallbackId = setTimeout(markReady, 500);\n    unsubs.push(() => clearTimeout(fallbackId));\n\n    unsubs.push(driver.addEventListener(handle, 'moveend', () => {\n      if (internalUpdateRef.current) return;\n      const c = driver.getCenter(handle);\n      onCenterChangeRef.current?.(c);\n    }));\n    unsubs.push(driver.addEventListener(handle, 'zoomend', () => {\n      if (internalUpdateRef.current) return;\n      const z = driver.getZoom(handle);\n      onZoomChangeRef.current?.(z);\n    }));\n    unsubs.push(driver.addEventListener(handle, 'headingchange', () => {\n      if (internalUpdateRef.current) return;\n      try {\n        const h = driver.getHeading(handle);\n        if (typeof h === 'number' && !Number.isNaN(h)) onHeadingChangeRef.current?.(h);\n      } catch { /* v3 不支持 */ }\n    }));\n    unsubs.push(driver.addEventListener(handle, 'tiltchange', () => {\n      if (internalUpdateRef.current) return;\n      try {\n        const t = driver.getTilt(handle);\n        if (typeof t === 'number' && !Number.isNaN(t)) onTiltChangeRef.current?.(t);\n      } catch { /* v3 不支持 */ }\n    }));\n\n    return () => {\n      tearingDown = true;\n      unsubs.forEach(u => u());\n      driver.destroyMap(handle);\n      setMap(null);\n      // 监听器多留一拍：SDK 在 destroy 之后还可能回调一次瓦片/raf\n      setTimeout(() => window.removeEventListener('error', glErrorHandler, true), 0);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, status]);\n\n  // ─── 受控同步：center（独立 effect + 循环抑制） ───\n  // deps 用 lng/lat 而非 center 对象：父组件传内联 center={{lng,lat}} 时对象每次渲染都是新引用，\n  // 直接放 center 会让本 effect 每次渲染空跑一遍（内部 pointEquals 虽能拦住真正的 setCenter）。\n  useLayoutEffect(() => {\n    if (!map || !driver || !center) return;\n    const current = driver.getCenter(map);\n    if (!pointEquals(current, center)) {\n      internalUpdateRef.current = true;\n      // 用 setCenter 而非 centerAndZoom：centerAndZoom 在已初始化的地图上行为更接近「重置视野」，副作用大\n      try { driver.setCenter(map, center); } catch (e) {\n        console.warn('[react-bmap] setCenter failed', e);\n      }\n      requestAnimationFrame(() => { internalUpdateRef.current = false; });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, center?.lng, center?.lat]);\n\n  // ─── 受控同步：zoom ───\n  useLayoutEffect(() => {\n    if (!map || !driver || zoom == null) return;\n    let currentZoom: number | undefined;\n    try { currentZoom = driver.getZoom(map); } catch { /* 地图未就绪 */ }\n    if (currentZoom !== undefined && currentZoom !== zoom) {\n      internalUpdateRef.current = true;\n      try { driver.setZoom(map, zoom); } catch (e) {\n        console.warn('[react-bmap] setZoom failed', e);\n      }\n      requestAnimationFrame(() => { internalUpdateRef.current = false; });\n    }\n  }, [map, driver, zoom]);\n\n  // ─── 受控同步：heading（仅 4.0+ 生效；v3 走 unsupported） ───\n  useLayoutEffect(() => {\n    if (!map || !driver || heading == null) return;\n    let currentHeading: number | undefined;\n    try { currentHeading = driver.getHeading(map); } catch { return; }\n    if (typeof currentHeading !== 'number' || Number.isNaN(currentHeading)) return;  // 版本不支持\n    if (Math.abs(currentHeading - heading) > 0.01) {\n      internalUpdateRef.current = true;\n      try { driver.setHeading(map, heading); } catch (e) {\n        console.warn('[react-bmap] setHeading failed', e);\n      }\n      requestAnimationFrame(() => { internalUpdateRef.current = false; });\n    }\n  }, [map, driver, heading]);\n\n  // ─── 受控同步：tilt（仅 4.0+ 生效；v3 走 unsupported） ───\n  useLayoutEffect(() => {\n    if (!map || !driver || tilt == null) return;\n    let currentTilt: number | undefined;\n    try { currentTilt = driver.getTilt(map); } catch { return; }\n    if (typeof currentTilt !== 'number' || Number.isNaN(currentTilt)) return;\n    if (Math.abs(currentTilt - tilt) > 0.01) {\n      internalUpdateRef.current = true;\n      try { driver.setTilt(map, tilt); } catch (e) {\n        console.warn('[react-bmap] setTilt failed', e);\n      }\n      requestAnimationFrame(() => { internalUpdateRef.current = false; });\n    }\n  }, [map, driver, tilt]);\n\n  // ─── 交互开关（受控切换） ───\n  const toggleEffect = (prop: boolean | undefined, enable: () => void, disable: () => void) => {\n    useLayoutEffect(() => {\n      if (!map || !driver || prop === undefined) return;\n      try { prop ? enable() : disable(); } catch { /* ignore */ }\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [map, driver, prop]);\n  };\n  toggleEffect(enableDragging, () => driver!.enableDragging(map!), () => driver!.disableDragging(map!));\n  toggleEffect(enableInertialDragging, () => driver!.enableInertialDragging(map!), () => driver!.disableInertialDragging(map!));\n  toggleEffect(enableScrollWheelZoom, () => driver!.enableScrollWheelZoom(map!), () => driver!.disableScrollWheelZoom(map!));\n  toggleEffect(enableContinuousZoom, () => driver!.enableContinuousZoom(map!), () => driver!.disableContinuousZoom(map!));\n  toggleEffect(enableResizeOnCenter, () => driver!.enableResizeOnCenter(map!), () => driver!.disableResizeOnCenter(map!));\n  toggleEffect(enableDoubleClickZoom, () => driver!.enableDoubleClickZoom(map!), () => driver!.disableDoubleClickZoom(map!));\n  toggleEffect(enableKeyboard, () => driver!.enableKeyboard(map!), () => driver!.disableKeyboard(map!));\n  toggleEffect(enablePinchToZoom, () => driver!.enablePinchToZoom(map!), () => driver!.disablePinchToZoom(map!));\n  toggleEffect(enableRotate, () => driver!.enableRotate(map!), () => driver!.disableRotate(map!));\n  toggleEffect(enableRotateGestures, () => driver!.enableRotateGestures(map!), () => driver!.disableRotateGestures(map!));\n  toggleEffect(enableTiltProp, () => driver!.enableTilt(map!), () => driver!.disableTilt(map!));\n  toggleEffect(enableTiltGestures, () => driver!.enableTiltGestures(map!), () => driver!.disableTiltGestures(map!));\n  toggleEffect(enableAutoResize, () => driver!.enableAutoResize(map!), () => driver!.disableAutoResize(map!));\n  toggleEffect(enableIconInfoWindow, () => driver!.enableIconInfoWindow(map!), () => driver!.disableIconInfoWindow(map!));\n\n  // ─── 首选语言（非 boolean，单独处理：undefined 不控制，false 关闭，字符串启用） ───\n  useLayoutEffect(() => {\n    if (!map || !driver || enablePreferredLanguage === undefined) return;\n    try {\n      if (enablePreferredLanguage === false) driver.disablePreferredLanguage(map);\n      else driver.enablePreferredLanguage(map, enablePreferredLanguage);\n    } catch { /* ignore */ }\n  }, [map, driver, enablePreferredLanguage]);\n\n  // ─── 缩放范围 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || minZoom === undefined) return;\n    try { driver.setMinZoom(map, minZoom); } catch { /* ignore */ }\n  }, [map, driver, minZoom]);\n\n  useLayoutEffect(() => {\n    if (!map || !driver || maxZoom === undefined) return;\n    try { driver.setMaxZoom(map, maxZoom); } catch { /* ignore */ }\n  }, [map, driver, maxZoom]);\n\n  // ─── 拖拽范围限制 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || bounds === undefined) return;\n    try { driver.restrictBounds(map, bounds); } catch { /* ignore */ }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, bounds?.sw.lng, bounds?.sw.lat, bounds?.ne.lng, bounds?.ne.lat]);\n\n  // ─── 地图类型 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || mapType === undefined) return;\n    try { driver.setMapType(map, mapType); } catch { /* ignore */ }\n  }, [map, driver, mapType]);\n\n  // ─── 光标 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || defaultCursor === undefined) return;\n    try { driver.setDefaultCursor(map, defaultCursor); } catch { /* ignore */ }\n  }, [map, driver, defaultCursor]);\n\n  useLayoutEffect(() => {\n    if (!map || !driver || draggingCursor === undefined) return;\n    try { driver.setDraggingCursor(map, draggingCursor); } catch { /* ignore */ }\n  }, [map, driver, draggingCursor]);\n\n  // ─── 主题 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || theme === undefined) return;\n    try { driver.setTheme(map, theme); } catch { /* ignore */ }\n  }, [map, driver, theme]);\n\n  // ─── 显示元素配置 ───\n  useLayoutEffect(() => {\n    if (!map || !driver || displayOptions === undefined) return;\n    try { driver.setDisplayOptions(map, displayOptions); } catch { /* v3 不支持 */ }\n  }, [map, driver, displayOptions]);\n\n  // ─── 样式 ───\n  useEffect(() => {\n    if (!map || !driver || mapStyle === undefined) return;\n    driver.setMapStyle(map, mapStyle);\n  }, [map, driver, mapStyle]);\n\n  useEffect(() => {\n    if (!map || !driver || mapStyleV2 === undefined) return;\n    driver.setMapStyleV2(map, mapStyleV2);\n  }, [map, driver, mapStyleV2]);\n\n  // ─── 个性化生效区域（setCustomArea，4.0+；2.0.3 新增） ───\n  // setCustomArea 依赖全局个性化管线，需先 setMapStyle 一次（默认空样式，可用 globalStyle 覆盖）再设区域。\n  // SDK 没有官方「清除」API：customArea 从对象切到 false 时，对上一次的区域重新下发**空样式**\n  // （styleJson: []），让区域内建筑恢复默认渲染，达到\"取消个性化\"的效果。\n  const lastCustomAreaRef = useRef<Point[] | null>(null);\n  const customAreaKey = useMemo(\n    () => (customArea ? JSON.stringify(customArea) : customArea === false ? 'false' : ''),\n    [customArea],\n  );\n  useEffect(() => {\n    if (!map || !driver) return;\n    if (customArea) {\n      try {\n        driver.setMapStyle(map, customArea.globalStyle ?? { styleJson: [] });\n        driver.setCustomArea(map, { area: customArea.area, style: customArea.style });\n        lastCustomAreaRef.current = customArea.area;\n      } catch { /* v3 不支持 */ }\n    } else if (customArea === false && lastCustomAreaRef.current) {\n      try {\n        driver.setCustomArea(map, { area: lastCustomAreaRef.current, style: { styleJson: [] } });\n      } catch { /* v3 不支持 */ }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, customAreaKey]);\n\n  // ─── 事件订阅（React 方式：onClick / onZoomEnd 等 prop） ───\n  const eventProps = {\n    onClick, onDblClick, onRightClick, onMouseMove, onMouseDown, onMouseUp, onMouseOver, onMouseOut,\n    onDragStart, onDragging, onDragEnd, onMoveStart, onMoving, onMoveEnd,\n    onZoomStart, onZooming, onZoomEnd, onResize, onTilesLoaded, onMapTypeChange,\n    onTouchStart, onTouchMove, onTouchEnd, onLongPress,\n  };\n  // 用 ref 持有最新 handler：内联函数（每次渲染新引用）不会触发重订阅。\n  // 仅当某个 handler 从「有→无」或「无→有」切换时（eventKey 变化）才重订阅。\n  const eventPropsRef = useLatest(eventProps);\n  const eventKey = Object.entries(eventProps).map(([k, v]) => `${k}:${v ? 1 : 0}`).join('|');\n  useEffect(() => {\n    if (!map || !driver) return;\n    const EVENT_MAP: Record<string, string> = {\n      onClick: 'click', onDblClick: 'dblclick', onRightClick: 'rightclick',\n      onMouseMove: 'mousemove', onMouseDown: 'mousedown', onMouseUp: 'mouseup',\n      onMouseOver: 'mouseover', onMouseOut: 'mouseout',\n      onDragStart: 'dragstart', onDragging: 'dragging', onDragEnd: 'dragend',\n      onMoveStart: 'movestart', onMoving: 'moving', onMoveEnd: 'moveend',\n      onZoomStart: 'zoomstart', onZooming: 'zooming', onZoomEnd: 'zoomend',\n      onResize: 'resize', onTilesLoaded: 'tilesloaded', onMapTypeChange: 'maptypechange',\n      onTouchStart: 'touchstart', onTouchMove: 'touchmove', onTouchEnd: 'touchend',\n      onLongPress: 'longpress',\n    };\n    const unsubs: Array<() => void> = [];\n    for (const [prop, evt] of Object.entries(EVENT_MAP)) {\n      const current = (eventPropsRef.current as Record<string, unknown>)[prop];\n      if (!current) continue; // 未提供 handler，不订阅\n      unsubs.push(driver.addEventListener(map, evt, (e: unknown) => {\n        const fn = (eventPropsRef.current as Record<string, ((e: unknown) => void) | undefined>)[prop];\n        if (typeof fn === 'function') fn(e);\n      }));\n    }\n    return () => unsubs.forEach(u => u());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, eventKey]);\n\n  const ctxValue = useMemo(() => (map && driver ? { map, driver } : null), [map, driver]);\n\n  if (status === 'error') return <>{errorFallback}</>;\n\n  return (\n    <div ref={containerRef} className={className} style={style}>\n      {ctxValue && (\n        <MapContext.Provider value={ctxValue}>{children}</MapContext.Provider>\n      )}\n    </div>\n  );\n});\n","/**\n * 通用组件工厂 — 消除 Overlay / Control / Layer 组件的重复代码。\n *\n * 每个具体组件只需声明：\n * - 工厂方法（driver.createXxx）\n * - 哪个 prop 是 position（→ setOverlayPosition）\n * - 哪个 prop 是 path（→ setOverlayPath）\n * - 哪些 props 是 options（→ setOverlayOptions）\n *\n * 工厂内部统一处理：mount→create→add、unmount→remove、props change→setter。\n */\nimport { memo, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { useOverlayTarget, OverlayTargetContext } from '../context/OverlayTargetContext';\nimport type { OverlayTargetStore } from '../context/OverlayTargetContext';\nimport { stableStringify } from '../utils/stableStringify';\nimport { devWarn } from './debugWarn';\nimport type { BMapDriver } from '../drivers/types';\nimport type {\n  ControlHandle,\n  LayerHandle,\n  MapHandle,\n  OverlayHandle,\n  Point,\n} from '../types';\n\n// ─────────────── Overlay 组件工厂 ───────────────\n\nexport interface OverlayComponentConfig<P> {\n  /** 工厂方法：用 driver 创建 overlay */\n  factory: (driver: BMapDriver, props: P) => OverlayHandle | null;\n  /** position 属性名（变化时调 setOverlayPosition） */\n  positionProp?: keyof P & string;\n  /** path 属性名（变化时调 setOverlayPath） */\n  pathProp?: keyof P & string;\n  /** options 属性名列表（变化时调 setOverlayOptions） */\n  optionProps?: Array<keyof P & string>;\n  /**\n   * 只能在 constructor 设置的 props（SDK 无对应 setter 方法）。\n   * 这些 props 变化时框架自动重建 overlay 实例（cleanup → create），用户无需手写 key。\n   */\n  ctorOnlyProps?: Array<keyof P & string>;\n  /** 是否支持 children 嵌套（如 Marker 嵌 InfoWindow） */\n  supportsChildren?: boolean;\n  /**\n   * children 嵌套时提供给子组件的 target 类型（默认 'overlay'）。\n   * Marker 设为 'marker'，好让 Label 子元素（attachToMarkerAsLabel）识别父级并走 setLabel。\n   */\n  childTargetType?: OverlayTargetStore['type'];\n  /**\n   * 作为 Marker 子元素时，通过 marker.setLabel 挂载（随 marker 定位/拖拽跟随），\n   * 而非 map.addOverlay。仅 Label 使用；不在 Marker 内时按普通 overlay 挂到地图。\n   */\n  attachToMarkerAsLabel?: boolean;\n  /** overlay 级事件订阅（SDK 事件 → prop 回调） */\n  events?: Array<{ sdk: string; prop: keyof P & string }>;\n  /** 组件显示名（用于 React DevTools） */\n  displayName?: string;\n  /**\n   * 值对象模式：跳过 addOverlay/removeOverlay。\n   * 用于 Symbol/Icon/IconSequence 等不是 Overlay 的值对象。\n   * 组件仍然创建 SDK 实例并管理 setter，但不自动加到地图。\n   * 用户通过 ref 或 hooks 拿到 handle 传给父组件（如 Marker icon）。\n   */\n  skipMount?: boolean;\n}\n\nexport function createOverlayComponent<P extends { children?: ReactNode }>(\n  config: OverlayComponentConfig<P>,\n) {\n  const Comp = memo(function OverlayComponentImpl(props: P) {\n    const { map, driver } = useMapContext();\n    const target = useOverlayTarget();\n    const ref = useRef<OverlayHandle | null>(null);\n    // 挂载时从 SDK 实例读到的 option 默认值，prop 变回 undefined 时用它还原\n    const optionBaselineRef = useRef<Record<string, unknown>>({});\n    // 保持对最新 props 的引用，供 create effect 读取。\n    const propsRef = useRef(props);\n    propsRef.current = props;\n\n    // ─── OverlayTargetContext store ───\n    // 用 ref 持有当前 handle + 订阅者列表，store 对象身份永远稳定（只创建一次）。\n    // 子组件通过 useSyncExternalStore 订阅；本组件 effect 写入 ref 后立即通知，\n    // React 在同一 commit 周期内同步触发订阅者重渲染，避免旧实现里 useState 二次渲染导致的时序错位。\n    const targetRef = useRef<OverlayHandle | null>(null);\n    const listenersRef = useRef<Set<() => void>>(new Set());\n    const store = useMemo<OverlayTargetStore>(() => ({\n      type: config.childTargetType ?? 'overlay',\n      subscribe: (cb: () => void) => {\n        listenersRef.current.add(cb);\n        return () => { listenersRef.current.delete(cb); };\n      },\n      getTarget: () => targetRef.current,\n    }), []);\n    const notify = () => listenersRef.current.forEach(cb => cb());\n\n    // Marker3D 的延迟重建会把 ref.current 换成新实例。事件订阅 effect 的 deps 里\n    // 没有实例身份，必须显式 bump 一个版本号让它重新订阅，否则监听器留在已被移除的旧实例上。\n    const [instanceVersion, setInstanceVersion] = useState(0);\n\n    // ─── ctorOnlyProps: 计算 ctorKey，变化时触发创建 effect 重建 overlay ───\n    // 用 useMemo 缓存：deps 是各 ctor prop 的原始值，值不变时跳过 O(n) 的 stableStringify。\n    const ctorKey = useMemo(\n      () => config.ctorOnlyProps\n        ? stableStringify(config.ctorOnlyProps.map(k => (props as any)[k]))\n        : '',\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      config.ctorOnlyProps ? config.ctorOnlyProps.map(k => (props as any)[k]) : [],\n    );\n\n    // ─── 创建 ───\n    useLayoutEffect(() => {\n      if (!map || !driver) return;\n      // 剥离 children（React 内部字段不能传给 SDK 构造函数）\n      // 同时剥离 undefined/null 值：SDK 根据「是否传了第二个参数」和「opts 有哪些 key」\n      // 选择不同的内部代码路径。传 {rotation: undefined} 和不传 rotation 是不同行为。\n      // 只传用户显式设值的字段，与正常 SDK 用法 new Marker(point) 一致。\n      const { children: _children, ...rawProps } = propsRef.current as any;\n      void _children;\n      const factoryProps: Record<string, unknown> = {};\n      for (const [k, v] of Object.entries(rawProps)) {\n        if (v !== undefined && v !== null) factoryProps[k] = v;\n      }\n      const handle = config.factory(driver, factoryProps as P);\n      if (!handle) return;\n      ref.current = handle;\n      // 立即写入 ref 并通知订阅者：子组件（如 ContextMenu）会同步重渲染，\n      // 其 useLayoutEffect 在 cleanup 后会用新的 target 重新挂载。\n      targetRef.current = handle;\n      notify();\n      // 值对象（Symbol/Icon 等）不调 addOverlay\n      // Label 作为 Marker 子元素：走 marker.setLabel 挂载（随 marker 定位/拖拽跟随），而非 addOverlay。\n      // marker handle 尚未就绪时先不挂——父 Marker 的 store 通知后本 effect 会带着 handle 重跑。\n      const markerLabelTarget = (config.attachToMarkerAsLabel && target?.type === 'marker')\n        ? (target.target as OverlayHandle | null)\n        : null;\n      const attachToMarker = config.attachToMarkerAsLabel && target?.type === 'marker';\n      if (!config.skipMount) {\n        // Hotspot 不是标准 Overlay，用 addHotspot 代替 addOverlay\n        if ((handle as any).type === 'hotspot') {\n          driver.addHotspot?.(map, handle);\n        } else if (attachToMarker) {\n          if (markerLabelTarget) driver.setMarkerLabel(markerLabelTarget, handle);\n        } else if (target?.addOverlay) target.addOverlay(handle);\n        else driver.addOverlay(map, handle);\n      }\n      // 同步设置一次 options：StrictMode 双调用会重建 overlay（新实例），\n      // 但 setOverlayOptions 的独立 useEffect deps 不含 marker 引用、不会重跑。\n      // 必须在这里对新实例立即设置 enableDragging 等，否则 v3.0 默认 disabled 的开关不生效。\n      if (config.optionProps) {\n        // 先记录 SDK 默认值，供之后 prop 变回 undefined 时还原（见 options 更新 effect）。\n        // 只记「挂载时用户没传」的 key：这时 getter 读到的才是 SDK 自己的默认值。\n        // 用户挂载时就传了值的 key，getter 读到的是用户的值，冒充默认值还原反而更误导，\n        // 宁可缺席、让上层照旧告警。\n        const defaultableKeys = config.optionProps.filter(k => factoryProps[k] === undefined);\n        optionBaselineRef.current = defaultableKeys.length > 0\n          ? driver.snapshotOverlayOptions(handle, defaultableKeys)\n          : {};\n        const initOpts: Record<string, unknown> = {};\n        for (const k of config.optionProps) {\n          const v = factoryProps[k];\n          if (v !== undefined && v !== null) initOpts[k] = v;\n        }\n        if (Object.keys(initOpts).length > 0) {\n          driver.setOverlayOptions(handle, initOpts);\n        }\n      }\n      // 同步设置 visible（ctorOnlyProps 变化也会走这里，确保新实例可见性正确）\n      if (factoryProps.visible === false) {\n        driver.hideOverlay(handle);\n      }\n      // Marker3D SDK bug: 首次 addOverlay 后 size/shape 不渲染（shape/size 无 setter）。\n      // 同一实例 removeOverlay+addOverlay 也不生效——SDK 构造时捕获 WebGL 状态，\n      // 且要求 GL 首帧已渲染。必须：等 GL 就绪后创建全新实例并替换。\n      // 不再用固定 500ms 盲等：地图已 loaded 时走 rAF 尽快重建（几乎无闪烁），\n      // 未 loaded 时等 tilesloaded（GL 首帧渲染完成），并保留 500ms fallback 防事件丢失\n      // ——与 Map.tsx 的 markReady 同一套就绪判定。\n      let reAddTimer: ReturnType<typeof setTimeout> | undefined;\n      let reAddRaf: ReturnType<typeof requestAnimationFrame> | undefined;\n      let unsubReady: (() => void) | undefined;\n      if ((handle as any).type === 'marker3d') {\n        let reAdded = false;\n        const doReAdd = () => {\n          if (reAdded) return;\n          reAdded = true;\n          if (ref.current !== handle || !map) return;\n          try {\n            const newHandle = config.factory(driver, factoryProps as P);\n            if (!newHandle) return;\n            driver.removeOverlay(map, handle);\n            driver.addOverlay(map, newHandle);\n            ref.current = newHandle;\n            targetRef.current = newHandle;\n            // 重新设置 optionProps\n            if (config.optionProps) {\n              const initOpts: Record<string, unknown> = {};\n              for (const k of config.optionProps) {\n                const v = (factoryProps as Record<string, unknown>)[k];\n                if (v !== undefined && v !== null) initOpts[k] = v;\n              }\n              if (Object.keys(initOpts).length > 0) {\n                driver.setOverlayOptions(newHandle, initOpts);\n              }\n            }\n            if (factoryProps.visible === false) {\n              driver.hideOverlay(newHandle);\n            }\n            // 通知事件订阅 effect 重新绑到新实例上\n            setInstanceVersion(v => v + 1);\n          } catch { /* ignore */ }\n        };\n        const glReady = (() => {\n          try { return driver.isLoaded(map); } catch { return false; }\n        })();\n        if (glReady) {\n          // GL 已就绪：双 rAF 确保跨过一次绘制后再重建，避免与本次挂载同帧\n          reAddRaf = requestAnimationFrame(() => {\n            reAddRaf = requestAnimationFrame(doReAdd);\n          });\n        } else {\n          // 等 GL 首帧渲染完成；fallback 防 tilesloaded 事件丢失卡死\n          try { unsubReady = driver.addEventListener(map, 'tilesloaded', doReAdd); } catch { /* ignore */ }\n          reAddTimer = setTimeout(doReAdd, 500);\n        }\n      }\n      return () => {\n      if (reAddTimer) clearTimeout(reAddTimer);\n      if (reAddRaf) cancelAnimationFrame(reAddRaf);\n      if (unsubReady) unsubReady();\n      // Marker3D 的延迟重建可能已经把 ref.current 换成了新实例，闭包里的 handle\n      // 那时已被移除。必须以 ref.current 为准，否则新实例会永远留在地图上。\n      const current = ref.current ?? handle;\n      // 值对象不调 removeOverlay\n      if (!config.skipMount) {\n        // Hotspot 用 removeHotspot 代替 removeOverlay\n        if ((current as any)?.type === 'hotspot') {\n          driver.removeHotspot?.(map, current);\n        } else if (attachToMarker) {\n          if (markerLabelTarget) driver.removeMarkerLabel(markerLabelTarget, current);\n        } else if (target?.removeOverlay) target.removeOverlay(current);\n        else if (map) driver.removeOverlay(map, current);\n      }\n        ref.current = null;\n        targetRef.current = null;\n        notify();\n      };\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [map, driver, target, ctorKey]);\n\n    // ─── position 更新 ───\n    const posVal = config.positionProp ? props[config.positionProp] : undefined;\n    const posKey = useMemo(() => stableStringify(posVal), [posVal]);\n    useEffect(() => {\n      if (ref.current && driver && posVal != null) {\n        driver.setOverlayPosition(ref.current, posVal as unknown as Point);\n      }\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, posKey]);\n\n    // ─── path 更新 ───\n    const pathVal = config.pathProp ? props[config.pathProp] : undefined;\n    const pathKey = useMemo(() => stableStringify(pathVal), [pathVal]);\n    useEffect(() => {\n      if (ref.current && driver && pathVal != null) {\n        driver.setOverlayPath(ref.current, pathVal as Point[]);\n      }\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, pathKey]);\n\n    // ─── options 更新 ───\n    // 用 useMemo 缓存快照对象：值不变时引用稳定，避免每次渲染重建对象 + 重跑 stableStringify。\n    const optSnapshot = useMemo<Record<string, unknown>>(\n      () => config.optionProps\n        ? config.optionProps.reduce<Record<string, unknown>>((acc, k) => {\n            if (props[k] !== undefined) acc[k] = props[k];\n            return acc;\n          }, {})\n        : {},\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      config.optionProps ? config.optionProps.map(k => props[k]) : [],\n    );\n    const optKey = useMemo(() => stableStringify(optSnapshot), [optSnapshot]);\n    const appliedOptKeysRef = useRef<string[]>([]);\n    useEffect(() => {\n      if (!ref.current || !driver || !config.optionProps) return;\n      const nextKeys = Object.keys(optSnapshot);\n      // props 从有值变 undefined 时快照里就没有这个 key，setOverlayOptions 拿不到任何信息，\n      // driver 的 setter 分支都是 typeof 判断、传 undefined 也是 no-op。\n      // 受控语义要求「传 undefined 就回到默认」，所以这里改用挂载时抓的 SDK 默认值回写；\n      // 只有连默认值都拿不到的 key（SDK 无 getter/setter，或挂载时用户就传了值）才告警。\n      const removed = appliedOptKeysRef.current.filter(k => !nextKeys.includes(k));\n      if (removed.length > 0) {\n        const restorable: Record<string, unknown> = {};\n        const unrestorable: string[] = [];\n        for (const k of removed) {\n          if (k in optionBaselineRef.current) restorable[k] = optionBaselineRef.current[k];\n          else unrestorable.push(k);\n        }\n        if (Object.keys(restorable).length > 0) {\n          unrestorable.push(...driver.restoreOverlayOptions(ref.current, restorable));\n        }\n        if (unrestorable.length > 0) {\n          devWarn(\n            `${config.displayName ?? 'Overlay'} 的 ${unrestorable.join(' / ')} 由有值变为 undefined，`\n            + '框架拿不到 SDK 默认值可还原（覆盖物仍保持上一次设置）。'\n            + '请显式传入目标值，或改用 key 强制重建组件',\n          );\n        }\n      }\n      appliedOptKeysRef.current = nextKeys;\n      if (nextKeys.length > 0) {\n        driver.setOverlayOptions(ref.current, optSnapshot);\n      }\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, optKey]);\n\n    // ─── 可见性（show/hide，Overlay 基类方法） ───\n    const visible = (props as any).visible;\n    useEffect(() => {\n      if (!ref.current || !driver) return;\n      if (visible === false) driver.hideOverlay(ref.current);\n      else driver.showOverlay(ref.current);\n    }, [driver, visible]);\n\n    // ─── overlay 级事件订阅 ───\n    const eventKey = useMemo(\n      () => stableStringify((config.events ?? []).map(e => `${e.sdk}:${typeof props[e.prop]}`)),\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      (config.events ?? []).map(e => typeof props[e.prop]),\n    );\n    const handlersRef = useRef<Record<string, unknown>>({});\n    (config.events ?? []).forEach(e => { handlersRef.current[e.prop] = props[e.prop]; });\n    useEffect(() => {\n      if (!ref.current || !driver || !config.events) return;\n      const unsubs: Array<() => void> = [];\n      for (const { sdk, prop } of config.events) {\n        unsubs.push(driver.addEventListener(ref.current, sdk, (raw: unknown) => {\n          const fn = handlersRef.current[prop];\n          if (typeof fn === 'function') {\n            const r = raw as Record<string, unknown>;\n            fn(r?.point ?? r?.latlng ?? r?.latLng ?? raw, raw);\n          }\n        }));\n      }\n      return () => unsubs.forEach(u => u());\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, eventKey, ctorKey, instanceVersion]);\n\n    // ─── children 嵌套 ───\n    if (!props.children) return null;\n    if (!config.supportsChildren) return null;\n\n    return (\n      <OverlayTargetContext.Provider value={store}>\n        {props.children}\n      </OverlayTargetContext.Provider>\n    );\n  });\n  Comp.displayName = config.displayName || 'OverlayComponent';\n  return Comp;\n}\n\n// ─────────────── Control 组件工厂 ───────────────\n\nexport interface ControlComponentConfig<P> {\n  factory: (driver: BMapDriver, props: P) => ControlHandle | null;\n  /**\n   * 可通过 Control 基类或具体控件 setter 响应式更新的 props。\n   * 注意：这类 prop 在 null/undefined 与有值之间切换时控件会整体重建\n   * （见下方 optionDefaultKey），控件内部的交互状态会丢失 —— 需要稳定状态时\n   * 不要让 option prop 在「不传」和「传」之间来回切换，给一个固定值即可。\n   */\n  optionProps?: Array<keyof P & string>;\n  /** 只能在 constructor options 中读取的 props，变化时自动重建控件 */\n  ctorOnlyProps?: Array<keyof P & string>;\n  /** Control 级事件订阅（SDK 事件 → prop 回调） */\n  events?: Array<{ sdk: string; prop: keyof P & string }>;\n  displayName?: string;\n}\n\nexport function createControlComponent<P>(\n  config: ControlComponentConfig<P>,\n) {\n  const Comp = memo(function ControlComponentImpl(props: P) {\n    const { map, driver } = useMapContext();\n    const ref = useRef<ControlHandle | null>(null);\n    const propsRef = useRef(props);\n    propsRef.current = props;\n\n    const ctorKey = useMemo(\n      () => config.ctorOnlyProps\n        ? stableStringify(config.ctorOnlyProps.map(k => (props as any)[k]))\n        : '',\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      config.ctorOnlyProps ? config.ctorOnlyProps.map(k => (props as any)[k]) : [],\n    );\n    const optionDefaultKey = useMemo(\n      () => config.optionProps\n        ? stableStringify(config.optionProps.map(k => (props as any)[k] == null))\n        : '',\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      config.optionProps ? config.optionProps.map(k => (props as any)[k] == null) : [],\n    );\n\n    useLayoutEffect(() => {\n      if (!map || !driver) return;\n      const { children: _c, visible: _v, ...rawCtrl } = propsRef.current as any;\n      void _c; void _v;\n      const ctrlProps: Record<string, unknown> = {};\n      for (const [k, v] of Object.entries(rawCtrl)) { if (v !== undefined && v !== null) ctrlProps[k] = v; }\n      const handle = config.factory(driver, ctrlProps as P);\n      if (!handle) return;\n      ref.current = handle;\n      driver.addControl(map, handle);\n\n      if (config.optionProps) {\n        const initOpts: Record<string, unknown> = {};\n        for (const k of config.optionProps) {\n          const v = ctrlProps[k];\n          if (v !== undefined && v !== null) initOpts[k] = v;\n        }\n        // 不在 useLayoutEffect 中调用 setControlOptions（会导致 setAnchor 重置 SDK 默认 offset）\n        // 构造函数已经设置了所有选项，后续变更由 useEffect 处理\n      }\n      if ((propsRef.current as any).visible === false) driver.hideControl(handle);\n\n      return () => {\n        driver.removeControl(map, handle);\n        ref.current = null;\n      };\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [map, driver, ctorKey, optionDefaultKey]);\n\n    const optSnapshot = useMemo<Record<string, unknown>>(\n      () => config.optionProps\n        ? config.optionProps.reduce<Record<string, unknown>>((acc, k) => {\n            if ((props as any)[k] !== undefined) acc[k] = (props as any)[k];\n            return acc;\n          }, {})\n        : {},\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      config.optionProps ? config.optionProps.map(k => (props as any)[k]) : [],\n    );\n    const optKey = useMemo(() => stableStringify(optSnapshot), [optSnapshot]);\n    const firstRunRef = useRef(true);\n    useEffect(() => {\n      if (!ref.current || !driver || !config.optionProps) return;\n      // 跳过首次运行：构造函数已设置所有选项，首次 setControlOptions 会调用 setAnchor 重置 SDK 默认 offset\n      if (firstRunRef.current) { firstRunRef.current = false; return; }\n      if (Object.keys(optSnapshot).length > 0) driver.setControlOptions(ref.current, optSnapshot);\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, optKey]);\n\n    const visible = (props as any).visible;\n    useEffect(() => {\n      if (!ref.current || !driver) return;\n      if (visible === false) driver.hideControl(ref.current);\n      else driver.showControl(ref.current);\n    }, [driver, visible]);\n\n    const eventKey = useMemo(\n      () => stableStringify((config.events ?? []).map(e => `${e.sdk}:${typeof (props as any)[e.prop]}`)),\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      (config.events ?? []).map(e => typeof (props as any)[e.prop]),\n    );\n    const handlersRef = useRef<Record<string, unknown>>({});\n    (config.events ?? []).forEach(e => { handlersRef.current[e.prop] = (props as any)[e.prop]; });\n    useEffect(() => {\n      if (!ref.current || !driver || !config.events) return;\n      const unsubs: Array<() => void> = [];\n      for (const { sdk, prop } of config.events) {\n        unsubs.push(driver.addEventListener(ref.current, sdk, (raw: unknown) => {\n          const fn = handlersRef.current[prop];\n          if (typeof fn === 'function') fn(raw);\n        }));\n      }\n      return () => unsubs.forEach(unsub => unsub());\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [driver, eventKey, ctorKey]);\n\n    return null;\n  });\n  Comp.displayName = config.displayName || 'ControlComponent';\n  return Comp;\n}\n\n// ─────────────── Layer 组件工厂 ───────────────\n\nexport interface LayerComponentConfig<P> {\n  factory: (driver: BMapDriver, props: P) => LayerHandle | null;\n  /** 添加方法名，默认 'addLayer' */\n  addMethod?: keyof BMapDriver;\n  /** 移除方法名，默认 'removeLayer' */\n  removeMethod?: keyof BMapDriver;\n  /** React StrictMode 下复用同一个 SDK layer 实例，避免 add/remove 不成对 */\n  reuseHandle?: boolean;\n  /** 延后一拍添加 layer，让 StrictMode 的模拟卸载可以取消首次 add */\n  deferMount?: boolean;\n  /** 事件列表（SDK 事件名 → React 回调 prop 名） */\n  events?: ReadonlyArray<{ sdk: string; prop: keyof P & string }>;\n  displayName?: string;\n}\n\nexport function createLayerComponent<P>(\n  config: LayerComponentConfig<P>,\n) {\n  const Comp = memo(function LayerComponentImpl(props: P) {\n    const { map, driver } = useMapContext();\n    const ref = useRef<LayerHandle | null>(null);\n    const cbRefs = useRef<Record<string, ((e: any) => void) | undefined>>({});\n\n    // 保持事件回调最新引用\n    if (config.events) {\n      for (const ev of config.events) {\n        cbRefs.current[ev.prop] = (props as any)[ev.prop];\n      }\n    }\n\n    // 图层没有 setter 抽象（driver 只有 addLayer/removeLayer），props 变化只能靠重建生效。\n    // 用值比较而不是引用比较：stableStringify 把函数折叠成 'fn'，所以内联的\n    // tileLoadFunction / onclick 之类不会造成无意义的重建。\n    const { children: _keyChildren, ...propsForKey } = props as any;\n    void _keyChildren;\n    const layerKey = stableStringify(propsForKey);\n    // reuseHandle 是为 StrictMode 的双次挂载准备的（props 没变才复用）；\n    // props 真的变了必须造新实例，否则新配置永远不生效。\n    const handleKeyRef = useRef<string | null>(null);\n\n    useLayoutEffect(() => {\n      if (!map || !driver) return;\n      const { children: _c2, ...rawLayer } = props as any; void _c2;\n      const layerProps: Record<string, unknown> = {};\n      for (const [k, v] of Object.entries(rawLayer)) { if (v !== undefined && v !== null) layerProps[k] = v; }\n      let handle = config.reuseHandle && handleKeyRef.current === layerKey ? ref.current : null;\n      if (!handle) {\n        handle = config.factory(driver, layerProps as P);\n        if (!handle) return;\n        ref.current = handle;\n        handleKeyRef.current = layerKey;\n      }\n      const add = config.addMethod ?? 'addLayer';\n      const remove = config.removeMethod ?? 'removeLayer';\n      let mounted = false;\n      let mountTimer: ReturnType<typeof setTimeout> | null = null;\n      const mountLayer = () => {\n        mounted = true;\n        (driver as any)[add](map, handle);\n      };\n      if (config.deferMount) mountTimer = setTimeout(mountLayer, 0);\n      else mountLayer();\n\n      // 注册事件\n      // 走 driver.addEventListener：裸 SDK 的 addEventListener 不返回退订函数，\n      // 直接用它的返回值收集 unsub 等于永远收不到，卸载后回调仍在（reuseHandle 的图层还会叠加）。\n      const unsubs: Array<() => void> = [];\n      if (config.events && handle.raw) {\n        for (const ev of config.events) {\n          unsubs.push(driver.addEventListener(handle, ev.sdk, (e: any) => cbRefs.current[ev.prop]?.(e)));\n        }\n      }\n\n      return () => {\n        unsubs.forEach(u => u());\n        if (mountTimer) clearTimeout(mountTimer);\n        if (mounted) (driver as any)[remove](map, handle);\n        if (!config.reuseHandle) ref.current = null;\n      };\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [map, driver, layerKey]);\n\n    return null;\n  });\n  Comp.displayName = config.displayName || 'LayerComponent';\n  return Comp;\n}\n","/**\n * InfoWindow — 信息窗口组件。\n *\n * 不是普通 overlay（不走 addOverlay/removeOverlay），而是通过 openInfoWindow/closeInfoWindow 控制。\n *\n * 用法 1：嵌套在 <Marker> 内（自动挂到 marker）\n * <Marker position={pt}>\n *   <InfoWindow open={show}>Hello</InfoWindow>\n * </Marker>\n *\n * 用法 2：独立使用（挂到 map，需传 position）\n * <Map>\n *   <InfoWindow open={show} position={pt}>Hello</InfoWindow>\n * </Map>\n *\n * v3: marker.openInfoWindow(iw) / map.openInfoWindow(iw, point)\n * v4: marker.openInfoWindow(iw) / map.openInfoWindow 已移除\n */\nimport { memo, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useOverlayTarget } from '../../context/OverlayTargetContext';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { getSDK } from '../../utils/sdk';\nimport type { OverlayHandle, Point } from '../../types';\nimport type { InfoWindowProps } from './types';\n\nexport const InfoWindow = memo(function InfoWindow(props: InfoWindowProps) {\n  const { map, driver } = useMapContext();\n  const target = useOverlayTarget();\n\n  const {\n    content, open = true, position,\n    onOpen, onClose, onClickClose, onMaximize, onRestore, onResize,\n    width, height, maxWidth, offset, title,\n    enableAutoPan, enableCloseOnClick, enableMessage, message, maxContent, enableMaximize, enableSearchTool,\n  } = props;\n\n  const iwRef = useRef<OverlayHandle | null>(null);\n  const [created, setCreated] = useState(false);\n\n  // 用 ref 存所有事件回调，SDK 监听器只注册一次、不随 render 重新绑定\n  const cbRefs = {\n    open: useRef(onOpen), close: useRef(onClose), clickclose: useRef(onClickClose),\n    maximize: useRef(onMaximize), restore: useRef(onRestore), resize: useRef(onResize),\n  };\n  cbRefs.open.current = onOpen;\n  cbRefs.close.current = onClose;\n  cbRefs.clickclose.current = onClickClose;\n  cbRefs.maximize.current = onMaximize;\n  cbRefs.restore.current = onRestore;\n  cbRefs.resize.current = onResize;\n\n  // 有 setter 的属性通过 setter 更新，不重建\n  // 无 setter 的属性变化才重建：maxWidth, offset, enableCloseOnClick, enableMessage, message, enableSearchTool\n  const ctorOnlyOptsKey = stableStringify({ maxWidth, offset, enableCloseOnClick, enableMessage, message, enableSearchTool });\n\n  // 1. 创建 InfoWindow 实例（仅 ctor-only 属性变化时重建）\n  useLayoutEffect(() => {\n    if (!driver) return;\n    const opts: Record<string, unknown> = {};\n    const raw = { width, height, maxWidth, offset, title, enableAutoPan, enableCloseOnClick, enableMessage, message, maxContent, enableMaximize, enableSearchTool };\n    for (const [k, v] of Object.entries(raw)) {\n      if (v !== undefined && v !== null) opts[k] = v;\n    }\n    const iw = driver.createInfoWindow(content, opts);\n    if (!iw) return;\n    iwRef.current = iw;\n    setCreated(true);\n\n    // 注册全部 6 个 InfoWindowEventMap 事件，通过 ref 调用最新回调\n    const rawIW = (iw as any).raw;\n    const handlers: { event: string; fn: (e: unknown) => void }[] = [];\n    for (const [event, refKey] of [\n      ['open', 'open'], ['close', 'close'], ['clickclose', 'clickclose'],\n      ['maximize', 'maximize'], ['restore', 'restore'], ['resize', 'resize'],\n    ] as const) {\n      const fn = (e: unknown) => (cbRefs as any)[refKey].current?.(e);\n      rawIW?.addEventListener?.(event, fn);\n      handlers.push({ event, fn });\n    }\n\n    return () => {\n      for (const { event, fn } of handlers) {\n        rawIW?.removeEventListener?.(event, fn);\n      }\n      const openTarget = target?.target ?? map;\n      if (openTarget) {\n        try { driver.closeInfoWindow(openTarget as any); } catch { /* ignore */ }\n      }\n      iwRef.current = null;\n      setCreated(false);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, ctorOnlyOptsKey]);\n\n  // 2. 有 setter 的属性：变化时调 setter，不重建\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (raw && content != null) raw.setContent?.(content);\n  }, [created, content]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (raw && title != null) raw.setTitle?.(title);\n  }, [created, title]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (raw && width != null) raw.setWidth?.(width);\n  }, [created, width]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (raw && height != null) raw.setHeight?.(height);\n  }, [created, height]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (raw && maxContent != null) raw.setMaxContent?.(maxContent);\n  }, [created, maxContent]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (!raw) return;\n    if (enableMaximize === true) raw.enableMaximize?.();\n    else if (enableMaximize === false) raw.disableMaximize?.();\n  }, [created, enableMaximize]);\n\n  useEffect(() => {\n    const raw = (iwRef.current as any)?.raw;\n    if (!raw) return;\n    if (enableAutoPan === true) raw.enableAutoPan?.();\n    else if (enableAutoPan === false) raw.disableAutoPan?.();\n  }, [created, enableAutoPan]);\n\n  // 3. open/close 控制（不依赖 content/opts，避免属性变化时重新打开）\n  useEffect(() => {\n    if (!driver || !map || !created || !iwRef.current) return;\n\n    const openTarget = (target?.target ?? map) as any;\n    const iw = iwRef.current;\n\n    if (open) {\n      try {\n        const rawTarget = openTarget?.raw ?? openTarget;\n        const rawIW = (iw as any).raw;\n\n        if (position) {\n          const SDK = getSDK();\n          const pt = new SDK.Point(position.lng, position.lat);\n          rawTarget?.openInfoWindow?.(rawIW, pt);\n        } else if (typeof rawTarget?.openInfoWindow === 'function') {\n          rawTarget.openInfoWindow(rawIW);\n        }\n      } catch (e) {\n        console.warn('[InfoWindow] open failed:', e);\n      }\n    } else {\n      try {\n        const rawTarget = openTarget?.raw ?? openTarget;\n        if (typeof rawTarget?.closeInfoWindow === 'function') rawTarget.closeInfoWindow();\n        else (map as any).raw?.closeInfoWindow?.();\n      } catch { /* ignore */ }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, map, target, created, open, position?.lng, position?.lat, ctorOnlyOptsKey]);\n\n  // InfoWindow 不渲染 React children 到 DOM（内容通过 SDK content 参数传入）\n  // children 仅用于逻辑组合（如嵌套在 Marker 内时提供 OverlayTargetContext）\n  return null;\n});\n","/**\n * CustomOverlay — React children based custom DOM overlay.\n *\n * SDK still requires a domCreate function, but the public React API renders children\n * into the DOM element through a portal.\n */\nimport { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useMapContext } from '../../context/MapContext';\nimport { useOverlayTarget } from '../../context/OverlayTargetContext';\nimport { stableStringify } from '../../utils/stableStringify';\nimport type { OverlayHandle } from '../../types';\nimport type { CustomOverlayProps } from './types';\n\nconst OPTION_PROPS: Array<keyof CustomOverlayProps & string> = [\n  'point', 'rotation', 'properties',\n];\n\nconst CTOR_ONLY_PROPS: Array<keyof CustomOverlayProps & string> = [\n  'anchors', 'offsetX', 'offsetY', 'minZoom', 'maxZoom', 'fixBottom',\n  'useTranslate', 'autoFollowHeadingChanged', 'enableDraggingMap',\n  'rotationInit', 'zIndex', 'enableMassClear',\n];\n\nconst EVENTS: Array<{ sdk: string; prop: keyof CustomOverlayProps & string }> = [\n  { sdk: 'click', prop: 'onClick' },\n  { sdk: 'mouseover', prop: 'onMouseOver' },\n  { sdk: 'mouseout', prop: 'onMouseOut' },\n];\n\nfunction pickDefined(\n  props: CustomOverlayProps,\n  keys: Array<keyof CustomOverlayProps & string>,\n): Record<string, unknown> {\n  const out: Record<string, unknown> = {};\n  for (const key of keys) {\n    const value = props[key];\n    if (value !== undefined && value !== null) out[key] = value;\n  }\n  return out;\n}\n\nfunction pickSdkProps(props: CustomOverlayProps): Record<string, unknown> {\n  const {\n    children: _children,\n    visible: _visible,\n    onClick: _onClick,\n    onMouseOver: _onMouseOver,\n    onMouseOut: _onMouseOut,\n    ...sdkProps\n  } = props;\n  void _children; void _visible; void _onClick; void _onMouseOver; void _onMouseOut;\n\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(sdkProps)) {\n    if (value !== undefined && value !== null) out[key] = value;\n  }\n  return out;\n}\n\nexport const CustomOverlay = memo(function CustomOverlay(props: CustomOverlayProps) {\n  const { map, driver } = useMapContext();\n  const target = useOverlayTarget();\n  const overlayRef = useRef<OverlayHandle | null>(null);\n  const propsRef = useRef(props);\n  propsRef.current = props;\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  if (!containerRef.current && typeof document !== 'undefined') {\n    containerRef.current = document.createElement('div');\n  }\n\n  const ctorKey = stableStringify(CTOR_ONLY_PROPS.map(k => props[k]));\n\n  useLayoutEffect(() => {\n    const container = containerRef.current;\n    if (!map || !driver || !container) return;\n\n    const sdkProps = pickSdkProps(propsRef.current);\n    const overlay = driver.createCustomOverlay(() => container, sdkProps);\n    if (!overlay) return;\n\n    overlayRef.current = overlay;\n    if (target?.addOverlay) target.addOverlay(overlay);\n    else driver.addOverlay(map, overlay);\n\n    const initOpts = pickDefined(propsRef.current, OPTION_PROPS);\n    if (Object.keys(initOpts).length > 0) {\n      driver.setOverlayOptions(overlay, initOpts);\n    }\n    if (propsRef.current.visible === false) {\n      driver.hideOverlay(overlay);\n    }\n\n    return () => {\n      if (target?.removeOverlay) target.removeOverlay(overlay);\n      else driver.removeOverlay(map, overlay);\n      overlayRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, target, ctorKey]);\n\n  const optionSnapshot = pickDefined(props, OPTION_PROPS);\n  const optionKey = stableStringify(optionSnapshot);\n  useEffect(() => {\n    if (!overlayRef.current || !driver) return;\n    if (Object.keys(optionSnapshot).length > 0) {\n      driver.setOverlayOptions(overlayRef.current, optionSnapshot);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optionKey]);\n\n  const { visible } = props;\n  useEffect(() => {\n    if (!overlayRef.current || !driver) return;\n    if (visible === false) driver.hideOverlay(overlayRef.current);\n    else driver.showOverlay(overlayRef.current);\n  }, [driver, visible]);\n\n  const eventKey = stableStringify(EVENTS.map(e => `${e.sdk}:${typeof props[e.prop]}`));\n  const handlersRef = useRef<Record<string, unknown>>({});\n  for (const { prop } of EVENTS) {\n    handlersRef.current[prop] = props[prop];\n  }\n\n  useEffect(() => {\n    if (!overlayRef.current || !driver) return;\n    const unsubs: Array<() => void> = [];\n    for (const { sdk, prop } of EVENTS) {\n      unsubs.push(driver.addEventListener(overlayRef.current, sdk, (raw: unknown) => {\n        const fn = handlersRef.current[prop];\n        if (typeof fn === 'function') {\n          const event = raw as Record<string, unknown>;\n          fn(event?.point ?? event?.latlng ?? event?.latLng ?? raw, raw);\n        }\n      }));\n    }\n    return () => unsubs.forEach(unsub => unsub());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, eventKey, ctorKey]);\n\n  const container = containerRef.current;\n  return container ? createPortal(props.children, container) : null;\n});\n","/**\n * MapMask — 区域掩膜组件（v4+ WebGL only）。\n * SDK constructor(path: Point[], options) — 注意是 Point 数组（闭合路径），不是 Bounds。\n * 无 setter（showRegion/isBuildingMask/isPoiMask/isMapMask 都是构造参数）。\n *\n * 区域两种传法（二选一，`points` 优先）：\n * - `points`：任意多边形路径（Point[]），直接对应 SDK 的 path 入参，可画不规则遮罩区；未闭合时自动补上首点。\n * - `bounds`：矩形区域简写 { sw, ne }，内部转成矩形四角路径。\n */\nimport { memo, useLayoutEffect, useRef } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { tryGetSDK } from '../../utils/sdk';\nimport { devWarn } from '../../utils/debugWarn';\nimport type { Bounds, Point } from '../../types';\n\nexport interface MapMaskOptions {\n  showRegion?: 'inside' | 'outside';\n  isBuildingMask?: boolean;\n  isPoiMask?: boolean;\n  isMapMask?: boolean;\n}\n\nexport interface MapMaskProps extends MapMaskOptions {\n  /** 任意多边形遮罩路径（Point[]）；与 bounds 二选一，同时传时以 points 为准。未闭合会自动补首点。 */\n  points?: Point[];\n  /** 矩形遮罩区简写 { sw, ne }，内部转成矩形路径；与 points 二选一。 */\n  bounds?: Bounds;\n}\n\nexport const MapMask = memo(function MapMask(props: MapMaskProps) {\n  const { bounds, points, ...opts } = props;\n  const { map, driver } = useMapContext();\n  const handleRef = useRef<any>(null);\n\n  const boundsKey = stableStringify(bounds);\n  const pointsKey = stableStringify(points);\n  const optsKey = stableStringify(opts);\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const SDK = tryGetSDK();\n    if (!SDK?.MapMask) return;\n\n    // SDK 期望 Point[]（闭合路径），不是 Bounds。points 优先；否则用 bounds 转矩形路径。\n    let pts: InstanceType<typeof SDK.Point>[];\n    if (points && points.length > 0) {\n      const raw = points.map((p) => new SDK.Point(p.lng, p.lat));\n      // 未闭合则补上首点，与 bounds 分支保持一致的闭合语义\n      const first = points[0];\n      const last = points[points.length - 1];\n      if (first.lng !== last.lng || first.lat !== last.lat) {\n        raw.push(new SDK.Point(first.lng, first.lat));\n      }\n      pts = raw;\n    } else if (bounds) {\n      const sw = bounds.sw;\n      const ne = bounds.ne;\n      pts = [\n        new SDK.Point(sw.lng, sw.lat),\n        new SDK.Point(ne.lng, sw.lat),\n        new SDK.Point(ne.lng, ne.lat),\n        new SDK.Point(sw.lng, ne.lat),\n        new SDK.Point(sw.lng, sw.lat), // 闭合\n      ];\n    } else {\n      devWarn('MapMask 需要传 points 或 bounds 之一，本次未渲染。');\n      return;\n    }\n\n    const mask = new SDK.MapMask(pts, opts);\n    handleRef.current = mask;\n    driver.addOverlay(map, { __brand: 'OverlayHandle' as const, raw: mask, type: 'custom' });\n\n    return () => {\n      driver.removeOverlay(map, { __brand: 'OverlayHandle' as const, raw: mask, type: 'custom' });\n      handleRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, boundsKey, pointsKey, optsKey]);\n\n  return null;\n});\n","/**\n * SimpleInfoWindow — 简单信息窗口组件（v4+ WebGL only）。\n * SDK: constructor(content, opts)；open: map.openSimpleInfoWindow(iw, point)；close: map.closeSimpleInfoWindow()。\n * 与 InfoWindow 不同，SimpleInfoWindow 是轻量级窗口，没有 maximize/message 等功能。\n */\nimport { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { tryGetSDK } from '../../utils/sdk';\nimport type { Point, Size } from '../../types';\n\nexport interface SimpleInfoWindowOptions {\n  width?: number;\n  height?: number;\n  maxWidth?: number;\n  offset?: Size;\n  title?: string;\n  maxContent?: string;\n  enableMaximize?: boolean;\n  enableAutoPan?: boolean;\n  enableCloseOnClick?: boolean;\n}\n\nexport interface SimpleInfoWindowProps extends SimpleInfoWindowOptions {\n  position: Point;\n  /** 窗口内容（字符串或 HTML） */\n  content: string;\n  /** 是否打开 */\n  open?: boolean;\n  /** 事件 */\n  onOpen?: () => void;\n  onClose?: () => void;\n  onResize?: () => void;\n}\n\nexport const SimpleInfoWindow = memo(function SimpleInfoWindow(props: SimpleInfoWindowProps) {\n  const { position, content, open = true, onOpen, onClose, onResize, ...opts } = props;\n  const { map, driver } = useMapContext();\n  const handleRef = useRef<any>(null);\n\n  // 事件回调用 ref 保持最新引用\n  const cbRefs = useRef({ onOpen, onClose, onResize });\n  cbRefs.current = { onOpen, onClose, onResize };\n\n  const contentKey = typeof content === 'string' ? content : '';\n  const optsKey = stableStringify(opts);\n\n  // 创建 SimpleInfoWindow 实例（content/opts 变化时重建）\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const SDK = tryGetSDK();\n    if (!SDK?.SimpleInfoWindow) return;\n\n    // SDK 构造函数：SimpleInfoWindow(content, opts) — content 是第一个参数\n    handleRef.current = new SDK.SimpleInfoWindow(content, opts);\n    const win = handleRef.current;\n    // SDK 构造函数的 setConfig 可能不处理 title/content，用 setter 补设\n    if (opts.title && typeof win.setTitle === 'function') win.setTitle(opts.title);\n    if (content && typeof win.setContent === 'function') win.setContent(content);\n    if (opts.maxContent && typeof win.setMaxContent === 'function') win.setMaxContent(opts.maxContent);\n\n    // 注册事件\n    if (typeof win.addEventListener === 'function') {\n      win.addEventListener('open', () => cbRefs.current.onOpen?.());\n      win.addEventListener('close', () => cbRefs.current.onClose?.());\n      win.addEventListener('resize', () => cbRefs.current.onResize?.());\n    }\n\n    return () => {\n      try { driver.closeSimpleInfoWindow(map); } catch { /* ignore */ }\n      handleRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, contentKey, optsKey]);\n\n  // open/position 变化时控制显示\n  useEffect(() => {\n    if (!map || !driver || !handleRef.current) return;\n    if (open) {\n      driver.openSimpleInfoWindow(map, { __brand: 'OverlayHandle' as const, raw: handleRef.current, type: 'infowindow' }, position);\n    } else {\n      try { driver.closeSimpleInfoWindow(map); } catch { /* ignore */ }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, open, position.lng, position.lat, contentKey, optsKey]);\n\n  return null;\n});\n","/**\n * PlaceDetail — 地点详情组件（v4+）。\n *\n * 用法：嵌套在 <Marker> 内，通过 `open` prop 控制。\n *\n * ```tsx\n * <Marker position={pt}>\n *   <PlaceDetail uid=\"06d2dffda107b0ef89f15db6\" open={show} />\n * </Marker>\n * ```\n *\n * 实现要点：\n * - 创建 PlaceDetail 服务实例（需要 container DOM，内部自动创建隐藏 div）\n * - setData(uid) 设置 POI 数据\n * - open=true → marker.openPlaceDetail(pd)\n * - open=false → marker.closePlaceDetail()\n * - v4+ only；v3 下 supported=false，组件 noop\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useOverlayTarget } from '../../context/OverlayTargetContext';\nimport type { ServiceHandle } from '../../types';\n\nexport interface PlaceDetailRenderOptions {\n  displayCarousel?: boolean;\n  displayTag?: boolean;\n  displayRating?: boolean;\n  displayPrice?: boolean;\n  displayBangdan?: boolean;\n  displayTradeTag?: boolean;\n  displayShopHours?: boolean;\n  displayContactInformation?: boolean;\n  contactInformationCount?: number;\n  displayAddress?: boolean;\n  displayComment?: boolean;\n  displayCommentTotalCount?: boolean;\n}\n\nexport interface PlaceDetailOptions {\n  renderOptions?: PlaceDetailRenderOptions;\n  /** 紧凑模式（地图内 overlay 展示时自动启用） */\n  compact?: boolean;\n}\n\nexport interface PlaceDetailProps {\n  /** POI uid（百度地图地点唯一标识） */\n  uid: string;\n  /** 受控：true=打开, false=关闭。不传则 mount 时自动打开 */\n  open?: boolean;\n  /** PlaceDetailOptions 透传 */\n  options?: PlaceDetailOptions;\n  children?: React.ReactNode;\n}\n\nexport const PlaceDetail = memo(function PlaceDetail(props: PlaceDetailProps) {\n  const { driver } = useMapContext();\n  const target = useOverlayTarget();\n  const { uid, open = true, options } = props;\n\n  const pdRef = useRef<ServiceHandle | null>(null);\n\n  // 创建 PlaceDetail 实例（mount 时一次）\n  const optsKey = JSON.stringify(options ?? {});\n  useLayoutEffect(() => {\n    if (!driver) return;\n    const container = document.createElement('div');\n    const pd = driver.createPlaceDetail({ container, ...options });\n    if (!pd || (pd as any).isNull) {\n      if (typeof console !== 'undefined') {\n        console.warn('[react-bmap] PlaceDetail not supported in this JSAPI version (requires 4.0+)');\n      }\n      return;\n    }\n    pdRef.current = pd;\n    return () => {\n      const raw = (pdRef.current as any)?.raw;\n      raw?.dispose?.();\n      pdRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optsKey]);\n\n  // uid 变化时 setData\n  useEffect(() => {\n    if (!driver || !pdRef.current) return;\n    const raw = (pdRef.current as any).raw;\n    raw?.setData?.(uid);\n  }, [driver, uid, optsKey]);\n\n  // open/close 控制（需要父 Marker）\n  const targetHandle = target?.target ?? null;\n  useEffect(() => {\n    if (!driver || !targetHandle || !pdRef.current) return;\n    if (!open) {\n      driver.closePlaceDetail(targetHandle as any);\n      return;\n    }\n    // open 时锚定到 marker 当前位置\n    driver.openPlaceDetail(targetHandle as any, pdRef.current);\n    // marker 位置变化时重新 open（SDK 的 openPlaceDetail 只锚定一次，不跟随 marker 移动）\n    const raw = (targetHandle as any)?.raw;\n    let lastPos = '';\n    const check = () => {\n      const pos = raw?.getPosition?.();\n      if (!pos) return;\n      const key = `${pos.lng},${pos.lat}`;\n      if (key !== lastPos) {\n        lastPos = key;\n        try {\n          driver.closePlaceDetail(targetHandle as any);\n          driver.openPlaceDetail(targetHandle as any, pdRef.current!);\n        } catch { /* ignore */ }\n      }\n    };\n    // 先记录初始位置，避免 open 后立即触发重 open\n    const initPos = raw?.getPosition?.();\n    if (initPos) lastPos = `${initPos.lng},${initPos.lat}`;\n    const id = setInterval(check, 200);\n    return () => {\n      clearInterval(id);\n      driver.closePlaceDetail(targetHandle as any);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, targetHandle, open, uid, optsKey]);\n\n  // PlaceDetail 不渲染 React children 到 DOM（内容通过 SDK overlay 渲染）\n  return null;\n});\n","/**\n * 全部 Overlay 组件 — 使用 createOverlayComponent 工厂批量生成。\n * 每个组件约 5 行，统一处理 create/add/remove/update 生命周期。\n */\nimport { createOverlayComponent } from '../../utils/createComponent';\nexport type {\n  MarkerProps, LabelProps, PolylineProps, PolygonProps, CircleProps,\n  RectangleProps, BezierCurveProps, PrismProps, GroundOverlayProps,\n  GroundPointProps, PointCollectionProps, InfoWindowProps, SymbolProps,\n  IconProps, IconSequenceProps, HotspotProps, CustomOverlayProps,\n  Marker3DProps, Marker3DOptions, IconSequenceHandle,\n} from './types';\nimport type {\n  MarkerProps, LabelProps, PolylineProps, PolygonProps, CircleProps,\n  RectangleProps, BezierCurveProps, PrismProps, GroundOverlayProps,\n  GroundPointProps, PointCollectionProps, InfoWindowProps, SymbolProps,\n  IconProps, IconSequenceProps, HotspotProps, Marker3DProps,\n} from './types';\n\n// ─── 点标注 ───\nexport const Marker = createOverlayComponent<MarkerProps>({\n  displayName: 'Marker',\n  factory: (d, p) => d.createMarker(p.position, p),\n  positionProp: 'position',\n  optionProps: ['offset', 'icon', 'enableMassClear', 'enableDragging', 'rotation', 'title', 'zIndex', 'opacity', 'color', 'rank', 'rotationOrigin'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建。\n  ctorOnlyProps: ['enableClicking', 'raiseOnDrag', 'draggingCursor', 'shadow', 'baseZIndex', 'restrictDraggingArea', 'enableCollisionDetection', 'enableDraggingMap', 'anchor'],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'dragstart', prop: 'onDragStart' },\n    { sdk: 'dragging', prop: 'onDragging' },\n    { sdk: 'dragend', prop: 'onDragEnd' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'remove', prop: 'onRemove' },\n  ],\n  supportsChildren: true,\n  // 让 Label 子元素识别父级为 Marker，走 marker.setLabel 挂载\n  childTargetType: 'marker',\n});\n\n// ─── 文本标注 ───\nexport const Label = createOverlayComponent<LabelProps>({\n  displayName: 'Label',\n  factory: (d, p) => d.createLabel(p.content, p),\n  positionProp: 'position',\n  optionProps: ['content', 'offset', 'enableMassClear', 'styles', 'opacity', 'title', 'zIndex'],\n  ctorOnlyProps: ['enableClicking', 'width', 'anchor'],\n  // 作为 Marker 子元素时通过 marker.setLabel 挂载（随 marker 跟随）；否则按普通 overlay 挂到地图\n  attachToMarkerAsLabel: true,\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'remove', prop: 'onRemove' },\n  ],\n});\n\n// ─── 折线 ───\nexport const Polyline = createOverlayComponent<PolylineProps>({\n  displayName: 'Polyline',\n  factory: (d, p) => d.createPolyline(p.path, p),\n  pathProp: 'path',\n  // 有 setter 的字段\n  optionProps: ['strokeColor', 'strokeWeight', 'strokeOpacity', 'strokeStyle', 'enableEditing', 'enableMassClear', 'zIndex'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建\n  ctorOnlyProps: ['enableClicking', 'strokeLineCap', 'strokeLineJoin', 'geodesic', 'linkRight', 'clip', 'coordType', 'icons', 'dashArray', 'strokeTexture', 'node', 'nodeT'],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n    { sdk: 'editstart', prop: 'onEditStart' },\n    { sdk: 'editend', prop: 'onEditEnd' },\n    { sdk: 'linevertexdragstart', prop: 'onLineVertexDragStart' },\n    { sdk: 'linevertexdragging', prop: 'onLineVertexDragging' },\n    { sdk: 'linevertexdragend', prop: 'onLineVertexDragEnd' },\n    { sdk: 'linevertexdel', prop: 'onLineVertexDel' },\n  ],\n});\n\n// ─── 多边形 ───\nexport const Polygon = createOverlayComponent<PolygonProps>({\n  displayName: 'Polygon',\n  factory: (d, p) => d.createPolygon(p.path, p),\n  pathProp: 'path',\n  optionProps: [\n    'strokeColor', 'fillColor', 'strokeWeight',\n    'strokeOpacity', 'fillOpacity', 'strokeStyle',\n    'enableEditing', 'enableMassClear', 'zIndex',\n  ],\n  ctorOnlyProps: [\n    'enableClicking', 'strokeLineCap', 'strokeLineJoin',\n    'linkRight', 'coordType', 'dashArray', 'node', 'nodeT',\n  ],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n    { sdk: 'editstart', prop: 'onEditStart' },\n    { sdk: 'editend', prop: 'onEditEnd' },\n    { sdk: 'linevertexdragstart', prop: 'onLineVertexDragStart' },\n    { sdk: 'linevertexdragging', prop: 'onLineVertexDragging' },\n    { sdk: 'linevertexdragend', prop: 'onLineVertexDragEnd' },\n    { sdk: 'linevertexdel', prop: 'onLineVertexDel' },\n  ],\n});\n\n// ─── 圆形 ───\nexport const Circle = createOverlayComponent<CircleProps>({\n  displayName: 'Circle',\n  factory: (d, p) => d.createCircle(p.center, p.radius, p),\n  positionProp: 'center',\n  optionProps: ['radius', 'strokeColor', 'fillColor', 'strokeWeight', 'strokeOpacity', 'fillOpacity', 'strokeStyle', 'enableMassClear', 'zIndex'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建\n  // enableEditing: SDK 的 enableEditing() 对 Circle 有 null 访问 bug，用 ctorOnlyProps + rAF 延迟处理\n  ctorOnlyProps: ['enableEditing', 'enableClicking', 'coordType', 'dashArray', 'node', 'nodeT'],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n    { sdk: 'editstart', prop: 'onEditStart' },\n    { sdk: 'editend', prop: 'onEditEnd' },\n    { sdk: 'linevertexdragstart', prop: 'onLineVertexDragStart' },\n    { sdk: 'linevertexdragging', prop: 'onLineVertexDragging' },\n    { sdk: 'linevertexdragend', prop: 'onLineVertexDragEnd' },\n    { sdk: 'linevertexdel', prop: 'onLineVertexDel' },\n  ],\n});\n\n// ─── 矩形（v4+） ───\nexport const Rectangle = createOverlayComponent<RectangleProps>({\n  displayName: 'Rectangle',\n  factory: (d, p) => d.createRectangle(p.bounds, p),\n  // bounds 走 setBounds（在 setOverlayOptions 内按 type 分发），没有 positionProp/pathProp\n  optionProps: ['bounds', 'strokeColor', 'fillColor', 'strokeWeight', 'strokeOpacity', 'fillOpacity', 'strokeStyle', 'enableEditing', 'enableMassClear', 'zIndex'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建。\n  ctorOnlyProps: ['enableClicking', 'linkRight', 'coordType', 'dashArray', 'node', 'nodeT'],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n    { sdk: 'editstart', prop: 'onEditStart' },\n    { sdk: 'editend', prop: 'onEditEnd' },\n    { sdk: 'linevertexdragstart', prop: 'onLineVertexDragStart' },\n    { sdk: 'linevertexdragging', prop: 'onLineVertexDragging' },\n    { sdk: 'linevertexdragend', prop: 'onLineVertexDragEnd' },\n    { sdk: 'linevertexdel', prop: 'onLineVertexDel' },\n  ],\n});\n\n// ─── 贝塞尔曲线（v4+） ───\nexport const BezierCurve = createOverlayComponent<BezierCurveProps>({\n  displayName: 'BezierCurve',\n  factory: (d, p) => d.createBezierCurve(p.path, p.controlPoints, p),\n  pathProp: 'path',\n  // controlPoints 走 setControlPoints（在 setOverlayOptions 内按 type 分发）\n  optionProps: ['controlPoints', 'strokeColor', 'strokeWeight', 'strokeOpacity', 'strokeStyle', 'enableMassClear', 'zIndex'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建\n  ctorOnlyProps: ['enableClicking', 'enableEditing', 'dashArray', 'node', 'nodeT'],\n  // BezierCurveEventMap 不含编辑相关事件（SDK 无 enableEditing）\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n  ],\n});\n\n// ─── 3D 棱柱（v4+） ───\nexport const Prism = createOverlayComponent<PrismProps>({\n  displayName: 'Prism',\n  factory: (d, p) => d.createPrism(p.path, p.altitude, p),\n  pathProp: 'path',\n  // altitude 走 setAltitude（在 setOverlayOptions 内按 type 分发）\n  optionProps: ['altitude', 'topFillColor', 'topFillOpacity', 'sideFillColor', 'sideFillOpacity', 'enableMassClear', 'zIndex'],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建\n  ctorOnlyProps: ['enableClicking'],\n  // PrismEventMap 不含编辑相关事件（SDK 无 enableEditing）\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n  ],\n});\n\n// ─── 地面叠加图 ───\nexport const GroundOverlay = createOverlayComponent<GroundOverlayProps>({\n  displayName: 'GroundOverlay',\n  factory: (d, p) => d.createGroundOverlay(p.bounds, p),\n  // bounds 走 setBounds（在 setOverlayOptions 内按 type 分发），没有 positionProp/pathProp\n  optionProps: [\n    'bounds', 'opacity', 'url', 'imageURL',\n    'displayOnMinLevel', 'displayOnMaxLevel',\n    'enableMassClear', 'zIndex',\n  ],\n  // SDK 无 setter，只能 constructor 设置；变化时框架自动重建。\n  // type/top/isReDraw/drawHook 都只在构造时读取；stretch 仅 v3 有效（v4 已移除）。\n  ctorOnlyProps: ['enableClicking', 'type', 'top', 'isReDraw', 'drawHook', 'stretch'],\n  // GroundOverlayEventMap：click/dblclick/remove 为 v3+，其余 v4+；无编辑相关事件\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n  ],\n});\n\n// ─── 地面点 ───\nexport const GroundPoint = createOverlayComponent<GroundPointProps>({\n  displayName: 'GroundPoint',\n  factory: (d, p) => d.createGroundPoint(p.point, p),\n  positionProp: 'point',\n  optionProps: [\n    'url', 'size', 'anchor', 'scale', 'rotation', 'offset',\n    'opacity', 'imageURL', 'displayOnMinLevel', 'displayOnMaxLevel',\n    'enableMassClear', 'zIndex',\n  ],\n  // SDK 无 setter：level（仅构造时读取）、enableClicking（GroundOverlay 继承，无 disable 方法）\n  // type/top/isReDraw/drawHook 继承自 GroundOverlayOptions，仅构造时读取\n  ctorOnlyProps: ['level', 'enableClicking', 'type', 'top', 'isReDraw', 'drawHook'],\n  // GroundOverlayEventMap：无 GroundPointEventMap，事件沿用 GroundOverlay 的一套；整体 @since 4.0\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'rightdblclick', prop: 'onRightDoubleClick' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousemove', prop: 'onMouseMove' },\n    { sdk: 'remove', prop: 'onRemove' },\n    { sdk: 'lineupdate', prop: 'onLineUpdate' },\n  ],\n});\n\n// ─── 海量点 ───\nexport const PointCollection = createOverlayComponent<PointCollectionProps>({\n  displayName: 'PointCollection',\n  factory: (d, p) => d.createPointCollection(p.points, p),\n  pathProp: 'points',\n  optionProps: ['shape', 'color', 'size', 'enableMassClear'],\n  // PointCollectionEventMap：整体 @removed 4.0（仅 v3）\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n  ],\n});\n\n// ─── 信息窗口（独立组件，见 InfoWindow.tsx） ───\nexport { InfoWindow } from './InfoWindow';\n\n// ─── 矢量符号 ───\n// Symbol 是值对象（非 Overlay），用作 Marker 的 icon；无事件。\n// skipMount: 不调 addOverlay；推荐用 useSymbol hook 获取实例传给 Marker。\nexport const Symbol = createOverlayComponent<SymbolProps>({\n  displayName: 'Symbol',\n  factory: (d, p) => d.createSymbol(p.path, p),\n  optionProps: ['path', 'anchor', 'fillColor', 'fillOpacity', 'scale', 'rotation', 'strokeColor', 'strokeOpacity', 'strokeWeight'],\n  skipMount: true,\n});\n\n// ─── 图标 ───\n// Icon 是值对象（非 Overlay），用作 Marker 的 icon；无事件。\n// skipMount: 不调 addOverlay；推荐用 useIcon hook 获取实例传给 Marker。\nexport const Icon = createOverlayComponent<IconProps>({\n  displayName: 'Icon',\n  factory: (d, p) => d.createIcon(p.url, p.size, p),\n  optionProps: ['url', 'size', 'anchor', 'imageOffset', 'imageSize', 'infoWindowAnchor', 'printImageUrl', 'srcset'],\n  skipMount: true,\n});\n\n// ─── 图标序列（折线循环图标） ───\n// IconSequence 是值对象（非 Overlay），@deprecated 4.0（纯 GL 下不渲染，用 Polyline#strokeTexture 替代）。\n// 无 setter/无事件，skipMount: 不调 addOverlay；用 driver.createIconSequence 拿 handle 传给 Polyline icons。\nexport const IconSequence = createOverlayComponent<IconSequenceProps>({\n  displayName: 'IconSequence',\n  factory: (d, p) => d.createIconSequence(p.symbol as any, p.offset, p.repeat, p.fixedRotation),\n  ctorOnlyProps: ['symbol', 'offset', 'repeat', 'fixedRotation'],\n  skipMount: true,\n});\n\n// ─── 热区 ───\n// ─── 热区 ───\n// Hotspot 是值对象（非 Overlay），@removed 4.0（仅 v3）。\n// 通过 map.addHotspot/removeHotspot 管理，不走 addOverlay。无事件。\nexport const Hotspot = createOverlayComponent<HotspotProps>({\n  displayName: 'Hotspot',\n  factory: (d, p) => d.createHotspot(p.position, p),\n  positionProp: 'position',\n  optionProps: ['text', 'userData'],\n  // 无 setter：offsets / minZoom / maxZoom\n  ctorOnlyProps: ['offsets', 'minZoom', 'maxZoom'],\n});\n\n// ─── 自定义覆盖物（独立组件，见 CustomOverlay.tsx） ───\nexport { CustomOverlay } from './CustomOverlay';\n\n// ─── 4.0+ 覆盖物 ───\n// Marker3D — 3D 标注（v4+ WebGL only）\n// SDK: setPosition/setHeight/setFillColor/setFillOpacity 有 setter；shape/size 无 setter，只能构造时设置\n// （走 ctorOnlyProps 重建）。且首帧 addOverlay 后 shape/size 不渲染，需等 GL 就绪后重建实例，见 createComponent.tsx\nexport const Marker3D = createOverlayComponent<Marker3DProps>({\n  displayName: 'Marker3D',\n  factory: (d, p) => d.createMarker3D(p.position, p.height, p),\n  positionProp: 'position',\n  optionProps: ['height', 'fillColor', 'fillOpacity'],\n  ctorOnlyProps: ['shape', 'size', 'enableMassClear'],\n  events: [\n    { sdk: 'click', prop: 'onClick' },\n    { sdk: 'dblclick', prop: 'onDoubleClick' },\n    { sdk: 'rightclick', prop: 'onRightClick' },\n    { sdk: 'mouseover', prop: 'onMouseOver' },\n    { sdk: 'mouseout', prop: 'onMouseOut' },\n    { sdk: 'mousedown', prop: 'onMouseDown' },\n    { sdk: 'mouseup', prop: 'onMouseUp' },\n  ],\n  supportsChildren: true,\n});\n\nexport { MapMask } from './MapMask';\nexport type { MapMaskProps, MapMaskOptions } from './MapMask';\nexport { SimpleInfoWindow } from './SimpleInfoWindow';\nexport type { SimpleInfoWindowProps, SimpleInfoWindowOptions } from './SimpleInfoWindow';\n\n// ─── PlaceDetail（v4+ 地点详情，类似 InfoWindow 的声明式组件） ───\nexport { PlaceDetail } from './PlaceDetail';\nexport type { PlaceDetailProps, PlaceDetailOptions, PlaceDetailRenderOptions } from './PlaceDetail';\n","/**\n * PlaceDetailPanel — 地点详情面板组件（独立面板模式）。\n *\n * 与 PlaceDetail overlay 不同，此组件不需要 Marker，直接渲染到容器 DOM。\n * uid 变化时自动调用 render(uid)。\n * 卸载时自动 dispose。\n *\n * @since 4.0\n */\nimport React, { useEffect, useRef } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { debugWarn } from '../../utils/debugWarn';\nimport type { PlaceDetailRenderOptions } from './PlaceDetail';\n\nexport interface PlaceDetailPanelProps {\n  /** 地点 uid，变化时自动 render */\n  uid?: string;\n  /** 紧凑模式 */\n  compact?: boolean;\n  /** 渲染选项 */\n  renderOptions?: PlaceDetailRenderOptions;\n  /** 渲染完成回调（SDK 异步请求后触发） */\n  onRender?: () => void;\n  /** DOM 属性 */\n  className?: string;\n  style?: React.CSSProperties;\n  children?: React.ReactNode;\n}\n\nexport const PlaceDetailPanel = React.memo(function PlaceDetailPanel(props: PlaceDetailPanelProps) {\n  const { uid, compact, renderOptions, onRender, className, style, children } = props;\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  // 创建/重建 PlaceDetail 实例，卸载时自动 dispose\n  useEffect(() => {\n    if (!driver || !containerRef.current) return;\n    const opts: Record<string, unknown> = { container: containerRef.current };\n    if (compact !== undefined) opts.compact = compact;\n    if (renderOptions !== undefined) opts.renderOptions = renderOptions;\n\n    const handle = driver.createPlaceDetail(opts);\n    if (handle.isNull) return;\n    rawRef.current = (handle as any).raw;\n\n    // 实例创建后自动渲染当前 uid\n    if (uid) {\n      try { rawRef.current.render?.(uid); onRender?.(); } catch (e) { debugWarn('PlaceDetailPanel.render', e); }\n    }\n\n    return () => { rawRef.current?.dispose?.(); rawRef.current = null; };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, compact, renderOptions]);\n\n  // uid 变化时自动 render（实例未重建的情况）\n  useEffect(() => {\n    if (!rawRef.current || !uid) return;\n    try { rawRef.current.render?.(uid); onRender?.(); } catch (e) { debugWarn('PlaceDetailPanel.render', e); }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [uid]);\n\n  return (\n    <div ref={containerRef} className={className} style={style}>\n      {children}\n    </div>\n  );\n});\n","/**\n * 全部 Control 组件 — 使用 createControlComponent 工厂批量生成。\n */\nimport { createControlComponent } from '../../utils/createComponent';\nimport type { Bounds, Size } from '../../types';\nimport type {\n  ControlAnchor,\n  LengthUnit,\n  MapTypeControlType,\n  NavigationControlType,\n} from '../../constants';\nimport type { PlainIcon } from '../Overlay/types';\n\ninterface ControlReactProps {\n  /** 控制控件显示/隐藏。undefined 或 true = 显示，false = 隐藏 */\n  visible?: boolean;\n}\n\nexport interface NavigationControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  type?: NavigationControlType;\n  showZoomInfo?: boolean;\n  enableGeolocation?: boolean;\n}\n\nexport interface NavigationControl3DOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n}\n\nexport interface ScaleControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  /** 比例尺单位制，走 setUnit() */\n  unit?: LengthUnit;\n}\n\nexport interface OverviewMapControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  size?: Size;\n  isOpen?: boolean;\n  zoomInterval?: number;\n  padding?: number;\n}\n\nexport interface MapTypeControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  type?: MapTypeControlType;\n  mapTypes?: unknown[];\n  enableSwitch?: boolean;\n  /** 是否显示路网层，走 showStreetLayer() */\n  showStreetLayer?: boolean;\n}\n\nexport interface CopyrightItem {\n  id: number;\n  content?: string;\n  bounds?: Bounds;\n}\n\nexport interface CopyrightControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  /** 自定义版权信息，创建和更新时调用 addCopyright() */\n  copyrights?: CopyrightItem[];\n}\n\nexport interface GeolocationControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  showAddressBar?: boolean;\n  enableAutoLocation?: boolean;\n  locationIcon?: PlainIcon | unknown;\n  watchPosition?: boolean;\n  useCompass?: boolean;\n  autoZoom?: boolean;\n  autoViewport?: boolean;\n  /** @since 4.0 定位前回调；返回 false 可阻止默认定位 */\n  onLocationStart?: (onSuccess: Function, onFail: Function) => boolean | void;\n}\n\nexport interface PanoramaControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n}\n\nexport interface ZoomControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n}\n\nexport interface CityListControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n  expand?: boolean;\n  /** @since 4.0 自定义触发元素 */\n  trigger?: HTMLElement;\n  onChangeBefore?: () => void;\n  onChangeAfter?: () => void;\n  onChangeSuccess?: (poi: { city: string; code: string | number }) => void;\n  /** @since 4.0 */\n  onOpen?: () => void;\n  /** @since 4.0 */\n  onClose?: () => void;\n  canCheckSize?: boolean;\n}\n\nexport type LocationControlOptions = GeolocationControlOptions;\n\nexport interface LogoControlOptions {\n  anchor?: ControlAnchor;\n  offset?: Size;\n}\n\nexport interface NavigationControlProps extends NavigationControlOptions, ControlReactProps {}\nexport interface NavigationControl3DProps extends NavigationControl3DOptions, ControlReactProps {}\nexport interface ScaleControlProps extends ScaleControlOptions, ControlReactProps {}\nexport interface OverviewMapControlProps extends OverviewMapControlOptions, ControlReactProps {\n  onViewChanged?: (raw: unknown) => void;\n  onViewChanging?: (raw: unknown) => void;\n  onResize?: (raw: unknown) => void;\n}\nexport interface MapTypeControlProps extends MapTypeControlOptions, ControlReactProps {}\nexport interface CopyrightControlProps extends CopyrightControlOptions, ControlReactProps {}\nexport interface GeolocationControlProps extends GeolocationControlOptions, ControlReactProps {\n  onLocationSuccess?: (raw: unknown) => void;\n  onLocationError?: (raw: unknown) => void;\n}\nexport interface PanoramaControlProps extends PanoramaControlOptions, ControlReactProps {}\nexport interface ZoomControlProps extends ZoomControlOptions, ControlReactProps {}\nexport interface CityListControlProps extends CityListControlOptions, ControlReactProps {}\nexport type LocationControlProps = GeolocationControlProps;\nexport interface LogoControlProps extends LogoControlOptions, ControlReactProps {}\n\nexport const NavigationControl = createControlComponent<NavigationControlProps>({\n  displayName: 'NavigationControl',\n  factory: (d, p) => d.createNavigationControl(p),\n  optionProps: ['anchor', 'offset', 'type'],\n  ctorOnlyProps: ['showZoomInfo', 'enableGeolocation'],\n});\n\nexport const NavigationControl3D = createControlComponent<NavigationControl3DProps>({\n  displayName: 'NavigationControl3D',\n  factory: (d, p) => d.createNavigationControl3D(p),\n  optionProps: ['anchor', 'offset'],\n});\n\nexport const ScaleControl = createControlComponent<ScaleControlProps>({\n  displayName: 'ScaleControl',\n  factory: (d, p) => d.createScaleControl(p),\n  optionProps: ['anchor', 'offset', 'unit'],\n});\n\nexport const OverviewMapControl = createControlComponent<OverviewMapControlProps>({\n  displayName: 'OverviewMapControl',\n  factory: (d, p) => d.createOverviewMapControl(p),\n  optionProps: ['anchor', 'offset', 'size'],\n  ctorOnlyProps: ['zoomInterval', 'padding', 'isOpen'],\n  events: [\n    { sdk: 'viewchanged', prop: 'onViewChanged' },\n    { sdk: 'viewchanging', prop: 'onViewChanging' },\n    { sdk: 'resize', prop: 'onResize' },\n  ],\n});\n\nexport const MapTypeControl = createControlComponent<MapTypeControlProps>({\n  displayName: 'MapTypeControl',\n  factory: (d, p) => d.createMapTypeControl(p),\n  optionProps: ['anchor', 'offset', 'showStreetLayer'],\n  ctorOnlyProps: ['type', 'mapTypes', 'enableSwitch'],\n});\n\nexport const CopyrightControl = createControlComponent<CopyrightControlProps>({\n  displayName: 'CopyrightControl',\n  factory: (d, p) => d.createCopyrightControl(p),\n  optionProps: ['anchor', 'offset', 'copyrights'],\n});\n\nexport const GeolocationControl = createControlComponent<GeolocationControlProps>({\n  displayName: 'GeolocationControl',\n  factory: (d, p) => d.createGeolocationControl(p),\n  optionProps: [\n    'anchor', 'offset', 'enableAutoLocation', 'locationIcon',\n    'watchPosition', 'useCompass', 'autoZoom', 'autoViewport', 'onLocationStart',\n  ],\n  ctorOnlyProps: ['showAddressBar'],\n  events: [\n    { sdk: 'locationSuccess', prop: 'onLocationSuccess' },\n    { sdk: 'locationError', prop: 'onLocationError' },\n  ],\n});\n\nexport const PanoramaControl = createControlComponent<PanoramaControlProps>({\n  displayName: 'PanoramaControl',\n  factory: (d, p) => d.createPanoramaControl(p),\n  optionProps: ['anchor', 'offset'],\n});\n\nexport const ZoomControl = createControlComponent<ZoomControlProps>({\n  displayName: 'ZoomControl',\n  factory: (d, p) => d.createZoomControl(p),\n  optionProps: ['anchor', 'offset'],\n});\n\nexport const CityListControl = createControlComponent<CityListControlProps>({\n  displayName: 'CityListControl',\n  factory: (d, p) => d.createCityListControl(p),\n  optionProps: ['anchor', 'offset'],\n  ctorOnlyProps: ['expand', 'trigger', 'onChangeBefore', 'onChangeAfter', 'onChangeSuccess', 'canCheckSize'],\n  events: [\n    { sdk: 'onopen', prop: 'onOpen' },\n    { sdk: 'onclose', prop: 'onClose' },\n  ],\n});\n\nexport const LocationControl = GeolocationControl;\n\nexport const LogoControl = createControlComponent<LogoControlProps>({\n  displayName: 'LogoControl',\n  factory: (d, p) => d.createLogoControl(p),\n  optionProps: ['anchor', 'offset'],\n});\n","/**\n * CustomControl — React children based custom control.\n *\n * 对照 CustomOverlay.tsx 的手法：手动建一个容器 div，交给 driver 的\n * createCustomControl(domCreate) 挂到地图容器上（固定像素位置，不随地图平移缩放），\n * 再用 createPortal 把 children 渲染进这个容器。\n *\n * 与 CustomOverlay 的本质区别：CustomOverlay 绑定地理坐标（point），会随地图移动；\n * CustomControl 固定于地图容器的像素位置（anchor + offset），不随地图移动。\n */\nimport { memo, useLayoutEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useMapContext } from '../../context/MapContext';\nimport { stableStringify } from '../../utils/stableStringify';\nimport type { ControlHandle } from '../../types';\nimport type { ControlAnchor } from '../../constants';\nimport type { Size } from '../../types';\n\nexport interface CustomControlProps {\n  /** 停靠位置，默认由 SDK 决定（通常为左上角） */\n  anchor?: ControlAnchor;\n  /** 相对停靠位置的像素偏移 */\n  offset?: Size;\n  /** 控制显示/隐藏。undefined 或 true = 显示，false = 隐藏 */\n  visible?: boolean;\n  /** 自定义控件内容，会被渲染到挂载在地图容器上的 DOM 节点内 */\n  children?: React.ReactNode;\n}\n\nconst CTOR_ONLY_PROPS: Array<keyof CustomControlProps> = ['anchor', 'offset'];\n\nfunction pickCtorOptions(props: CustomControlProps): Record<string, unknown> {\n  const out: Record<string, unknown> = {};\n  for (const key of CTOR_ONLY_PROPS) {\n    const value = props[key];\n    if (value !== undefined && value !== null) out[key] = value;\n  }\n  return out;\n}\n\nexport const CustomControl = memo(function CustomControl(props: CustomControlProps) {\n  const { map, driver } = useMapContext();\n  const controlRef = useRef<ControlHandle | null>(null);\n  const propsRef = useRef(props);\n  propsRef.current = props;\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  if (!containerRef.current && typeof document !== 'undefined') {\n    containerRef.current = document.createElement('div');\n  }\n\n  const ctorKey = stableStringify(CTOR_ONLY_PROPS.map(k => props[k]));\n\n  useLayoutEffect(() => {\n    const container = containerRef.current;\n    if (!map || !driver || !container) return;\n\n    const ctorOpts = pickCtorOptions(propsRef.current);\n    const control = driver.createCustomControl(() => container, ctorOpts);\n    if (!control) return;\n\n    controlRef.current = control;\n    driver.addControl(map, control);\n    if (propsRef.current.visible === false) driver.hideControl(control);\n\n    return () => {\n      driver.removeControl(map, control);\n      controlRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  const { visible } = props;\n  useLayoutEffect(() => {\n    if (!controlRef.current || !driver) return;\n    if (visible === false) driver.hideControl(controlRef.current);\n    else driver.showControl(controlRef.current);\n  }, [driver, visible]);\n\n  const container = containerRef.current;\n  return container ? createPortal(props.children, container) : null;\n});\n","/**\n * TrafficLayer — 路况图层（手写组件，继承 TileLayer）。\n *\n * 组件方式：\n * ```tsx\n * <TrafficLayer autoRefresh refreshInterval={300000} colors={['#00ff00', ...]} edge />\n * ```\n *\n * 实现要点：\n * - mount → driver.createTrafficLayer + addLayer\n * - unmount → removeLayer\n * - autoRefresh / refreshInterval 变化 → 重建\n * - colors 变化 → raw.setColors()\n * - edge 变化 → raw.setEdge()\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { debugWarn } from '../../utils/debugWarn';\n\nexport interface TrafficLayerOptions {\n  /** v3: 预测日期 */\n  predictDate?: { weekday: number; hour: number };\n  /** v4: 是否自动刷新路况数据 */\n  autoRefresh?: boolean;\n  /** v4: 路况自动刷新间隔，单位毫秒 */\n  refreshInterval?: number;\n}\n\nexport interface TrafficLayerProps extends TrafficLayerOptions {\n  /** v4+: 路况颜色 [畅通, 缓行, 拥堵, 严重拥堵] */\n  colors?: string[];\n  /** v4+: 是否显示白边 */\n  edge?: boolean;\n}\n\nexport const TrafficLayer = memo(function TrafficLayer(props: TrafficLayerProps) {\n  const { autoRefresh, refreshInterval, colors, edge, predictDate } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n\n  // create + add（constructor 选项变化时重建）\n  const ctorKey = `${autoRefresh ?? ''}|${refreshInterval ?? ''}|${JSON.stringify(predictDate ?? '')}`;\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    if (autoRefresh !== undefined) opts.autoRefresh = autoRefresh;\n    if (refreshInterval !== undefined) opts.refreshInterval = refreshInterval;\n    if (predictDate !== undefined) opts.predictDate = predictDate;\n    const handle = driver.createTrafficLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n    return () => {\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // setColors\n  const colorsKey = colors?.join(',');\n  useEffect(() => {\n    if (!rawRef.current || !colors) return;\n    try { rawRef.current.setColors?.(colors); } catch (e) { debugWarn('TrafficLayer.setColors', e); }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [colorsKey]);\n\n  // setEdge\n  useEffect(() => {\n    if (!rawRef.current || edge === undefined) return;\n    try { rawRef.current.setEdge?.(edge); } catch (e) { debugWarn('TrafficLayer.setEdge', e); }\n  }, [edge]);\n\n  return null;\n});\n","/**\n * FeatureLayer — 矢量要素图层（手写组件，继承 NormalLayer）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * <FeatureLayer\n *   idKey=\"id\"\n *   crs=\"BD09LL\"\n *   enablePicked\n *   selectedColor=\"rgba(255, 0, 0, 1.0)\"\n *   data={geojson}\n * />\n * ```\n *\n * 实现要点：\n * - mount → driver.createFeatureLayer + addLayer\n * - data 变化 → raw.setData()\n * - constructor 选项变化 → 重建\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { debugWarn } from '../../utils/debugWarn';\nimport type { NormalLayerOptions } from './index';\nimport type { Point } from '../../types';\n\nexport interface FeatureLayerOptions extends NormalLayerOptions {\n  /** 数据项属性 key */\n  idKey?: string;\n  /** 来源坐标系，可选 BD09LL、BD09MC、GCJ02 */\n  crs?: string;\n  /** 选中数据索引 */\n  selectedIndex?: number;\n  /** 选中数据颜色 */\n  selectedColor?: string;\n}\n\nexport interface FeatureLayerProps extends FeatureLayerOptions {\n  /** GeoJSON 数据源，变化时调用 raw.setData() */\n  data?: object;\n}\n\nexport const FeatureLayer = memo(function FeatureLayer(props: FeatureLayerProps) {\n  const { idKey, crs, selectedIndex, selectedColor, data, visible, opacity, enablePicked, autoSelect, zIndex, minZoom, maxZoom } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n\n  // create + add（constructor 选项变化时重建）\n  const ctorKey = `${idKey ?? ''}|${crs ?? ''}|${selectedIndex ?? ''}|${selectedColor ?? ''}|${visible ?? ''}|${opacity ?? ''}|${enablePicked ?? ''}|${autoSelect ?? ''}|${zIndex ?? ''}|${minZoom ?? ''}|${maxZoom ?? ''}`;\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    if (idKey !== undefined) opts.idKey = idKey;\n    if (crs !== undefined) opts.crs = crs;\n    if (selectedIndex !== undefined) opts.selectedIndex = selectedIndex;\n    if (selectedColor !== undefined) opts.selectedColor = selectedColor;\n    if (visible !== undefined) opts.visible = visible;\n    if (opacity !== undefined) opts.opacity = opacity;\n    if (enablePicked !== undefined) opts.enablePicked = enablePicked;\n    if (autoSelect !== undefined) opts.autoSelect = autoSelect;\n    if (zIndex !== undefined) opts.zIndex = zIndex;\n    if (minZoom !== undefined) opts.minZoom = minZoom;\n    if (maxZoom !== undefined) opts.maxZoom = maxZoom;\n\n    const handle = driver.createFeatureLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    // mount 后如果有 data，立即 setData\n    if (data && rawRef.current) {\n      try { rawRef.current.setData?.(data); } catch (e) { debugWarn('FeatureLayer.setData', e); }\n    }\n\n    return () => {\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // data 变化 → setData\n  const dataKey = data ? JSON.stringify(data) : '';\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    try { rawRef.current.setData?.(data); } catch { /* noop */ }\n  }, [dataKey]);\n\n  return null;\n});\n","/**\n * FillLayer — 面填充图层（手写组件）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * <FillLayer\n *   border\n *   style={{ fillColor: 'rgba(0, 100, 255, 0.4)', strokeColor: '#ff6600', strokeWeight: 3 }}\n *   data={geojson}\n *   enablePicked\n * />\n * ```\n *\n * 实现要点：\n * - mount → driver.createFillLayer + addLayer\n * - data 变化 → raw.setData()\n * - style 变化 → raw.setStyleOptions() + raw.doOnceDraw()\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useLatest } from '../../utils/useLatest';\nimport { debugWarn } from '../../utils/debugWarn';\n\n/** 数据驱动样式表达式，如 ['match', ['get', 'name'], '海淀区', 'red', '#aecde8'] */\nexport type FillStyleExpr = unknown[];\n\nexport interface FillLayerStyle {\n  fillColor?: string | FillStyleExpr;\n  fillOpacity?: number | FillStyleExpr;\n  pattern?: boolean;\n  patternMask?: boolean;\n  patternUrl?: string;\n  patternMapping?: string;\n  patternScale?: number;\n  patternOffset?: string;\n  sequence?: boolean;\n  marginLength?: number;\n  borderCovered?: boolean;\n  borderMask?: boolean;\n  borderWeight?: number | FillStyleExpr;\n  borderColor?: string | FillStyleExpr;\n  strokeTextureUrl?: string;\n  strokeTextureWidth?: number;\n  strokeTextureHeight?: number;\n  strokeLineJoin?: string;\n  strokeLineCap?: string;\n  strokeColor?: string | FillStyleExpr;\n  strokeWeight?: number | FillStyleExpr;\n  strokeOpacity?: number | FillStyleExpr;\n  strokeStyle?: string;\n  dashArray?: number[];\n  height?: number | FillStyleExpr;\n  [k: string]: unknown;\n}\n\nexport interface FillLayerOptions {\n  border?: boolean;\n  style?: FillLayerStyle;\n  idKey?: string;\n  crs?: string;\n  isFlat?: boolean;\n  drawPart?: boolean;\n  selectedIndex?: number;\n  selectedColor?: string;\n  enablePicked?: boolean;\n  /** 拾取时是否自动切换 selectedIndex（配合 feature-state 高亮时通常设 false，自己控制状态） */\n  enableChangeSelectIndexByPick?: boolean;\n  autoSelect?: boolean;\n  popEvent?: boolean;\n  pickWidth?: number;\n  pickHeight?: number;\n  /** 命中要素时是否自动改变鼠标样式 */\n  mouseStyleChange?: boolean;\n  /** 参考中心点（Point） */\n  referCenter?: unknown;\n  isTop?: boolean;\n  isLowText?: boolean;\n  // ─── 受控选项（变化走对应 setter 平滑更新，不重建图层）───\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n}\n\nexport interface FillLayerProps extends FillLayerOptions {\n  /** GeoJSON 数据源，变化时调用 raw.setData() */\n  data?: object;\n  /** setData 第二参（如 { changeCenter: true } 自动定位到数据范围） */\n  setDataParams?: object;\n  /** 点击要素（需 enablePicked）。e.value.dataItem.properties 为选中要素属性 */\n  onClick?: (e: FillLayerEvent) => void;\n  /** 双击要素（需 enablePicked） */\n  onDblClick?: (e: FillLayerEvent) => void;\n  onRightClick?: (e: FillLayerEvent) => void;\n  /** 鼠标在要素上移动（需 enablePicked）。SDK 不派发 mouseover/mouseout */\n  onMouseMove?: (e: FillLayerEvent) => void;\n  /** 图层挂载后回调，拿到原生 FillLayer 实例做命令式操作（如 updateState/clearState） */\n  onReady?: (layer: any) => void;\n}\n\n/** 图层拾取事件对象（enablePicked=true 时点击/命中要素） */\nexport interface FillLayerEvent {\n  value?: { dataIndex?: number; dataItem?: { properties?: Record<string, unknown>; [k: string]: unknown }; [k: string]: unknown };\n  [k: string]: unknown;\n}\n\n// SDK LayerNormalMgr 只派发 onclick/ondblclick/onrightclick/onmousemove 四种，没有 mouseover/mouseout\nconst LAYER_EVENTS: Array<{ sdk: string; prop: keyof FillLayerProps }> = [\n  { sdk: 'click', prop: 'onClick' },\n  { sdk: 'dblclick', prop: 'onDblClick' },\n  { sdk: 'rightclick', prop: 'onRightClick' },\n  { sdk: 'mousemove', prop: 'onMouseMove' },\n];\n\nexport const FillLayer = memo(function FillLayer(props: FillLayerProps) {\n  const {\n    border, style, idKey, crs, isFlat, drawPart, selectedIndex, selectedColor,\n    enablePicked, enableChangeSelectIndexByPick, autoSelect, popEvent, pickWidth, pickHeight,\n    mouseStyleChange, referCenter, isTop, isLowText,\n    visible, opacity, minZoom, maxZoom, zIndex, data, setDataParams,\n  } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n  // 事件 handler / onReady 用 ref 存最新：引用变化不重绑不重建图层\n  const handlersRef = useLatest({ onClick: props.onClick, onDblClick: props.onDblClick, onRightClick: props.onRightClick, onMouseMove: props.onMouseMove });\n  const onReadyRef = useLatest(props.onReady);\n  const setDataParamsRef = useLatest(setDataParams);\n\n  // ctorKey 只含真正的构造期选项；style 与 visible/opacity/zIndex/minZoom/maxZoom 都走运行时更新，不进 ctorKey\n  const ctorKey = [\n    border, idKey, crs, isFlat, drawPart, selectedIndex, selectedColor,\n    enablePicked, enableChangeSelectIndexByPick, autoSelect, popEvent, pickWidth, pickHeight,\n    mouseStyleChange, isTop, isLowText,\n  ].map(v => v ?? '').join('|');\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    const put = (k: string, v: unknown) => { if (v !== undefined) opts[k] = v; };\n    put('border', border); put('style', style);\n    put('idKey', idKey); put('crs', crs); put('isFlat', isFlat); put('drawPart', drawPart);\n    put('selectedIndex', selectedIndex); put('selectedColor', selectedColor);\n    put('enablePicked', enablePicked); put('enableChangeSelectIndexByPick', enableChangeSelectIndexByPick);\n    put('autoSelect', autoSelect); put('popEvent', popEvent);\n    put('pickWidth', pickWidth); put('pickHeight', pickHeight);\n    put('mouseStyleChange', mouseStyleChange); put('referCenter', referCenter);\n    put('isTop', isTop); put('isLowText', isLowText);\n    // 受控字段的初始值也随构造传入（后续变化走 setter）\n    put('visible', visible); put('opacity', opacity);\n    put('minZoom', minZoom); put('maxZoom', maxZoom); put('zIndex', zIndex);\n\n    const handle = driver.createFillLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    // 绑定图层事件：handler 走 handlersRef 读最新，绑定一次，随图层重建（ctorKey）重绑\n    const raw = rawRef.current;\n    const bound: Array<{ sdk: string; fn: (e: FillLayerEvent) => void }> = [];\n    if (raw && typeof raw.addEventListener === 'function') {\n      for (const { sdk, prop } of LAYER_EVENTS) {\n        const fn = (e: FillLayerEvent) => {\n          const h = handlersRef.current[prop as keyof typeof handlersRef.current];\n          if (typeof h === 'function') h(e);\n        };\n        try { raw.addEventListener(sdk, fn); bound.push({ sdk, fn }); } catch { /* ignore */ }\n      }\n    }\n\n    // mount 后如果有 data，立即 setData\n    if (data && rawRef.current) {\n      try { rawRef.current.setData?.(data, setDataParamsRef.current); } catch (e) { debugWarn('FillLayer.setData', e); }\n    }\n\n    // 暴露原生 layer 实例，供命令式调用\n    onReadyRef.current?.(rawRef.current);\n\n    return () => {\n      for (const { sdk, fn } of bound) {\n        try { raw.removeEventListener?.(sdk, fn); } catch { /* ignore */ }\n      }\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // data 变化 → setData\n  const dataKey = data ? JSON.stringify(data) : '';\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    try { rawRef.current.setData?.(data, setDataParamsRef.current); } catch { /* noop */ }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [dataKey]);\n\n  // style 变化 → 运行时 setStyleOptions（不重建图层，与 LineLayer 对齐）\n  const styleKey = style ? JSON.stringify(style) : '';\n  useEffect(() => {\n    if (!rawRef.current || !style) return;\n    try {\n      rawRef.current.setStyleOptions?.(style);\n      rawRef.current.doOnceDraw?.();\n    } catch { /* noop */ }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [styleKey]);\n\n  // 受控选项 → 对应 setter 平滑更新，不重建图层\n  useEffect(() => { if (rawRef.current && visible !== undefined) try { rawRef.current.setVisible?.(visible); } catch { /* noop */ } }, [visible]);\n  useEffect(() => { if (rawRef.current && opacity !== undefined) try { rawRef.current.setOpacity?.(opacity); } catch { /* noop */ } }, [opacity]);\n  useEffect(() => { if (rawRef.current && zIndex !== undefined) try { rawRef.current.setZIndex?.(zIndex); } catch { /* noop */ } }, [zIndex]);\n  useEffect(() => { if (rawRef.current && minZoom !== undefined) try { rawRef.current.setMinZoom?.(minZoom); } catch { /* noop */ } }, [minZoom]);\n  useEffect(() => { if (rawRef.current && maxZoom !== undefined) try { rawRef.current.setMaxZoom?.(maxZoom); } catch { /* noop */ } }, [maxZoom]);\n\n  return null;\n});\n","/**\n * DOMLayer — 自定义 DOM 覆盖物图层（手写组件）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * <DOMLayer\n *   createDOM={(properties, point) => { ... return HTMLElement; }}\n *   data={geojson}\n *   minZoom={5}\n *   enableDraggingMap\n * />\n * ```\n *\n * 实现要点：\n * - constructor: (createDOM, opts) — 第一个参数是创建 DOM 的回调\n * - data 变化 → raw.setData()\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useLatest } from '../../utils/useLatest';\nimport { debugWarn } from '../../utils/debugWarn';\n\nexport interface DOMLayerOptions {\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n  offsetX?: number;\n  offsetY?: number;\n  anchors?: [number, number];\n  coordinate?: string;\n  enableDraggingMap?: boolean;\n  /**\n   * 延迟一拍定位（默认 true）：首次 draw 以 opacity=0 完成定位，setTimeout(0) 后用真实宽高重新定位再显示。\n   * 消除「子元素宽度首次测量不准 → 二次 draw 位置跳变」的初始化抖动。仅在首次渲染生效，不影响后续更新。\n   * 需要严格同步显示时可传 false 关闭。\n   */\n  nextTick?: boolean;\n  visible?: boolean;\n  data?: object | null;\n}\n\nexport interface DOMLayerProps extends DOMLayerOptions {\n  /** 创建 DOM 元素的回调，接收 properties 和 point，返回 HTMLElement */\n  createDOM: (properties: object, point: { lng: number; lat: number }) => HTMLElement;\n  /** GeoJSON 数据源，变化时调用 raw.setData() */\n  data?: object;\n}\n\nexport const DOMLayer = memo(function DOMLayer(props: DOMLayerProps) {\n  const { createDOM, minZoom, maxZoom, zIndex, offsetX, offsetY, anchors, coordinate, enableDraggingMap, visible, data } = props;\n  // nextTick 默认 true：消除首次定位的宽度测量抖动，显式传 false 关闭\n  const nextTick = props.nextTick ?? true;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n  // createDOM 常被写成内联箭头函数（如 createDOM={p => createEl(p, onPick)}），每次父组件重渲染\n  // （例如点击回调里 setState）都是新引用。若把它放进创建 effect 的依赖，会导致整个图层销毁重建、\n  // 所有 DOM 重新创建 → 肉眼看到闪烁。这里用 useLatest 存最新 createDOM，并用一个引用稳定的\n  // wrapper 传给 SDK：既不因 createDOM 引用变化触发重建，wrapper 内部又始终调用到最新的 createDOM。\n  const createDOMRef = useLatest(createDOM);\n  const stableCreateDOMRef = useRef<((properties: object, point: { lng: number; lat: number }) => HTMLElement) | null>(null);\n  if (!stableCreateDOMRef.current) {\n    stableCreateDOMRef.current = (properties, point) => createDOMRef.current(properties, point);\n  }\n  const stableCreateDOM = stableCreateDOMRef.current;\n  // 已经喂给当前 raw 的 data 指纹。建图层时会先 setData 一次，这里记下来让下面的 data effect\n  // 跳过同一份数据的重复调用：SDK 的 setData 会重建子覆盖物，而 nextTick 定位是 setTimeout，\n  // 第二次 setData 抹掉上一批 DOM 后定时器才回调，就会 Cannot read properties of null (reading 'style')。\n  const appliedDataKeyRef = useRef<string | null>(null);\n  const dataKey = data ? JSON.stringify(data) : '';\n\n  // create + add（constructor 选项变化时重建）\n  const ctorKey = `${minZoom ?? ''}|${maxZoom ?? ''}|${zIndex ?? ''}|${offsetX ?? ''}|${offsetY ?? ''}|${anchors?.join(',') ?? ''}|${coordinate ?? ''}|${enableDraggingMap ?? ''}|${nextTick}|${visible ?? ''}`;\n\n  useLayoutEffect(() => {\n    if (!map || !driver || !stableCreateDOM) return;\n\n    const opts: Record<string, unknown> = { nextTick };\n    if (minZoom !== undefined) opts.minZoom = minZoom;\n    if (maxZoom !== undefined) opts.maxZoom = maxZoom;\n    if (zIndex !== undefined) opts.zIndex = zIndex;\n    if (offsetX !== undefined) opts.offsetX = offsetX;\n    if (offsetY !== undefined) opts.offsetY = offsetY;\n    if (anchors !== undefined) opts.anchors = anchors;\n    if (coordinate !== undefined) opts.coordinate = coordinate;\n    if (enableDraggingMap !== undefined) opts.enableDraggingMap = enableDraggingMap;\n    if (visible !== undefined) opts.visible = visible;\n\n    const handle = driver.createDOMLayer({ createDOM: stableCreateDOM, ...opts });\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    // mount 后如果有 data，立即 setData\n    if (data && rawRef.current) {\n      try {\n        rawRef.current.setData?.(data);\n        appliedDataKeyRef.current = dataKey;\n      } catch (e) { debugWarn('DOMLayer.setData', e); }\n    }\n\n    return () => {\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n      appliedDataKeyRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // data 变化 → setData（建图层时已喂过的同一份数据不再重复调用）\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    if (appliedDataKeyRef.current === dataKey) return;\n    try {\n      rawRef.current.setData?.(data);\n      appliedDataKeyRef.current = dataKey;\n    } catch { /* noop */ }\n  }, [dataKey]);\n\n  return null;\n});\n","/**\n * PointIconLayer — 点图标图层（手写组件）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * <PointIconLayer\n *   isFlat\n *   style={{ icon: 'https://...', width: 25, height: 25 }}\n *   data={geojson}\n *   enablePicked\n * />\n * ```\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useLatest } from '../../utils/useLatest';\nimport { debugWarn } from '../../utils/debugWarn';\n\n/** 图层拾取事件对象（enablePicked=true 时点击/悬停命中要素） */\nexport interface PointIconLayerEvent {\n  /** 命中的要素：value.dataItem.properties 为该点的属性 */\n  value?: { dataItem?: { properties?: Record<string, unknown>; [k: string]: unknown }; [k: string]: unknown };\n  [k: string]: unknown;\n}\n\nexport interface PointIconStyle {\n  icon?: string;\n  iconObj?: (style: object, properties: object) => { id?: number; canvas: HTMLCanvasElement };\n  visibility?: boolean;\n  sizes?: [number, number];\n  width?: number;\n  height?: number;\n  userSizes?: boolean;\n  anchors?: [number, number];\n  offset?: [number, number];\n  scale?: number;\n  rotation?: number;\n  opacity?: number;\n}\n\nexport interface PointIconLayerOptions {\n  isFlat?: boolean;\n  isFixed?: boolean;\n  style?: PointIconStyle;\n  idKey?: string;\n  crs?: string;\n  selectedIndex?: number;\n  selectedColor?: string;\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n  enablePicked?: boolean;\n  autoSelect?: boolean;\n  popEvent?: boolean;\n  pickWidth?: number;\n  pickHeight?: number;\n}\n\nexport interface PointIconLayerProps extends PointIconLayerOptions {\n  /** GeoJSON 数据源，变化时调用 raw.setData() */\n  data?: object;\n  /** 点击要素（需 enablePicked）。e.value.dataItem.properties 为选中要素属性 */\n  onClick?: (e: PointIconLayerEvent) => void;\n  /** 双击要素（需 enablePicked） */\n  onDblClick?: (e: PointIconLayerEvent) => void;\n  onRightClick?: (e: PointIconLayerEvent) => void;\n  /** 鼠标在要素上移动（需 enablePicked）。SDK 不派发 mouseover/mouseout */\n  onMouseMove?: (e: PointIconLayerEvent) => void;\n}\n\n// SDK LayerNormalMgr 只派发 onclick/ondblclick/onrightclick/onmousemove 四种，没有 mouseover/mouseout\nconst LAYER_EVENTS: Array<{ sdk: string; prop: keyof PointIconLayerProps }> = [\n  { sdk: 'click', prop: 'onClick' },\n  { sdk: 'dblclick', prop: 'onDblClick' },\n  { sdk: 'rightclick', prop: 'onRightClick' },\n  { sdk: 'mousemove', prop: 'onMouseMove' },\n];\n\nexport const PointIconLayer = memo(function PointIconLayer(props: PointIconLayerProps) {\n  const { isFlat, isFixed, style, idKey, crs, selectedIndex, selectedColor, visible, opacity, minZoom, maxZoom, zIndex, enablePicked, autoSelect, popEvent, pickWidth, pickHeight, data } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n  // 事件 handler 用 ref 存最新：handler 引用每次 render 变化时不重绑、不重建图层，\n  // 绑定一次、调用时读最新（避免内联 onClick 导致重复挂载或闪烁）。\n  const handlersRef = useLatest({ onClick: props.onClick, onDblClick: props.onDblClick, onRightClick: props.onRightClick, onMouseMove: props.onMouseMove });\n\n  // style + constructor 选项变化时重建\n  const styleKey = style ? JSON.stringify(style) : '';\n  const ctorKey = `${isFlat ?? ''}|${isFixed ?? ''}|${idKey ?? ''}|${crs ?? ''}|${selectedIndex ?? ''}|${selectedColor ?? ''}|${visible ?? ''}|${opacity ?? ''}|${minZoom ?? ''}|${maxZoom ?? ''}|${zIndex ?? ''}|${enablePicked ?? ''}|${autoSelect ?? ''}|${popEvent ?? ''}|${pickWidth ?? ''}|${pickHeight ?? ''}|${styleKey}`;\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    if (isFlat !== undefined) opts.isFlat = isFlat;\n    if (isFixed !== undefined) opts.isFixed = isFixed;\n    if (style !== undefined) opts.style = style;\n    if (idKey !== undefined) opts.idKey = idKey;\n    if (crs !== undefined) opts.crs = crs;\n    if (selectedIndex !== undefined) opts.selectedIndex = selectedIndex;\n    if (selectedColor !== undefined) opts.selectedColor = selectedColor;\n    if (visible !== undefined) opts.visible = visible;\n    if (opacity !== undefined) opts.opacity = opacity;\n    if (minZoom !== undefined) opts.minZoom = minZoom;\n    if (maxZoom !== undefined) opts.maxZoom = maxZoom;\n    if (zIndex !== undefined) opts.zIndex = zIndex;\n    if (enablePicked !== undefined) opts.enablePicked = enablePicked;\n    if (autoSelect !== undefined) opts.autoSelect = autoSelect;\n    if (popEvent !== undefined) opts.popEvent = popEvent;\n    if (pickWidth !== undefined) opts.pickWidth = pickWidth;\n    if (pickHeight !== undefined) opts.pickHeight = pickHeight;\n\n    const handle = driver.createPointIconLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    // 绑定图层事件：handler 走 handlersRef 读最新，绑定一次，随图层重建（ctorKey）重绑\n    const raw = rawRef.current;\n    const bound: Array<{ sdk: string; fn: (e: PointIconLayerEvent) => void }> = [];\n    if (raw && typeof raw.addEventListener === 'function') {\n      for (const { sdk, prop } of LAYER_EVENTS) {\n        const fn = (e: PointIconLayerEvent) => {\n          const h = handlersRef.current[prop as keyof typeof handlersRef.current];\n          if (typeof h === 'function') h(e);\n        };\n        try { raw.addEventListener(sdk, fn); bound.push({ sdk, fn }); } catch { /* ignore */ }\n      }\n    }\n\n    if (data && rawRef.current) {\n      try { rawRef.current.setData?.(data); } catch (e) { debugWarn('PointIconLayer.setData', e); }\n    }\n\n    return () => {\n      for (const { sdk, fn } of bound) {\n        try { raw.removeEventListener?.(sdk, fn); } catch { /* ignore */ }\n      }\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // data 变化 → setData\n  const dataKey = data ? JSON.stringify(data) : '';\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    try { rawRef.current.setData?.(data); } catch { /* noop */ }\n  }, [dataKey]);\n\n  return null;\n});\n","/**\n * PointShapeLayer — 点形状图层（手写组件）。\n * @since 4.0 使用 2D 几何图形（圆形、方形、三角形、五角星等）渲染点数据。\n *\n * 组件方式：\n * ```tsx\n * <PointShapeLayer style={{ shapeType: 2, size: 20, color: '#ff0000' }} data={geojson} />\n * ```\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { debugWarn } from '../../utils/debugWarn';\n\nexport interface PointShapeStyle {\n  visibility?: boolean;\n  shapeType?: number;\n  anchor?: number;\n  size?: number;\n  scale?: number;\n  rotation?: number;\n  offset?: [number, number];\n  color?: string;\n  opacity?: number;\n  strokeColor?: string;\n  strokeWeight?: number;\n}\n\nexport interface PointShapeLayerOptions {\n  isFlat?: boolean;\n  style?: PointShapeStyle;\n  idKey?: string;\n  crs?: string;\n  selectedIndex?: number;\n  selectedColor?: string;\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n  enablePicked?: boolean;\n  autoSelect?: boolean;\n  popEvent?: boolean;\n  pickWidth?: number;\n  pickHeight?: number;\n}\n\nexport interface PointShapeLayerProps extends PointShapeLayerOptions {\n  data?: object;\n}\n\nexport const PointShapeLayer = memo(function PointShapeLayer(props: PointShapeLayerProps) {\n  const { isFlat, style, idKey, crs, selectedIndex, selectedColor, visible, opacity, minZoom, maxZoom, zIndex, enablePicked, autoSelect, popEvent, pickWidth, pickHeight, data } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n\n  const styleKey = style ? JSON.stringify(style) : '';\n  const ctorKey = `${isFlat ?? ''}|${idKey ?? ''}|${crs ?? ''}|${selectedIndex ?? ''}|${selectedColor ?? ''}|${visible ?? ''}|${opacity ?? ''}|${minZoom ?? ''}|${maxZoom ?? ''}|${zIndex ?? ''}|${enablePicked ?? ''}|${autoSelect ?? ''}|${popEvent ?? ''}|${pickWidth ?? ''}|${pickHeight ?? ''}|${styleKey}`;\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    if (isFlat !== undefined) opts.isFlat = isFlat;\n    if (style !== undefined) opts.style = style;\n    if (idKey !== undefined) opts.idKey = idKey;\n    if (crs !== undefined) opts.crs = crs;\n    if (selectedIndex !== undefined) opts.selectedIndex = selectedIndex;\n    if (selectedColor !== undefined) opts.selectedColor = selectedColor;\n    if (visible !== undefined) opts.visible = visible;\n    if (opacity !== undefined) opts.opacity = opacity;\n    if (minZoom !== undefined) opts.minZoom = minZoom;\n    if (maxZoom !== undefined) opts.maxZoom = maxZoom;\n    if (zIndex !== undefined) opts.zIndex = zIndex;\n    if (enablePicked !== undefined) opts.enablePicked = enablePicked;\n    if (autoSelect !== undefined) opts.autoSelect = autoSelect;\n    if (popEvent !== undefined) opts.popEvent = popEvent;\n    if (pickWidth !== undefined) opts.pickWidth = pickWidth;\n    if (pickHeight !== undefined) opts.pickHeight = pickHeight;\n\n    const handle = driver.createPointShapeLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    if (data && rawRef.current) {\n      try { rawRef.current.setData?.(data); } catch (e) { debugWarn('PointShapeLayer.setData', e); }\n    }\n\n    return () => {\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  const dataKey = data ? JSON.stringify(data) : '';\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    try { rawRef.current.setData?.(data); } catch { /* noop */ }\n  }, [dataKey]);\n\n  return null;\n});\n","/**\n * LineLayer — 线图层（手写组件）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * <LineLayer\n *   selectedColor=\"#ff7a45\"\n *   style={{ strokeColor: '#2a6cf6', strokeWeight: 6, strokeStyle: 'solid' }}\n *   data={geojson}\n *   enablePicked\n * />\n * ```\n *\n * 实现要点：\n * - mount → driver.createLineLayer + addLayer\n * - data 变化 → raw.setData()\n * - style 变化 → raw.setStyleOptions() + raw.doOnceDraw()（运行时更新，不重建图层）\n */\nimport { memo, useLayoutEffect, useRef, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useLatest } from '../../utils/useLatest';\nimport { debugWarn } from '../../utils/debugWarn';\n\n/** 数据驱动样式表达式，如 ['match', ['get', 'name'], 'a', '#f00', '#00f']（SDK 表达式语法） */\nexport type LineStyleExpr = unknown[];\n\nexport interface LineLayerStyle {\n  strokeColor?: string | LineStyleExpr;\n  strokeWeight?: number | LineStyleExpr;\n  strokeOpacity?: number | LineStyleExpr;\n  strokeStyle?: string | LineStyleExpr;\n  strokeLineCap?: string;\n  strokeLineJoin?: string;\n  borderColor?: string | LineStyleExpr;\n  borderWeight?: number | LineStyleExpr;\n  dashArray?: number[];\n  strokeTextureUrl?: string | LineStyleExpr;\n  strokeTextureWidth?: number | LineStyleExpr;\n  strokeTextureHeight?: number;\n  /** 是否按纹理序列渲染（贴图沿线重复） */\n  sequence?: boolean;\n  /** 纹理之间的间隔长度 */\n  marginLength?: number;\n  [k: string]: unknown;\n}\n\nexport interface LineLayerOptions {\n  style?: LineLayerStyle;\n  // ─── 构造期选项（变化会重建图层）───\n  idKey?: string;\n  crs?: string;\n  isFlat?: boolean;\n  drawPart?: boolean;\n  selectedColor?: string;\n  selectedIndex?: number;\n  enablePicked?: boolean;\n  /** 拾取时是否自动切换 selectedIndex（配合 feature-state 高亮时通常设 false，自己控制状态） */\n  enableChangeSelectIndexByPick?: boolean;\n  autoSelect?: boolean;\n  popEvent?: boolean;\n  pickWidth?: number;\n  pickHeight?: number;\n  /** 命中要素时是否自动改变鼠标样式 */\n  mouseStyleChange?: boolean;\n  /** 参考中心点（Point） */\n  referCenter?: unknown;\n  isTop?: boolean;\n  isLowText?: boolean;\n  // ─── LineLayer 专属折线/节点选项（构造期）───\n  /** 是否渐变线 */\n  isLinear?: boolean;\n  /** 渐变纹理 */\n  linearTexture?: unknown;\n  nodeShow?: boolean;\n  nodeMask?: boolean;\n  nodeStrict?: boolean;\n  nodeJoin?: boolean;\n  nodeBreakpoint?: boolean;\n  nodeMiddleShow?: boolean;\n  nodeMinZoom?: number;\n  linkLine?: boolean;\n  // ─── 受控选项（变化走对应 setter 平滑更新，不重建图层）───\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n}\n\n/** 图层拾取事件对象（enablePicked=true 时点击/悬停命中要素；dataIndex=-1 表示点空白） */\nexport interface LineLayerEvent {\n  value?: {\n    dataIndex?: number;\n    dataItem?: { properties?: Record<string, unknown>; [k: string]: unknown };\n    [k: string]: unknown;\n  };\n  [k: string]: unknown;\n}\n\nexport interface LineLayerProps extends LineLayerOptions {\n  /** GeoJSON 数据源，变化时调用 raw.setData() */\n  data?: object;\n  /** setData 第二参（如 { changeCenter: true } 自动定位到数据范围） */\n  setDataParams?: object;\n  /** 点击要素（需 enablePicked）。e.value.dataIndex 为命中要素索引，-1 表示点空白 */\n  onClick?: (e: LineLayerEvent) => void;\n  /** 双击要素（需 enablePicked） */\n  onDblClick?: (e: LineLayerEvent) => void;\n  onRightClick?: (e: LineLayerEvent) => void;\n  /** 鼠标在要素上移动（需 enablePicked）。SDK 不派发 mouseover/mouseout，hover 进出请自行用 dataIndex 变化推导 */\n  onMouseMove?: (e: LineLayerEvent) => void;\n  /** 图层创建并挂载后回调，拿到原生 LineLayer 实例做命令式操作（如 updateState/clearState/traceControl） */\n  onReady?: (layer: any) => void;\n}\n\n// SDK LayerNormalMgr 只派发 onclick/ondblclick/onrightclick/onmousemove 四种，没有 mouseover/mouseout\nconst LAYER_EVENTS: Array<{ sdk: string; prop: keyof LineLayerProps }> = [\n  { sdk: 'click', prop: 'onClick' },\n  { sdk: 'dblclick', prop: 'onDblClick' },\n  { sdk: 'rightclick', prop: 'onRightClick' },\n  { sdk: 'mousemove', prop: 'onMouseMove' },\n];\n\nexport const LineLayer = memo(function LineLayer(props: LineLayerProps) {\n  const {\n    style, idKey, crs, isFlat, drawPart, selectedColor, selectedIndex,\n    enablePicked, enableChangeSelectIndexByPick, autoSelect, popEvent, pickWidth, pickHeight,\n    mouseStyleChange, referCenter, isTop, isLowText,\n    isLinear, linearTexture, nodeShow, nodeMask, nodeStrict, nodeJoin, nodeBreakpoint, nodeMiddleShow, nodeMinZoom, linkLine,\n    visible, opacity, minZoom, maxZoom, zIndex, data, setDataParams,\n  } = props;\n  const { map, driver } = useMapContext();\n  const rawRef = useRef<any>(null);\n  // 事件 handler / onReady 用 ref 存最新：引用变化不重绑不重建图层\n  const handlersRef = useLatest({ onClick: props.onClick, onDblClick: props.onDblClick, onRightClick: props.onRightClick, onMouseMove: props.onMouseMove });\n  const onReadyRef = useLatest(props.onReady);\n  const setDataParamsRef = useLatest(setDataParams);\n\n  // ctorKey 只含真正的构造期选项；style 与 visible/opacity/zIndex/minZoom/maxZoom 都走运行时更新，不进 ctorKey\n  const ctorKey = [\n    idKey, crs, isFlat, drawPart, selectedColor, selectedIndex,\n    enablePicked, enableChangeSelectIndexByPick, autoSelect, popEvent, pickWidth, pickHeight,\n    mouseStyleChange, isTop, isLowText,\n    isLinear, linearTexture, nodeShow, nodeMask, nodeStrict, nodeJoin, nodeBreakpoint, nodeMiddleShow, nodeMinZoom, linkLine,\n  ].map(v => v ?? '').join('|');\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const opts: Record<string, unknown> = {};\n    const put = (k: string, v: unknown) => { if (v !== undefined) opts[k] = v; };\n    put('style', style);\n    put('idKey', idKey); put('crs', crs); put('isFlat', isFlat); put('drawPart', drawPart);\n    put('selectedColor', selectedColor); put('selectedIndex', selectedIndex);\n    put('enablePicked', enablePicked); put('enableChangeSelectIndexByPick', enableChangeSelectIndexByPick);\n    put('autoSelect', autoSelect); put('popEvent', popEvent);\n    put('pickWidth', pickWidth); put('pickHeight', pickHeight);\n    put('mouseStyleChange', mouseStyleChange); put('referCenter', referCenter);\n    put('isTop', isTop); put('isLowText', isLowText);\n    put('isLinear', isLinear); put('linearTexture', linearTexture);\n    put('nodeShow', nodeShow); put('nodeMask', nodeMask); put('nodeStrict', nodeStrict);\n    put('nodeJoin', nodeJoin); put('nodeBreakpoint', nodeBreakpoint);\n    put('nodeMiddleShow', nodeMiddleShow); put('nodeMinZoom', nodeMinZoom); put('linkLine', linkLine);\n    // 受控字段的初始值也随构造传入（后续变化走 setter）\n    put('visible', visible); put('opacity', opacity);\n    put('minZoom', minZoom); put('maxZoom', maxZoom); put('zIndex', zIndex);\n\n    const handle = driver.createLineLayer(opts);\n    if (!handle) return;\n    rawRef.current = (handle as any).raw;\n    driver.addLayer(map, handle);\n\n    // 绑定图层事件：handler 走 handlersRef 读最新，绑定一次，随图层重建（ctorKey）重绑\n    const raw = rawRef.current;\n    const bound: Array<{ sdk: string; fn: (e: LineLayerEvent) => void }> = [];\n    if (raw && typeof raw.addEventListener === 'function') {\n      for (const { sdk, prop } of LAYER_EVENTS) {\n        const fn = (e: LineLayerEvent) => {\n          const h = handlersRef.current[prop as keyof typeof handlersRef.current];\n          if (typeof h === 'function') h(e);\n        };\n        try { raw.addEventListener(sdk, fn); bound.push({ sdk, fn }); } catch { /* ignore */ }\n      }\n    }\n\n    if (data && rawRef.current) {\n      try { rawRef.current.setData?.(data, setDataParamsRef.current); } catch (e) { debugWarn('LineLayer.setData', e); }\n    }\n\n    // 暴露原生 layer 实例，供命令式调用（updateState/clearState/traceControl 等）\n    onReadyRef.current?.(rawRef.current);\n\n    return () => {\n      for (const { sdk, fn } of bound) {\n        try { raw.removeEventListener?.(sdk, fn); } catch { /* ignore */ }\n      }\n      driver.removeLayer(map, handle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // data 变化 → setData\n  const dataKey = data ? JSON.stringify(data) : '';\n  useEffect(() => {\n    if (!rawRef.current || !data) return;\n    try { rawRef.current.setData?.(data, setDataParamsRef.current); } catch { /* noop */ }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [dataKey]);\n\n  // style 变化 → 运行时 setStyleOptions（不重建图层）\n  const styleKey = style ? JSON.stringify(style) : '';\n  useEffect(() => {\n    if (!rawRef.current || !style) return;\n    try {\n      rawRef.current.setStyleOptions?.(style);\n      rawRef.current.doOnceDraw?.();\n    } catch { /* noop */ }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [styleKey]);\n\n  // 受控选项 → 对应 setter 平滑更新，不重建图层\n  useEffect(() => { if (rawRef.current && visible !== undefined) try { rawRef.current.setVisible?.(visible); } catch { /* noop */ } }, [visible]);\n  useEffect(() => { if (rawRef.current && opacity !== undefined) try { rawRef.current.setOpacity?.(opacity); } catch { /* noop */ } }, [opacity]);\n  useEffect(() => { if (rawRef.current && zIndex !== undefined) try { rawRef.current.setZIndex?.(zIndex); } catch { /* noop */ } }, [zIndex]);\n  useEffect(() => { if (rawRef.current && minZoom !== undefined) try { rawRef.current.setMinZoom?.(minZoom); } catch { /* noop */ } }, [minZoom]);\n  useEffect(() => { if (rawRef.current && maxZoom !== undefined) try { rawRef.current.setMaxZoom?.(maxZoom); } catch { /* noop */ } }, [maxZoom]);\n\n  return null;\n});\n","/**\n * ThreeLayer — three.js 图层（手写组件，继承 NormalLayer）。\n * @since 4.0\n *\n * 组件方式：\n * ```tsx\n * const layerRef = useRef<ThreeLayerRef>(null);\n * <ThreeLayer\n *   ref={layerRef}\n *   antialias\n *   zIndex={5}\n *   onInit={(renderer, scene, camera, layer) => {\n *     const mesh = new THREE.Mesh(\n *       new THREE.BoxGeometry(500, 500, 500),\n *       new THREE.MeshBasicMaterial({ color: 0x1890ff }),\n *     );\n *     const [x, y] = layer.toWorld(center)!;\n *     mesh.position.set(x, y, 250);\n *     layer.add(mesh);\n *     layer.triggerRepaint();  // 不调这一下 animate() 直接 return，画面不会更新\n *   }}\n * />\n * ```\n *\n * 实现要点：\n * - three.js 由宿主工程自己引入，且必须挂在 window.THREE 上：SDK 构造函数第一行就\n *   `if (!window.THREE) throw`，异常被 createLayerFactory 吞掉后图层静默变成 null。\n *   这里缺失时打一次警告，避免「什么都没发生」。\n * - ctorKey 只含 alpha / antialias / 是否接了 onRender：前两个在 onAdd 时被烧进\n *   WebGLRenderer，后者决定 SDK 走不走默认渲染，三者只能重建；其余参数都走\n *   NormalLayer 的 setter，改一个 zIndex 不会把用户的 three.js 场景销毁重建。\n * - 生命周期回调传固定 wrapper（普通函数，SDK 用 hook.bind(this) 调用），内部读 ref\n *   取最新回调；同时把图层实例作为第 4 个参数传出去，箭头函数也能拿到。\n * - opacity 对本图层无效，见 ThreeLayerOptions.opacity 的说明。\n */\nimport { forwardRef, memo, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { debugWarn, devWarn } from '../../utils/debugWarn';\nimport { useLatest } from '../../utils/useLatest';\nimport { tryGetSDK } from '../../utils/sdk';\nimport type { Point } from '../../types';\n\n/**\n * three.js 的对象（Scene / Camera / WebGLRenderer / Object3D 等）。\n * 本库不依赖 three，也不想把 three 的类型塞进公共 API，交由宿主自行断言。\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ThreeObject = any;\n\n/** SDK ThreeLayer 实例上实际存在的成员（取自 v4 bundle） */\nexport interface ThreeLayerInstance {\n  scene?: ThreeObject;\n  camera?: ThreeObject;\n  renderer?: ThreeObject;\n  map?: ThreeObject;\n  add(object: ThreeObject): void;\n  remove(object: ThreeObject): void;\n  getScene(): ThreeObject;\n  getCamera(): ThreeObject;\n  getRender(): ThreeObject;\n  getMap(): ThreeObject | null;\n  triggerRepaint(): void;\n  triggerStop(): void;\n  refreshMap(): void;\n  pick(x: number, y: number): ThreeObject[] | null;\n}\n\n/**\n * 生命周期回调。\n *\n * SDK 用 `hook.bind(this)(renderer, scene, camera)` 调用，所以普通函数里的 `this` 是 SDK 图层实例；\n * 第 4 个参数 `layer` 是组件对外的命令式句柄（与 ref 拿到的是同一个对象），箭头函数用它。\n */\nexport type ThreeLayerHook = (\n  this: ThreeLayerInstance,\n  renderer: ThreeObject,\n  scene: ThreeObject,\n  camera: ThreeObject,\n  layer: ThreeLayerRef,\n) => void;\n\n/** 命令式句柄。图层实例要等 GL 就绪才有，所以句柄本身始终存在，成员在就绪前为 null / no-op。 */\nexport interface ThreeLayerRef {\n  /** SDK 图层实例；GL 就绪（onInit 触发）前为 null */\n  readonly raw: ThreeLayerInstance | null;\n  readonly scene: ThreeObject | null;\n  readonly camera: ThreeObject | null;\n  readonly renderer: ThreeObject | null;\n  add(object: ThreeObject): void;\n  remove(object: ThreeObject): void;\n  triggerRepaint(): void;\n  triggerStop(): void;\n  refreshMap(): void;\n  pick(x: number, y: number): ThreeObject[] | null;\n  /**\n   * 经纬度 → three.js 世界坐标（相对固定墨卡托基准点的偏移，单位约等于米）。\n   *\n   * 走 map.toFormatCoords，而不是实例上的 convertLngLat —— 后者在 v4 里是坏的：\n   * 它把 `map.toFormatCoords`（一个函数）当成带 setCenter 的对象用，一调就 TypeError。\n   */\n  toWorld(point: Point): [number, number] | null;\n}\n\nexport interface ThreeLayerOptions {\n  /** 传给 THREE.WebGLRenderer 的 alpha，默认 false。变化会重建图层。 */\n  alpha?: boolean;\n  /** 传给 THREE.WebGLRenderer 的 antialias，默认 false。变化会重建图层。 */\n  antialias?: boolean;\n  /** 是否显示，默认 true */\n  visible?: boolean;\n  /** 最小显示级别，默认 3 */\n  minZoom?: number;\n  /** 最大显示级别，默认 21 */\n  maxZoom?: number;\n  /** 层级，默认 1 */\n  zIndex?: number;\n  /**\n   * 参考中心点。只会写到实例的 this.center，而 v4 的 ThreeLayer.render 取的矩阵\n   * （_updatePolyLayerMatrix）并不带它 —— 世界坐标只能相对默认墨卡托基准点，\n   * 传了反而对不上，一般不用给。\n   */\n  referCenter?: Point;\n  /**\n   * @deprecated 对 ThreeLayer 无效。NormalLayer 构造函数会存 this.opacity、也提供\n   * setOpacity/getOpacity，但 ThreeLayer.render 只做 renderer.render(scene, camera)，\n   * 整块原型里从不读它（真正消费它的是 LineLayer / FillLayer 这类自己写 shader、\n   * 把它当 u_opacity uniform 的图层）。three.js 的透明度请设在材质上\n   * （material.transparent = true 且 material.opacity = x）。\n   */\n  opacity?: number;\n}\n\nexport interface ThreeLayerProps extends ThreeLayerOptions {\n  /** GL 就绪、场景/相机/渲染器创建完成后调用，在这里往场景里加物体 */\n  onInit?: ThreeLayerHook;\n  /**\n   * 接管渲染。SDK 里这是 if/else：接了它就**不再**调用默认的\n   * renderer.render(scene, camera)，必须自己渲染。变化会重建图层。\n   */\n  onRender?: ThreeLayerHook;\n  /** 每帧渲染前 */\n  preRender?: ThreeLayerHook;\n  /** 每帧渲染后 */\n  afterRender?: ThreeLayerHook;\n  /** 图层销毁前。SDK 随后会 dispose 场景与渲染器，场景里的物体不需要自己清 */\n  onDestroy?: ThreeLayerHook;\n  /** 因 visible / 缩放级别超出 [minZoom, maxZoom] 而隐藏时 */\n  onHide?: ThreeLayerHook;\n  /** 从隐藏恢复显示时 */\n  onShow?: ThreeLayerHook;\n}\n\n/** window.THREE 缺失只提醒一次，避免每次重渲染都刷屏 */\nlet warnedMissingThree = false;\n\nfunction warnMissingThree(): void {\n  if (warnedMissingThree) return;\n  warnedMissingThree = true;\n  try {\n    if (typeof console === 'undefined') return;\n    // 这条不走 devWarn：生产环境同样是「图层静默消失」，必须能看见\n    console.warn(\n      '[react-bmap] <ThreeLayer> 需要宿主工程自行引入 three.js 并挂到 window.THREE 上，' +\n        '当前未检测到，图层已跳过创建。异步加载 three.js 时，请等就绪后再渲染 <ThreeLayer>。',\n    );\n  } catch {\n    // 日志不能反过来把调用方搞崩\n  }\n}\n\n/** referCenter：SDK 的 setRefCenter 要求 instanceof Point，普通对象会被静默忽略 */\nfunction toSDKPoint(point: Point): unknown {\n  const SDK = tryGetSDK();\n  return SDK ? new SDK.Point(point.lng, point.lat) : undefined;\n}\n\nconst ThreeLayerInner = forwardRef<ThreeLayerRef, ThreeLayerProps>(function ThreeLayer(props, ref) {\n  const { alpha, antialias, visible, opacity, minZoom, maxZoom, zIndex, referCenter } = props;\n  const { map, driver } = useMapContext();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const rawRef = useRef<any>(null);\n  const mapRef = useLatest(map);\n  const warnedOpacityRef = useRef(false);\n\n  const onInitRef = useLatest(props.onInit);\n  const onRenderRef = useLatest(props.onRender);\n  const preRenderRef = useLatest(props.preRender);\n  const afterRenderRef = useLatest(props.afterRender);\n  const onDestroyRef = useLatest(props.onDestroy);\n  const onHideRef = useLatest(props.onHide);\n  const onShowRef = useLatest(props.onShow);\n\n  // 命令式句柄：实例要等 onAdd 才有，所以句柄是稳定对象，方法体内现读 rawRef\n  const handle = useMemo<ThreeLayerRef>(() => ({\n    get raw() { return rawRef.current ?? null; },\n    get scene() { return rawRef.current?.scene ?? null; },\n    get camera() { return rawRef.current?.camera ?? null; },\n    get renderer() { return rawRef.current?.renderer ?? null; },\n    add(object) { rawRef.current?.add(object); },\n    remove(object) { rawRef.current?.remove(object); },\n    triggerRepaint() { rawRef.current?.triggerRepaint(); },\n    triggerStop() { rawRef.current?.triggerStop(); },\n    refreshMap() { rawRef.current?.refreshMap(); },\n    pick(x, y) { return rawRef.current?.pick(x, y) ?? null; },\n    toWorld(point) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const rawMap = rawRef.current?.map ?? (mapRef.current as any)?.raw;\n      if (!rawMap?.toFormatCoords) return null;\n      try {\n        const [pair] = rawMap.toFormatCoords([[point.lng, point.lat]]);\n        return [pair[0], pair[1]];\n      } catch (e) {\n        debugWarn('ThreeLayer.toWorld', e);\n        return null;\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }), []);\n\n  useImperativeHandle(ref, () => handle, [handle]);\n\n  // 只有真的传了 onRender 才把它挂进 options：SDK 是\n  // `this.options.onRender ? 自定义 : renderer.render(scene, camera)`，\n  // 无条件挂一个 wrapper 会把默认渲染整个关掉 → 画面全空。\n  const hasOnRender = !!props.onRender;\n\n  // create + add（只有构造期才生效的参数变化时重建）\n  const ctorKey = `${alpha ?? ''}|${antialias ?? ''}|${hasOnRender}`;\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (!(globalThis as any).THREE) {\n      warnMissingThree();\n      return;\n    }\n\n    const opts: Record<string, unknown> = {};\n    if (alpha !== undefined) opts.alpha = alpha;\n    if (antialias !== undefined) opts.antialias = antialias;\n    // 公共参数也在构造时带上，省掉「先建好再 setXxx」的一帧抖动\n    if (visible !== undefined) opts.visible = visible;\n    if (minZoom !== undefined) opts.minZoom = minZoom;\n    if (maxZoom !== undefined) opts.maxZoom = maxZoom;\n    if (zIndex !== undefined) opts.zIndex = zIndex;\n    if (opacity !== undefined) opts.opacity = opacity;\n    if (referCenter !== undefined) opts.referCenter = toSDKPoint(referCenter);\n\n    // 固定 wrapper + ref 取最新回调：options 在构造时定型，回调换了不该重建图层\n    const hook = (get: () => ThreeLayerHook | undefined) =>\n      function (this: ThreeLayerInstance, renderer: ThreeObject, scene: ThreeObject, camera: ThreeObject) {\n        get()?.call(this, renderer, scene, camera, handle);\n      };\n    opts.onInit = hook(() => onInitRef.current);\n    opts.preRender = hook(() => preRenderRef.current);\n    opts.afterRender = hook(() => afterRenderRef.current);\n    opts.onDestroy = hook(() => onDestroyRef.current);\n    opts.onHide = hook(() => onHideRef.current);\n    opts.onShow = hook(() => onShowRef.current);\n    if (hasOnRender) {\n      opts.onRender = function (this: ThreeLayerInstance, renderer: ThreeObject, scene: ThreeObject, camera: ThreeObject) {\n        const fn = onRenderRef.current;\n        // 运行期把 onRender 撤成 undefined 时兜底走默认渲染，否则画面会停住\n        if (fn) fn.call(this, renderer, scene, camera, handle);\n        else renderer.render(scene, camera);\n      };\n    }\n\n    const layerHandle = driver.createThreeLayer(opts);\n    if (!layerHandle) return;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    rawRef.current = (layerHandle as any).raw;\n    driver.addLayer(map, layerHandle);\n\n    return () => {\n      driver.removeLayer(map, layerHandle);\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ctorKey]);\n\n  // setVisible\n  useEffect(() => {\n    if (!rawRef.current || visible === undefined) return;\n    try { rawRef.current.setVisible?.(visible); } catch (e) { debugWarn('ThreeLayer.setVisible', e); }\n  }, [visible]);\n\n  // setMinZoom / setMaxZoom（SDK 会拒绝越界值：minZoom > maxZoom 时静默不改）\n  useEffect(() => {\n    if (!rawRef.current || minZoom === undefined) return;\n    try { rawRef.current.setMinZoom?.(minZoom); } catch (e) { debugWarn('ThreeLayer.setMinZoom', e); }\n  }, [minZoom]);\n\n  useEffect(() => {\n    if (!rawRef.current || maxZoom === undefined) return;\n    try { rawRef.current.setMaxZoom?.(maxZoom); } catch (e) { debugWarn('ThreeLayer.setMaxZoom', e); }\n  }, [maxZoom]);\n\n  // setZIndex\n  useEffect(() => {\n    if (!rawRef.current || zIndex === undefined) return;\n    try { rawRef.current.setZIndex?.(zIndex); } catch (e) { debugWarn('ThreeLayer.setZIndex', e); }\n  }, [zIndex]);\n\n  // setRefCenter（SDK 要求 instanceof Point）\n  useEffect(() => {\n    if (!rawRef.current || referCenter === undefined) return;\n    const pt = toSDKPoint(referCenter);\n    if (!pt) return;\n    try { rawRef.current.setRefCenter?.(pt); } catch (e) { debugWarn('ThreeLayer.setRefCenter', e); }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [referCenter?.lng, referCenter?.lat]);\n\n  // opacity：照样喂给 SDK（getOpacity 能读回一致的值），但 ThreeLayer 的 render 不读它\n  useEffect(() => {\n    if (opacity === undefined) return;\n    // 只提醒一次：这个值常常挂在滑块上，每次变化都打就成了刷屏\n    if (!warnedOpacityRef.current) {\n      warnedOpacityRef.current = true;\n      devWarn('<ThreeLayer> 的 opacity 对本图层无效：ThreeLayer.render 从不读 this.opacity，透明度请设在 three.js 材质上（material.transparent + material.opacity）。');\n    }\n    if (!rawRef.current) return;\n    try { rawRef.current.setOpacity?.(opacity); } catch (e) { debugWarn('ThreeLayer.setOpacity', e); }\n  }, [opacity]);\n\n  return null;\n});\n\nexport const ThreeLayer = memo(ThreeLayerInner);\n","/**\n * 全部 Layer 组件 — 使用 createLayerComponent 工厂批量生成。\n */\nimport { createLayerComponent } from '../../utils/createComponent';\nimport type { Point } from '../../types';\n\n// Options 接口\nexport interface TileLayerOptions {\n  transparentPng?: boolean; tileUrlTemplate?: string; zIndex?: number; copyright?: unknown;\n  boundary?: string | string[]; opacity?: number; showRegion?: string; retry?: boolean; retryTime?: number; cacheSize?: number;\n  tileLoadFunction?: (tile: HTMLImageElement, url: string) => void;\n}\nexport interface NormalLayerOptions {\n  visible?: boolean; opacity?: number; minZoom?: number; maxZoom?: number; zIndex?: number;\n  enablePicked?: boolean; autoSelect?: boolean; popEvent?: boolean; isTop?: boolean; isLowText?: boolean;\n  referCenter?: Point; pickWidth?: number; pickHeight?: number;\n}\nexport interface GeoJSONLayerOptions {\n  dataSource?: unknown; reference?: string;\n  markerStyle?: unknown; polylineStyle?: unknown; polygonStyle?: unknown;\n  minZoom?: number; maxZoom?: number; level?: number; visible?: boolean;\n}\nexport interface DistrictLayerOptions {\n  name?: string; adcode?: string; kind?: number; autoViewport?: boolean;\n  strokeColor?: string; strokeWeight?: number; strokeOpacity?: number;\n  fillColor?: string; fillOpacity?: number;\n}\nexport interface CustomLayerOptions { databoxId?: string; geotableId?: string; q?: string; tags?: string; filter?: string; pointDensity?: number; }\nexport interface CanvasLayerOptions { zIndex?: number; paneName?: string; update?: Function; }\n\nexport type TileLayerProps = TileLayerOptions;\nexport type NormalLayerProps = NormalLayerOptions;\nexport type GeoJSONLayerProps = GeoJSONLayerOptions;\nexport type DistrictLayerProps = DistrictLayerOptions;\nexport type CustomLayerProps = CustomLayerOptions;\nexport type CanvasLayerProps = CanvasLayerOptions;\n\n// 组件\nexport const TileLayer = createLayerComponent<TileLayerProps>({ displayName: 'TileLayer', factory: (d, p) => d.createTileLayer(p) });\nexport const NormalLayer = createLayerComponent<NormalLayerProps>({ displayName: 'NormalLayer', factory: (d, p) => d.createNormalLayer(p) });\nexport const GeoJSONLayer = createLayerComponent<GeoJSONLayerProps>({ displayName: 'GeoJSONLayer', factory: (d, p) => d.createGeoJSONLayer(p) });\nexport const DistrictLayer = createLayerComponent<DistrictLayerProps>({ displayName: 'DistrictLayer', factory: (d, p) => d.createDistrictLayer(p), reuseHandle: true, deferMount: true });\n// TrafficLayer 是手写组件（支持 setColors / setEdge），见 TrafficLayer.tsx\nexport { TrafficLayer } from './TrafficLayer';\nexport type { TrafficLayerProps, TrafficLayerOptions } from './TrafficLayer';\nexport const CustomLayer = createLayerComponent<CustomLayerProps>({ displayName: 'CustomLayer', factory: (d, p) => d.createCustomLayer(p) });\nexport const CanvasLayer = createLayerComponent<CanvasLayerProps>({ displayName: 'CanvasLayer', factory: (d, p) => d.createCanvasLayer(p) });\n\n// ─── 高级图层（4.0+） ───\n\n// RasterTileLayer — 栅格瓦片图层\nexport interface RasterTileLayerOptions {\n  url: string | ((x: number, y: number, z: number) => string);\n  subdomains?: string[];\n  projection?: string;\n  bounds?: number[];\n  boundsInWGS84?: boolean;\n  minZoom?: number;\n  maxZoom?: number;\n  spanLevel?: number;\n  opacity?: number;\n  zIndex?: number;\n  useThumbData?: boolean;\n  boundary?: string | string[];\n  showRegion?: 'inside' | 'outside';\n  height?: number;\n  retry?: boolean;\n  retryTime?: number;\n  cacheSize?: number;\n  tileLoadFunction?: (tile: HTMLImageElement, url: string) => void;\n}\nexport type RasterTileLayerProps = RasterTileLayerOptions;\n\n// WMSLayer — WMS 标准服务图层\nexport interface WMSLayerOptions {\n  url?: string;\n  params?: Record<string, string>;\n  projection?: string;\n  tileSize?: number;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n  extent?: number[];\n  extentCRSIsWGS84?: boolean;\n  useThumbData?: boolean;\n  spanLevel?: number;\n  reproject?: boolean;\n  reprojectSourceCRS?: string;\n  png8?: boolean;\n  height?: number;\n  retry?: boolean;\n  retryTime?: number;\n  dataType?: string;\n  cacheSize?: number;\n  boundary?: string[];\n  thumbParentDepth?: number;\n  thumbChildDepth?: number;\n  tileLoadFunction?: (tile: HTMLImageElement, url: string) => void;\n}\nexport type WMSLayerProps = WMSLayerOptions;\n\n// WMTSLayer — WMTS 标准服务图层\nexport interface WMTSLayerOptions {\n  url?: string;\n  params?: Record<string, string>;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n  extent?: number[];\n  extentCRSIsWGS84?: boolean;\n  transform?: { source?: string; target?: string };\n  xTemplate?: (x: number, y: number, z: number) => number | string;\n  yTemplate?: (x: number, y: number, z: number) => number | string;\n  zTemplate?: (x: number, y: number, z: number) => number | string;\n  useThumbData?: boolean;\n  spanLevel?: number;\n  reproject?: boolean;\n  reprojectSourceCRS?: string;\n  png8?: boolean;\n  height?: number;\n  retry?: boolean;\n  retryTime?: number;\n  dataType?: string;\n  cacheSize?: number;\n  boundary?: string[];\n  thumbParentDepth?: number;\n  thumbChildDepth?: number;\n  tileLoadFunction?: (tile: HTMLImageElement, url: string) => void;\n}\nexport type WMTSLayerProps = WMTSLayerOptions;\n\n// XYZLayer — XYZ 瓦片图层\nexport interface XYZLayerOptions {\n  tileUrlTemplate?: string;\n  xTemplate?: (x: number, y: number, z: number) => number | string;\n  yTemplate?: (x: number, y: number, z: number) => number | string;\n  zTemplate?: (x: number, y: number, z: number) => number | string;\n  bTemplate?: (x: number, y: number, z: number) => string;\n  minZoom?: number;\n  maxZoom?: number;\n  extent?: number[];\n  extentCRSIsWGS84?: boolean;\n  boundary?: string[];\n  useThumbData?: boolean;\n  tms?: boolean;\n  opacity?: number;\n  zIndex?: number;\n}\nexport type XYZLayerProps = XYZLayerOptions;\n\n// MVTLayer — MVT 矢量瓦片图层\nexport interface MVTLayerOptions {\n  tileUrlTemplate?: string;\n  transform?: { source?: string; target?: string };\n  gridModel?: number;\n  spanLevel?: number;\n  noCollision?: boolean;\n  useThumb?: boolean;\n  minZoom?: number;\n  maxZoom?: number;\n  encrypt?: boolean;\n  idProperty?: string;\n  layers?: unknown[];\n  style?: unknown;\n  onclick?: (e: unknown) => void;\n  ondblclick?: (e: unknown) => void;\n  onmousemove?: (e: unknown) => void;\n  onmouseout?: (e: unknown) => void;\n}\nexport type MVTLayerProps = MVTLayerOptions;\n\n// FeatureLayer — 手写组件，见 FeatureLayer.tsx\n\n// FillLayer — 手写组件，见 FillLayer.tsx\n\n// DOMLayer — 手写组件，见 DOMLayer.tsx\n\n// PointIconLayer — 手写组件，见 PointIconLayer.tsx\n\n// PointShapeLayer — 手写组件，见 PointShapeLayer.tsx\n\n// PanoramaCoverageLayer — 全景覆盖图层\nexport type PanoramaCoverageLayerProps = Record<string, never>;\n\nexport const RasterTileLayer = createLayerComponent<RasterTileLayerProps>({ displayName: 'RasterTileLayer', factory: (d, p) => d.createRasterTileLayer(p) });\nexport const WMSLayer = createLayerComponent<WMSLayerProps>({ displayName: 'WMSLayer', factory: (d, p) => d.createWMSLayer(p) });\nexport const WMTSLayer = createLayerComponent<WMTSLayerProps>({ displayName: 'WMTSLayer', factory: (d, p) => d.createWMTSLayer(p) });\nexport const XYZLayer = createLayerComponent<XYZLayerProps>({ displayName: 'XYZLayer', factory: (d, p) => d.createXYZLayer(p) });\nexport const MVTLayer = createLayerComponent<MVTLayerProps>({\n  displayName: 'MVTLayer',\n  factory: (d, p) => d.createMVTLayer(p),\n  events: [\n    { sdk: 'click', prop: 'onclick' },\n    { sdk: 'dblclick', prop: 'ondblclick' },\n    { sdk: 'mousemove', prop: 'onmousemove' },\n    { sdk: 'mouseout', prop: 'onmouseout' },\n  ],\n});\n// FeatureLayer 是手写组件（支持 setData），见 FeatureLayer.tsx\nexport { FeatureLayer } from './FeatureLayer';\nexport type { FeatureLayerProps, FeatureLayerOptions } from './FeatureLayer';\n// FillLayer — 手写组件（支持 setData / setStyleOptions），见 FillLayer.tsx\nexport { FillLayer } from './FillLayer';\nexport type { FillLayerProps, FillLayerOptions, FillLayerStyle } from './FillLayer';\n// DOMLayer — 手写组件（支持 createDOM + setData），见 DOMLayer.tsx\nexport { DOMLayer } from './DOMLayer';\nexport type { DOMLayerProps, DOMLayerOptions } from './DOMLayer';\n// PointIconLayer — 手写组件（支持 setData），见 PointIconLayer.tsx\nexport { PointIconLayer } from './PointIconLayer';\nexport type { PointIconLayerProps, PointIconLayerOptions, PointIconStyle } from './PointIconLayer';\n// PointShapeLayer — 手写组件（支持 setData），见 PointShapeLayer.tsx\nexport { PointShapeLayer } from './PointShapeLayer';\nexport type { PointShapeLayerProps, PointShapeLayerOptions, PointShapeStyle } from './PointShapeLayer';\nexport const PanoramaCoverageLayer = createLayerComponent<PanoramaCoverageLayerProps>({ displayName: 'PanoramaCoverageLayer', factory: (d) => d.createPanoramaCoverageLayer({}) });\n\n// ─── 4.0+ 额外图层（SDK 运行时存在，dts 无完整定义） ───\n\n// LineLayer — 手写组件（支持 data/setData + 运行时 setStyleOptions），见 LineLayer.tsx\nexport { LineLayer } from './LineLayer';\nexport type { LineLayerProps, LineLayerOptions, LineLayerStyle } from './LineLayer';\n\n// PixelLayer — 像素图层\nexport interface PixelLayerOptions {\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n}\nexport type PixelLayerProps = PixelLayerOptions;\n// v4 SDK 已废弃 addTileLayer/removeTileLayer（控制台会打 deprecated 警告），瓦片类图层\n// 统一走 addLayer/removeLayer；v3 下 driver.addLayer 会自己分派回 addTileLayer。\nexport const PixelLayer = createLayerComponent<PixelLayerProps>({ displayName: 'PixelLayer', factory: (d, p) => d.createPixelLayer(p) });\n\n// BaiduLayer — 百度图层\nexport interface BaiduLayerOptions {\n  visible?: boolean;\n  opacity?: number;\n  minZoom?: number;\n  maxZoom?: number;\n  zIndex?: number;\n}\nexport type BaiduLayerProps = BaiduLayerOptions;\nexport const BaiduLayer = createLayerComponent<BaiduLayerProps>({ displayName: 'BaiduLayer', factory: (d, p) => d.createBaiduLayer(p) });\n\n// ThreeLayer — 手写组件（ctorKey 只含 alpha/antialias，其余走 setter；带 ref 句柄），见 ThreeLayer.tsx\nexport { ThreeLayer } from './ThreeLayer';\nexport type {\n  ThreeLayerProps, ThreeLayerOptions, ThreeLayerRef, ThreeLayerInstance, ThreeLayerHook, ThreeObject,\n} from './ThreeLayer';\n","/**\n * ContextMenu + MenuItem 组件。\n *\n * - <ContextMenu> 读 OverlayTargetContext 决定挂到 map 或 overlay（如 Marker）\n * - <MenuItem> 通过 ContextMenuContext 找到父菜单，调 addMenuItem\n *\n * 实现要点：\n * 1. menu 实例用 ref 缓存，只创建一次\n * 2. effect 不返回 cleanup —— 避免 React StrictMode 双调用时快速 remove+add 把 SDK 状态搞坏\n * 3. attach 状态用 ref 跟踪，组件真正 unmount 时通过 useEffect cleanup 统一 remove\n */\nimport { memo, useLayoutEffect, useRef, useState, useEffect } from 'react';\nimport { useMapContext } from '../../context/MapContext';\nimport { useOverlayTarget } from '../../context/OverlayTargetContext';\nimport { createContext, useContext } from 'react';\nimport type { OverlayHandle, MapHandle } from '../../types';\n\nconst ContextMenuContext = createContext<OverlayHandle | null>(null);\n\nexport interface ContextMenuProps {\n  children?: React.ReactNode;\n}\n\nexport const ContextMenu = memo(function ContextMenu({ children }: ContextMenuProps) {\n  const { map, driver } = useMapContext();\n  const target = useOverlayTarget();\n\n  // 提取 raw handle —— 这是最稳定的引用（SDK 实例本身），作为 effect 唯一依赖。\n  const targetHandle = (target?.target ?? map) as (OverlayHandle & MapHandle) | null;\n\n  const menuRef = useRef<OverlayHandle | null>(null);\n  // 跟踪当前已 attach 到哪个 target（SDK menu 实例 + target 对）。\n  // StrictMode 双调用时通过这个判断是否需要重复 add，避免快速 remove+add 搞坏 SDK。\n  const attachedRef = useRef<{ target: OverlayHandle | MapHandle; menu: OverlayHandle } | null>(null);\n  const [menuHandle, setMenuHandle] = useState<OverlayHandle | null>(null);\n\n  // attach 逻辑：target 变化时 detach 旧的 + attach 新的；同一 target 跳过（StrictMode 安全）。\n  // 故意不返回 cleanup —— cleanup 会在 StrictMode 双调用中立即触发 remove，\n  // 紧接着的 setup 又 add，这种快速 remove+add 会让 SDK 内部状态失效（marker 命中区域塌缩）。\n  useLayoutEffect(() => {\n    if (!driver || !targetHandle) return;\n\n    // menu 只创建一次\n    if (!menuRef.current) {\n      const menu = driver.createContextMenu({});\n      if (!menu) return;\n      menuRef.current = menu;\n      setMenuHandle(menu);\n    }\n    const menu = menuRef.current;\n\n    // 已经 attach 到同一 target：StrictMode 双调用或父组件重渲染，跳过。\n    if (attachedRef.current?.target === targetHandle && attachedRef.current?.menu === menu) {\n      return;\n    }\n\n    // target 变了：先 detach 旧的（如果有），再 attach 新的。\n    if (attachedRef.current) {\n      driver.removeContextMenu(attachedRef.current.target, attachedRef.current.menu);\n    }\n    driver.addContextMenu(targetHandle, menu);\n    attachedRef.current = { target: targetHandle, menu };\n  }, [driver, targetHandle]);\n\n  // 组件真正 unmount 时统一 detach。\n  useEffect(() => {\n    return () => {\n      if (driver && attachedRef.current && menuRef.current) {\n        driver.removeContextMenu(attachedRef.current.target, attachedRef.current.menu);\n        attachedRef.current = null;\n        menuRef.current = null;\n      }\n    };\n  }, [driver]);\n\n  if (!children) return null;\n  return <ContextMenuContext.Provider value={menuHandle}>{children}</ContextMenuContext.Provider>;\n});\n\nexport interface MenuItemProps {\n  text: string;\n  callback?: (point?: { lng: number; lat: number }) => void;\n  iconWidth?: number;\n  children?: React.ReactNode;\n}\n\nexport const MenuItem = memo(function MenuItem({ text, callback, iconWidth }: MenuItemProps) {\n  const { driver } = useMapContext();\n  const menu = useContext(ContextMenuContext);\n  const cbRef = useRef(callback);\n  cbRef.current = callback;\n\n  useLayoutEffect(() => {\n    if (!driver || !menu) return;\n    const item = driver.createMenuItem(text, (point?: { lng: number; lat: number }) => cbRef.current?.(point), { iconWidth });\n    if (!item) return;\n    driver.addMenuItem(menu, item);\n    return () => { driver.removeMenuItem(menu, item); };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, menu, text, iconWidth]);\n\n  return null;\n});\n","/**\n * PanoramaRef — <Panorama> 的命令式句柄，直接包裹原生 Panorama 实例。\n *\n * 与 MapRef 类似，用来在组件外拿到读取类 / 一次性命令类 API：\n * getPosition/getPov/getZoom/getId/getLinks/getVisible/getSceneType/capture 等，\n * 以及 show/hide/enableScrollWheelZoom/setPanoramaPOIType 等命令。\n * 全部对原生方法做 try/catch 兜底，缺方法时安全返回。\n */\nimport { tryGetSDK } from '../../utils/sdk';\nimport { debugWarn } from '../../utils/debugWarn';\nimport type { Point } from '../../types';\nimport type { PanoramaPOIType, PanoramaSceneType } from '../../constants';\n\n/** 全景视角：heading 水平角（正北 0/正东 90…），pitch 垂直角（可选） */\nexport interface PanoramaPov {\n  heading: number;\n  pitch?: number;\n}\n\n/** 全景可配置项（对应 SDK PanoramaOptions） */\nexport interface PanoramaOptions {\n  /** 是否显示导航控件，默认 true */\n  navigationControl?: boolean;\n  /** 是否显示道路指示控件，默认 true */\n  linksControl?: boolean;\n  /** 是否显示室内场景切换控件（仅室内景生效），默认 true */\n  indoorSceneSwitchControl?: boolean;\n  /** 是否显示相册控件，默认 false */\n  albumsControl?: boolean;\n  /** 相册控件配置 */\n  albumsControlOptions?: unknown;\n}\n\n/** <Panorama> 命令式句柄 */\nexport interface PanoramaRef {\n  getPosition(): Point | null;\n  getPov(): PanoramaPov | null;\n  getZoom(): number | null;\n  getId(): string | null;\n  getLinks(): unknown[];\n  getVisible(): boolean;\n  getSceneType(): PanoramaSceneType | null;\n  setPosition(point: Point): void;\n  setId(id: string, options?: unknown): void;\n  setPov(pov: PanoramaPov, options?: unknown): void;\n  setZoom(zoom: number, options?: unknown): void;\n  setOptions(options: PanoramaOptions): void;\n  setPanoramaPOIType(poiType: PanoramaPOIType): void;\n  show(): void;\n  hide(): void;\n  enableScrollWheelZoom(): void;\n  disableScrollWheelZoom(): void;\n  capture(options?: { quality?: number; type?: string }): string | undefined;\n  clearOverlays(): void;\n  /** 原生全景实例逃生舱 */\n  raw: unknown;\n}\n\nexport class PanoramaRefImpl implements PanoramaRef {\n  constructor(private pano: any) {}\n\n  get raw(): unknown { return this.pano; }\n\n  getPosition(): Point | null {\n    try {\n      const p = this.pano?.getPosition?.();\n      return p && typeof p.lng === 'number' ? { lng: p.lng, lat: p.lat } : null;\n    } catch (e) { debugWarn('PanoramaRef.getPosition', e); return null; }\n  }\n  getPov(): PanoramaPov | null {\n    try {\n      const v = this.pano?.getPov?.();\n      return v && typeof v.heading === 'number' ? { heading: v.heading, pitch: v.pitch } : null;\n    } catch (e) { debugWarn('PanoramaRef.getPov', e); return null; }\n  }\n  getZoom(): number | null {\n    try { const z = this.pano?.getZoom?.(); return typeof z === 'number' ? z : null; }\n    catch (e) { debugWarn('PanoramaRef.getZoom', e); return null; }\n  }\n  getId(): string | null {\n    try { return this.pano?.getId?.() ?? null; }\n    catch (e) { debugWarn('PanoramaRef.getId', e); return null; }\n  }\n  getLinks(): unknown[] {\n    try { return this.pano?.getLinks?.() ?? []; }\n    catch (e) { debugWarn('PanoramaRef.getLinks', e); return []; }\n  }\n  getVisible(): boolean {\n    try { return this.pano?.getVisible?.() ?? false; }\n    catch (e) { debugWarn('PanoramaRef.getVisible', e); return false; }\n  }\n  getSceneType(): PanoramaSceneType | null {\n    try { return this.pano?.getSceneType?.() ?? null; }\n    catch (e) { debugWarn('PanoramaRef.getSceneType', e); return null; }\n  }\n  setPosition(point: Point): void {\n    try {\n      const SDK = tryGetSDK();\n      if (SDK?.Point) this.pano?.setPosition?.(new SDK.Point(point.lng, point.lat));\n    } catch (e) { debugWarn('PanoramaRef.setPosition', e); }\n  }\n  setId(id: string, options?: unknown): void {\n    try { this.pano?.setId?.(id, options); } catch (e) { debugWarn('PanoramaRef.setId', e); }\n  }\n  setPov(pov: PanoramaPov, options?: unknown): void {\n    try { this.pano?.setPov?.({ heading: pov.heading, pitch: pov.pitch }, options); }\n    catch (e) { debugWarn('PanoramaRef.setPov', e); }\n  }\n  setZoom(zoom: number, options?: unknown): void {\n    try { this.pano?.setZoom?.(zoom, options); } catch (e) { debugWarn('PanoramaRef.setZoom', e); }\n  }\n  setOptions(options: PanoramaOptions): void {\n    try { this.pano?.setOptions?.(options); } catch (e) { debugWarn('PanoramaRef.setOptions', e); }\n  }\n  setPanoramaPOIType(poiType: PanoramaPOIType): void {\n    try { this.pano?.setPanoramaPOIType?.(poiType); } catch (e) { debugWarn('PanoramaRef.setPanoramaPOIType', e); }\n  }\n  show(): void { try { this.pano?.show?.(); } catch (e) { debugWarn('PanoramaRef.show', e); } }\n  hide(): void { try { this.pano?.hide?.(); } catch (e) { debugWarn('PanoramaRef.hide', e); } }\n  enableScrollWheelZoom(): void { try { this.pano?.enableScrollWheelZoom?.(); } catch (e) { debugWarn('PanoramaRef.enableScrollWheelZoom', e); } }\n  disableScrollWheelZoom(): void { try { this.pano?.disableScrollWheelZoom?.(); } catch (e) { debugWarn('PanoramaRef.disableScrollWheelZoom', e); } }\n  capture(options?: { quality?: number; type?: string }): string | undefined {\n    try { return this.pano?.capture?.(options); } catch (e) { debugWarn('PanoramaRef.capture', e); return undefined; }\n  }\n  clearOverlays(): void { try { this.pano?.clearOverlays?.(); } catch (e) { debugWarn('PanoramaRef.clearOverlays', e); } }\n}\n","/**\n * Panorama + PanoramaLabel 组件。\n *\n * - <Panorama> 独立容器，创建 Panorama 实例，不在 <Map> 内也可使用\n * - <PanoramaLabel> 是全景标注，必须作为 <Panorama> 子组件\n * - point/id 变化通过 setPosition/setId 响应式更新；pov/zoom/options/visible/滚轮/poiType 亦可运行时受控\n * - 事件：onPositionChange/onPovChange/onLinksChange/onZoomChange/onClick/onDblClick/onLinkClick/onIdChange/onSceneTypeChange/onError/onDataLoad\n * - 命令式：通过 ref 拿 PanoramaRef，可调 getPosition/getPov/getZoom/getId/getLinks/getSceneType/capture 等\n */\nimport { memo, forwardRef, useLayoutEffect, useRef, useState, useMemo, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { debugWarn } from '../../utils/debugWarn';\nimport { tryGetSDK } from '../../utils/sdk';\nimport { createContext, useContext } from 'react';\nimport type { MapHandle, Point } from '../../types';\nimport type { PanoramaPOIType } from '../../constants';\nimport { PanoramaRefImpl } from './PanoramaRef';\nimport type { PanoramaRef, PanoramaPov, PanoramaOptions } from './PanoramaRef';\n\nexport type { PanoramaRef, PanoramaPov, PanoramaOptions } from './PanoramaRef';\n\n// Panorama Context（给 PanoramaLabel 用）\nconst PanoramaContext = createContext<MapHandle | null>(null);\n\nexport interface PanoramaProps {\n  point?: Point;\n  /** 通过全景 id 展示（与 point 二选一；两者都给时按各自 effect 分别调用） */\n  id?: string;\n  /** 全景视角（heading 必填，pitch 可选） */\n  pov?: PanoramaPov;\n  /** 缩放级别 */\n  zoom?: number;\n  /** 全景配置：导航/道路/室内切换/相册控件（2.0.2 新增） */\n  options?: PanoramaOptions;\n  /** 显隐控制：true→show()，false→hide()（2.0.2 新增） */\n  visible?: boolean;\n  /** 鼠标滚轮缩放开关（2.0.2 新增） */\n  enableScrollWheelZoom?: boolean;\n  /** 外景场景点内可见的 POI 类型（2.0.2 新增） */\n  poiType?: PanoramaPOIType;\n  style?: CSSProperties;\n  className?: string;\n  children?: React.ReactNode;\n  /** 全景位置变化回调（position_changed） */\n  onPositionChange?: (point: Point) => void;\n  /** 视角变化回调（pov_changed） */\n  onPovChange?: () => void;\n  /** 相邻道路数据变化回调（links_changed，2.0.2 新增） */\n  onLinksChange?: () => void;\n  /** 缩放级别变化回调（zoom_changed，2.0.2 新增） */\n  onZoomChange?: (zoom: number) => void;\n  /** 单击全景画面（click，2.0.2 新增） */\n  onClick?: (e: unknown) => void;\n  /** 双击全景画面（dblclick，2.0.2 新增） */\n  onDblClick?: (e: unknown) => void;\n  /** 单击道路链接（link_click，2.0.2 新增） */\n  onLinkClick?: (e: unknown) => void;\n  /** 全景 id 变化（id_changed，2.0.2 新增） */\n  onIdChange?: (id: string) => void;\n  /** 场景类型变化（scene_type_changed，2.0.2 新增） */\n  onSceneTypeChange?: () => void;\n  /** 全景数据加载失败（pano_error，2.0.2 新增） */\n  onError?: (e: unknown) => void;\n  /** 全景数据加载完成（dataload，2.0.2 新增） */\n  onDataLoad?: (e: unknown) => void;\n}\n\nexport const Panorama = memo(forwardRef<PanoramaRef, PanoramaProps>(function Panorama(props, ref) {\n  const { point, id, pov, zoom, options, visible, enableScrollWheelZoom, poiType, style, className, children } = props;\n  const { driver, status } = useBMapContext();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [pano, setPano] = useState<MapHandle | null>(null);\n  // 事件回调 + 初始 options 用 ref 持有，避免进创建 effect 依赖导致重建\n  const cbRefs = useRef(props);\n  cbRefs.current = props;\n\n  // 创建全景实例\n  useLayoutEffect(() => {\n    if (status !== 'ready' || !driver || !containerRef.current) return;\n    const handle = driver.createPanorama(containerRef.current, cbRefs.current.options ?? {});\n    if (!handle) return;\n    setPano(handle);\n\n    const raw = (handle as any).raw;\n    if (raw && typeof raw.addEventListener === 'function') {\n      raw.addEventListener('position_changed', (e: any) => {\n        const pt = e?.point || e?.latlng || e?.latLng || e?.data?.point || e?.data?.latlng || e?.data?.latLng;\n        if (pt && typeof pt.lng === 'number') {\n          cbRefs.current.onPositionChange?.({ lng: pt.lng, lat: pt.lat });\n        } else if (typeof raw.getPosition === 'function') {\n          try {\n            const pos = raw.getPosition();\n            if (pos && typeof pos.lng === 'number') {\n              cbRefs.current.onPositionChange?.({ lng: pos.lng, lat: pos.lat });\n            }\n          } catch { /* ignore */ }\n        }\n      });\n      raw.addEventListener('pov_changed', () => cbRefs.current.onPovChange?.());\n      raw.addEventListener('links_changed', () => cbRefs.current.onLinksChange?.());\n      raw.addEventListener('zoom_changed', () => {\n        let z: number | undefined;\n        try { z = raw.getZoom?.(); } catch { /* ignore */ }\n        cbRefs.current.onZoomChange?.(z as number);\n      });\n      raw.addEventListener('click', (e: any) => cbRefs.current.onClick?.(e));\n      raw.addEventListener('dblclick', (e: any) => cbRefs.current.onDblClick?.(e));\n      raw.addEventListener('link_click', (e: any) => cbRefs.current.onLinkClick?.(e));\n      raw.addEventListener('id_changed', (e: any) => {\n        let curId: string | undefined = typeof e === 'string' ? e : undefined;\n        if (curId === undefined) { try { curId = raw.getId?.(); } catch { /* ignore */ } }\n        cbRefs.current.onIdChange?.(curId as string);\n      });\n      raw.addEventListener('scene_type_changed', () => cbRefs.current.onSceneTypeChange?.());\n      raw.addEventListener('pano_error', (e: any) => cbRefs.current.onError?.(e));\n      raw.addEventListener('dataload', (e: any) => cbRefs.current.onDataLoad?.(e));\n    }\n\n    return () => {\n      driver.destroyPanorama(handle);\n      setPano(null);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, status]);\n\n  // 命令式句柄：pano 就绪时把原生实例包成 PanoramaRef 暴露给 ref\n  useEffect(() => {\n    if (!ref) return;\n    const raw = pano ? (pano as any).raw : null;\n    const instance = raw ? new PanoramaRefImpl(raw) : null;\n    if (typeof ref === 'function') ref(instance);\n    else (ref as React.MutableRefObject<PanoramaRef | null>).current = instance;\n  }, [pano, ref]);\n\n  // point → setPosition\n  useEffect(() => {\n    if (!pano || !point) return;\n    const raw = (pano as any).raw;\n    const SDK = tryGetSDK();\n    if (raw && SDK?.Point) {\n      try { raw.setPosition?.(new SDK.Point(point.lng, point.lat)); }\n      catch (e) { debugWarn('Panorama.setPosition', e); }\n    }\n  }, [pano, point?.lng, point?.lat]);\n\n  // id → setId\n  useEffect(() => {\n    if (!pano || !id) return;\n    const raw = (pano as any).raw;\n    try { raw?.setId?.(id); }\n    catch (e) { debugWarn('Panorama.setId', e); }\n  }, [pano, id]);\n\n  // pov → setPov\n  useEffect(() => {\n    if (!pano || !pov) return;\n    const raw = (pano as any).raw;\n    try { raw?.setPov?.({ heading: pov.heading, pitch: pov.pitch }); }\n    catch (e) { debugWarn('Panorama.setPov', e); }\n  }, [pano, pov?.heading, pov?.pitch]);\n\n  // zoom → setZoom\n  useEffect(() => {\n    if (!pano || zoom == null) return;\n    const raw = (pano as any).raw;\n    try { raw?.setZoom?.(zoom); }\n    catch (e) { debugWarn('Panorama.setZoom', e); }\n  }, [pano, zoom]);\n\n  // options → setOptions（首帧构造时已应用一次，这里响应后续变化；重复应用同值无副作用）\n  const optionsKey = useMemo(() => (options ? JSON.stringify(options) : ''), [options]);\n  useEffect(() => {\n    if (!pano || !options) return;\n    const raw = (pano as any).raw;\n    // SDK 坑：albumsControl:false 与 albumsControlOptions 一起下发时，相册控件的 setOptions\n    // 末尾会 renderByPid 把相册重新渲染出来，导致「隐藏」失效。故关闭相册时剔除 albumsControlOptions。\n    let toApply: PanoramaOptions = options;\n    if (options.albumsControl === false && options.albumsControlOptions !== undefined) {\n      const { albumsControlOptions: _drop, ...rest } = options;\n      void _drop;\n      toApply = rest;\n    }\n    try { raw?.setOptions?.(toApply); }\n    catch (e) { debugWarn('Panorama.setOptions', e); }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [pano, optionsKey]);\n\n  // visible → show / hide\n  useEffect(() => {\n    if (!pano || visible === undefined) return;\n    const raw = (pano as any).raw;\n    try { if (visible) raw?.show?.(); else raw?.hide?.(); }\n    catch (e) { debugWarn('Panorama.visible', e); }\n  }, [pano, visible]);\n\n  // enableScrollWheelZoom → enable/disableScrollWheelZoom\n  useEffect(() => {\n    if (!pano || enableScrollWheelZoom === undefined) return;\n    const raw = (pano as any).raw;\n    try { if (enableScrollWheelZoom) raw?.enableScrollWheelZoom?.(); else raw?.disableScrollWheelZoom?.(); }\n    catch (e) { debugWarn('Panorama.enableScrollWheelZoom', e); }\n  }, [pano, enableScrollWheelZoom]);\n\n  // poiType → setPanoramaPOIType\n  useEffect(() => {\n    if (!pano || !poiType) return;\n    const raw = (pano as any).raw;\n    try { raw?.setPanoramaPOIType?.(poiType); }\n    catch (e) { debugWarn('Panorama.setPanoramaPOIType', e); }\n  }, [pano, poiType]);\n\n  const ctxVal = useMemo(() => pano, [pano]);\n\n  return (\n    <div ref={containerRef} className={className} style={style}>\n      {ctxVal && <PanoramaContext.Provider value={ctxVal}>{children}</PanoramaContext.Provider>}\n    </div>\n  );\n}));\n\nexport interface PanoramaLabelProps {\n  position: Point;\n  altitude?: number;\n  content?: string;\n  /** 是否显示标签到当前全景场景点的距离，默认 true（2.0.2 新增） */\n  displayDistance?: boolean;\n  /** 自定义标签 css 样式（2.0.2 新增） */\n  customStyle?: CSSProperties;\n  /** 点击标注回调（2.0.2 新增） */\n  onClick?: (e: unknown) => void;\n  children?: React.ReactNode;\n}\n\nexport const PanoramaLabel = memo(function PanoramaLabel(props: PanoramaLabelProps) {\n  const { driver } = useBMapContext();\n  const pano = useContext(PanoramaContext);\n  const labelRef = useRef<unknown>(null);\n  const onClickRef = useRef(props.onClick);\n  onClickRef.current = props.onClick;\n\n  const labelKey = useMemo(\n    () => JSON.stringify([props.position, props.altitude, props.content, props.displayDistance, props.customStyle]),\n    [props.position, props.altitude, props.content, props.displayDistance, props.customStyle],\n  );\n\n  useLayoutEffect(() => {\n    if (!driver || !pano) return;\n    // createPanoramaLabel 内部拆分参数：PanoramaLabel(content, {position, altitude, displayDistance, customStyle})\n    const label = driver.createPanoramaLabel(props);\n    if (!label) return;\n    labelRef.current = label;\n    const rawLabel = (label as any).raw;\n    const rawPano = (pano as any).raw;\n    if (rawPano && typeof rawPano.addOverlay === 'function') {\n      rawPano.addOverlay(rawLabel);\n    }\n    // 点击事件：通过 ref 调最新 handler，换 handler 不必重建\n    const clickHandler = (e: unknown) => onClickRef.current?.(e);\n    if (rawLabel && typeof rawLabel.addEventListener === 'function') {\n      rawLabel.addEventListener('click', clickHandler);\n    }\n    return () => {\n      if (rawLabel && typeof rawLabel.removeEventListener === 'function') {\n        rawLabel.removeEventListener('click', clickHandler);\n      }\n      if (rawPano && typeof rawPano.removeOverlay === 'function') {\n        rawPano.removeOverlay(rawLabel);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, pano, labelKey]);\n\n  return null;\n});\n","import { useMapContext } from '../context/MapContext';\nimport type { MapHandle } from '../types';\n\n/**\n * 拿 MapHandle（可能为 null）。\n *\n * ⚠️ 时序：地图从创建到首帧渲染完成（`tilesloaded` 事件，或 500ms 兜底）之前，返回 null。\n * - 在 `<Map>` **内部**的子组件里用：`<Map>` 的 MapContext 只在 map 就绪后才挂载，所以子组件\n *   首次拿到的就已经是非-null handle，可直接使用。\n * - 在 `<Map>` **外部**（如与 <Map> 同级、把 map 传给 service hook 的 `renderOptions.map`）：\n *   会先拿到 null，需等就绪后再用。**不要在 null 时把它传给需要地图实例的 API**（会静默失败或抛错）。\n *   拿就绪 handle 的推荐做法：给 `<Map onReady={setMap}>` 传回调，或在 `<Map>` 内放 `useMapReady`\n *   哨兵把 handle 上提到外层 state。\n */\nexport function useMap(): MapHandle | null {\n  return useMapContext().map;\n}\n","import { useEffect } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { useLatest } from '../utils/useLatest';\nimport type { MapHandle } from '../types';\n\n/**\n * 哨兵 Hook：在 `<Map>` **内部**使用，地图就绪后回调，把 MapHandle 上提到外层 state。\n *\n * 典型用途：service hook（`useDrivingRoute`/`useLocalSearch` 等）通常挂在 `<Map>` **外层**，\n * 它们的 `renderOptions.map` 需要一个**已就绪**的 handle。而 `useMap()` 在外层拿到的会是 null，\n * 就绪后也不一定重渲染外层。用本 Hook 在 `<Map>` 里当哨兵，就绪时把 handle 抛到外层：\n *\n * ```tsx\n * function MapReady({ onReady }: { onReady: (m: MapHandle) => void }) {\n *   useMapReady(onReady);\n *   return null;\n * }\n * // ...\n * const [map, setMap] = useState<MapHandle | null>(null);\n * useDrivingRoute({ ...options, renderOptions: { map } });\n * return <Map ...><MapReady onReady={setMap} /></Map>;\n * ```\n *\n * 说明：`<Map>` 已有 `onReady` prop，效果等价——两者任选其一即可。当你想在 JSX 子树里、\n * 而不是在 `<Map>` 的 props 上拿就绪 handle 时，用本 Hook 更顺手。\n *\n * @param onReady 地图就绪时回调（handle 非 null）。无需 memo，内部用 ref 取最新值。\n */\nexport function useMapReady(onReady: (map: MapHandle) => void): void {\n  const { map } = useMapContext();\n  const onReadyRef = useLatest(onReady);\n  useEffect(() => {\n    if (map) onReadyRef.current(map);\n  }, [map, onReadyRef]);\n}\n","import { useBMapContext } from '../context/BMapContext';\nimport type { BMapDriver } from '../drivers/types';\n\n/** 拿 driver（可能为 null，未就绪时） */\nexport function useDriver(): BMapDriver | null {\n  return useBMapContext().driver;\n}\n","import { useMapContext } from '../context/MapContext';\nimport type { MapRef } from '../components/Map/MapRef';\nimport { MapRefImpl } from '../components/Map/MapRef';\nimport { useMemo } from 'react';\n\n/** 命令式句柄（每次 map/driver 变化时重新生成） */\nexport function useMapRef(): MapRef | null {\n  const { map, driver } = useMapContext();\n  return useMemo(() => (map && driver ? new MapRefImpl(map, driver) : null), [map, driver]);\n}\n","import { useBMapContext } from '../context/BMapContext';\nimport type { Capability } from '../types';\n\n/** 显式能力检测（可选用，driver 内部已自动处理） */\nexport function useCapabilities(): ReadonlySet<Capability> {\n  const { driver } = useBMapContext();\n  return driver?.capabilities ?? new Set<Capability>();\n}\n","import { useEffect, useRef } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { useLatest } from '../utils/useLatest';\n\n/**\n * 订阅 Map 或 Overlay 事件。\n *\n * - handler 通过 ref 持有最新值，订阅仅一次（用户传内联函数不会重订阅）。\n * - SSR/null map 安全。\n */\nexport function useMapEvent(\n  type: string,\n  handler: (raw: unknown) => void,\n): void {\n  const { map, driver } = useMapContext();\n  const handlerRef = useLatest(handler);\n\n  useEffect(() => {\n    if (!map || !driver) return;\n    return driver.addEventListener(map, type, (raw) => handlerRef.current(raw));\n  }, [map, driver, type, handlerRef]);\n}\n","import { useRef, useSyncExternalStore } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport type { Bounds, Point, Size } from '../types';\n\nexport interface MapSnapshot {\n  center: Point | null;\n  zoom: number | null;\n  bounds: Bounds | null;\n  size: Size | null;\n  heading: number | null;\n  tilt: number | null;\n}\n\nconst NULL_SNAPSHOT: MapSnapshot = {\n  center: null, zoom: null, bounds: null, size: null, heading: null, tilt: null,\n};\n\n/**\n * 订阅 Map 状态变化（DESIGN.md §6.1.1）。\n *\n * 关键：snapshot 必须用「值」比较而不是「引用」比较。\n * 每次 readSnapshot 都返回新对象，但只要 lng/lat/zoom 等值不变，就返回缓存的同一引用。\n *\n * 适配新 DESIGN.md §12：driver getter 不再返回 undefined。\n * 此处用 try/catch 包裹，driver 在 throw 模式下抛错时该字段降级为 null。\n * NaN 也视为 null（getter 不支持时 warn/ignore 模式返回 NaN）。\n */\nexport function useMapStatus(): MapSnapshot | null {\n  const { map, driver } = useMapContext();\n  const cachedRef = useRef<MapSnapshot | null>(null);\n  const cachedKeyRef = useRef<string>('');\n\n  return useSyncExternalStore(\n    (callback) => {\n      if (!map || !driver) return () => {};\n      const events = ['moveend', 'zoomend', 'resize', 'headingchange', 'tiltchange', 'moving', 'tilesloaded'];\n      const unsubs = events.map((evt) => driver.addEventListener(map, evt, callback));\n      return () => unsubs.forEach((u) => u());\n    },\n    () => {\n      if (!map || !driver) return null;\n      const next = readSnapshot(map, driver);\n      const key = snapshotKey(next);\n      if (key === cachedKeyRef.current) return cachedRef.current;\n      cachedKeyRef.current = key;\n      cachedRef.current = next;\n      return next;\n    },\n    () => null,\n  );\n}\n\n/** 基于值的稳定 key（避免浮点抖动，保留 7 位小数；NaN 一致序列化为 'NaN'） */\nfunction snapshotKey(s: MapSnapshot | null): string {\n  if (!s) return '';\n  const c = s.center;\n  const b = s.bounds;\n  const sz = s.size;\n  const num = (n: number | null) => (n == null || Number.isNaN(n) ? 'null' : n.toFixed(3));\n  return [\n    c && !Number.isNaN(c.lng) ? `${c.lng.toFixed(7)},${c.lat.toFixed(7)}` : '',\n    num(s.zoom),\n    num(s.heading),\n    num(s.tilt),\n    b && !Number.isNaN(b.sw.lng) ? `${b.sw.lng.toFixed(5)},${b.sw.lat.toFixed(5)},${b.ne.lng.toFixed(5)},${b.ne.lat.toFixed(5)}` : '',\n    sz ? `${sz.width.toFixed(0)}x${sz.height.toFixed(0)}` : '',\n  ].join('|');\n}\n\nfunction readSnapshot(map: NonNullable<ReturnType<typeof useMapContext>['map']>, driver: NonNullable<ReturnType<typeof useMapContext>['driver']>): MapSnapshot {\n  return {\n    center: safePoint(() => driver.getCenter(map)),\n    zoom: safeNum(() => driver.getZoom(map)),\n    bounds: safeBounds(() => driver.getBounds(map)),\n    size: safeSize(() => driver.getSize(map)),\n    heading: safeNum(() => driver.getHeading(map)),\n    tilt: safeNum(() => driver.getTilt(map)),\n  };\n}\n\nfunction safePoint(fn: () => Point): Point | null {\n  try {\n    const p = fn();\n    if (!p || Number.isNaN(p.lng) || Number.isNaN(p.lat)) return null;\n    return p;\n  } catch { return null; }\n}\n\nfunction safeNum(fn: () => number): number | null {\n  try {\n    const n = fn();\n    return typeof n === 'number' && !Number.isNaN(n) ? n : null;\n  } catch { return null; }\n}\n\nfunction safeBounds(fn: () => Bounds): Bounds | null {\n  try {\n    const b = fn();\n    if (!b || Number.isNaN(b.sw.lng) || Number.isNaN(b.ne.lng)) return null;\n    return b;\n  } catch { return null; }\n}\n\nfunction safeSize(fn: () => Size): Size | null {\n  try {\n    const s = fn();\n    if (!s) return null;\n    return s;\n  } catch { return null; }\n}\n\n// 抑制 unused\nvoid NULL_SNAPSHOT;\n","/**\n * useRawOverlay — 把任意「继承 BMap.Overlay 的原生实例」挂到 React 组件树上，\n * 由库统一管理 addOverlay/removeOverlay 生命周期。\n *\n * 适用场景：用户已有原生自定义覆盖物（自己写 initialize/draw 的 Overlay 子类），\n * 想在 React 里用，又不想每处都手写 useMapContext + addOverlay + cleanup 样板。\n *\n * 与 CustomOverlay 的区别：\n * - CustomOverlay：React children 通过 portal 渲染，用户不写 initialize/draw。\n * - useRawOverlay：用户完全掌控 initialize/draw（原生 Overlay 子类），库只管挂载卸载。\n *\n * ```tsx\n * // 原生命名空间用全局 BMap（loader 已把 v4 的 BMapGL 归一为 window.BMap）；\n * // 想避开全局也可从 useDriver().rawSDK 取。\n * class MyOverlay extends BMap.Overlay { initialize(map){...} draw(){...} }\n * function Demo() {\n *   const ref = useRawOverlay(() => new MyOverlay(point), [point]);\n *   // ref.current 可命令式调用\n *   return null;\n * }\n * ```\n */\nimport { useLayoutEffect, useRef } from 'react';\nimport type { DependencyList, RefObject } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { useOverlayTarget } from '../context/OverlayTargetContext';\nimport type { OverlayHandle } from '../types';\n\nexport function useRawOverlay<T = unknown>(\n  create: () => T,\n  deps: DependencyList = [],\n  onCreate?: (instance: T) => void,\n): RefObject<T | null> {\n  const { map, driver } = useMapContext();\n  const target = useOverlayTarget();\n  // create/onCreate 常是内联函数（每次 render 新引用）。用 ref 存最新，避免把它们放进依赖\n  // 导致每次父组件重渲染都销毁重建覆盖物（闪烁）。重建时机只由显式 deps 控制。\n  const createRef = useRef(create);\n  createRef.current = create;\n  const onCreateRef = useRef(onCreate);\n  onCreateRef.current = onCreate;\n  const instanceRef = useRef<T | null>(null);\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const instance = createRef.current();\n    instanceRef.current = instance;\n    // 把用户的原生实例包成 OverlayHandle（driver.addOverlay 内部用 handle.raw 取原生对象）\n    const handle: OverlayHandle = { __brand: 'OverlayHandle', raw: instance, type: 'raw' };\n    // 若嵌套在 MarkerClusterer 等提供 OverlayTarget 的父级下，挂到父级；否则挂到 map\n    if (target?.addOverlay) target.addOverlay(handle);\n    else driver.addOverlay(map, handle);\n    onCreateRef.current?.(instance);\n\n    return () => {\n      if (target?.removeOverlay) target.removeOverlay(handle);\n      else driver.removeOverlay(map, handle);\n      instanceRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, target, ...deps]);\n\n  return instanceRef;\n}\n","/**\n * useRawControl — 把任意「继承 BMap.Control 的原生实例」挂到 React 组件树上，\n * 由库统一管理 addControl/removeControl 生命周期。\n *\n * 与内置控件组件（NavigationControl 等）的区别：内置组件封装好了；useRawControl 是\n * escape hatch，用户完全掌控 Control 子类的 initialize/DOM，库只管挂载卸载。\n *\n * ```tsx\n * // 原生命名空间用全局 BMap（loader 已把 v4 的 BMapGL 归一为 window.BMap）；\n * // 想避开全局也可从 useDriver().rawSDK 取。\n * class MyControl extends BMap.Control { initialize(map){ ...return dom; } }\n * function Demo() {\n *   const ref = useRawControl(() => new MyControl(), []);\n *   return null;\n * }\n * ```\n */\nimport { useLayoutEffect, useRef } from 'react';\nimport type { DependencyList, RefObject } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport type { ControlHandle } from '../types';\n\nexport function useRawControl<T = unknown>(\n  create: () => T,\n  deps: DependencyList = [],\n  onCreate?: (instance: T) => void,\n): RefObject<T | null> {\n  const { map, driver } = useMapContext();\n  // create/onCreate 常是内联函数（每次 render 新引用）。用 ref 存最新，避免把它们放进依赖\n  // 导致每次父组件重渲染都销毁重建控件（闪烁）。重建时机只由显式 deps 控制。\n  const createRef = useRef(create);\n  createRef.current = create;\n  const onCreateRef = useRef(onCreate);\n  onCreateRef.current = onCreate;\n  const instanceRef = useRef<T | null>(null);\n\n  useLayoutEffect(() => {\n    if (!map || !driver) return;\n    const instance = createRef.current();\n    instanceRef.current = instance;\n    // 把用户的原生实例包成 ControlHandle（driver.addControl 内部用 handle.raw 取原生对象）\n    const handle: ControlHandle = { __brand: 'ControlHandle', raw: instance, type: 'raw' };\n    driver.addControl(map, handle);\n    onCreateRef.current?.(instance);\n\n    return () => {\n      driver.removeControl(map, handle);\n      instanceRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, driver, ...deps]);\n\n  return instanceRef;\n}\n","/**\n * RawOverlay — useRawOverlay 的组件糖。\n *\n * 把任意继承 BMap.Overlay 的原生实例挂到 React 组件树上，库负责 addOverlay/removeOverlay。\n * 重建时机由 deps 控制（语义同 useEffect deps）；create 引用变化不会重建。\n *\n * ```tsx\n * <RawOverlay\n *   create={() => new MyOverlay(point)}\n *   deps={[point.lng, point.lat]}\n *   onReady={(inst) => { instRef.current = inst; }}\n * />\n * ```\n */\nimport { memo } from 'react';\nimport type { DependencyList } from 'react';\nimport { useRawOverlay } from '../../hooks/useRawOverlay';\n\nexport interface RawOverlayProps<T = unknown> {\n  /** 创建原生 Overlay 实例的工厂；仅在挂载 / deps 变化时调用 */\n  create: () => T;\n  /** 重建依赖，变化时销毁旧实例并用 create 重建（默认 []：只挂载一次） */\n  deps?: DependencyList;\n  /** 实例创建并挂载后回调，用于拿到实例做命令式操作 */\n  onReady?: (instance: T) => void;\n}\n\nfunction RawOverlayImpl<T = unknown>({ create, deps = [], onReady }: RawOverlayProps<T>): null {\n  useRawOverlay(create, deps, onReady);\n  return null;\n}\n\nexport const RawOverlay = memo(RawOverlayImpl) as typeof RawOverlayImpl;\n","/**\n * RawControl — useRawControl 的组件糖。\n *\n * 把任意继承 BMap.Control 的原生实例挂到 React 组件树上，库负责 addControl/removeControl。\n * 重建时机由 deps 控制（语义同 useEffect deps）；create 引用变化不会重建。\n *\n * ```tsx\n * <RawControl\n *   create={() => new MyControl()}\n *   deps={[]}\n *   onReady={(inst) => { ctrlRef.current = inst; }}\n * />\n * ```\n */\nimport { memo } from 'react';\nimport type { DependencyList } from 'react';\nimport { useRawControl } from '../../hooks/useRawControl';\n\nexport interface RawControlProps<T = unknown> {\n  /** 创建原生 Control 实例的工厂；仅在挂载 / deps 变化时调用 */\n  create: () => T;\n  /** 重建依赖，变化时销毁旧实例并用 create 重建（默认 []：只挂载一次） */\n  deps?: DependencyList;\n  /** 实例创建并挂载后回调，用于拿到实例做命令式操作 */\n  onReady?: (instance: T) => void;\n}\n\nfunction RawControlImpl<T = unknown>({ create, deps = [], onReady }: RawControlProps<T>): null {\n  useRawControl(create, deps, onReady);\n  return null;\n}\n\nexport const RawControl = memo(RawControlImpl) as typeof RawControlImpl;\n","/**\n * useSymbol — 创建 Symbol 值对象的 hook。\n * Symbol 是值对象（非 Overlay），用作 Marker 的 icon 参数。\n *\n * @example\n * ```tsx\n * function MyMarker() {\n *   const symbol = useSymbol({ path: BMap_Symbol_SHAPE_STAR, fillColor: '#f00', scale: 5 });\n *   return <Marker position={pt} icon={symbol} />;\n * }\n * ```\n *\n * path 变化时重建 Symbol；其余选项走 setOverlayOptions（setScale/setFillColor 等）。\n * 返回 OverlayHandle，可直接传给 Marker 的 icon 或 driver.createMarker。\n * 首次渲染仍返回 null（SDK 对象在 useLayoutEffect 里创建，无法在渲染期同步拿到），\n * 但创建完成后会自动触发一次重渲染，调用方不需要自己手写额外的状态去 bump。\n */\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { stableStringify } from '../utils/stableStringify';\nimport type { OverlayHandle } from '../types';\nimport type { SymbolProps } from '../components/Overlay/types';\n\nexport function useSymbol(props: SymbolProps): OverlayHandle | null {\n  const { driver } = useMapContext();\n  const ref = useRef<OverlayHandle | null>(null);\n  const [handle, setHandle] = useState<OverlayHandle | null>(null);\n\n  // path 变化时重建（constructor 第一参数）\n  const pathKey = stableStringify(props.path);\n\n  useLayoutEffect(() => {\n    if (!driver) return;\n    const h = driver.createSymbol(props.path, props);\n    ref.current = h;\n    setHandle(h);\n    return () => {\n      ref.current = null;\n      setHandle(null);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, pathKey]);\n\n  // 其余选项走 setOverlayOptions\n  const optKey = stableStringify({\n    fillColor: props.fillColor,\n    fillOpacity: props.fillOpacity,\n    scale: props.scale,\n    rotation: props.rotation,\n    strokeColor: props.strokeColor,\n    strokeOpacity: props.strokeOpacity,\n    strokeWeight: props.strokeWeight,\n    anchor: props.anchor,\n  });\n  useEffect(() => {\n    if (!driver || !ref.current) return;\n    driver.setOverlayOptions(ref.current, {\n      fillColor: props.fillColor,\n      fillOpacity: props.fillOpacity,\n      scale: props.scale,\n      rotation: props.rotation,\n      strokeColor: props.strokeColor,\n      strokeOpacity: props.strokeOpacity,\n      strokeWeight: props.strokeWeight,\n      anchor: props.anchor,\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optKey]);\n\n  return handle;\n}\n","/**\n * useIcon — 创建 Icon 值对象的 hook。\n * Icon 是值对象（非 Overlay），用作 Marker 的 icon 参数。\n *\n * @example\n * ```tsx\n * function MyMarker() {\n *   const icon = useIcon({ url: 'https://...', size: { width: 30, height: 30 }, anchor: { width: 15, height: 30 } });\n *   return <Marker position={pt} icon={icon} />;\n * }\n * ```\n *\n * url 变化时重建 Icon；其余选项走 setOverlayOptions（setSize/setAnchor 等）。\n * 返回 OverlayHandle，可直接传给 Marker 的 icon 或 driver.createMarker。\n * 首次渲染仍返回 null（SDK 对象在 useLayoutEffect 里创建，无法在渲染期同步拿到），\n * 但创建完成后会自动触发一次重渲染，调用方不需要自己手写额外的状态去 bump。\n */\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useMapContext } from '../context/MapContext';\nimport { stableStringify } from '../utils/stableStringify';\nimport type { OverlayHandle } from '../types';\nimport type { IconProps } from '../components/Overlay/types';\n\nexport function useIcon(props: IconProps): OverlayHandle | null {\n  const { driver } = useMapContext();\n  const ref = useRef<OverlayHandle | null>(null);\n  const [handle, setHandle] = useState<OverlayHandle | null>(null);\n\n  // url 变化时重建（constructor 第一参数）\n  const urlKey = props.url;\n\n  useLayoutEffect(() => {\n    if (!driver) return;\n    const h = driver.createIcon(props.url, props.size, props);\n    ref.current = h;\n    setHandle(h);\n    return () => {\n      ref.current = null;\n      setHandle(null);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, urlKey]);\n\n  // 其余选项走 setOverlayOptions\n  const optKey = stableStringify({\n    size: props.size,\n    anchor: props.anchor,\n    imageOffset: props.imageOffset,\n    imageSize: props.imageSize,\n    infoWindowAnchor: props.infoWindowAnchor,\n    printImageUrl: props.printImageUrl,\n    srcset: props.srcset,\n  });\n  useEffect(() => {\n    if (!driver || !ref.current) return;\n    driver.setOverlayOptions(ref.current, {\n      size: props.size,\n      anchor: props.anchor,\n      imageOffset: props.imageOffset,\n      imageSize: props.imageSize,\n      infoWindowAnchor: props.infoWindowAnchor,\n      printImageUrl: props.printImageUrl,\n      srcset: props.srcset,\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optKey]);\n\n  return handle;\n}\n","/**\n * 解析 service hook 在地图上渲染结果所用的 map handle。\n *\n * 优先级：\n * 1. 显式传入的 `renderOptions.map`（最高，外层用法必须这样传）；\n * 2. 否则回退到当前所在 `<Map>` 子树的 context map —— 即 hook 被用在 `<Map>` **内部**时自动获取；\n * 3. 都没有则 `undefined`（hook 用在 `<Map>` 外层且未显式传）。\n *\n * 这里用 `useContext(MapContext)` 而不是 `useMapContext()`：后者在 `<Map>` 外会抛错，\n * 而 service hook 恰恰常用在 `<Map>` 外层，直接读 context 拿到 null 即可安全回退。\n *\n * 返回的是**稳定引用**的 handle（来自显式 prop 或 `<Map>` 的 state），可直接放进 effect 依赖，\n * 地图从未就绪(null)变为就绪(handle)时会触发 effect 重跑、把 map 挂到服务上。\n */\nimport { useContext } from 'react';\nimport { MapContext } from '../../context/MapContext';\nimport { isHandle } from '../../utils/handle';\nimport type { MapHandle } from '../../types';\n\nexport function useRenderMap(explicit?: unknown): MapHandle | undefined {\n  const ctx = useContext(MapContext);\n  const picked = explicit ?? ctx?.map ?? undefined;\n  return isHandle(picked) ? (picked as MapHandle) : undefined;\n}\n","/**\n * useServiceTimeout — service hook 共用的「回调兜底」工具。\n *\n * 背景：百度 JSAPI 的检索类服务在部分失败场景（如 AK 未开通该服务返回 error:240、\n * 或网络异常）下，**根本不会触发回调**，导致 hook 的 loading 永远卡在 true、\n * data/error 都拿不到任何信号（表现为「点了没反应，一直转圈」）。\n *\n * 该工具给每次异步请求挂一个超时定时器：回调先到就 disarm；超时先到就把请求判定为失败，\n * 让调用方把 loading 收回并抛出 error。纯附加逻辑——回调正常返回时行为完全不变。\n */\nimport { useCallback, useEffect, useRef } from 'react';\n\n/** 默认超时（毫秒）。取较宽松的 10s，避免慢网误伤。 */\nexport const SERVICE_TIMEOUT_MS = 10000;\n\n/** 统一的超时错误，供各 hook 复用。 */\nexport function serviceTimeoutError(): Error {\n  return new Error(\n    '[react-bmap] 服务请求超时：SDK 回调未返回，可能是 AK 未开通该服务、请求被拒或网络异常',\n  );\n}\n\nexport interface ServiceTimeoutControl {\n  /** 发起请求时调用：arm 一个超时；超时触发 onTimeout。重复 arm 会覆盖上一个。 */\n  arm: (onTimeout: () => void, ms?: number) => void;\n  /** 回调到达 / 取消 / 卸载时调用：清掉未触发的超时。 */\n  clear: () => void;\n}\n\nexport function useServiceTimeout(): ServiceTimeoutControl {\n  const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  const clear = useCallback(() => {\n    if (timerRef.current) {\n      clearTimeout(timerRef.current);\n      timerRef.current = null;\n    }\n  }, []);\n\n  // 组件卸载时清掉挂起的定时器，避免对已卸载组件 setState\n  useEffect(() => clear, [clear]);\n\n  const arm = useCallback((onTimeout: () => void, ms: number = SERVICE_TIMEOUT_MS) => {\n    clear();\n    timerRef.current = setTimeout(() => {\n      timerRef.current = null;\n      onTimeout();\n    }, ms);\n  }, [clear]);\n\n  return { arm, clear };\n}\n","/**\n * useLocalSearch — 本地搜索 Hook（手写，完整实现 SDK dts 全部功能）。\n *\n * React 设计规范：\n * - 参数用 options 对象，状态变化触发 service 重建\n * - action 方法用 useCallback，稳定引用\n * - 回调用 useEffect 注册/注销\n * - requestId 防过期请求\n *\n * 用法：\n * ```tsx\n * const {\n *   data, loading, error, supported,\n *   search, searchNearby, searchInBounds, gotoPage, clearResults, cancel,\n * } = useLocalSearch({\n *   location: '北京',\n *   pageCapacity: 10,\n *   renderOptions: { map, autoViewport: true },\n *   onSearchComplete: (results) => { ... },\n *   onMarkersSet: (pois) => { ... },\n * });\n * ```\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { BMapDriver } from '../../drivers/types';\nimport type { ServiceHandle, Point, Bounds } from '../../types';\n\n// ─── 类型 ───\n\nexport interface LocalSearchRenderOptions {\n  /**\n   * 在地图上渲染结果用的 MapHandle。**非必传**：hook 在 `<Map>` 内部会自动取当前地图；\n   * 在 `<Map>` 外层则需显式传**已就绪**的 handle（用 `<Map onReady>` 或 `useMapReady` 拿）。显式传入优先。\n   */\n  map?: { __brand: string; raw: unknown };\n  panel?: string | HTMLElement;\n  selectFirstResult?: boolean;\n  autoViewport?: boolean;\n  viewportOptions?: { noAnimation?: boolean; margins?: number[]; zoomFactor?: number };\n}\n\nexport interface LocalSearchOptions {\n  /** 搜索城市/区域，可为字符串、Point 或 Map。**非必传**：缺省时自动回退到当前 `<Map>`（或 `renderOptions.map`），与原生 `new BMap.LocalSearch(map, {...})` 一致 */\n  location?: string | Point | { __brand: string; raw: unknown };\n  /** 每页结果数（1-100） */\n  pageCapacity?: number;\n  /** 页码（v4+） */\n  pageNum?: number;\n  /**\n   * 是否自动在地图上渲染检索结果（默认 true，与原生一致）。\n   * 传 `false`＝**仅取数据**：不把地图注入 renderOptions.map，且缺省 location 时用地图中心点（而非 Map 实例）\n   * 作检索区域——避免 SDK 因拿到 Map 引用而自动画默认标注。适合\"取数据后自绘标注\"（如门店选址）。2.0.3 新增。\n   */\n  autoRender?: boolean;\n  /** 渲染选项 */\n  renderOptions?: LocalSearchRenderOptions;\n  /** 搜索完成回调 */\n  onSearchComplete?: (results: unknown) => void;\n  /** 标注设置回调 */\n  onMarkersSet?: (pois: unknown[]) => void;\n  /** 信息窗回调 */\n  onInfoHtmlSet?: (poi: unknown, html: HTMLElement) => void;\n  /** 结果面板回调 */\n  onResultsHtmlSet?: (container: HTMLElement) => void;\n  /** 折线添加完成回调（对应 setPolylinesSetCallback） */\n  onPolylinesSet?: (polylines: unknown[]) => void;\n}\n\nexport interface LocalSearchHookResult<T = unknown> {\n  data: T | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  /** 搜索（支持多关键词数组） */\n  search: (keyword: string | string[], option?: { forceLocal?: boolean }) => void;\n  /** 周边搜索 */\n  searchNearby: (keyword: string | string[], center: string | Point, radius: number) => void;\n  /** 范围搜索 */\n  searchInBounds: (keyword: string | string[], bounds: Bounds) => void;\n  /** 翻页 */\n  gotoPage: (page: number) => void;\n  /** 清空结果 */\n  clearResults: () => void;\n  /** 选中/高亮某条结果并打开其信息窗；index 为结果索引 */\n  select: (index: number) => void;\n  /** 取消选中：关掉信息窗 + 清结果列表选中态 */\n  clearSelected: () => void;\n  /** 运行时设置检索城市/区域（字符串 / Point / Map） */\n  setLocation: (location: string | Point | { __brand: string; raw: unknown }) => void;\n  /** 开启检索后自动调整视野 */\n  enableAutoViewport: () => void;\n  /** 关闭自动调整视野 */\n  disableAutoViewport: () => void;\n  /** 开启「自动选中第一个结果」 */\n  enableFirstResultSelection: () => void;\n  /** 关闭「自动选中第一个结果」 */\n  disableFirstResultSelection: () => void;\n  /** 运行时设置每页结果数（1-100） */\n  setPageCapacity: (n: number) => void;\n  /** 最近一次检索的状态码（BMAP_STATUS_*） */\n  getStatus: () => number | undefined;\n  /** 取消当前请求 */\n  cancel: () => void;\n}\n\n// ─── Hook ───\n\nexport function useLocalSearch<T = unknown>(opts: LocalSearchOptions = {}): LocalSearchHookResult<T> {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const svcRef = useRef<ServiceHandle | null>(null);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{\n    data: T | undefined; loading: boolean; error: Error | null; supported: boolean;\n  }>({ data: undefined, loading: false, error: null, supported: true });\n\n  // 回调 ref（保持引用稳定，避免 service 重建）\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n\n  // 构造参数 key（location/pageCapacity/pageNum/renderOptions 变化时重建）\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ pc: opts.pageCapacity, pn: opts.pageNum, ro: opts.renderOptions, ar: opts.autoRender });\n\n  // create service\n  useEffect(() => {\n    if (!driver) return;\n\n    // 构造 renderOptions，把 MapHandle 解包成 raw（显式传入优先，否则回退到 <Map> 内的 context map）\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;                       // 仅取数据：不注入地图 → 不自动渲染\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n\n    const searchOpts: Record<string, unknown> = {};\n    if (opts.pageCapacity !== undefined) searchOpts.pageCapacity = opts.pageCapacity;\n    if (opts.pageNum !== undefined) searchOpts.pageNum = opts.pageNum;\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n\n    // 解包 location；缺省时回退到当前 <Map>/renderOptions.map（与原生 new BMap.LocalSearch(map, ...) 一致）。\n    // 但 dataOnly 时不能把 Map 当 location——SDK 拿到 Map 会自动把结果标注画上去；改用地图中心点作检索区域。\n    let loc: unknown = '';\n    if (opts.location !== undefined) {\n      loc = unwrapHandle(opts.location);\n    } else if (renderMap) {\n      if (dataOnly) {\n        try {\n          const c = driver.getCenter(renderMap);\n          const SDK = getSDK();\n          loc = (c && SDK?.Point) ? new SDK.Point(c.lng, c.lat) : '';\n        } catch { loc = ''; }\n      } else {\n        loc = unwrapHandle(renderMap);\n      }\n    }\n\n    const handle = driver.createLocalSearch(loc, Object.keys(searchOpts).length > 0 ? searchOpts : undefined);\n    svcRef.current = handle;\n    rawRef.current = handle.raw;\n\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('LocalSearch', driver.version), supported: false });\n      return;\n    }\n\n    // 注册回调\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => {\n        callbacksRef.current.onSearchComplete?.(results);\n      });\n    }\n    if (typeof raw.setMarkersSetCallback === 'function' && callbacksRef.current.onMarkersSet) {\n      raw.setMarkersSetCallback((pois: unknown[]) => {\n        callbacksRef.current.onMarkersSet?.(pois);\n      });\n    }\n    if (typeof raw.setInfoHtmlSetCallback === 'function' && callbacksRef.current.onInfoHtmlSet) {\n      raw.setInfoHtmlSetCallback((poi: unknown, html: HTMLElement) => {\n        callbacksRef.current.onInfoHtmlSet?.(poi, html);\n      });\n    }\n    if (typeof raw.setResultsHtmlSetCallback === 'function' && callbacksRef.current.onResultsHtmlSet) {\n      raw.setResultsHtmlSetCallback((container: HTMLElement) => {\n        callbacksRef.current.onResultsHtmlSet?.(container);\n      });\n    }\n    if (typeof raw.setPolylinesSetCallback === 'function' && callbacksRef.current.onPolylinesSet) {\n      raw.setPolylinesSetCallback((polylines: unknown[]) => {\n        callbacksRef.current.onPolylinesSet?.(polylines);\n      });\n    }\n\n    setState(s => ({ ...s, supported: true, error: null }));\n\n    return () => {\n      svcRef.current = null;\n      rawRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  // 内部：执行搜索 + 请求保护\n  const doSearch = useCallback((action: () => void) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    // 先注册回调，再调搜索（SDK 要求回调在 search 之前注册）\n    const raw = rawRef.current;\n    if (raw && typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => {\n        if (requestId !== requestIdRef.current) return;\n        clear();\n        callbacksRef.current.onSearchComplete?.(results);\n        setState({ data: results as T, loading: false, error: null, supported: true });\n      });\n    }\n    try {\n      action();\n    } catch (e) {\n      clear();\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n  }, [arm, clear]);\n\n  const search = useCallback((keyword: string | string[], option?: { forceLocal?: boolean }) => {\n    if (!rawRef.current) return;\n    doSearch(() => {\n      if (option?.forceLocal !== undefined) {\n        rawRef.current.search?.(keyword, option);\n      } else {\n        rawRef.current.search?.(keyword);\n      }\n    });\n  }, [doSearch]);\n\n  const searchNearby = useCallback((keyword: string | string[], center: string | Point, radius: number) => {\n    if (!rawRef.current) return;\n    doSearch(() => {\n      let c: unknown = center;\n      if (isHandle(c)) {\n        c = c.raw;\n      } else if (c && typeof c === 'object' && 'lng' in c) {\n        // 纯 { lng, lat } 对象 → SDK Point 实例\n        const p = c as { lng: number; lat: number };\n        const SDK = getSDK();\n        c = new SDK.Point(p.lng, p.lat);\n      }\n      rawRef.current.searchNearby?.(keyword, c, radius);\n    });\n  }, [doSearch]);\n\n  const searchInBounds = useCallback((keyword: string | string[], bounds: Bounds) => {\n    if (!rawRef.current) return;\n    doSearch(() => {\n      let b: unknown = bounds;\n      if (isHandle(b)) {\n        b = b.raw;\n      } else if (b && typeof b === 'object' && 'sw' in b) {\n        // 纯 { sw: {lng,lat}, ne: {lng,lat} } → SDK Bounds 实例\n        const bd = b as { sw: { lng: number; lat: number }; ne: { lng: number; lat: number } };\n        const SDK = getSDK();\n        b = new SDK.Bounds(new SDK.Point(bd.sw.lng, bd.sw.lat), new SDK.Point(bd.ne.lng, bd.ne.lat));\n      }\n      rawRef.current.searchInBounds?.(keyword, b);\n    });\n  }, [doSearch]);\n\n  const gotoPage = useCallback((page: number) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    try {\n      rawRef.current.gotoPage?.(page);\n    } catch (e) {\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n    const raw = rawRef.current;\n    if (raw && typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => {\n        if (requestId !== requestIdRef.current) return;\n        callbacksRef.current.onSearchComplete?.(results);\n        setState({ data: results as T, loading: false, error: null, supported: true });\n      });\n    }\n  }, []);\n\n  const clearResults = useCallback(() => {\n    if (!rawRef.current) return;\n    try { rawRef.current.clearResults?.(); } catch { /* noop */ }\n    setState(s => ({ ...s, data: undefined, loading: false }));\n  }, []);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  const select = useCallback((index: number) => {\n    try { rawRef.current?.select?.(index); } catch { /* noop */ }\n  }, []);\n\n  const clearSelected = useCallback(() => {\n    try { rawRef.current?.clearSelected?.(); } catch { /* noop */ }\n  }, []);\n\n  const setLocation = useCallback((location: string | Point | { __brand: string; raw: unknown }) => {\n    if (!rawRef.current) return;\n    let l: unknown = location;\n    if (isHandle(l)) {\n      l = l.raw;\n    } else if (l && typeof l === 'object' && 'lng' in l) {\n      const p = l as { lng: number; lat: number };\n      const SDK = getSDK();\n      l = new SDK.Point(p.lng, p.lat);\n    }\n    rawRef.current.setLocation?.(l);\n  }, []);\n\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const enableFirstResultSelection = useCallback(() => { rawRef.current?.enableFirstResultSelection?.(); }, []);\n  const disableFirstResultSelection = useCallback(() => { rawRef.current?.disableFirstResultSelection?.(); }, []);\n  const setPageCapacity = useCallback((n: number) => { rawRef.current?.setPageCapacity?.(n); }, []);\n  const getStatus = useCallback((): number | undefined => rawRef.current?.getStatus?.(), []);\n\n  return {\n    ...state,\n    search, searchNearby, searchInBounds, gotoPage, clearResults,\n    select, clearSelected, setLocation,\n    enableAutoViewport, disableAutoViewport,\n    enableFirstResultSelection, disableFirstResultSelection,\n    setPageCapacity, getStatus, cancel,\n  };\n}\n","/**\n * useGeocoder — 地理编码 Hook（手写）。\n * SDK 方法：getPoint(address, cb, city?) / getLocation(point, cb, opts?)\n *\n * 单发 vs 批量：\n *   getPoint/getLocation 是「单发」——结果落到单值 data，同一实例上连发多次只保留最后一个\n *   （requestId 防竞态），适合搜索框这类「只关心最新一次」的场景。\n *   getPoints/getLocations 是「并发批量」——直接返回 Promise（不经过 data/loading/error），\n *   内部对每个地址/坐标各发一次请求、Promise.all 汇总，结果按入参顺序返回、失败位为 null。\n *   底层 Geocoder 实例并发安全（每次调用各自回调），一个实例即可，无需建多个。\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { getSDK } from '../../utils/sdk';\nimport { useServiceTimeout, serviceTimeoutError, SERVICE_TIMEOUT_MS } from './useServiceTimeout';\nimport type { Point } from '../../types';\nimport type { GeocoderResult } from '../../types/results';\n\nexport interface GeocoderHookResult {\n  data: GeocoderResult | Point | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  /** 地址转坐标 */\n  getPoint: (address: string, city?: string) => void;\n  /** 坐标转地址 */\n  getLocation: (point: Point, options?: unknown) => void;\n  /** 并发批量地址转坐标；按入参顺序返回，失败位为 null。直接返回 Promise，不经过 data/loading/error */\n  getPoints: (addresses: string[], city?: string) => Promise<(Point | null)[]>;\n  /** 并发批量坐标转地址；按入参顺序返回，失败位为 null。直接返回 Promise，不经过 data/loading/error */\n  getLocations: (points: Point[], options?: unknown) => Promise<(GeocoderResult | null)[]>;\n  /** 设置地理编码选项（如 language 语言等），对应 SDK setOptions，2.0.4 新增 */\n  setOptions: (options: Record<string, unknown>) => void;\n  cancel: () => void;\n}\n\nexport function useGeocoder(): GeocoderHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{ data: GeocoderResult | Point | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const handle = driver.createGeocoder();\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('Geocoder', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n  }, [driver]);\n\n  const doAction = useCallback((fn: (raw: any) => void) => {\n    if (!rawRef.current) return;\n    const myRequestId = requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    // 兜底：SDK 在鉴权失败等场景下可能不触发回调，超时后把 loading 收回并抛错\n    arm(() => {\n      if (myRequestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    try {\n      fn(rawRef.current);\n    } catch (e) {\n      clear();\n      setState(s => ({ ...s, loading: false, error: e as Error }));\n    }\n  }, [arm, clear]);\n\n  const getPoint = useCallback((address: string, city?: string) => {\n    const myRequestId = ++requestIdRef.current;\n    doAction((raw) => {\n      const cb = (result: any) => {\n        if (myRequestId !== requestIdRef.current) return;\n        clear();\n        setState({ data: result, loading: false, error: null, supported: true });\n      };\n      if (city !== undefined) raw.getPoint?.(address, cb, city);\n      else raw.getPoint?.(address, cb);\n    });\n  }, [doAction, clear]);\n\n  const getLocation = useCallback((point: Point, options?: unknown) => {\n    const myRequestId = ++requestIdRef.current;\n    doAction((raw) => {\n      const SDK = getSDK();\n      const pt = new SDK.Point(point.lng, point.lat);\n      const cb = (result: any) => {\n        if (myRequestId !== requestIdRef.current) return;\n        clear();\n        setState({ data: result, loading: false, error: null, supported: true });\n      };\n      if (options !== undefined) raw.getLocation?.(pt, cb, options);\n      else raw.getLocation?.(pt, cb);\n    });\n  }, [doAction, clear]);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  const setOptions = useCallback((options: Record<string, unknown>) => {\n    rawRef.current?.setOptions?.(options);\n  }, []);\n\n  // 并发批量：每项各发一次请求、各自回调 + 超时兜底，Promise.all 保序汇总；\n  // 不动 data/loading/error（单值状态表达不了 N 个结果），失败/超时位为 null\n  const getPoints = useCallback((addresses: string[], city?: string): Promise<(Point | null)[]> => {\n    return Promise.all(addresses.map(address => new Promise<Point | null>((resolve) => {\n      const raw = rawRef.current;\n      if (!raw) return resolve(null);\n      let done = false;\n      const timer = setTimeout(() => { if (!done) { done = true; resolve(null); } }, SERVICE_TIMEOUT_MS);\n      const cb = (result: Point | null) => {\n        if (done) return;\n        done = true;\n        clearTimeout(timer);\n        resolve(result ?? null);\n      };\n      if (city !== undefined) raw.getPoint?.(address, cb, city);\n      else raw.getPoint?.(address, cb);\n    })));\n  }, []);\n\n  const getLocations = useCallback((points: Point[], options?: unknown): Promise<(GeocoderResult | null)[]> => {\n    return Promise.all(points.map(point => new Promise<GeocoderResult | null>((resolve) => {\n      const raw = rawRef.current;\n      if (!raw) return resolve(null);\n      const SDK = getSDK();\n      const pt = new SDK.Point(point.lng, point.lat);\n      let done = false;\n      const timer = setTimeout(() => { if (!done) { done = true; resolve(null); } }, SERVICE_TIMEOUT_MS);\n      const cb = (result: GeocoderResult | null) => {\n        if (done) return;\n        done = true;\n        clearTimeout(timer);\n        resolve(result ?? null);\n      };\n      if (options !== undefined) raw.getLocation?.(pt, cb, options);\n      else raw.getLocation?.(pt, cb);\n    })));\n  }, []);\n\n  return { ...state, getPoint, getLocation, getPoints, getLocations, setOptions, cancel };\n}\n","/**\n * useBoundary — 行政区划边界 Hook（手写）。\n * SDK 方法：get(name, callback)\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport type { BoundaryResult } from '../../types/results';\n\nexport interface BoundaryHookResult {\n  data: BoundaryResult | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  get: (name: string) => void;\n  /** 把 SDK 返回的边界字符串（\"lng,lat;lng,lat;…\"）解析成点集，对应 SDK parsebdStr，2.0.4 新增 */\n  parsebdStr: (boundaryStr: string) => unknown;\n  cancel: () => void;\n}\n\nexport function useBoundary(): BoundaryHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{ data: BoundaryResult | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const handle = driver.createBoundary();\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('Boundary', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n  }, [driver]);\n\n  const get = useCallback((name: string) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    try {\n      rawRef.current.get?.(name, (result: any) => {\n        if (requestId !== requestIdRef.current) return;\n        clear();\n        setState({ data: result, loading: false, error: null, supported: true });\n      });\n    } catch (e) {\n      clear();\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n  }, [arm, clear]);\n\n  const parsebdStr = useCallback((boundaryStr: string): unknown => rawRef.current?.parsebdStr?.(boundaryStr), []);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  return { ...state, get, parsebdStr, cancel };\n}\n","/**\n * useGeolocation — 浏览器定位 Hook（手写）。\n * SDK 方法：getCurrentPosition(callback, opts?) / getStatus() / enableSDKLocation() / disableSDKLocation()\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\n\nexport interface GeolocationHookResult {\n  data: unknown;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  getCurrentPosition: (options?: unknown) => void;\n  getStatus: () => number | undefined;\n  enableSDKLocation: () => void;\n  disableSDKLocation: () => void;\n  cancel: () => void;\n}\n\nexport function useGeolocation(opts?: { enableSDKLocation?: boolean }): GeolocationHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const optKey = JSON.stringify(opts ?? {});\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const ctorOpts: Record<string, unknown> = {};\n    if (opts?.enableSDKLocation) ctorOpts.SDKLocation = true;\n    const handle = driver.createGeolocation(Object.keys(ctorOpts).length > 0 ? ctorOpts : undefined);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('Geolocation', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    if (opts?.enableSDKLocation) rawRef.current?.enableSDKLocation?.();\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optKey]);\n\n  const getCurrentPosition = useCallback((options?: unknown) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    try {\n      const cb = (result: any) => {\n        if (requestId !== requestIdRef.current) return;\n        clear();\n        setState({ data: result, loading: false, error: null, supported: true });\n      };\n      if (options !== undefined) rawRef.current.getCurrentPosition?.(cb, options);\n      else rawRef.current.getCurrentPosition?.(cb);\n    } catch (e) {\n      clear();\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n  }, [arm, clear]);\n\n  const getStatus = useCallback(() => {\n    return rawRef.current?.getStatus?.();\n  }, []);\n\n  const enableSDKLocation = useCallback(() => {\n    rawRef.current?.enableSDKLocation?.();\n  }, []);\n\n  const disableSDKLocation = useCallback(() => {\n    rawRef.current?.disableSDKLocation?.();\n  }, []);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  return { ...state, getCurrentPosition, getStatus, enableSDKLocation, disableSDKLocation, cancel };\n}\n","/**\n * useLocalCity — 城市定位 Hook（手写）。\n * SDK 方法：get(callback)\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport type { LocalCityResult } from '../../types/results';\n\nexport interface LocalCityHookResult {\n  data: LocalCityResult | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  get: () => void;\n  cancel: () => void;\n}\n\nexport function useLocalCity(): LocalCityHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{ data: LocalCityResult | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const handle = driver.createLocalCity();\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('LocalCity', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n  }, [driver]);\n\n  const get = useCallback(() => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    try {\n      rawRef.current.get?.((result: any) => {\n        if (requestId !== requestIdRef.current) return;\n        clear();\n        setState({ data: result, loading: false, error: null, supported: true });\n      });\n    } catch (e) {\n      clear();\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n  }, [arm, clear]);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  return { ...state, get, cancel };\n}\n","/**\n * useConvertor — 坐标转换 Hook（手写）。\n * SDK 方法：translate(points, from?, to?, callback?)\n *\n * 与原生 SDK 的差异（2.0.3 起）：\n *   原生 translate 把所有点拼进一个 URL 发一个请求，不做分批——coords 服务端上限约 100 点、\n *   且点数多了会撞 URL 长度限制，>100 点会静默失败。本 hook 在其之上按 100 自动分批、\n *   并发请求再按 index 顺序合并，对外仍是一次 translate(points) 调用，让 >100 点也能用。\n *   并发是安全的：SDK 每个请求用随机 JSONP 回调名，不会串扰；JSONP 走 script 标签，\n *   浏览器对同域并发连接本就有上限（约 6），等于自动限流，不必自己做串行/信号量。\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { getSDK } from '../../utils/sdk';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport type { Point } from '../../types';\nimport type { TranslateResults } from '../../types/results';\n\n/** 百度 coords 服务单次请求的点数上限（服务端约束 + URL 长度）。 */\nconst TRANSLATE_MAX_POINTS = 100;\n\nexport interface ConvertorHookResult {\n  data: TranslateResults | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  translate: (points: Point[], from?: number, to?: number) => void;\n  cancel: () => void;\n}\n\nexport function useConvertor(): ConvertorHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{ data: TranslateResults | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const handle = driver.createConvertor();\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('Convertor', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n  }, [driver]);\n\n  const translate = useCallback((points: Point[], from?: number, to?: number) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    try {\n      const SDK = getSDK();\n      // 按 100 个点分批（translate 单次上限）\n      const chunks: Point[][] = [];\n      for (let i = 0; i < points.length; i += TRANSLATE_MAX_POINTS) {\n        chunks.push(points.slice(i, i + TRANSLATE_MAX_POINTS));\n      }\n      if (chunks.length === 0) {\n        clear();\n        setState({ data: { status: 0, points: [] }, loading: false, error: null, supported: true });\n        return;\n      }\n      // 整体挂一个超时兜底：任一批卡住导致迟迟不齐时，把 loading 收回并抛错\n      arm(() => {\n        if (requestId !== requestIdRef.current) return;\n        setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n      });\n      // 并发发起所有批次（JSONP 回调名随机，不会串扰；script 标签受浏览器同域连接数天然限流）；\n      // 结果按 index 落位保序，全部到齐后合并\n      const results: any[] = new Array(chunks.length);\n      let remaining = chunks.length;\n      chunks.forEach((chunk, idx) => {\n        const pts = chunk.map(p => new SDK.Point(p.lng, p.lat));\n        const cb = (result: any) => {\n          if (requestId !== requestIdRef.current) return;\n          results[idx] = result;\n          if (--remaining > 0) return;\n          clear();\n          if (chunks.length === 1) {\n            // 单批：原样回填 SDK 结果（保留 size() 等原生字段）\n            setState({ data: results[0], loading: false, error: null, supported: true });\n            return;\n          }\n          // 多批：按顺序合并为 { status, points }；任一批非 0 status 带出\n          const mergedPoints: Point[] = [];\n          let badStatus: number | undefined;\n          for (const r of results) {\n            if (r && r.status !== 0 && r.status !== undefined) badStatus = r.status;\n            if (r?.points) mergedPoints.push(...r.points);\n          }\n          setState({ data: { status: badStatus ?? 0, points: mergedPoints }, loading: false, error: null, supported: true });\n        };\n        rawRef.current.translate?.(pts, from, to, cb);\n      });\n    } catch (e) {\n      clear();\n      if (requestId === requestIdRef.current) {\n        setState(s => ({ ...s, loading: false, error: e as Error }));\n      }\n    }\n  }, [arm, clear]);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  return { ...state, translate, cancel };\n}\n","/**\n * usePanoramaService — 全景服务 Hook（手写）。\n * SDK 方法：getPanoramaById(id, cb) / getPanoramaByLocation(point, radius?, cb) / getPanoramaByPOIId(poiId, cb)\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { getSDK } from '../../utils/sdk';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport type { Point } from '../../types';\n\nexport interface PanoramaServiceHookResult {\n  data: unknown;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  getPanoramaById: (id: string) => void;\n  /** radius 可选，缺省走 SDK 默认（约 50 米） */\n  getPanoramaByLocation: (point: Point, radius?: number) => void;\n  /** 按 POI id 查询全景（部分版本 SDK 支持；运行时不支持时置 error） */\n  getPanoramaByPOIId: (poiId: string) => void;\n  cancel: () => void;\n}\n\nexport function usePanoramaService(): PanoramaServiceHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  useEffect(() => {\n    if (!driver) return;\n    const handle = driver.createPanoramaService();\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('PanoramaService', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; };\n  }, [driver]);\n\n  const doAction = useCallback((fn: (raw: any) => void) => {\n    if (!rawRef.current) return;\n    const myRequestId = requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (myRequestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    try {\n      fn(rawRef.current);\n    } catch (e) {\n      clear();\n      setState(s => ({ ...s, loading: false, error: e as Error }));\n    }\n  }, [arm, clear]);\n\n  const getPanoramaById = useCallback((id: string) => {\n    const myRequestId = ++requestIdRef.current;\n    doAction((raw) => {\n      raw.getPanoramaById?.(id, (data: any) => {\n        if (myRequestId !== requestIdRef.current) return;\n        clear();\n        setState({ data, loading: false, error: null, supported: true });\n      });\n    });\n  }, [doAction, clear]);\n\n  const getPanoramaByLocation = useCallback((point: Point, radius?: number) => {\n    const myRequestId = ++requestIdRef.current;\n    doAction((raw) => {\n      const SDK = getSDK();\n      const pt = new SDK.Point(point.lng, point.lat);\n      const cb = (data: any) => {\n        if (myRequestId !== requestIdRef.current) return;\n        clear();\n        setState({ data, loading: false, error: null, supported: true });\n      };\n      // radius 缺省时用二参重载，交给 SDK 默认半径\n      if (typeof radius === 'number') raw.getPanoramaByLocation?.(pt, radius, cb);\n      else raw.getPanoramaByLocation?.(pt, cb);\n    });\n  }, [doAction, clear]);\n\n  const getPanoramaByPOIId = useCallback((poiId: string) => {\n    const myRequestId = ++requestIdRef.current;\n    doAction((raw) => {\n      if (typeof raw.getPanoramaByPOIId !== 'function') {\n        clear();\n        setState(s => ({ ...s, loading: false, error: new Error('getPanoramaByPOIId not supported by current SDK') }));\n        return;\n      }\n      raw.getPanoramaByPOIId(poiId, (data: any) => {\n        if (myRequestId !== requestIdRef.current) return;\n        clear();\n        setState({ data, loading: false, error: null, supported: true });\n      });\n    });\n  }, [doAction, clear]);\n\n  const cancel = useCallback(() => {\n    requestIdRef.current++;\n    clear();\n    setState(s => ({ ...s, loading: false }));\n  }, [clear]);\n\n  return { ...state, getPanoramaById, getPanoramaByLocation, getPanoramaByPOIId, cancel };\n}\n","/**\n * 渲染型 service hook 的 autoRender 支持工具。\n *\n * 这些 hook（LocalSearch / 各路线 / BusLineSearch）只要拿到 Map 引用（无论经构造函数\n * location 还是 renderOptions.map），SDK 就会把结果自动渲染到地图上。autoRender:false 时\n * 需要两处都避开 Map：\n * - renderOptions.map 不注入（见各 hook 内 `if (dataOnly) delete ro.map`）\n * - location 回退用地图**中心点**（Point）而非 Map 实例——即本工具。\n */\nimport { unwrapHandle } from '../../utils/handle';\nimport { getSDK } from '../../utils/sdk';\nimport type { BMapDriver } from '../../drivers/types';\n\n/**\n * 缺省 location 时的回退值：\n * - 正常（会渲染）：用 renderMap（Map 实例）——与原生 `new BMap.XxxSearch(map, ...)` 一致\n * - dataOnly（autoRender:false，仅取数据）：用地图中心点 Point，避免把 Map 交给 SDK 触发自动渲染\n * renderMap 为空时返回空串（交给 SDK 用默认区域）。\n */\nexport function fallbackLocation(\n  driver: BMapDriver,\n  renderMap: { __brand: string; raw: unknown } | null | undefined,\n  dataOnly: boolean,\n): unknown {\n  if (!renderMap) return '';\n  if (!dataOnly) return unwrapHandle(renderMap);\n  try {\n    const c = driver.getCenter(renderMap as never);\n    const SDK = getSDK();\n    return (c && (SDK as { Point?: unknown })?.Point) ? new (SDK as { Point: new (lng: number, lat: number) => unknown }).Point(c.lng, c.lat) : '';\n  } catch {\n    return '';\n  }\n}\n","/**\n * useDrivingRoute — 驾车路线规划 Hook（手写，完整实现 SDK dts）。\n *\n * SDK 方法：search(start: Point|LocalResultPoi, end: Point|LocalResultPoi, { waypoints? })\n * / getResults / clearResults / enableAutoViewport / disableAutoViewport\n * / setPolicy / setLocation / getStatus / setSearchCompleteCallback\n * / setMarkersSetCallback / setInfoHtmlSetCallback / setPolylinesSetCallback / setResultsHtmlSetCallback\n *\n * 注意：search 不接受字符串地址，只接受 Point 或 LocalResultPoi。\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { Point, MapHandle } from '../../types';\nimport type { DrivingRouteResult } from '../../types/results';\n\nexport interface DrivingRouteRenderOptions {\n  /**\n   * 在地图上渲染路线用的 MapHandle。**非必传**：\n   * - hook 用在 `<Map>` **内部**（子树里）时，不传会自动取当前地图；\n   * - hook 用在 `<Map>` **外层**时，context 取不到，需显式传**已就绪**的 handle（非 null）。\n   *   拿就绪 handle：用 `<Map onReady={setMap}>`，或在 `<Map>` 内放 `useMapReady` 把 handle 上提到外层 state。\n   * 显式传入始终优先于自动获取。\n   */\n  map?: MapHandle;\n  panel?: string | HTMLElement;\n  selectFirstResult?: boolean;\n  autoViewport?: boolean;\n  viewportOptions?: { noAnimation?: boolean; margins?: number[]; zoomFactor?: number };\n  /**\n   * 拖拽起终点重新规划（仅驾车/公交/货车生效；步行、骑行 SDK 内部强制关闭）。\n   * 类型包未声明，但运行时 renderOptions.enableDragging 真实生效。2.0.2 新增。\n   */\n  enableDragging?: boolean;\n}\n\nexport interface DrivingRouteOptions {\n  /**\n   * 检索上下文（城市/坐标/地图）。**非必传**：缺省时自动回退到当前 `<Map>`（或 `renderOptions.map`）——\n   * 与原生 `new BMap.DrivingRoute(map, {...})` 把 map 当第一参数一致。只在需要指定特定城市时才显式传。\n   */\n  location?: string | MapHandle;\n  policy?: number;\n  /**\n   * 是否同时返回多条备选路线（对应 SDK DrivingRoute 构造项 alternatives）。\n   * 类型包未声明，但运行时确有此项；开启后结果 plan 会含多条路线。仅驾车支持。2.0.2 新增。\n   */\n  alternatives?: boolean;\n  /**\n   * 是否自动在地图上渲染路线（默认 true）。传 `false`＝**仅取数据**：不注入 renderOptions.map，\n   * 缺省 location 时用地图中心点（而非 Map 实例）作检索上下文，避免 SDK 因拿到 Map 引用而自动画路线。\n   * 适合\"取路线数据后自绘\"。2.0.3 新增。（walking/riding/transit/truck 继承本项）\n   */\n  autoRender?: boolean;\n  renderOptions?: DrivingRouteRenderOptions;\n  onSearchComplete?: (results: DrivingRouteResult) => void;\n  onMarkersSet?: (pois: unknown[]) => void;\n  onInfoHtmlSet?: (poi: unknown, html: HTMLElement) => void;\n  onPolylinesSet?: (polylines: unknown[]) => void;\n  onResultsHtmlSet?: (container: HTMLElement) => void;\n}\n\nexport interface DrivingRouteHookResult {\n  data: DrivingRouteResult | undefined;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  /** 搜索（start/end 必须是 Point，不支持字符串地址） */\n  search: (start: Point, end: Point, options?: { waypoints?: Point[] }) => void;\n  clearResults: () => void;\n  enableAutoViewport: () => void;\n  disableAutoViewport: () => void;\n  setPolicy: (policy: number) => void;\n  setLocation: (location: string | MapHandle) => void;\n  /** 运行时设置路线折线样式（strokeColor / strokeWeight / strokeOpacity 等），2.0.4 新增 */\n  setPolylineStyle: (style: Record<string, unknown>) => void;\n  getStatus: () => number | undefined;\n  cancel: () => void;\n}\n\nexport function useDrivingRoute(opts: DrivingRouteOptions = {}): DrivingRouteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const searchCbRef = useRef<((results: unknown) => void) | null>(null);\n  // 首搜渲染竞态兜底：自动渲染模式下，复用的服务实例「首次 search」渲染器可能未落地\n  // （React effect 创建服务的时机与 search 解耦，非 StrictMode 也复现）。\n  // 兜底策略：首次检索「完成」后同参补搜一次——此时 SDK 渲染器已完整走过一次绘制周期，\n  // 第二次检索必定出线。相比\"下一帧 rAF 补发\"更确定，不受真机 GL 时序影响。\n  // autoRenderRef 标记该服务是否带渲染 map；primedRef 保证每个服务实例只补发一次。\n  const autoRenderRef = useRef(false);\n  const primedRef = useRef(false);\n\n  const [state, setState] = useState<{ data: DrivingRouteResult | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ policy: opts.policy, alternatives: opts.alternatives, ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;                       // 仅取数据：不注入地图 → 不自动渲染路线\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (opts.policy !== undefined) searchOpts.policy = opts.policy;\n    if (opts.alternatives !== undefined) searchOpts.alternatives = opts.alternatives;\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    searchOpts.onSearchComplete = (results: unknown) => { searchCbRef.current?.(results); };\n    if (callbacksRef.current.onMarkersSet) searchOpts.onMarkersSet = (pois: unknown[]) => callbacksRef.current.onMarkersSet?.(pois);\n    if (callbacksRef.current.onInfoHtmlSet) searchOpts.onInfoHtmlSet = (poi: unknown, html: HTMLElement) => callbacksRef.current.onInfoHtmlSet?.(poi, html);\n    if (callbacksRef.current.onPolylinesSet) searchOpts.onPolylinesSet = (pls: unknown[]) => callbacksRef.current.onPolylinesSet?.(pls);\n    if (callbacksRef.current.onResultsHtmlSet) searchOpts.onResultsHtmlSet = (c: HTMLElement) => callbacksRef.current.onResultsHtmlSet?.(c);\n\n    const handle = driver.createDrivingRoute(searchOpts);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('DrivingRoute', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    // 新服务实例：记录是否自动渲染（带 map）、重置补发标记\n    autoRenderRef.current = ro.map != null;\n    primedRef.current = false;\n    // 也通过 setSearchCompleteCallback 注册（SDK 可能用其中之一）\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => { searchCbRef.current?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => {\n      // 同 clearResults：SDK 内部会摸 renderer 上的 map，map 未就绪/已卸载时会抛，\n      // 而 effect cleanup 里抛出会把组件树带崩。\n      try { rawRef.current?.clearResults?.(); } catch { /* noop */ }\n      rawRef.current = null;\n      searchCbRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((start: unknown, end: unknown, options?: { waypoints?: unknown[] }) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n\n    // 解包 start/end（可能是 MapHandle 或 plain {lng,lat}）\n    const SDK = getSDK();\n    const toPoint = (v: unknown): unknown => {\n      if (!v) return v;\n      if (isHandle(v)) return v.raw;\n      if (typeof v === 'object' && 'lng' in v) {\n        const p = v as { lng: number; lat: number };\n        return new SDK.Point(p.lng, p.lat);\n      }\n      return v; // LocalResultPoi 或已转换的对象\n    };\n    const s = toPoint(start);\n    const e = toPoint(end);\n    const opts = options?.waypoints ? { waypoints: options.waypoints.map(toPoint) } : undefined;\n\n    const cb = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      let actual = results;\n      if (!actual || (typeof actual === 'object' && Object.keys(actual as object).length === 0)) {\n        try { actual = raw.getResults?.(); } catch { /* noop */ }\n      }\n      callbacksRef.current.onSearchComplete?.(actual as DrivingRouteResult);\n      setState({ data: (actual ?? results) as DrivingRouteResult, loading: false, error: null, supported: true });\n      // 自动渲染实例首次完成后同参补搜一次，确保首帧出线（详见上方 autoRenderRef 注释）。\n      if (autoRenderRef.current && !primedRef.current) {\n        primedRef.current = true;\n        try { raw.search?.(s, e, opts); } catch { /* noop */ }\n      }\n    };\n    searchCbRef.current = cb;\n\n    try { raw.search?.(s, e, opts); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => {\n    try { rawRef.current?.clearResults?.(); } catch { /* SDK clearResults may crash if map state is stale */ }\n    setState(s => ({ ...s, data: undefined, loading: false }));\n  }, []);\n\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setPolicy = useCallback((policy: number) => { rawRef.current?.setPolicy?.(policy); }, []);\n  const setLocation = useCallback((location: unknown) => {\n    rawRef.current?.setLocation?.(unwrapHandle(location));\n  }, []);\n  const setPolylineStyle = useCallback((style: Record<string, unknown>) => { rawRef.current?.setPolylineStyle?.(style); }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n\n  return { ...state, search, clearResults, enableAutoViewport, disableAutoViewport, setPolicy, setLocation, setPolylineStyle, getStatus, cancel };\n}\n","/**\n * useWalkingRoute — 步行路线规划 Hook（手写，完整实现）。\n * SDK：search(Point, Point) / clearResults / enableAutoViewport / disableAutoViewport / setLocation / getStatus\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { DrivingRouteOptions, DrivingRouteHookResult } from './useDrivingRoute';\nimport type { DrivingRouteResult } from '../../types/results';\n\n// 步行不支持 policy / alternatives（SDK WalkingRoute 构造函数不读 alternatives，\n// 且强制 this._enableDragging=false，故 renderOptions.enableDragging 对步行无效）。\nexport type WalkingRouteOptions = Omit<DrivingRouteOptions, 'policy' | 'alternatives'>;\nexport type WalkingRouteHookResult = Omit<DrivingRouteHookResult, 'setPolicy'> & { setPolicy?: never };\n\nexport function useWalkingRoute<T = unknown>(opts: WalkingRouteOptions = {}): WalkingRouteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const searchCbRef = useRef<((results: unknown) => void) | null>(null);\n  const autoRenderRef = useRef(false);\n  const primedRef = useRef(false);\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    searchOpts.onSearchComplete = (results: unknown) => { searchCbRef.current?.(results); };\n    if (callbacksRef.current.onMarkersSet) searchOpts.onMarkersSet = (pois: unknown[]) => callbacksRef.current.onMarkersSet?.(pois);\n    if (callbacksRef.current.onInfoHtmlSet) searchOpts.onInfoHtmlSet = (poi: unknown, html: HTMLElement) => callbacksRef.current.onInfoHtmlSet?.(poi, html);\n    if (callbacksRef.current.onPolylinesSet) searchOpts.onPolylinesSet = (pls: unknown[]) => callbacksRef.current.onPolylinesSet?.(pls);\n    if (callbacksRef.current.onResultsHtmlSet) searchOpts.onResultsHtmlSet = (c: HTMLElement) => callbacksRef.current.onResultsHtmlSet?.(c);\n\n    const handle = driver.createWalkingRoute(Object.keys(searchOpts).length > 0 ? searchOpts : undefined);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('WalkingRoute', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    autoRenderRef.current = ro.map != null;\n    primedRef.current = false;\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => { searchCbRef.current?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => {\n      // SDK 的 clearResults 在 renderer 的 map 未就绪/已卸载时会抛，effect cleanup 里抛出会把组件树带崩。\n      try { rawRef.current?.clearResults?.(); } catch { /* noop */ }\n      rawRef.current = null;\n      searchCbRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((start: unknown, end: unknown, _options?: { waypoints?: unknown[] }) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    const SDK = getSDK();\n    const toPoint = (v: unknown) => {\n      if (!v) return v;\n      if (isHandle(v)) return v.raw;\n      if (typeof v === 'object' && 'lng' in v) {\n        const p = v as { lng: number; lat: number };\n        return new SDK.Point(p.lng, p.lat);\n      }\n      return v;\n    };\n    const s = toPoint(start);\n    const e = toPoint(end);\n    const cb = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      let actual = results;\n      if (!actual || (typeof actual === 'object' && Object.keys(actual as object).length === 0)) {\n        try { actual = raw.getResults?.(); } catch { /* noop */ }\n      }\n      callbacksRef.current.onSearchComplete?.(actual as DrivingRouteResult);\n      setState({ data: actual ?? results, loading: false, error: null, supported: true });\n      // 首搜渲染竞态兜底：自动渲染实例首次完成后同参补搜一次，确保首帧出线（每实例一次）。\n      if (autoRenderRef.current && !primedRef.current) {\n        primedRef.current = true;\n        try { raw.search?.(s, e); } catch { /* noop */ }\n      }\n    };\n    searchCbRef.current = cb;\n    if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(cb);\n    try { raw.search?.(s, e); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => { try { rawRef.current?.clearResults?.(); } catch { /* noop */ } setState(s => ({ ...s, data: undefined, loading: false })); }, []);\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setLocation = useCallback((location: unknown) => {\n    rawRef.current?.setLocation?.(unwrapHandle(location));\n  }, []);\n  const setPolylineStyle = useCallback((style: Record<string, unknown>) => { rawRef.current?.setPolylineStyle?.(style); }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n\n  // setPolicy 不适用于 WalkingRoute\n  const setPolicy = useCallback((_p: number) => {}, []);\n  return { ...state, search, clearResults, enableAutoViewport, disableAutoViewport, setPolicy, setLocation, setPolylineStyle, getStatus, cancel } as unknown as WalkingRouteHookResult;\n}\n","/**\n * useRidingRoute — 骑行路线规划 Hook（手写，完整实现）。\n * SDK：search(Point, Point) / clearResults / enableAutoViewport / disableAutoViewport / setLocation / getStatus\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { DrivingRouteOptions, DrivingRouteHookResult } from './useDrivingRoute';\nimport type { DrivingRouteResult } from '../../types/results';\n\n// 骑行不支持 policy / alternatives（SDK RidingRoute 构造函数不读 alternatives，\n// 且强制 this._enableDragging=false，故 renderOptions.enableDragging 对骑行无效）。\nexport type RidingRouteOptions = Omit<DrivingRouteOptions, 'policy' | 'alternatives'>;\nexport type RidingRouteHookResult = Omit<DrivingRouteHookResult, 'setPolicy'> & { setPolicy?: never };\n\nexport function useRidingRoute<T = unknown>(opts: RidingRouteOptions = {}): RidingRouteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const searchCbRef = useRef<((results: unknown) => void) | null>(null);\n  const autoRenderRef = useRef(false);\n  const primedRef = useRef(false);\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    searchOpts.onSearchComplete = (results: unknown) => { searchCbRef.current?.(results); };\n    if (callbacksRef.current.onMarkersSet) searchOpts.onMarkersSet = (pois: unknown[]) => callbacksRef.current.onMarkersSet?.(pois);\n    if (callbacksRef.current.onInfoHtmlSet) searchOpts.onInfoHtmlSet = (poi: unknown, html: HTMLElement) => callbacksRef.current.onInfoHtmlSet?.(poi, html);\n    if (callbacksRef.current.onPolylinesSet) searchOpts.onPolylinesSet = (pls: unknown[]) => callbacksRef.current.onPolylinesSet?.(pls);\n    if (callbacksRef.current.onResultsHtmlSet) searchOpts.onResultsHtmlSet = (c: HTMLElement) => callbacksRef.current.onResultsHtmlSet?.(c);\n\n    const handle = driver.createRidingRoute(Object.keys(searchOpts).length > 0 ? searchOpts : undefined);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('RidingRoute', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    autoRenderRef.current = ro.map != null;\n    primedRef.current = false;\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => { searchCbRef.current?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => {\n      // SDK 的 clearResults 在 renderer 的 map 未就绪/已卸载时会抛，effect cleanup 里抛出会把组件树带崩。\n      try { rawRef.current?.clearResults?.(); } catch { /* noop */ }\n      rawRef.current = null;\n      searchCbRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((start: unknown, end: unknown, _options?: { waypoints?: unknown[] }) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    const SDK = getSDK();\n    const toPoint = (v: unknown) => {\n      if (!v) return v;\n      if (isHandle(v)) return v.raw;\n      if (typeof v === 'object' && 'lng' in v) {\n        const p = v as { lng: number; lat: number };\n        return new SDK.Point(p.lng, p.lat);\n      }\n      return v;\n    };\n    const s = toPoint(start);\n    const e = toPoint(end);\n    const cb = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      let actual = results;\n      if (!actual || (typeof actual === 'object' && Object.keys(actual as object).length === 0)) {\n        try { actual = raw.getResults?.(); } catch { /* noop */ }\n      }\n      callbacksRef.current.onSearchComplete?.(actual as DrivingRouteResult);\n      setState({ data: actual ?? results, loading: false, error: null, supported: true });\n      // 首搜渲染竞态兜底：自动渲染实例首次完成后同参补搜一次，确保首帧出线（每实例一次）。\n      if (autoRenderRef.current && !primedRef.current) {\n        primedRef.current = true;\n        try { raw.search?.(s, e); } catch { /* noop */ }\n      }\n    };\n    searchCbRef.current = cb;\n    if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(cb);\n    try { raw.search?.(s, e); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => { try { rawRef.current?.clearResults?.(); } catch { /* noop */ } setState(s => ({ ...s, data: undefined, loading: false })); }, []);\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setLocation = useCallback((location: unknown) => {\n    rawRef.current?.setLocation?.(unwrapHandle(location));\n  }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const setPolylineStyle = useCallback((style: Record<string, unknown>) => { rawRef.current?.setPolylineStyle?.(style); }, []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n  const setPolicy = useCallback((_p: number) => {}, []);\n  return { ...state, search, clearResults, enableAutoViewport, disableAutoViewport, setPolicy, setLocation, setPolylineStyle, getStatus, cancel } as unknown as RidingRouteHookResult;\n}\n","/**\n * useTransitRoute — 公交路线规划 Hook（手写，完整实现）。\n * SDK：search(Point, Point) / clearResults / enableAutoViewport / disableAutoViewport\n * / setPolicy / setPageCapacity / setIntercityPolicy / setTransitTypePolicy / setLocation / getStatus\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { DrivingRouteOptions, DrivingRouteHookResult } from './useDrivingRoute';\nimport type { DrivingRouteResult } from '../../types/results';\n\n// 公交不支持 alternatives（仅 DrivingRoute 支持）；额外提供跨城策略/交通方式。\nexport type TransitRouteOptions = Omit<DrivingRouteOptions, 'alternatives'> & {\n  /** 跨城公交换乘策略（BMAP_INTERCITY_POLICY_*） */\n  intercityPolicy?: number;\n  /** 跨城公交交通方式（BMAP_TRANSIT_TYPE_POLICY_*：火车/飞机/大巴） */\n  transitTypePolicy?: number;\n};\nexport type TransitRouteHookResult = DrivingRouteHookResult & {\n  setPageCapacity: (n: number) => void;\n  /** 设置跨城换乘策略 */\n  setIntercityPolicy: (policy: number) => void;\n  /** 设置跨城交通方式（火车/飞机/大巴） */\n  setTransitTypePolicy: (policy: number) => void;\n};\n\nexport function useTransitRoute<T = unknown>(opts: TransitRouteOptions = {}): TransitRouteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const searchCbRef = useRef<((results: unknown) => void) | null>(null);\n  const autoRenderRef = useRef(false);\n  const primedRef = useRef(false);\n\n  const [state, setState] = useState<{ data: DrivingRouteResult | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ policy: opts.policy, intercityPolicy: opts.intercityPolicy, transitTypePolicy: opts.transitTypePolicy, ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (opts.policy !== undefined) searchOpts.policy = opts.policy;\n    if (opts.intercityPolicy !== undefined) searchOpts.intercityPolicy = opts.intercityPolicy;\n    if (opts.transitTypePolicy !== undefined) searchOpts.transitTypePolicy = opts.transitTypePolicy;\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    searchOpts.onSearchComplete = (results: unknown) => { searchCbRef.current?.(results); };\n    if (callbacksRef.current.onMarkersSet) searchOpts.onMarkersSet = (pois: unknown[]) => callbacksRef.current.onMarkersSet?.(pois);\n    if (callbacksRef.current.onInfoHtmlSet) searchOpts.onInfoHtmlSet = (poi: unknown, html: HTMLElement) => callbacksRef.current.onInfoHtmlSet?.(poi, html);\n    if (callbacksRef.current.onPolylinesSet) searchOpts.onPolylinesSet = (pls: unknown[]) => callbacksRef.current.onPolylinesSet?.(pls);\n    if (callbacksRef.current.onResultsHtmlSet) searchOpts.onResultsHtmlSet = (c: HTMLElement) => callbacksRef.current.onResultsHtmlSet?.(c);\n\n    const handle = driver.createTransitRoute(Object.keys(searchOpts).length > 0 ? searchOpts : undefined);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('TransitRoute', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    autoRenderRef.current = ro.map != null;\n    primedRef.current = false;\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => { searchCbRef.current?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => {\n      // SDK 的 clearResults 在 renderer 的 map 未就绪/已卸载时会抛，effect cleanup 里抛出会把组件树带崩。\n      try { rawRef.current?.clearResults?.(); } catch { /* noop */ }\n      rawRef.current = null;\n      searchCbRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((start: unknown, end: unknown, _options?: { waypoints?: unknown[] }) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    const SDK = getSDK();\n    const toPoint = (v: unknown) => {\n      if (!v) return v;\n      if (isHandle(v)) return v.raw;\n      if (typeof v === 'object' && 'lng' in v) {\n        const p = v as { lng: number; lat: number };\n        return new SDK.Point(p.lng, p.lat);\n      }\n      return v;\n    };\n    const s = toPoint(start);\n    const e = toPoint(end);\n    const cb = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      let actual = results;\n      if (!actual || (typeof actual === 'object' && Object.keys(actual as object).length === 0)) {\n        try { actual = raw.getResults?.(); } catch { /* noop */ }\n      }\n      callbacksRef.current.onSearchComplete?.(actual as DrivingRouteResult);\n      setState({ data: (actual ?? results) as DrivingRouteResult, loading: false, error: null, supported: true });\n      // 首搜渲染竞态兜底：自动渲染实例首次完成后同参补搜一次，确保首帧出线（每实例一次）。\n      if (autoRenderRef.current && !primedRef.current) {\n        primedRef.current = true;\n        try { raw.search?.(s, e); } catch { /* noop */ }\n      }\n    };\n    searchCbRef.current = cb;\n    if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(cb);\n    try { raw.search?.(s, e); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => { try { rawRef.current?.clearResults?.(); } catch { /* noop */ } setState(s => ({ ...s, data: undefined, loading: false })); }, []);\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setPolicy = useCallback((p: number) => { rawRef.current?.setPolicy?.(p); }, []);\n  const setPageCapacity = useCallback((n: number) => { rawRef.current?.setPageCapacity?.(n); }, []);\n  const setIntercityPolicy = useCallback((p: number) => { rawRef.current?.setIntercityPolicy?.(p); }, []);\n  const setTransitTypePolicy = useCallback((p: number) => { rawRef.current?.setTransitTypePolicy?.(p); }, []);\n  const setLocation = useCallback((location: unknown) => {\n    rawRef.current?.setLocation?.(unwrapHandle(location));\n  }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const setPolylineStyle = useCallback((style: Record<string, unknown>) => { rawRef.current?.setPolylineStyle?.(style); }, []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n\n  return { ...state, search, clearResults, enableAutoViewport, disableAutoViewport, setPolicy, setPageCapacity, setIntercityPolicy, setTransitTypePolicy, setLocation, setPolylineStyle, getStatus, cancel };\n}\n","/**\n * useBusLineSearch — 公交线路搜索 Hook（手写）。\n * SDK：getBusList(keyword) / getBusLine(item) / enableAutoViewport / disableAutoViewport / setLocation / getStatus\n * 回调：setGetBusListCompleteCallback / setGetBusLineCompleteCallback\n * 注意：SDK 的 BusLineSearch 没有原生 clearResults，clearResults() 只清 hook 的 data 状态（地图渲染不受影响）。\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\n\nexport interface BusLineSearchOptions {\n  location?: unknown;\n  /** renderOptions.map 非必传：`<Map>` 内部自动取当前地图，外层需显式传已就绪 handle；见 `useMap`/`useMapReady`。 */\n  renderOptions?: { map?: unknown; panel?: string | HTMLElement; autoViewport?: boolean };\n  /** 是否自动在地图上渲染线路（默认 true）。传 false＝仅取数据：不注入地图、缺省 location 用中心点，避免自动画线路。2.0.3 新增。 */\n  autoRender?: boolean;\n  onGetBusListComplete?: (results: unknown) => void;\n  onGetBusLineComplete?: (results: unknown) => void;\n}\n\nexport interface BusLineSearchHookResult {\n  data: unknown;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  getBusList: (keyword: string) => void;\n  getBusLine: (item: unknown) => void;\n  /** 只清 hook 的 data 状态；SDK 无原生 clear，地图上已渲染的线路不受影响 */\n  clearResults: () => void;\n  /** 开启检索后自动调整视野，2.0.4 新增 */\n  enableAutoViewport: () => void;\n  /** 关闭自动调整视野，2.0.4 新增 */\n  disableAutoViewport: () => void;\n  /** 运行时设置检索城市/区域，2.0.4 新增 */\n  setLocation: (location: unknown) => void;\n  /** 最近一次检索的状态码（BMAP_STATUS_*），2.0.4 新增 */\n  getStatus: () => number | undefined;\n  cancel: () => void;\n}\n\nexport function useBusLineSearch(opts: BusLineSearchOptions = {}): BusLineSearchHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const cbRef = useRef<((results: unknown) => void) | null>(null);\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    // 构造时注册回调 — 通过 ref 调用最新回调\n    searchOpts.onGetBusListComplete = (results: unknown) => { cbRef.current?.(results); callbacksRef.current.onGetBusListComplete?.(results); };\n    searchOpts.onGetBusLineComplete = (results: unknown) => { cbRef.current?.(results); callbacksRef.current.onGetBusLineComplete?.(results); };\n\n    const handle = driver.createBusLineSearch(Object.keys(searchOpts).length > 0 ? searchOpts : undefined);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('BusLineSearch', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    const raw = rawRef.current;\n    if (typeof raw.setGetBusListCompleteCallback === 'function') {\n      raw.setGetBusListCompleteCallback((results: unknown) => { cbRef.current?.(results); callbacksRef.current.onGetBusListComplete?.(results); });\n    }\n    if (typeof raw.setGetBusLineCompleteCallback === 'function') {\n      raw.setGetBusLineCompleteCallback((results: unknown) => { cbRef.current?.(results); callbacksRef.current.onGetBusLineComplete?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; cbRef.current = null; };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const getBusList = useCallback((keyword: string) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    cbRef.current = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      setState({ data: results, loading: false, error: null, supported: true });\n    };\n    try { raw.getBusList?.(keyword); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const getBusLine = useCallback((item: unknown) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    cbRef.current = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      setState({ data: results, loading: false, error: null, supported: true });\n    };\n    try { raw.getBusLine?.(item); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => { try { rawRef.current?.clearResults?.(); } catch { /* noop */ } setState(s => ({ ...s, data: undefined, loading: false })); }, []);\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setLocation = useCallback((location: unknown) => { rawRef.current?.setLocation?.(unwrapHandle(location)); }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n\n  return { ...state, getBusList, getBusLine, clearResults, enableAutoViewport, disableAutoViewport, setLocation, getStatus, cancel };\n}\n","/**\n * useAutocomplete — 输入提示 Hook（手写）。\n * SDK：search(keywords) / show / hide / setTypes / setLocation / getResults / setInputValue / dispose\n * 回调：onSearchComplete / onConfirm / onHighlight\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\n\nexport interface AutocompleteOptions {\n  location?: unknown;\n  types?: string[];\n  input?: string | HTMLElement;\n  /** renderOptions.map 非必传：`<Map>` 内部自动取当前地图，外层需显式传已就绪 handle；见 `useMap`/`useMapReady`。 */\n  renderOptions?: { map?: unknown; panel?: string | HTMLElement };\n  onSearchComplete?: (results: unknown) => void;\n  /** 用户选中某条建议项时触发（对应 SDK 构造项 onConfirm / 原生 onconfirm 事件） */\n  onConfirm?: (item: unknown) => void;\n  /** 高亮项变化时触发（current, previous）（对应 SDK 构造项 onHighlight / 原生 onhighlight 事件） */\n  onHighlight?: (current: unknown, previous?: unknown) => void;\n}\n\nexport interface AutocompleteHookResult {\n  data: unknown;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  search: (keywords: string) => void;\n  show: () => void;\n  hide: () => void;\n  getResults: () => unknown;\n  /** 设置绑定输入框的值，2.0.4 新增 */\n  setInputValue: (value: string) => void;\n  /** 运行时设置返回结果类型限定，2.0.4 新增 */\n  setTypes: (types: string[]) => void;\n  /** 运行时设置检索城市/区域，2.0.4 新增 */\n  setLocation: (location: unknown) => void;\n  /** 最近一次的状态码，2.0.4 新增 */\n  getStatus: () => number | undefined;\n  cancel: () => void;\n}\n\nexport function useAutocomplete(opts: AutocompleteOptions = {}): AutocompleteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const cbRef = useRef<((results: unknown) => void) | null>(null);\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ types: opts.types, ro: opts.renderOptions, input: opts.input });\n\n  useEffect(() => {\n    if (!driver) return;\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>/renderOptions.map（与原生 new BMap.Autocomplete({location: map}) 一致）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else if (renderMap) {\n      searchOpts.location = unwrapHandle(renderMap);\n    }\n    if (opts.types !== undefined) searchOpts.types = opts.types;\n    if (opts.input !== undefined) searchOpts.input = opts.input;\n    if (opts.renderOptions || renderMap) {\n      const ro: Record<string, unknown> = {};\n      if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n      if (renderMap) ro.map = unwrapHandle(renderMap);\n      searchOpts.renderOptions = ro;\n    }\n    searchOpts.onSearchComplete = (results: unknown) => { cbRef.current?.(results); callbacksRef.current.onSearchComplete?.(results); };\n    // onConfirm / onHighlight 走 4.0 推荐的构造项（addEventListener('onconfirm') 已废弃）；\n    // 用 callbacksRef 转发最新 handler，换回调无需重建实例。\n    searchOpts.onConfirm = (e: unknown) => {\n      // 归一化确认事件：构造项 onConfirm 传的是选中项本身（含 value），\n      // 而 addEventListener('onconfirm') 传的是 e.item.value。统一补齐成\n      // { ...e, value, item: { value } }，让上层始终可用 e.item.value / e.value。\n      const ev = (e && typeof e === 'object' ? e : {}) as Record<string, unknown>;\n      const value = (ev.item as { value?: unknown } | undefined)?.value ?? ev.value ?? e;\n      callbacksRef.current.onConfirm?.({ ...ev, value, item: ev.item ?? { value } });\n    };\n    searchOpts.onHighlight = (current: unknown, previous?: unknown) => callbacksRef.current.onHighlight?.(current, previous);\n\n    const handle = driver.createAutocomplete(searchOpts);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('Autocomplete', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    // 设置默认回调 — 输入框输入字符时自动触发 onSearchComplete\n    cbRef.current = (results: unknown) => {\n      setState({ data: results, loading: false, error: null, supported: true });\n    };\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current = null; cbRef.current = null; };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((keywords: string) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    const raw = rawRef.current;\n    cbRef.current = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      setState({ data: results, loading: false, error: null, supported: true });\n    };\n    if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(cbRef.current);\n    try { raw.search?.(keywords); }\n    catch (e) { if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, []);\n\n  const show = useCallback(() => { rawRef.current?.show?.(); }, []);\n  const hide = useCallback(() => { rawRef.current?.hide?.(); }, []);\n  const getResults = useCallback(() => rawRef.current?.getResults?.(), []);\n  const setInputValue = useCallback((value: string) => { rawRef.current?.setInputValue?.(value); }, []);\n  const setTypes = useCallback((types: string[]) => { rawRef.current?.setTypes?.(types); }, []);\n  const setLocation = useCallback((location: unknown) => { rawRef.current?.setLocation?.(unwrapHandle(location)); }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const cancel = useCallback(() => { requestIdRef.current++; setState(s => ({ ...s, loading: false })); }, []);\n\n  return { ...state, search, show, hide, getResults, setInputValue, setTypes, setLocation, getStatus, cancel };\n}\n","/**\n * usePlaceDetail — 地点详情 Hook（手写）。\n * SDK：render(uid) / rerender() / setData(data) / dispose()\n * render() 是异步的（SDK 内部发请求获取详情），loading 在 render 后保持 true。\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\n\nexport interface PlaceDetailOptions {\n  container?: HTMLElement;\n  compact?: boolean;\n  renderOptions?: unknown;\n  /** 必须传**已就绪**的 MapHandle（非 null）；见 `useMap`/`useMapReady` 时序说明。 */\n  map?: unknown;\n}\n\nexport interface PlaceDetailHookResult {\n  data: unknown;\n  loading: boolean;\n  error: Error | null;\n  supported: boolean;\n  render: (uid: string) => void;\n  rerender: () => void;\n  dispose: () => void;\n}\n\nexport function usePlaceDetail(opts: PlaceDetailOptions = {}): PlaceDetailHookResult {\n  const { driver } = useBMapContext();\n  const rawRef = useRef<any>(null);\n\n  const [state, setState] = useState<{ data: unknown; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const optKey = stableStringify({ compact: opts.compact, ro: opts.renderOptions, container: opts.container });\n\n  useEffect(() => {\n    if (!driver) return;\n    const container = opts.container ?? document.createElement('div');\n\n    const searchOpts: Record<string, unknown> = { container };\n    if (opts.compact !== undefined) searchOpts.compact = opts.compact;\n    if (opts.renderOptions !== undefined) searchOpts.renderOptions = opts.renderOptions;\n\n    const handle = driver.createPlaceDetail(searchOpts);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('PlaceDetail', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => { rawRef.current?.dispose?.(); rawRef.current = null; };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, optKey]);\n\n  const render = useCallback((uid: string) => {\n    if (!rawRef.current) return;\n    setState(s => ({ ...s, loading: true, error: null }));\n    try {\n      const container = opts.container as HTMLElement | undefined;\n      if (container) container.innerHTML = '';\n      // render 接受字符串 uid，SDK 内部异步请求详情数据\n      rawRef.current.render?.(uid);\n      // SDK 异步渲染，延迟清除 loading\n      setTimeout(() => setState(s => ({ ...s, data: { uid }, loading: false })), 500);\n    } catch (e) {\n      setState(s => ({ ...s, loading: false, error: e as Error }));\n    }\n  }, [opts.container]);\n\n  const rerender = useCallback(() => { rawRef.current?.rerender?.(); }, []);\n  const dispose = useCallback(() => { rawRef.current?.dispose?.(); setState(s => ({ ...s, data: undefined })); }, []);\n\n  return { ...state, render, rerender, dispose };\n}\n","/**\n * useTruckRoute — 货车路线规划 Hook（手写）。\n * SDK 方法：search(start, end, { waypoints? }) / getResults / clearResults / setPolicy / setPageCapacity\n * / setIntercityPolicy / setTransitTypePolicy / setLocation / getStatus\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useBMapContext } from '../../context/BMapContext';\nimport { UnsupportedCapabilityError } from '../../drivers/unsupported';\nimport { stableStringify } from '../../utils/stableStringify';\nimport { isHandle, unwrapHandle } from '../../utils/handle';\nimport { useRenderMap } from './useRenderMap';\nimport { fallbackLocation } from './renderHelpers';\nimport { useServiceTimeout, serviceTimeoutError } from './useServiceTimeout';\nimport { getSDK } from '../../utils/sdk';\nimport type { DrivingRouteOptions, DrivingRouteHookResult } from './useDrivingRoute';\nimport type { DrivingRouteResult } from '../../types/results';\n\n// 货车不支持 alternatives（SDK TruckRoute 构造函数不读 alternatives，仅 DrivingRoute 支持）。\nexport type TruckRouteOptions = Omit<DrivingRouteOptions, 'alternatives'>;\nexport type TruckRouteHookResult = DrivingRouteHookResult & { setPageCapacity: (n: number) => void };\n\nexport function useTruckRoute<T = unknown>(opts: TruckRouteOptions = {}): TruckRouteHookResult {\n  const { driver } = useBMapContext();\n  const renderMap = useRenderMap(opts.renderOptions?.map);\n  const rawRef = useRef<any>(null);\n  const requestIdRef = useRef(0);\n  const { arm, clear } = useServiceTimeout();\n  const callbacksRef = useRef(opts);\n  callbacksRef.current = opts;\n  const searchCbRef = useRef<((results: unknown) => void) | null>(null);\n  const autoRenderRef = useRef(false);\n  const primedRef = useRef(false);\n\n  const [state, setState] = useState<{ data: DrivingRouteResult | undefined; loading: boolean; error: Error | null; supported: boolean }>({\n    data: undefined, loading: false, error: null, supported: true,\n  });\n\n  const locKey = stableStringify(opts.location);\n  const optKey = stableStringify({ policy: opts.policy, ar: opts.autoRender, ro: opts.renderOptions });\n\n  useEffect(() => {\n    if (!driver) return;\n    const dataOnly = opts.autoRender === false;\n    const ro: Record<string, unknown> = {};\n    if (opts.renderOptions) Object.assign(ro, opts.renderOptions);\n    if (dataOnly) delete ro.map;\n    else if (renderMap) ro.map = unwrapHandle(renderMap);\n    const searchOpts: Record<string, unknown> = {};\n    // location 缺省时回退到当前 <Map>（dataOnly 用中心点而非 Map，避免自动渲染）\n    if (opts.location !== undefined) {\n      searchOpts.location = unwrapHandle(opts.location);\n    } else {\n      const loc = fallbackLocation(driver, renderMap, dataOnly);\n      if (loc !== '') searchOpts.location = loc;\n    }\n    if (opts.policy !== undefined) searchOpts.policy = opts.policy;\n    if (Object.keys(ro).length > 0) searchOpts.renderOptions = ro;\n    searchOpts.onSearchComplete = (results: unknown) => { searchCbRef.current?.(results); };\n    if (callbacksRef.current.onMarkersSet) searchOpts.onMarkersSet = (pois: unknown[]) => callbacksRef.current.onMarkersSet?.(pois);\n    if (callbacksRef.current.onInfoHtmlSet) searchOpts.onInfoHtmlSet = (poi: unknown, html: HTMLElement) => callbacksRef.current.onInfoHtmlSet?.(poi, html);\n    if (callbacksRef.current.onPolylinesSet) searchOpts.onPolylinesSet = (pls: unknown[]) => callbacksRef.current.onPolylinesSet?.(pls);\n    if (callbacksRef.current.onResultsHtmlSet) searchOpts.onResultsHtmlSet = (c: HTMLElement) => callbacksRef.current.onResultsHtmlSet?.(c);\n\n    const handle = driver.createTruckRoute(searchOpts);\n    if (handle.isNull) {\n      setState({ data: undefined, loading: false, error: new UnsupportedCapabilityError('TruckRoute', driver.version), supported: false });\n      return;\n    }\n    rawRef.current = handle.raw;\n    autoRenderRef.current = ro.map != null;\n    primedRef.current = false;\n    const raw = rawRef.current;\n    if (typeof raw.setSearchCompleteCallback === 'function') {\n      raw.setSearchCompleteCallback((results: unknown) => { searchCbRef.current?.(results); });\n    }\n    setState(s => ({ ...s, supported: true, error: null }));\n    return () => {\n      // SDK 的 clearResults 会去摸 renderer 上的 map（this._map._removeNormalLayer）：实例创建时\n      // renderOptions.map 还没就绪（首帧常见），或 map 已先卸载，这里就会抛 —— 抛在 effect cleanup\n      // 里会直接把组件树带崩，所以必须吞掉。\n      try { rawRef.current?.clearResults?.(); } catch { /* noop */ }\n      rawRef.current = null;\n      searchCbRef.current = null;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [driver, locKey, optKey, renderMap]);\n\n  const search = useCallback((start: unknown, end: unknown, options?: { waypoints?: unknown[] }) => {\n    if (!rawRef.current) return;\n    const requestId = ++requestIdRef.current;\n    setState(s => ({ ...s, loading: true, error: null }));\n    arm(() => {\n      if (requestId !== requestIdRef.current) return;\n      setState(s => ({ ...s, loading: false, error: serviceTimeoutError() }));\n    });\n    const raw = rawRef.current;\n    const SDK = getSDK();\n    const toPoint = (v: unknown) => {\n      if (!v) return v;\n      if (isHandle(v)) return v.raw;\n      if (typeof v === 'object' && 'lng' in v) {\n        const p = v as { lng: number; lat: number };\n        return new SDK.Point(p.lng, p.lat);\n      }\n      return v;\n    };\n    const s = toPoint(start);\n    const e = toPoint(end);\n    const wp = options?.waypoints ? { waypoints: options.waypoints.map(toPoint) } : undefined;\n    const cb = (results: unknown) => {\n      if (requestId !== requestIdRef.current) return;\n      clear();\n      let actual = results;\n      if (!actual || (typeof actual === 'object' && Object.keys(actual as object).length === 0)) {\n        try { actual = raw.getResults?.(); } catch { /* noop */ }\n      }\n      callbacksRef.current.onSearchComplete?.(actual as DrivingRouteResult);\n      setState({ data: (actual ?? results) as DrivingRouteResult, loading: false, error: null, supported: true });\n      // 首搜渲染竞态兜底：自动渲染实例首次完成后同参补搜一次，确保首帧出线（每实例一次）。\n      if (autoRenderRef.current && !primedRef.current) {\n        primedRef.current = true;\n        try { raw.search?.(s, e, wp); } catch { /* noop */ }\n      }\n    };\n    searchCbRef.current = cb;\n    if (typeof raw.setSearchCompleteCallback === 'function') raw.setSearchCompleteCallback(cb);\n    try { raw.search?.(s, e, wp); }\n    catch (e) { clear(); if (requestId === requestIdRef.current) setState(s => ({ ...s, loading: false, error: e as Error })); }\n  }, [arm, clear]);\n\n  const clearResults = useCallback(() => { try { rawRef.current?.clearResults?.(); } catch { /* noop */ } setState(s => ({ ...s, data: undefined, loading: false })); }, []);\n  const enableAutoViewport = useCallback(() => { rawRef.current?.enableAutoViewport?.(); }, []);\n  const disableAutoViewport = useCallback(() => { rawRef.current?.disableAutoViewport?.(); }, []);\n  const setPolicy = useCallback((p: number) => { rawRef.current?.setPolicy?.(p); }, []);\n  const setPageCapacity = useCallback((n: number) => { rawRef.current?.setPageCapacity?.(n); }, []);\n  const setLocation = useCallback((location: unknown) => {\n    rawRef.current?.setLocation?.(unwrapHandle(location));\n  }, []);\n  const getStatus = useCallback(() => rawRef.current?.getStatus?.(), []);\n  const setPolylineStyle = useCallback((style: Record<string, unknown>) => { rawRef.current?.setPolylineStyle?.(style); }, []);\n  const cancel = useCallback(() => { requestIdRef.current++; clear(); setState(s => ({ ...s, loading: false })); }, [clear]);\n\n  return { ...state, search, clearResults, enableAutoViewport, disableAutoViewport, setPolicy, setPageCapacity, setLocation, setPolylineStyle, getStatus, cancel };\n}\n","import { Component } from 'react';\nimport type { ErrorInfo, ReactNode } from 'react';\n\nexport interface BMapErrorBoundaryProps {\n  fallback?: ReactNode;\n  onError?: (error: Error, info: ErrorInfo) => void;\n  children?: ReactNode;\n}\n\ninterface State { hasError: boolean; error: Error | null; }\n\n/**\n * 可选导出的错误边界（DESIGN.md §11.1）。\n *\n * 捕获子树抛出的 UnsupportedCapabilityError、SDK 异常等。\n * 用户可包在 <BMapProvider> 或 <Map> 外层。\n */\nexport class BMapErrorBoundary extends Component<BMapErrorBoundaryProps, State> {\n  state: State = { hasError: false, error: null };\n\n  static getDerivedStateFromError(error: Error): State {\n    return { hasError: true, error };\n  }\n\n  componentDidCatch(error: Error, info: ErrorInfo): void {\n    this.props.onError?.(error, info);\n  }\n\n  render(): ReactNode {\n    if (this.state.hasError) {\n      return this.props.fallback ?? null;\n    }\n    return this.props.children;\n  }\n}\n"],"names":["BMapContext","createContext","useBMapContext","useContext","V4_MAP_VIEW","V4_LAYER_CLASS","V4_MAP_LAYER","V4_OVERLAY","V4_CONTROL","V4_SERVICE","V4_MISC","V4_MAP_UTIL","V3_MAP_ONLY","V3_OVERLAY_ONLY","COMMON","v3Set","v4Set","CAPABILITY_MATRIX","isHandle","value","unwrapHandle","debugWarn","context","cause","devWarn","message","env","_a","UnsupportedCapabilityError","capability","version","reportUnsupported","behavior","isMissingMember","e","reportCallFailure","error","unsupportedValue","fallback","tryOp","fn","pointEquals","a","b","eps","pointToPlain","p","r","mapHandle","raw","overlayHandle","type","controlHandle","layerHandle","kind","serviceHandle","isNull","rawOf","h","rawMap","m","isOverlayLikeLayer","l","LAYER_BRANDS","unwrapTileWrapper","collisionState","collisionManagers","overlayToCM","destroyedMaps","CollisionManager","mapRaw","__publicField","evalFn","moveFn","zoomFn","_b","rawMarker","entries","pos","px","_c","_d","THRESHOLD_SQ","s","i","j","dx","dy","container","_f","_e","_h","_g","toRawPoint","SDK","toRawIcon","icon","path","symOpts","sz","isV3","opts","off","inst","toRawSize","OPTION_ACCESSOR_ALIAS","optionAccessor","key","alias","cap","toRawPoints","toRawPointGroups","groups","g","isNestedPath","toRawPathOrPaths","applyEditNodeIcons","ctorOpts","toRawPixel","toRawBounds","toPlainPoint","toPlainBounds","sw","ne","swP","neP","toPlainSize","toPlainPixel","toRawControlOptions","options","out","v","applyCopyrights","control","copyrights","item","rawItem","HANDLED_OVERLAY_OPTION_KEYS","warnedOverlayOptionKeys","warnUnhandledOverlayOptions","o","k","seen","createV4Driver","rawSDK","capabilities","callRaw","getRaw","createOverlayFactory","ctor","createControlFactory","createLayerFactory","createServiceFactory","map","handle","layers","layer","c","t","z","size","level","point","lng","lat","x","y","date","uid","cb","iw","id","tilePosStr","u","zc","currentOpen","desired","target","menu","inferOverlayType","marker","label","cv","floor","display","cfg","rawCfg","hasOpts","strokeFields","f","ic","fields","rawPath","wantEditing","rafId","origRemove","cp","safeCp","pathLen","altitude","url","imgSize","sym","offset","repeat","fr","domCreate","height","ov","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","styles","_F","_G","_H","_I","_J","_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","__","_$","_aa","_ba","_ca","_da","keys","get","set","snapshot","failed","pd","CustomControlImpl","div","layerName","createDOM","_cd","text","idx","content","labelOpts","loc","service","query","callbacks","cancelled","safeCb","data","err","handler","globalScope","getSDK","sdk","tryGetSDK","createV3Driver","pano","city","w","anchor","offsetRaw","ControlCtor","SizeCtor","proto","instance","points","pt","MP","proj","createDriver","stableHash","globalRegistry","buildLoadKey","getExisting","loadKey","register","components","promise","getAllEntries","detectConflict","requested","entry","loadJSAPI","existing","conflict","doLoad","mod","stableStringify","serialize","BMapProvider","ak","protocol","serviceHost","language","plugins","timeout","globalConfig","unsupportedBehavior","onError","onLoadConflict","errorFallback","children","state","setState","useState","generationRef","useRef","onErrorRef","onLoadConflictRef","useMemo","globalConfigKey","useEffect","my","current","real","driver","BMAP_ANCHOR_TOP_LEFT","BMAP_ANCHOR_TOP_RIGHT","BMAP_ANCHOR_BOTTOM_LEFT","BMAP_ANCHOR_BOTTOM_RIGHT","BMAP_ANCHOR_TOP_CENTER","BMAP_ANCHOR_MIDDLE_LEFT","BMAP_ANCHOR_CENTER","BMAP_ANCHOR_MIDDLE_RIGHT","BMAP_ANCHOR_BOTTOM_CENTER","BMAP_STATUS_SUCCESS","BMAP_STATUS_CITY_LIST","BMAP_STATUS_UNKNOWN_LOCATION","BMAP_STATUS_UNKNOWN_ROUTE","BMAP_STATUS_INVALID_KEY","BMAP_STATUS_INVALID_REQUEST","BMAP_STATUS_PERMISSION_DENIED","BMAP_STATUS_SERVICE_UNAVAILABLE","BMAP_STATUS_TIMEOUT","BMAP_DRIVING_POLICY_DEFAULT","BMAP_DRIVING_POLICY_DESTANCE","BMAP_DRIVING_POLICY_AVOID_HIGHWAYS","BMAP_DRIVING_POLICY_FIRST_HIGHWAYS","BMAP_DRIVING_POLICY_AVOID_CONGESTION","BMAP_DRIVING_POLICY_AVOID_PAY","BMAP_DRIVING_POLICY_HIGHWAYS_AVOID_CONGESTION","BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION","BMAP_DRIVING_POLICY_AVOID_CONGESTION_PAY","BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_CONGESTION_PAY","BMAP_DRIVING_POLICY_AVOID_HIGHWAYS_PAY","BMAP_DRIVING_POLICY_DISTANCE_PRIORITY","BMAP_DRIVING_POLICY_TIME_PRIORITY","BMAP_TRANSIT_POLICY_RECOMMEND","BMAP_TRANSIT_POLICY_LEAST_TRANSFER","BMAP_TRANSIT_POLICY_LEAST_WALKING","BMAP_TRANSIT_POLICY_AVOID_SUBWAYS","BMAP_TRANSIT_POLICY_LEAST_TIME","BMAP_TRANSIT_POLICY_FIRST_SUBWAYS","BMAP_ANIMATION_BOUNCE","BMAP_ANIMATION_DROP","BMAP_UNIT_METRIC","BMAP_UNIT_IMPERIAL","BMAP_LANG_CN","BMAP_LANG_EN","BMAP_NAVIGATION_CONTROL_LARGE","BMAP_NAVIGATION_CONTROL_SMALL","BMAP_NAVIGATION_CONTROL_PAN","BMAP_NAVIGATION_CONTROL_ZOOM","BMAP_MAPTYPE_CONTROL_HORIZONTAL","BMAP_MAPTYPE_CONTROL_DROPDOWN","BMAP_MAPTYPE_CONTROL_MAP","BMAP_SHAPE_CIRCLE","BMAP_SHAPE_RECTANGLE","getSdkConstant","name","BMAP_ANCHOR_LEFT_CENTER","BMAP_ANCHOR_RIGHT_CENTER","BMAP_NORMAL_MAP","BMAP_SATELLITE_MAP","BMAP_HYBRID_MAP","BMAP_EARTH_MAP","BMAP_TRANSIT_TYPE_IN_CITY","BMAP_TRANSIT_TYPE_CROSS_CITY","BMAP_TRANSIT_TYPE_POLICY_TRAIN","BMAP_TRANSIT_TYPE_POLICY_AIRPLANE","BMAP_TRANSIT_TYPE_POLICY_COACH","BMAP_TRANSIT_PLAN_TYPE_ROUTE","BMAP_TRANSIT_PLAN_TYPE_LINE","BMAP_INTERCITY_POLICY_LEAST_TIME","BMAP_INTERCITY_POLICY_EARLY_START","BMAP_INTERCITY_POLICY_CHEAP_PRICE","BMAP_LANGUAGE_ZH","BMAP_LANGUAGE_EN","BMAP_LANGUAGE_ZH_TW","BMAP_LANGUAGE_ES","BMAP_LANGUAGE_PT","BMAP_LANGUAGE_FR","BMAP_LANGUAGE_DE","BMAP_LANGUAGE_TH","BMAP_LANGUAGE_JA","BMAP_LANGUAGE_KO","BMAP_LANGUAGE_TR","BMAP_LANGUAGE_IT","BMAP_LANGUAGE_RU","BMAP_LANGUAGE_MS","BMAP_LANGUAGE_VI","BMAP_LANGUAGE_ID","BMAP_COORD_MERCATOR","BMAP_COORD_GCJ02","BMAP_COORD_BD09","BMAP_COORD_GCJ02MERCATOR","BMAP_COORD_WGS84","BMAP_COORD_EPSG3857","BMap_Symbol_SHAPE_CIRCLE","BMap_Symbol_SHAPE_RECTANGLE","BMap_Symbol_SHAPE_RHOMBUS","BMap_Symbol_SHAPE_STAR","BMap_Symbol_SHAPE_BACKWARD_CLOSED_ARROW","BMap_Symbol_SHAPE_FORWARD_CLOSED_ARROW","BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW","BMap_Symbol_SHAPE_FORWARD_OPEN_ARROW","BMap_Symbol_SHAPE_POINT","BMap_Symbol_SHAPE_PLANE","BMap_Symbol_SHAPE_CAMERA","BMap_Symbol_SHAPE_WARNING","BMap_Symbol_SHAPE_SMILE","BMap_Symbol_SHAPE_CLOCK","BMAP_POINT_SHAPE_STAR","BMAP_POINT_SHAPE_WATERDROP","BMAP_POINT_SHAPE_CIRCLE","BMAP_POINT_SHAPE_SQUARE","BMAP_POINT_SHAPE_RHOMBUS","BMAP_POINT_SHAPE_LAYER_CIRCLE","BMAP_POINT_SHAPE_LAYER_SQUARE","BMAP_POINT_SHAPE_LAYER_TRIANGLE","BMAP_POINT_SHAPE_LAYER_DIAMOND","BMAP_POINT_SHAPE_LAYER_CROSS","BMAP_POINT_SHAPE_LAYER_ARROW","BMAP_POINT_SHAPE_LAYER_ARROW_TAIL","BMAP_POINT_SHAPE_LAYER_STAR","BMAP_POINT_SHAPE_LAYER_WATERDROP","BMAP_POINT_SIZE_TINY","BMAP_POINT_SIZE_SMALLER","BMAP_POINT_SIZE_SMALL","BMAP_POINT_SIZE_NORMAL","BMAP_POINT_SIZE_BIG","BMAP_POINT_SIZE_BIGGER","BMAP_POINT_SIZE_HUGE","BMAP_SHAPE_RECT","BMAP_HIGHLIGHT_STEP","BMAP_HIGHLIGHT_ROUTE","BMAP_POI_TYPE_NORMAL","BMAP_POI_TYPE_BUSSTOP","BMAP_POI_TYPE_BUSLINE","BMAP_POI_TYPE_SUBSTOP","BMAP_POI_TYPE_SUBLINE","BMAP_MODE_DRIVING","BMAP_MODE_TRANSIT","BMAP_MODE_WALKING","BMAP_MODE_NAVIGATION","BMAP_ROUTE_STATUS_NORMAL","BMAP_ROUTE_STATUS_EMPTY","BMAP_ROUTE_STATUS_ADDRESS","BMAP_ROUTE_TYPE_WALKING","BMAP_ROUTE_TYPE_DRIVING","BMAP_ROUTE_TYPE_RIDING","BMAP_TRAFFICE_STATUS_NONE","BMAP_TRAFFICE_STATUS_NORMAL","BMAP_TRAFFICE_STATUS_SLOW","BMAP_TRAFFICE_STATUS_JAM","BMAP_POINT_DENSITY_HIGH","BMAP_POINT_DENSITY_MEDIUM","BMAP_POINT_DENSITY_LOW","BMAP_CONTEXT_MENU_ICON_ZOOMIN","BMAP_CONTEXT_MENU_ICON_ZOOMOUT","BMAP_LINE_TYPE_BUS","BMAP_LINE_TYPE_SUBWAY","BMAP_LINE_TYPE_FERRY","BMAP_LINE_TYPE_TRAIN","BMAP_LINE_TYPE_AIRPLANE","BMAP_LINE_TYPE_COACH","BMAP_PANORAMA_POI_HOTEL","BMAP_PANORAMA_POI_CATERING","BMAP_PANORAMA_POI_MOVIE","BMAP_PANORAMA_POI_TRANSIT","BMAP_PANORAMA_POI_INDOOR_SCENE","BMAP_PANORAMA_POI_NONE","BMAP_PANORAMA_STREET_SCENE","BMAP_PANORAMA_INDOOR_SCENE","MapContext","useMapContext","ctx","OverlayTargetContext","emptySubscribe","emptyGetTarget","useOverlayTarget","store","useSyncExternalStore","lastRef","last","MapRefImpl","heading","tilt","zoom","pixel","mcLng","mcLat","start","end","callback","spots","areaSpot","labels","labelUids","clickPosition","bounds","center","view","viewportOptions","zoomCenter","mapTypeId","overlay","mapType","config","theme","customVars","logo","cpy","cursor","viewAnimation","show","lock","regions","isOn","mask","parking","hotspot","useLatest","ref","Map","forwardRef","props","defaultCenter","defaultZoom","defaultHeading","defaultTilt","displayOptions","mapStyle","mapStyleV2","customArea","enableDragging","enableInertialDragging","enableScrollWheelZoom","enableContinuousZoom","enableResizeOnCenter","enableDoubleClickZoom","enableKeyboard","enablePinchToZoom","enableRotate","enableRotateGestures","enableTiltProp","enableTiltGestures","enableAutoResize","enableIconInfoWindow","enablePreferredLanguage","minZoom","maxZoom","defaultCursor","draggingCursor","onReady","onCenterChange","onZoomChange","onHeadingChange","onTiltChange","onClick","onDblClick","onRightClick","onMouseMove","onMouseDown","onMouseUp","onMouseOver","onMouseOut","onDragStart","onDragging","onDragEnd","onMoveStart","onMoving","onMoveEnd","onZoomStart","onZooming","onZoomEnd","onResize","onTilesLoaded","onMapTypeChange","onTouchStart","onTouchMove","onTouchEnd","onLongPress","className","style","status","containerRef","setMap","onReadyRef","onCenterChangeRef","onZoomChangeRef","onHeadingChangeRef","onTiltChangeRef","internalUpdateRef","useLayoutEffect","SDK_FILENAME","SDK_NULL_PROPS","OUR_MARK","tearingDown","glErrorHandler","event","msg","stack","propMatch","initial","initialStyle","initCenter","initZoom","initHeading","initTilt","unsubs","mapReady","markReady","fallbackId","currentZoom","currentHeading","currentTilt","toggleEffect","prop","enable","disable","lastCustomAreaRef","customAreaKey","eventProps","eventPropsRef","eventKey","EVENT_MAP","evt","ctxValue","jsx","Fragment","createOverlayComponent","Comp","memo","optionBaselineRef","propsRef","targetRef","listenersRef","notify","instanceVersion","setInstanceVersion","ctorKey","_children","rawProps","factoryProps","markerLabelTarget","attachToMarker","defaultableKeys","initOpts","reAddTimer","reAddRaf","unsubReady","reAdded","doReAdd","newHandle","posVal","posKey","pathVal","pathKey","optSnapshot","acc","optKey","appliedOptKeysRef","nextKeys","removed","restorable","unrestorable","visible","handlersRef","createControlComponent","optionDefaultKey","rawCtrl","ctrlProps","firstRunRef","unsub","createLayerComponent","cbRefs","ev","_keyChildren","propsForKey","layerKey","handleKeyRef","_c2","rawLayer","layerProps","add","remove","mounted","mountTimer","mountLayer","InfoWindow","open","position","onOpen","onClose","onClickClose","onMaximize","onRestore","width","maxWidth","title","enableAutoPan","enableCloseOnClick","enableMessage","maxContent","enableMaximize","enableSearchTool","iwRef","created","setCreated","ctorOnlyOptsKey","rawIW","handlers","refKey","openTarget","rawTarget","OPTION_PROPS","CTOR_ONLY_PROPS","EVENTS","pickDefined","pickSdkProps","_visible","_onClick","_onMouseOver","_onMouseOut","sdkProps","CustomOverlay","overlayRef","optionSnapshot","optionKey","createPortal","MapMask","handleRef","boundsKey","pointsKey","optsKey","pts","first","SimpleInfoWindow","contentKey","win","PlaceDetail","pdRef","targetHandle","lastPos","check","initPos","Marker","d","Label","Polyline","Polygon","Circle","Rectangle","BezierCurve","Prism","GroundOverlay","GroundPoint","PointCollection","Symbol","Icon","IconSequence","Hotspot","Marker3D","PlaceDetailPanel","React","compact","renderOptions","onRender","rawRef","NavigationControl","NavigationControl3D","ScaleControl","OverviewMapControl","MapTypeControl","CopyrightControl","GeolocationControl","PanoramaControl","ZoomControl","CityListControl","LocationControl","LogoControl","pickCtorOptions","CustomControl","controlRef","TrafficLayer","autoRefresh","refreshInterval","colors","edge","predictDate","colorsKey","FeatureLayer","idKey","crs","selectedIndex","selectedColor","opacity","enablePicked","autoSelect","zIndex","dataKey","LAYER_EVENTS","FillLayer","border","isFlat","drawPart","enableChangeSelectIndexByPick","popEvent","pickWidth","pickHeight","mouseStyleChange","referCenter","isTop","isLowText","setDataParams","setDataParamsRef","put","bound","styleKey","DOMLayer","offsetX","offsetY","anchors","coordinate","enableDraggingMap","nextTick","createDOMRef","stableCreateDOMRef","properties","stableCreateDOM","appliedDataKeyRef","PointIconLayer","isFixed","PointShapeLayer","LineLayer","isLinear","linearTexture","nodeShow","nodeMask","nodeStrict","nodeJoin","nodeBreakpoint","nodeMiddleShow","nodeMinZoom","linkLine","warnedMissingThree","warnMissingThree","toSDKPoint","ThreeLayerInner","alpha","antialias","mapRef","warnedOpacityRef","onInitRef","onRenderRef","preRenderRef","afterRenderRef","onDestroyRef","onHideRef","onShowRef","object","pair","useImperativeHandle","hasOnRender","hook","renderer","scene","camera","ThreeLayer","TileLayer","NormalLayer","GeoJSONLayer","DistrictLayer","CustomLayer","CanvasLayer","RasterTileLayer","WMSLayer","WMTSLayer","XYZLayer","MVTLayer","PanoramaCoverageLayer","PixelLayer","BaiduLayer","ContextMenuContext","ContextMenu","menuRef","attachedRef","menuHandle","setMenuHandle","MenuItem","iconWidth","cbRef","PanoramaRefImpl","pov","poiType","PanoramaContext","Panorama","setPano","curId","optionsKey","toApply","_drop","rest","ctxVal","PanoramaLabel","labelRef","onClickRef","labelKey","rawLabel","rawPano","clickHandler","useMap","useMapReady","useDriver","useMapRef","useCapabilities","useMapEvent","handlerRef","useMapStatus","cachedRef","cachedKeyRef","next","readSnapshot","snapshotKey","num","n","safePoint","safeNum","safeBounds","safeSize","useRawOverlay","create","deps","onCreate","createRef","onCreateRef","instanceRef","useRawControl","RawOverlayImpl","RawOverlay","RawControlImpl","RawControl","useSymbol","setHandle","useIcon","urlKey","useRenderMap","explicit","picked","SERVICE_TIMEOUT_MS","serviceTimeoutError","useServiceTimeout","timerRef","clear","useCallback","onTimeout","ms","useLocalSearch","renderMap","svcRef","requestIdRef","arm","callbacksRef","locKey","dataOnly","ro","searchOpts","results","pois","poi","html","polylines","doSearch","action","requestId","search","keyword","option","searchNearby","radius","searchInBounds","bd","gotoPage","page","clearResults","cancel","select","index","clearSelected","setLocation","location","enableAutoViewport","disableAutoViewport","enableFirstResultSelection","disableFirstResultSelection","setPageCapacity","getStatus","useGeocoder","doAction","myRequestId","getPoint","address","result","getLocation","setOptions","getPoints","addresses","resolve","done","timer","getLocations","useBoundary","parsebdStr","boundaryStr","useGeolocation","getCurrentPosition","enableSDKLocation","disableSDKLocation","useLocalCity","TRANSLATE_MAX_POINTS","useConvertor","translate","from","to","chunks","remaining","chunk","mergedPoints","badStatus","usePanoramaService","getPanoramaById","getPanoramaByLocation","getPanoramaByPOIId","poiId","fallbackLocation","useDrivingRoute","searchCbRef","autoRenderRef","primedRef","pls","toPoint","actual","setPolicy","policy","setPolylineStyle","useWalkingRoute","_options","useRidingRoute","useTransitRoute","setIntercityPolicy","setTransitTypePolicy","useBusLineSearch","getBusList","getBusLine","useAutocomplete","previous","keywords","hide","getResults","setInputValue","setTypes","types","usePlaceDetail","render","rerender","dispose","useTruckRoute","wp","BMapErrorBoundary","Component","info"],"mappings":"wwBAWaA,GAAcC,EAAAA,cAAgC,CACzD,OAAQ,UACR,OAAQ,KACR,QAAS,MACT,MAAO,IACT,CAAC,EAEM,SAASC,IAAmC,CACjD,OAAOC,EAAAA,WAAWH,EAAW,CAC/B,CCPA,MAAMI,GAA4B,CAChC,YAAa,iBAAkB,iBAAkB,cAAe,cAChE,yBAA0B,yBAA0B,4BAA6B,0BACjF,qBAAsB,wBAAyB,iBAC/C,mBAAoB,oBAAqB,iBAAkB,kBAC3D,2BAA4B,4BAC5B,yBAA0B,0BAC1B,2BAA4B,2BAC9B,EAGMC,GAA+B,CACnC,cAAe,eAAgB,gBAC/B,kBAAmB,WAAY,YAAa,WAAY,WACxD,YAAa,WACb,iBAAkB,kBAClB,YAAa,aAAc,aAAc,YAC3C,EAGMC,GAA6B,CACjC,qBAAsB,wBACtB,sBAAuB,yBACvB,uBAAwB,0BACxB,mBAAoB,mBACtB,EAGMC,GAA2B,CAE/B,QAAS,YAAa,cAAe,gBAAiB,cAAe,WAAY,mBAAoB,SACvG,EAGMC,GAA2B,CAC/B,sBAAuB,cAAe,aACxC,EAGMC,GAA2B,CAC/B,cAAe,kBACjB,EAGMC,GAAwB,CAC5B,YAAa,YAAa,oBAAqB,cAAe,gBAAiB,eAC/E,YAAa,gBAAiB,cAAe,QAAS,eAAgB,SAAU,mBAAoB,eACtG,EAGMC,GAA4B,CAChC,oBAAqB,uBAAwB,uBAC7C,eAAgB,mBAAoB,iBAAkB,iBACtD,uBAAwB,mBACxB,eAAgB,eAAgB,kBAAmB,iBAAkB,0BACrE,mBAAoB,sBACpB,8BAA+B,+BAC/B,wBACA,cACA,iBACF,EAGMC,GAA4B,CAChC,qBAAsB,sBACtB,uBAAwB,wBACxB,4BACA,qBACA,kBAAmB,kBAEnB,qBACA,sBACA,mBAAoB,sBAAuB,kBAC7C,EAGMC,GAAgC,CACpC,cACA,yBACA,iBACF,EAGMC,GAAuB,CAE3B,MAEA,gBAAiB,cAAe,oBAAqB,YAAa,YAClE,kBAAmB,kBAAmB,aAAc,cAAe,YACnE,gBAAiB,cAAe,gBAAiB,cAAe,kBAChE,mBAAoB,mBAAoB,0BAA2B,0BAEnE,qBAAsB,sBACtB,4BAA6B,6BAC7B,4BAA6B,6BAC7B,qBAAsB,sBACtB,6BAA8B,8BAC9B,2BAA4B,4BAC5B,wBAAyB,yBACzB,uBAAwB,wBAIxB,2BAA4B,4BAE5B,iBAAkB,oBAGlB,kBAAmB,oBACnB,oBAAqB,kBAAmB,iBAAkB,oBAE1D,UACA,SAAU,QAAS,WAAY,UAAW,SAC1C,gBAAiB,aAAc,SAAU,OAAQ,eACjD,UAEA,UACA,oBAAqB,eAAgB,qBAAsB,iBAC3D,mBAAoB,YAAa,qBAAsB,kBACvD,kBAEA,kBAEA,YAAa,eAAgB,cAAe,wBAE5C,cAAe,WAAY,eAAgB,eAAgB,eAC3D,cAAe,cAAe,YAAa,aAC3C,gBAAiB,eAAgB,WAAY,YAAa,kBAAmB,cAE7E,aAAc,qBAAsB,wBAEpC,WAAY,gBAEZ,cAAe,UACjB,EAEMC,GAAQ,IAAI,IAAgB,CAAC,GAAGD,GAAQ,GAAGF,GAAa,GAAGC,EAAe,CAAC,EAC3EG,OAAY,IAAgB,CAChC,GAAGF,GAAQ,GAAGV,GAAa,GAAGC,GAAgB,GAAGC,GAAc,GAAGC,GAAY,GAAGC,GAAY,GAAGC,GAAY,GAAGE,GAAa,GAAGD,EACjI,CAAC,EAEYO,GAAoE,CAC/E,MAAOF,GACP,MAAOC,EACT,EC/IO,SAASE,GAASC,EAAsC,CAC7D,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,YAAaA,CACrE,CAGO,SAASC,GAAaD,EAAyB,CACpD,OAAOD,GAASC,CAAK,EAAIA,EAAM,IAAMA,CACvC,CCRO,SAASE,EAAUC,EAAiBC,EAAuB,CAC5DA,IAAU,OAAWC,GAAQ,GAAGF,CAAO,SAAUC,CAAK,EACrDC,GAAQ,GAAGF,CAAO,OAAO,CAChC,CASO,SAASE,GAAQC,EAAiBF,EAAuB,OAC9D,GAAI,CAEF,MAAMG,GAAOC,EAAA,WAA0E,UAA1E,YAAAA,EAAmF,IAEhG,IADID,GAAA,YAAAA,EAAK,YAAa,cAClB,OAAO,QAAY,IAAa,OAChCH,IAAU,OAAW,QAAQ,KAAK,gBAAgBE,CAAO,GAAIF,CAAK,EACjE,QAAQ,KAAK,gBAAgBE,CAAO,EAAE,CAC7C,MAAQ,CAER,CACF,CC7BO,MAAMG,WAAmC,KAAM,CACpD,YAAmBC,EAA+BC,EAAsB,CACtE,MAAM,gBAAgBD,CAAU,8BAA8BC,CAAO,EAAE,EADtD,KAAA,WAAAD,EAA+B,KAAA,QAAAC,EAEhD,KAAK,KAAO,4BACd,CACF,CAcO,SAASC,EACdF,EACAC,EACAE,EACM,CACN,GAAIA,IAAa,QACf,MAAM,IAAIJ,GAA2BC,EAAYC,CAAO,EAEtDE,IAAa,QAAU,OAAO,QAAY,KAC5C,QAAQ,KAAK,gBAAgBH,CAAU,2BAA2BC,CAAO,SAAS,CAGtF,CAUO,SAASG,GAAgBC,EAAqB,CACnD,OAAOA,aAAa,WAAa,kCAAkC,KAAKA,EAAE,OAAO,CACnF,CAUO,SAASC,GACdN,EACAC,EACAE,EACAI,EACM,CACN,GAAIH,GAAgBG,CAAK,EAAG,CAC1BL,EAAkBF,EAAYC,EAASE,CAAQ,EAC/C,MACF,CACAX,EAAUQ,EAAYO,CAAK,CAC7B,CAUO,SAASC,GACdR,EACAC,EACAE,EACAM,EACG,CACH,OAAAP,EAAkBF,EAAYC,EAASE,CAAQ,EACxCM,CACT,CASO,SAASC,GAASC,EAA0B,CACjD,GAAI,CACF,MAAO,CAAE,GAAI,GAAM,MAAOA,GAAG,CAC/B,OAASN,EAAG,CACV,GAAIA,aAAaN,GACf,MAAO,CAAE,GAAI,GAAO,OAAQ,cAAe,WAAYM,EAAE,UAAA,EAE3D,MAAMA,CACR,CACF,CCtGO,SAASO,GAAYC,EAA6BC,EAA6BC,EAAM,KAAe,CACzG,MAAI,CAACF,GAAK,CAACC,EAAUD,IAAMC,EACpB,KAAK,IAAID,EAAE,IAAMC,EAAE,GAAG,GAAKC,GAAO,KAAK,IAAIF,EAAE,IAAMC,EAAE,GAAG,GAAKC,CACtE,CAEO,SAASC,GAAaC,EAA0B,CACrD,GAAI,CAACA,EAAG,OAAO,KACf,MAAMC,EAAID,EACV,OAAI,OAAOC,EAAE,KAAQ,UAAY,OAAOA,EAAE,KAAQ,SAAiB,KAC5D,CAAE,IAAKA,EAAE,IAAK,IAAKA,EAAE,GAAA,CAC9B,CCMA,MAAMC,GAAaC,IAA6B,CAAE,QAAS,YAAa,IAAAA,CAAA,GAClEC,GAAgB,CAACD,EAAcE,KAAiC,CAAE,QAAS,gBAAiB,IAAAF,EAAK,KAAAE,IACjGC,GAAgB,CAACH,EAAcE,KAAiC,CAAE,QAAS,gBAAiB,IAAAF,EAAK,KAAAE,IACjGE,GAAc,CAACJ,EAAcK,KAA4C,CAAE,QAAS,cAAe,IAAAL,EAAK,KAAAK,IACxGC,GAAgB,CAACN,EAAcO,KAAoC,CAAE,QAAS,gBAAiB,IAAAP,EAAK,OAAAO,IAEpGC,EAASC,GAAwBA,EAAE,IACnCC,EAAUC,GAAiBH,EAAMG,CAAC,EAMlCC,GAAsBC,GAAmBA,EAAE,OAAS,SAGpDC,GAAe,CAAC,gBAAiB,iBAAkB,cAAe,kBAAmB,oBAAqB,cAAc,EAKxHC,GAAqBf,GAAa,OACtC,MAAI,CAACA,GAAOc,GAAa,QAAUd,EAAIN,CAAC,CAAC,EAAUM,GAC5CtB,EAAAsB,EAAI,QAAJ,MAAAtB,EAAW,YAAcsB,EAAI,MAAQA,CAC9C,EAGMgB,OAAqB,QACrBC,OAAwB,QACxBC,OAAkB,QAKlBC,OAAoB,QAE1B,MAAMC,EAAiB,CAQrB,YAAYC,EAAa,CAPjBC,GAAA,eACAA,GAAA,mBAAc,KACdA,GAAA,aAA6B,MAC7BA,GAAA,aAAuB,MACvBA,GAAA,kBAAa,GACrBA,GAAA,yBAAoB,IAGlB,KAAK,OAASD,EACd,MAAME,EAAS,IAAM,KAAK,SAAA,EAC1B,GAAI,CACF,MAAMC,EAAS,IAAMD,EAAA,EACfE,EAAS,IAAMF,EAAA,EACrBF,EAAO,iBAAiB,UAAWG,CAAM,EACzCH,EAAO,iBAAiB,UAAWI,CAAM,EACzC,KAAK,MAAQ,IAAM,SACjB,GAAI,EAAE/C,EAAA2C,EAAO,sBAAP,MAAA3C,EAAA,KAAA2C,EAA6B,UAAWG,EAAS,MAAQ,CAAe,CAC9E,GAAI,EAAEE,EAAAL,EAAO,sBAAP,MAAAK,EAAA,KAAAL,EAA6B,UAAWI,EAAS,MAAQ,CAAe,CAChF,CACF,MAAQ,CAAe,CACzB,CAEA,SAASE,EAAgB,CACvB,KAAK,QAAQ,IAAIA,CAAS,EAC1BX,GAAe,IAAIW,EAAW,CAAE,OAAQ,GAAO,YAAa,GAAM,EAClET,GAAY,IAAIS,EAAW,IAAI,EAC/B,KAAK,WAAa,EAClB,KAAK,SAAA,CACP,CACA,WAAWA,EAAgB,CACzB,KAAK,QAAQ,OAAOA,CAAS,EAC7BX,GAAe,OAAOW,CAAS,EAC/BT,GAAY,OAAOS,CAAS,CAC9B,CAEA,OAAQ,CACN,UAAWhB,KAAK,KAAK,QAASK,GAAe,OAAOL,CAAC,EACrD,KAAK,QAAQ,MAAA,CACf,CAEA,UAAW,CACL,KAAK,OAAS,OAClB,KAAK,MAAQ,sBAAsB,IAAM,CAAE,KAAK,MAAQ,KAAM,KAAK,SAAA,CAAY,CAAC,EAClF,CAEA,UAAW,qBACT,GAAI,KAAK,QAAQ,KAAO,EAAG,OAC3B,MAAMiB,EAA2E,CAAA,EACjF,UAAWjB,KAAK,KAAK,QACnB,GAAI,CACF,MAAMkB,GAAMnD,EAAAiC,EAAE,cAAF,YAAAjC,EAAA,KAAAiC,GACZ,GAAI,CAACkB,EAAK,SACV,MAAMC,GAAKC,GAAAL,EAAA,KAAK,QAAO,eAAZ,YAAAK,EAAA,KAAAL,EAA2BG,GACtC,GAAI,CAACC,GAAM,OAAOA,EAAG,GAAM,SAAU,SACrCF,EAAQ,KAAK,CAAE,IAAKjB,EAAG,GAAI,CAAE,EAAGmB,EAAG,EAAG,EAAGA,EAAG,GAAK,OAAME,EAAArB,EAAE,UAAF,YAAAqB,EAAA,KAAArB,KAAiB,EAAG,CAC7E,MAAQ,CAAe,CAEzB,GAAIiB,EAAQ,OAAS,EAAG,OAExB,MAAMK,EAAe,GAAK,GAC1B,UAAWhD,KAAK2C,EAAS,CAAE,MAAMM,EAAIlB,GAAe,IAAI/B,EAAE,GAAG,EAAOiD,MAAK,OAAS,GAAO,CAEzF,QAASC,EAAI,EAAGA,EAAIP,EAAQ,OAAQO,IAClC,QAASC,EAAID,EAAI,EAAGC,EAAIR,EAAQ,OAAQQ,IAAK,CAC3C,MAAM3C,EAAImC,EAAQO,CAAC,EAAGzC,EAAIkC,EAAQQ,CAAC,EAC7BC,EAAK5C,EAAE,GAAG,EAAIC,EAAE,GAAG,EAAG4C,EAAK7C,EAAE,GAAG,EAAIC,EAAE,GAAG,EAE/C,GADe2C,EAAKA,EAAKC,EAAKA,EACjBL,GACX,GAAIxC,EAAE,KAAOC,EAAE,KAAM,CAAE,MAAMwC,EAAIlB,GAAe,IAAIvB,EAAE,GAAG,EAAOyC,MAAK,OAAS,GAAM,SAC3ExC,EAAE,KAAOD,EAAE,KAAM,CAAE,MAAMyC,EAAIlB,GAAe,IAAItB,EAAE,GAAG,EAAOwC,MAAK,OAAS,GAAM,EAE7F,CAGF,UAAWjD,KAAK2C,EAAS,CACvB,MAAMM,EAAIlB,GAAe,IAAI/B,EAAE,GAAG,EAClC,GAAKiD,EACL,GAAI,CACF,MAAMK,EAAYtD,EAAE,IAAI,YAAcA,EAAE,IAAI,WAC5C,GAAIiD,EAAE,QAAUA,EAAE,cAAgB,GAAO,CACvC,GAAI,EAAEM,GAAAC,EAAAxD,EAAE,KAAI,OAAN,MAAAuD,EAAA,KAAAC,EAAgB,MAAQ,CAAe,CACzCF,EAAWA,EAAU,MAAM,QAAU,YAC/B,kBAAoB,EAChC,SAAW,CAACL,EAAE,QAAUA,EAAE,cAAgB,GAAO,CAC3CK,IAAWA,EAAU,MAAM,QAAU,IACzC,GAAI,EAAEG,GAAAC,EAAA1D,EAAE,KAAI,OAAN,MAAAyD,EAAA,KAAAC,EAAgB,MAAQ,CAAe,CAC/C,CACF,MAAQ,CAAe,CACzB,CACI,KAAK,oBAAqB,KAAK,kBAAoB,GAAW,KAAK,aAAe,GAAG,WAAW,IAAM,KAAK,SAAA,EAAY,GAAG,EAChI,CAEA,SAAU,QACRjE,EAAA,KAAK,QAAL,MAAAA,EAAA,WACI,KAAK,OAAS,MAAM,qBAAqB,KAAK,KAAK,EACvD,KAAK,MAAA,CACP,CACF,CAKA,SAASkE,EAAWC,EAAchD,EAAyC,CAEzE,MADI,CAACA,GACDA,aAAagD,EAAI,MAAchD,EAC5B,IAAIgD,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CASA,SAASiD,GAAUD,EAAcE,EAAgB,CAC/C,GAAI,CAACA,EAAM,OAAOA,EAClB,GAAIA,EAAK,IAAK,OAAOA,EAAK,IAE1B,GAAIA,EAAK,QAAU,OAAOA,EAAK,QAAW,SAAU,CAClD,MAAMb,EAAIa,EAAK,OACTC,EAAOd,EAAE,MAAQA,EAAE,UACzB,GAAIc,IAAS,OAAW,CACtB,MAAMC,EAA8B,CAAA,EACpC,OAAIf,EAAE,SAAQe,EAAQ,OAAS,IAAIJ,EAAI,KAAKX,EAAE,OAAO,MAAOA,EAAE,OAAO,MAAM,GACvE,OAAOA,EAAE,WAAc,WAAUe,EAAQ,UAAYf,EAAE,WACvD,OAAOA,EAAE,aAAgB,WAAUe,EAAQ,YAAcf,EAAE,aAC3D,OAAOA,EAAE,OAAU,WAAUe,EAAQ,MAAQf,EAAE,OAC/C,OAAOA,EAAE,UAAa,WAAUe,EAAQ,SAAWf,EAAE,UACrD,OAAOA,EAAE,aAAgB,WAAUe,EAAQ,YAAcf,EAAE,aAC3D,OAAOA,EAAE,eAAkB,WAAUe,EAAQ,cAAgBf,EAAE,eAC/D,OAAOA,EAAE,cAAiB,WAAUe,EAAQ,aAAef,EAAE,cAC1D,IAAIW,EAAI,OAAOG,EAAMC,CAAO,CACrC,CACF,CACA,GAAI,CAACF,EAAK,IAAK,OAAOA,EACtB,GAAI,CAACA,EAAK,KACR,eAAQ,KAAK,yCAAyC,EAC/CA,EAET,MAAMG,EAAK,IAAIL,EAAI,KAAKE,EAAK,KAAK,MAAOA,EAAK,KAAK,MAAM,EAE/CI,EAAO,OAAQ,WAAoC,OAAW,IAClEC,EAAuB,CAAA,EAC7B,GAAIL,EAAK,YAAa,CACpB,MAAMM,EAAMF,EACR,IAAIN,EAAI,KAAK,CAACE,EAAK,YAAY,MAAO,CAACA,EAAK,YAAY,MAAM,EAC9D,IAAIF,EAAI,KAAKE,EAAK,YAAY,MAAOA,EAAK,YAAY,MAAM,EAChEK,EAAK,YAAcC,CACrB,CACIN,EAAK,YAAWK,EAAK,UAAY,IAAIP,EAAI,KAAKE,EAAK,UAAU,MAAOA,EAAK,UAAU,MAAM,GACzFA,EAAK,SAAQK,EAAK,OAAS,IAAIP,EAAI,KAAKE,EAAK,OAAO,MAAOA,EAAK,OAAO,MAAM,GAC7EA,EAAK,mBAAkBK,EAAK,iBAAmB,IAAIP,EAAI,KAAKE,EAAK,iBAAiB,MAAOA,EAAK,iBAAiB,MAAM,GACrHA,EAAK,gBAAeK,EAAK,cAAgBL,EAAK,eAC9CA,EAAK,SAAQK,EAAK,OAASL,EAAK,QACpC,MAAMO,EAAO,IAAIT,EAAI,KAAKE,EAAK,IAAKG,EAAIE,CAAI,EAE5C,OAAIL,EAAK,WAAa,OAAOO,EAAK,cAAiB,YACjDA,EAAK,aAAa,IAAIT,EAAI,KAAKE,EAAK,UAAU,MAAOA,EAAK,UAAU,MAAM,CAAC,EAEtEO,CACT,CAEA,SAASC,GAAUV,EAAcX,EAAgD,CAE/E,MADI,CAACA,GACDA,aAAaW,EAAI,KAAaX,EAC3B,IAAIW,EAAI,KAAKX,EAAE,OAAS,EAAGA,EAAE,QAAU,CAAC,CACjD,CAOA,MAAMsB,GAAsE,CAC1E,IAAK,CAAE,IAAK,cAAe,IAAK,aAAA,EAChC,SAAU,CAAE,IAAK,cAAe,IAAK,aAAA,CACvC,EACA,SAASC,GAAeC,EAA2C,CACjE,MAAMC,EAAQH,GAAsBE,CAAG,EACvC,GAAIC,EAAO,OAAOA,EAClB,MAAMC,EAAMF,EAAI,OAAO,CAAC,EAAE,cAAgBA,EAAI,MAAM,CAAC,EACrD,MAAO,CAAE,IAAK,MAAME,CAAG,GAAI,IAAK,MAAMA,CAAG,EAAA,CAC3C,CACA,SAASC,GAAYhB,EAAcG,EAAgD,CACjF,OAAO,MAAM,QAAQA,CAAI,EAAIA,EAAK,IAAInD,GAAK+C,EAAWC,EAAKhD,CAAC,CAAC,EAAKmD,CACpE,CAEA,SAASc,GAAiBjB,EAAckB,EAAsD,CAC5F,OAAO,MAAM,QAAQA,CAAM,EAAIA,EAAO,IAAIC,GAAKH,GAAYhB,EAAKmB,CAAC,CAAC,EAAKD,CACzE,CAEA,SAASE,GAAajB,EAAkC,CACtD,OAAO,MAAM,QAAQA,CAAI,GAAK,MAAM,QAAQA,EAAK,CAAC,CAAC,CACrD,CAEA,SAASkB,GAAiBrB,EAAcG,EAA6E,CACnH,OAAOiB,GAAajB,CAAI,EAAIc,GAAiBjB,EAAKG,CAAI,EAAIa,GAAYhB,EAAKG,CAAe,CAC5F,CAEA,SAASmB,GAAmBtB,EAAc7C,EAA0CoE,EAAyC,CACvHpE,GAAA,MAAAA,EAAK,OAAMoE,EAAS,KAAOtB,GAAUD,EAAK7C,EAAI,IAAI,GAClDA,GAAA,MAAAA,EAAK,QAAOoE,EAAS,MAAQtB,GAAUD,EAAK7C,EAAI,KAAK,EAC3D,CACA,SAASqE,GAAWxB,EAAchD,EAAyC,CAEzE,MADI,CAACA,GACDA,aAAagD,EAAI,MAAchD,EAC5B,IAAIgD,EAAI,MAAMhD,EAAE,EAAGA,EAAE,CAAC,CAC/B,CACA,SAASyE,GAAYzB,EAAcnD,EAA2C,CAE5E,MADI,CAACA,GACDA,aAAamD,EAAI,OAAenD,EAC7B,IAAImD,EAAI,OAAOD,EAAWC,EAAKnD,EAAE,EAAE,EAAGkD,EAAWC,EAAKnD,EAAE,EAAE,CAAC,CACpE,CACA,SAAS6E,GAAa1E,EAAsB,CAC1C,OAAOD,GAAaC,CAAC,CACvB,CACA,SAAS2E,GAAc9E,EAAuB,CAC5C,GAAI,CAACA,EAAG,OAAO,KACf,MAAM+E,EAAK,OAAO/E,EAAE,cAAiB,WAAaA,EAAE,eAAiBA,EAAE,IAAMA,EAAE,UACzEgF,EAAK,OAAOhF,EAAE,cAAiB,WAAaA,EAAE,eAAiBA,EAAE,IAAMA,EAAE,UACzEiF,EAAMJ,GAAaE,CAAE,EACrBG,EAAML,GAAaG,CAAE,EAC3B,MAAI,CAACC,GAAO,CAACC,EAAY,KAClB,CAAE,GAAID,EAAK,GAAIC,CAAA,CACxB,CACA,SAASC,GAAY3C,EAAqB,CACxC,OAAKA,EACE,CAAE,MAAOA,EAAE,OAAS,EAAG,OAAQA,EAAE,QAAU,CAAA,EADnC,IAEjB,CACA,SAAS4C,GAAajF,EAAsB,CAC1C,OAAKA,EACE,CAAE,EAAGA,EAAE,GAAK,EAAG,EAAGA,EAAE,GAAK,CAAA,EADjB,IAEjB,CAEA,SAASkF,GAAoBlC,EAAUmC,EAA2C,CAChF,MAAMhF,EAAMgF,EACNC,EAA+B,CAAA,EACrC,GAAI,CAACjF,EAAK,OAAOiF,EACjB,SAAW,CAACvB,EAAKxF,CAAK,IAAK,OAAO,QAAQ8B,CAAG,EAChB9B,GAAU,OACjCwF,IAAQ,YAAcA,IAAQ,WAC9BA,EAAI,WAAW,IAAI,GAAKA,IAAQ,mBAAqBA,IAAQ,kBAAoBA,IAAQ,iBAAmBA,IAAQ,mBAAqBA,IAAQ,UAAYA,IAAQ,YACrKA,IAAQ,UAAYA,IAAQ,SAAYA,CAAG,EAAIH,GAAUV,EAAK3E,CAAK,EAC9DwF,IAAQ,eAAgBuB,EAAIvB,CAAG,EAAIZ,GAAUD,EAAK3E,CAAK,EACvDwF,IAAQ,YAAc,MAAM,QAAQxF,CAAK,EAAG+G,EAAIvB,CAAG,EAAIxF,EAAM,IAAIgH,GAAMA,GAAK,OAAOA,GAAM,UAAY,QAASA,EAAI1E,EAAM0E,CAAQ,EAAIA,CAAE,EACtIxB,IAAQ,mBAAqBA,IAAQ,eAAcuB,EAAIvB,CAAG,EAAIxF,KAEzE,OAAO+G,CACT,CAEA,SAASE,GAAgBtC,EAAUuC,EAAcC,EAA2B,OAC1E,GAAK,MAAM,QAAQA,CAAU,EAC7B,UAAWC,KAAQD,EAAY,CAC7B,GAAI,CAACC,GAAQ,OAAOA,GAAS,SAAU,SACvC,MAAMC,EAAmC,CAAE,GAAID,CAAA,EAC3CC,EAAQ,SAAQA,EAAQ,OAASjB,GAAYzB,EAAK0C,EAAQ,MAAgB,IAC9E7G,EAAA0G,EAAQ,eAAR,MAAA1G,EAAA,KAAA0G,EAAuBG,EACzB,CACF,CAOA,MAAMC,OAAkC,IAAI,CAC1C,cAAe,eAAgB,gBAAiB,cAChD,YAAa,cACb,eAAgB,iBAAkB,gBAAiB,kBACnD,gBAAiB,iBAAkB,kBACnC,SAAU,SAAU,gBAAiB,WACrC,MAAO,WAAY,oBAAqB,oBACxC,WAAY,QAAS,UAAW,SAAU,UAC1C,SAAU,YAAa,cAAe,QAAS,OAC/C,OAAQ,SAAU,SAAU,SAC5B,OAAQ,QAAS,QAAS,QAAS,OACnC,cAAe,YAAa,mBAAoB,gBAAiB,SACjE,OAAQ,WACR,QAAS,eAAgB,aACzB,OAAQ,iBAER,SACF,CAAC,EAEKC,OAA8B,IAOpC,SAASC,GAA4BxF,EAAcyF,EAAkC,OAEnF,MAAMlH,GAAOC,EAAA,WAA0E,UAA1E,YAAAA,EAAmF,IAChG,IAAID,GAAA,YAAAA,EAAK,YAAa,cAClB,SAAO,QAAY,KACvB,UAAWmH,KAAK,OAAO,KAAKD,CAAC,EAAG,CAC9B,GAAIH,GAA4B,IAAII,CAAC,EAAG,SACxC,MAAMC,EAAO,GAAG3F,CAAI,IAAI0F,CAAC,GACrBH,GAAwB,IAAII,CAAI,IACpCJ,GAAwB,IAAII,CAAI,EAChC,QAAQ,KACN,gBAAgB3F,CAAI,OAAO0F,CAAC,8HAAA,EAIhC,CACF,CAUO,SAASE,GACdC,EACA3C,EACY,CACZ,MAAM4C,EAAehI,GAAkB,KAAK,EACtCe,EAAWqE,EAAK,oBAChBvE,EAAUuE,EAAK,SAAW,MAI1B6C,EAAU,CAACrC,EAAiBrE,IAAmB,CACnD,GAAI,CAAEA,EAAA,CAAM,OAAS,EAAQ,CAC3B,IAAI,iBAAG,QAAS,6BAA8B,MAAM,EACpDL,GAAkB0E,EAAK/E,EAASE,EAAU,CAAC,CAC7C,CACF,EACMmH,EAAS,CAAKtC,EAAiBrE,EAAaF,IAAmB,CACnE,GAAI,CAAkB,OAANE,EAAA,GAAkBF,CAAU,OAASJ,EAAQ,CAC3D,IAAIA,GAAA,YAAAA,EAAG,QAAS,6BAA8B,MAAMA,EAEpD,OAAAC,GAAkB0E,EAAK/E,EAASE,EAAUE,CAAC,EACpCI,CACT,CACF,EAGM8G,EAAuB,CAAIvC,EAAiBwC,EAAelG,IAAuC,CACtG,GAAI,CAAC8F,EAAa,IAAIpC,CAAG,EAAK,OAAA9E,EAAkB8E,EAAK/E,EAASE,CAAQ,EAAU,KAChF,GAAI,CAAE,OAAOkB,GAAcmG,EAAA,EAAQlG,CAAI,CAAG,OACnCjB,EAAG,CAAE,OAAAC,GAAkB0E,EAAK/E,EAASE,EAAUE,CAAC,EAAU,IAAM,CACzE,EACMoH,EAAuB,CAAIzC,EAAiBwC,EAAelG,IAAuC,CACtG,GAAI,CAAC8F,EAAa,IAAIpC,CAAG,EAAK,OAAA9E,EAAkB8E,EAAK/E,EAASE,CAAQ,EAAU,KAChF,GAAI,CAAE,OAAOoB,GAAciG,EAAA,EAAQlG,CAAI,CAAG,OACnCjB,EAAG,CAAE,OAAAC,GAAkB0E,EAAK/E,EAASE,EAAUE,CAAC,EAAU,IAAM,CACzE,EACMqH,EAAqB,CAAI1C,EAAiBwC,EAAe/F,IAAkD,CAC/G,GAAI,CAAC2F,EAAa,IAAIpC,CAAG,EAAK,OAAA9E,EAAkB8E,EAAK/E,EAASE,CAAQ,EAAU,KAChF,GAAI,CAAE,OAAOqB,GAAYgG,EAAA,EAAQ/F,CAAI,CAAG,OACjCpB,EAAG,CAAE,OAAAC,GAAkB0E,EAAK/E,EAASE,EAAUE,CAAC,EAAU,IAAM,CACzE,EACMsH,EAAuB,CAAI3C,EAAiBwC,IAAiC,CACjF,GAAI,CAACJ,EAAa,IAAIpC,CAAG,EAAG,OAAOtD,GAAc,KAAM,EAAI,EAE3D,GAAI,CAAE,OAAOA,GAAc8F,EAAA,EAAQ,EAAK,CAAG,OACpC,EAAG,CAAE,OAAAhI,EAAUwF,EAAK,CAAC,EAAUtD,GAAc,KAAM,EAAI,CAAG,CACnE,EAEA,MAAO,CACL,QAAAzB,EACA,OAAAkH,EACA,aAAAC,EACA,oBAAqBjH,EAGrB,UAAUwD,EAAWyC,EAAS,CAI5B,MAAMwB,EADUxB,GAAW,OAAOA,GAAY,UAAY,OAAO,KAAKA,CAAO,EAAE,OAAS,EAClE,IAAIe,EAAO,IAAIxD,EAAWyC,CAAO,EAAI,IAAIe,EAAO,IAAIxD,CAAS,EACnF,OAAAtB,GAAkB,IAAIuF,EAAK,IAAIpF,GAAiBoF,CAAG,CAAC,EAC7CzG,GAAUyG,CAAG,CACtB,EACA,WAAWC,EAAQ,eACjB,MAAMD,EAAM9F,EAAO+F,CAAM,EACzBtF,GAAc,IAAIqF,CAAG,GACrB9H,EAAAuC,GAAkB,IAAIuF,CAAG,IAAzB,MAAA9H,EAA4B,UAC5BuC,GAAkB,OAAOuF,CAAG,EAC5B,GAAI,EAAE9E,EAAA8E,EAAI,gBAAJ,MAAA9E,EAAA,KAAA8E,EAAuB,MAAQ,CAAe,CAEpD,GAAI,CACF,MAAME,IAAU3E,EAAAyE,EAAY,YAAZ,YAAAzE,EAAA,KAAAyE,KAA6B,CAAA,EAC7C,UAAWG,KAASD,EAAU,GAAI,EAAG1E,EAAAwE,EAAY,cAAZ,MAAAxE,EAAA,KAAAwE,EAA0BG,EAAQ,MAAQ,CAAe,CAChG,MAAQ,CAAe,CACvB,GAAI,OAAOH,EAAI,SAAY,WACzB,GAAI,CAAEA,EAAI,QAAA,CAAW,MAAQ,CAAe,KACvC,CACL,MAAMI,EAAI,OAAOJ,EAAI,cAAiB,WAAaA,EAAI,eAAiB,KACxE,GAAII,EAAG,GAAI,EAAEnE,EAAAmE,EAAE,kBAAF,MAAAnE,EAAA,KAAAmE,EAAuB,MAAQ,CAAe,CAC7D,CACF,EAGA,eAAiBJ,GAAQP,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgB,EACzF,gBAAkBA,GAAQP,EAAQ,sBAAuB,IAAMvF,EAAO8F,CAAG,EAAE,iBAAiB,EAC5F,uBAAyBA,GAAQP,EAAQ,6BAA8B,IAAMvF,EAAO8F,CAAG,EAAE,wBAAwB,EACjH,wBAA0BA,GAAQP,EAAQ,8BAA+B,IAAMvF,EAAO8F,CAAG,EAAE,yBAAyB,EACpH,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAC9G,uBAAyBA,GAAQP,EAAQ,6BAA8B,IAAMvF,EAAO8F,CAAG,EAAE,wBAAwB,EACjH,qBAAuBA,GAAQP,EAAQ,2BAA4B,IAAMvF,EAAO8F,CAAG,EAAE,sBAAsB,EAC3G,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAC9G,qBAAuBA,GAAQP,EAAQ,2BAA4B,IAAMvF,EAAO8F,CAAG,EAAE,sBAAsB,EAC3G,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAC9G,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAC9G,uBAAyBA,GAAQP,EAAQ,6BAA8B,IAAMvF,EAAO8F,CAAG,EAAE,wBAAwB,EACjH,eAAiBA,GAAQP,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgB,EACzF,gBAAkBA,GAAQP,EAAQ,sBAAuB,IAAMvF,EAAO8F,CAAG,EAAE,iBAAiB,EAC5F,kBAAoBA,GAAQP,EAAQ,wBAAyB,IAAMvF,EAAO8F,CAAG,EAAE,mBAAmB,EAClG,mBAAqBA,GAAQP,EAAQ,yBAA0B,IAAMvF,EAAO8F,CAAG,EAAE,oBAAoB,EACrG,aAAeA,GAAQP,EAAQ,mBAAoB,IAAMvF,EAAO8F,CAAG,EAAE,cAAc,EACnF,cAAgBA,GAAQP,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,eAAe,EACtF,qBAAuBA,GAAQP,EAAQ,2BAA4B,IAAMvF,EAAO8F,CAAG,EAAE,sBAAsB,EAC3G,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAC9G,WAAaA,GAAQP,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,YAAY,EAC7E,YAAcA,GAAQP,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,aAAa,EAChF,mBAAqBA,GAAQP,EAAQ,yBAA0B,IAAMvF,EAAO8F,CAAG,EAAE,oBAAoB,EACrG,oBAAsBA,GAAQP,EAAQ,0BAA2B,IAAMvF,EAAO8F,CAAG,EAAE,qBAAqB,EACxG,iBAAmBA,GAAQP,EAAQ,uBAAwB,IAAMvF,EAAO8F,CAAG,EAAE,kBAAkB,EAC/F,kBAAoBA,GAAQP,EAAQ,wBAAyB,IAAMvF,EAAO8F,CAAG,EAAE,mBAAmB,EAClG,qBAAuBA,GAAQP,EAAQ,2BAA4B,IAAMvF,EAAO8F,CAAG,EAAE,sBAAsB,EAC3G,sBAAwBA,GAAQP,EAAQ,4BAA6B,IAAMvF,EAAO8F,CAAG,EAAE,uBAAuB,EAG9G,WAAY,CAACA,EAAK/F,EAAGkF,IAAMM,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAW/F,EAAGkF,CAAC,CAAC,EACvF,WAAaa,GAAQN,EAAO,iBAAkB,IAAMxF,EAAO8F,CAAG,EAAE,WAAA,EAAc,GAAG,EACjF,QAAS,CAACA,EAAKK,EAAGlB,IAAMM,EAAQ,cAAe,IAAMvF,EAAO8F,CAAG,EAAE,QAAQK,EAAGlB,CAAC,CAAC,EAC9E,QAAUa,GAAQN,EAAO,cAAe,IAAMxF,EAAO8F,CAAG,EAAE,QAAA,EAAW,GAAG,EACxE,kBAAoBA,GAAQN,EAAO,wBAAyB,IAAMxF,EAAO8F,CAAG,EAAE,kBAAA,EAAqB,GAAG,EAGtG,WAAY,CAACA,EAAKM,IAAMb,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWM,CAAC,CAAC,EACjF,WAAY,CAACN,EAAKM,IAAMb,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWM,CAAC,CAAC,EACjF,WAAaN,GAAQN,EAAO,iBAAkB,IAAMxF,EAAO8F,CAAG,EAAE,WAAA,EAAc,GAAG,EACjF,WAAaA,GAAQN,EAAO,iBAAkB,IAAMxF,EAAO8F,CAAG,EAAE,WAAA,EAAc,GAAG,EAGjF,YAAcA,GAAQP,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,aAAa,EAChF,OAASA,GAAQP,EAAQ,kBAAmB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,cAAZ,YAAA9E,EAAA,KAAAhD,GAA2B,EAC7E,QAAS,CAAC8H,EAAKO,IAASd,EAAQ,cAAe,IAAM,UAAEvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,UAAZ,MAAA9E,EAAA,KAAAhD,EAAsBqI,EAAO,CAAC,EACrF,OAAQ,CAACP,EAAKQ,EAAOC,IAAUhB,EAAQ,aAAc,IAAM,SAAE,MAAMtF,EAAID,EAAO8F,CAAG,EAAOS,GAAOvI,EAAAiC,EAAE,SAAF,MAAAjC,EAAA,KAAAiC,EAAWqG,EAAO3C,GAAW0B,EAAQkB,CAAc,IAASvF,EAAAf,EAAE,SAAF,MAAAe,EAAA,KAAAf,EAAWqG,EAAQ,CAAC,EAG/K,kBAAmB,CAACR,EAAKb,IAAMM,EAAQ,wBAAyB,IAAMvF,EAAO8F,CAAG,EAAE,kBAAkBb,CAAC,CAAC,EACtG,WAAY,CAACa,EAAKb,IAAMM,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWb,CAAC,CAAC,EAGjF,QAAUa,GAAQN,EAAO,cAAe,IAAMrB,GAAYnE,EAAO8F,CAAG,EAAE,QAAA,CAAS,GAAK,CAAE,MAAO,EAAG,OAAQ,CAAA,EAAK,CAAE,MAAO,EAAG,OAAQ,EAAG,EACpI,iBAAmBA,GAAQN,EAAO,uBAAwB,IAAMrB,GAAYnE,EAAO8F,CAAG,EAAE,iBAAA,CAAkB,GAAK,CAAE,MAAO,EAAG,OAAQ,CAAA,EAAK,CAAE,MAAO,EAAG,OAAQ,EAAG,EAC/J,aAAeA,GAAQN,EAAO,mBAAoB,IAAMxF,EAAO8F,CAAG,EAAE,aAAA,EAAgB,GAAG,EACvF,aAAeA,GAAQN,EAAO,mBAAoB,IAAMxF,EAAO8F,CAAG,EAAE,aAAA,EAAgB,SAAS,cAAc,KAAK,CAAC,EAGjH,aAAc,CAACA,EAAK3G,EAAG8F,IAAMO,EAAO,mBAAoB,IAAM3B,GAAa7D,EAAO8F,CAAG,EAAE,aAAanC,GAAW0B,EAAQlG,CAAC,EAAG8F,CAAC,CAAC,GAAM,CAAE,IAAK,IAAK,IAAK,GAAA,EAAiB,CAAE,IAAK,IAAK,IAAK,IAAc,EACpM,aAAc,CAACa,EAAK3G,EAAG8F,IAAMO,EAAO,mBAAoB,IAAMpB,GAAapE,EAAO8F,CAAG,EAAE,aAAa5D,EAAWmD,EAAQlG,CAAC,EAAG8F,CAAC,CAAC,GAAK,CAAE,EAAG,EAAG,EAAG,CAAA,EAAK,CAAE,EAAG,EAAG,EAAG,EAAG,EAChK,iBAAkB,CAACa,EAAKU,EAAKC,IAAQjB,EAAO,uBAAwB,IAAMxF,EAAO8F,CAAG,EAAE,iBAAiBU,EAAKC,CAAG,GAAK,CAAC,IAAK,GAAG,EAAG,CAAC,IAAK,GAAG,CAAqB,EAC9J,iBAAkB,CAACX,EAAKY,EAAGC,IAAMnB,EAAO,uBAAwB,IAAMxF,EAAO8F,CAAG,EAAE,iBAAiBY,EAAGC,CAAC,GAAK,CAAC,IAAK,GAAG,EAAG,CAAC,IAAK,GAAG,CAAqB,EACtJ,oBAAqB,CAACb,EAAK3G,EAAG8F,IAAMO,EAAO,0BAA2B,IAAMpB,GAAapE,EAAO8F,CAAG,EAAE,oBAAoB5D,EAAWmD,EAAQlG,CAAC,EAAG8F,CAAC,CAAC,GAAK,CAAE,EAAG,EAAG,EAAG,CAAA,EAAK,CAAE,EAAG,EAAG,EAAG,EAAG,EACrL,oBAAqB,CAACa,EAAK3G,EAAG8F,IAAMO,EAAO,0BAA2B,IAAM3B,GAAa7D,EAAO8F,CAAG,EAAE,oBAAoBnC,GAAW0B,EAAQlG,CAAC,EAAG8F,CAAC,CAAC,GAAM,CAAE,IAAK,IAAK,IAAK,GAAA,EAAiB,CAAE,IAAK,IAAK,IAAK,IAAc,EACzN,YAAa,CAACa,EAAK,EAAG9G,IAAMwG,EAAO,kBAAmB,IAAMxF,EAAO8F,CAAG,EAAE,YAAY5D,EAAWmD,EAAQ,CAAC,EAAGnD,EAAWmD,EAAQrG,CAAC,CAAC,EAAG,GAAG,EAGtI,SAAW8G,GAAQN,EAAO,eAAgB,IAAO,OAAOxF,EAAO8F,CAAG,EAAE,UAAa,WAAa9F,EAAO8F,CAAG,EAAE,SAAA,EAAa,GAAO,EAAI,EAClI,aAAeA,GAAQN,EAAO,mBAAoB,IAAMxF,EAAO8F,CAAG,EAAE,aAAA,EAAgB,EAAE,EACtF,aAAeA,GAAQN,EAAO,mBAAoB,IAAA,aAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,eAAZ,YAAA9E,EAAA,KAAAhD,OAAgCsD,GAAAD,EAAArB,EAAO8F,CAAG,GAAE,aAAZ,YAAAxE,EAAA,KAAAD,KAA8B,IAAI,EAAE,EAC5H,gBAAkByE,GAAQN,EAAO,sBAAuB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,IAAiC,EAAE,EACjG,cAAgB8H,GAAQN,EAAO,oBAAqB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,IAA+B,EAAE,EAC3F,eAAiB8H,GAAQN,EAAO,qBAAsB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,iBAAZ,YAAA9E,EAAA,KAAAhD,IAAgC,EAAE,EAC9F,cAAgB8H,GAAQN,EAAO,oBAAqB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,IAA+B,EAAE,EAC3F,YAAc8H,GAAQN,EAAO,kBAAmB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,cAAZ,YAAA9E,EAAA,KAAAhD,KAA+B,IAAO,EAAK,EACjG,cAAgB8H,GAAQN,EAAO,oBAAqB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,IAA+B,IAAI,EAC7F,aAAc,CAAC8H,EAAKc,IAASpB,EAAO,mBAAoB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,eAAZ,YAAA9E,EAAA,KAAAhD,EAA2B4I,IAAO,IAAI,EACpG,UAAW,CAACd,EAAK3G,EAAGmH,IAAUd,EAAO,gBAAiB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,YAAZ,YAAA9E,EAAA,KAAAhD,EAAwBkE,EAAWmD,EAAQlG,CAAC,EAAGmH,IAAQ,EAAE,EACrH,YAAa,CAACR,EAAKe,EAAKC,IAAOvB,EAAQ,kBAAmB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,cAAZ,YAAA9E,EAAA,KAAAhD,EAA0B6I,EAAKC,GAAG,EAClG,SAAWhB,GAAQN,EAAO,eAAgB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,WAAZ,YAAA9E,EAAA,KAAAhD,IAA0B,IAAI,EAC9E,cAAgB8H,GAAQN,EAAO,oBAAqB,IAAM,SAAE,MAAMuB,GAAK/F,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,GAA+B,OAAO+I,EAAKxH,GAAcwH,EAAI,YAAY,EAAI,IAAM,EAAG,IAAI,EAGjK,SAAU,CAACjB,EAAKtE,EAAGyD,IAAMO,EAAO,eAAgB,IAAMxF,EAAO8F,CAAG,EAAE,SAAStE,EAAGyD,CAAC,GAAK,GAAI,EAAE,EAC1F,SAAU,CAACa,EAAKkB,IAAOxB,EAAO,eAAgB,IAAMxF,EAAO8F,CAAG,EAAE,SAASkB,CAAE,GAAK,CAAA,EAAI,CAAA,CAAE,EACtF,YAAa,CAAClB,EAAKkB,IAAOzB,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,YAAYkB,CAAE,CAAC,EACtF,WAAalB,GAAQP,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,YAAY,EAC7E,gBAAkBA,GAAQP,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,GAA+B,EAC9F,oBAAqB,CAAC8H,EAAKe,EAAKI,IAAe1B,EAAQ,0BAA2B,IAAMvF,EAAO8F,CAAG,EAAE,oBAAoBe,EAAKI,CAAU,CAAC,EACxI,YAAa,CAACnB,EAAK,EAAGb,IAAMO,EAAO,kBAAmB,IAAMxF,EAAO8F,CAAG,EAAE,YAAY,EAAGb,CAAC,GAAK,GAAI,EAAE,EACnG,YAAa,CAACa,EAAKkB,IAAOxB,EAAO,kBAAmB,IAAMxF,EAAO8F,CAAG,EAAE,YAAYkB,CAAE,GAAK,CAAA,EAAI,CAAA,CAAE,EAC/F,eAAgB,CAAClB,EAAKkB,IAAOzB,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,eAAekB,CAAE,CAAC,EAC/F,eAAiBlB,GAAQP,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgB,EACzF,YAAcA,GAAQP,EAAQ,kBAAmB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,cAAZ,YAAA9E,EAAA,KAAAhD,GAA2B,EAClF,aAAc,CAAC8H,EAAK3F,IAAMqF,EAAO,mBAAoB,IAAMxF,EAAO8F,CAAG,EAAE,aAAa3F,CAAC,GAAK,CAAA,EAAI,CAAA,CAAE,EAChG,gBAAiB,CAAC2F,EAAKoB,IAAM3B,EAAQ,sBAAuB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgBoB,CAAC,CAAC,EAChG,uBAAwB,CAACpB,EAAK3G,IAAMqG,EAAO,6BAA8B,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,yBAAZ,YAAA9E,EAAA,KAAAhD,EAAqC2F,GAAW0B,EAAQlG,CAAC,KAAM,MAAM,IAAI,EACxJ,UAAW,CAAC2G,EAAK9G,IAAMuG,EAAQ,gBAAiB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,YAAZ,YAAA9E,EAAA,KAAAhD,EAAwB4F,GAAYyB,EAAQrG,CAAC,GAAE,EAGrG,cAAe,CAAC8G,EAAKI,EAAGE,EAAGnB,IAAMM,EAAQ,oBAAqB,IAAM,CAClE,MAAMtF,EAAID,EAAO8F,CAAG,EAChB,OAAOI,GAAM,WAAY,cAAcA,EAAGE,EAAGnB,CAAC,IAC3C,cAAc/C,EAAWmD,EAAQa,CAAC,EAAGE,EAAGnB,CAAC,CAClD,CAAC,EACD,MAAO,CAACa,EAAKI,EAAGjB,IAAMM,EAAQ,YAAa,IAAMvF,EAAO8F,CAAG,EAAE,MAAM5D,EAAWmD,EAAQa,CAAU,EAAGjB,CAAC,CAAC,EACrG,MAAO,CAACa,EAAKY,EAAGC,EAAG1B,IAAMM,EAAQ,YAAa,IAAMvF,EAAO8F,CAAG,EAAE,MAAMY,EAAGC,EAAG1B,CAAC,CAAC,EAC9E,MAAO,CAACa,EAAKI,EAAGE,EAAGnB,IAAMM,EAAQ,YAAa,IAAMvF,EAAO8F,CAAG,EAAE,MAAM5D,EAAWmD,EAAQa,CAAC,EAAGE,EAAGnB,CAAC,CAAC,EAClG,MAAQa,GAAQP,EAAQ,YAAa,IAAMvF,EAAO8F,CAAG,EAAE,OAAO,EAC9D,UAAW,CAACA,EAAKI,EAAGjB,IAAMM,EAAQ,gBAAiB,IAAMvF,EAAO8F,CAAG,EAAE,UAAU,OAAOI,GAAM,SAAWA,EAAIhE,EAAWmD,EAAQa,CAAC,EAAGjB,CAAC,CAAC,EACpI,UAAYa,GAAQN,EAAO,gBAAiB,IAAM3B,GAAa7D,EAAO8F,CAAG,EAAE,UAAA,CAAW,GAAM,CAAE,IAAK,IAAK,IAAK,GAAA,EAAiB,CAAE,IAAK,IAAK,IAAK,IAAc,EAC7J,YAAa,CAACA,EAAKtB,EAAGS,IAAMM,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,YAAY,MAAM,QAAQtB,CAAC,EAAIrB,GAAYkC,EAAQb,CAAC,EAAIA,EAAGS,CAAC,CAAC,EACtI,YAAa,CAACa,EAAKtB,EAAGS,IAAMO,EAAO,kBAAmB,IAAMxF,EAAO8F,CAAG,EAAE,YAAY,MAAM,QAAQtB,CAAC,EAAIrB,GAAYkC,EAAQb,CAAC,EAAIA,EAAGS,CAAC,EAAG,IAAI,EAC3I,QAAS,CAACa,EAAKM,EAAGnB,IAAMM,EAAQ,cAAe,IAAMvF,EAAO8F,CAAG,EAAE,QAAQM,EAAGnB,CAAC,CAAC,EAC9E,QAAUa,GAAQN,EAAO,cAAe,IAAMxF,EAAO8F,CAAG,EAAE,QAAA,EAAW,GAAG,EACxE,OAAQ,CAACA,EAAKqB,IAAO5B,EAAQ,aAAc,IAAMvF,EAAO8F,CAAG,EAAE,OAAOqB,GAAMjF,EAAWmD,EAAQ8B,CAAE,CAAC,CAAC,EACjG,QAAS,CAACrB,EAAKqB,IAAO5B,EAAQ,cAAe,IAAMvF,EAAO8F,CAAG,EAAE,QAAQqB,GAAMjF,EAAWmD,EAAQ8B,CAAE,CAAC,CAAC,EACpG,UAAYrB,GAAQN,EAAO,gBAAiB,IAAM1B,GAAc9D,EAAO8F,CAAG,EAAE,WAAW,GAAM,CAAE,GAAI,CAAE,IAAK,IAAK,IAAK,KAAO,GAAI,CAAE,IAAK,IAAK,IAAK,GAAA,CAAI,EAAM,CAAE,GAAI,CAAE,IAAK,IAAK,IAAK,GAAA,EAAO,GAAI,CAAE,IAAK,IAAK,IAAK,GAAA,EAAO,EACpN,eAAgB,CAACA,EAAK9G,IAAMuG,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,eAAe9G,EAAI4E,GAAYyB,EAAQrG,CAAC,EAAI,IAAI,CAAC,EAG7H,WAAY,CAAC8G,EAAKK,IAAMZ,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWK,CAAC,CAAC,EACjF,WAAaL,GAAQN,EAAO,iBAAkB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,aAAZ,YAAA9E,EAAA,KAAAhD,KAA8B,IAAI,EAAE,EAGxF,WAAY,CAAC8H,EAAKI,IAAMX,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWhG,EAAMoG,CAAC,CAAC,CAAC,EACxF,cAAe,CAACJ,EAAKI,IAAMX,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,cAAchG,EAAMoG,CAAC,CAAC,CAAC,EACjG,kBAAmB,CAACA,EAAG5B,IAAY,qBACjC,GAAI,CACF,MAAMhF,EAAMQ,EAAMoG,CAAC,EACbxD,EAAO2B,GAAoBgB,EAAQf,CAAO,EAKhD,GAJI5B,EAAK,SAAW,UAAW1E,EAAAsB,EAAI,YAAJ,MAAAtB,EAAA,KAAAsB,EAAgBoD,EAAK,SAChDA,EAAK,SAAW,UAAW1B,EAAA1B,EAAI,YAAJ,MAAA0B,EAAA,KAAA1B,EAAgBoD,EAAK,SAChDwD,EAAE,OAAS,cAAgBxD,EAAK,OAAS,UAAWrB,EAAA/B,EAAI,UAAJ,MAAA+B,EAAA,KAAA/B,EAAcoD,EAAK,OACvEwD,EAAE,OAAS,UAAY5B,GAAA,YAAAA,EAAiB,QAAS,UAAWhD,EAAAhC,EAAI,UAAJ,MAAAgC,EAAA,KAAAhC,EAAegF,EAAgB,OAC3F4B,EAAE,OAAS,aACTxD,EAAK,OAAS,UAAWX,EAAAzC,EAAI,UAAJ,MAAAyC,EAAA,KAAAzC,EAAcoD,EAAK,QAC3C4B,GAAA,YAAAA,EAAiB,UAAW,QAAW,CAE1C,MAAM8C,EAAc,OAAO9H,EAAI,QAAW,WAAaA,EAAI,OAAA,GAAYwC,EAAAxC,EAAY,QAAZ,YAAAwC,EAAmB,OACpFuF,EAAW/C,EAAgB,OAC7B8C,IAAgBC,KAASpF,EAAA3C,EAAI,aAAJ,MAAA2C,EAAA,KAAA3C,GAC/B,EAEG4G,EAAE,OAAS,eAAiBA,EAAE,OAAS,aAAe5G,EAAI,YAAYA,EAAI,WAAWoD,CAAI,EAC1FwD,EAAE,OAAS,YAAc5B,GAAA,YAAAA,EAAiB,mBAAoB,UAAWtC,EAAA1C,EAAI,kBAAJ,MAAA0C,EAAA,KAAA1C,EAAuBgF,EAAgB,kBAChH4B,EAAE,OAAS,gBAA6Bb,EAAQ/F,EAAMgF,GAAA,YAAAA,EAAiB,UAAU,CACvF,MAAQ,CAAe,CACzB,EACA,YAAc4B,GAAM,SAAE,GAAI,EAAElF,GAAAhD,EAAA8B,EAAMoG,CAAC,GAAE,OAAT,MAAAlF,EAAA,KAAAhD,EAAmB,MAAQ,CAAe,CAAE,EACxE,YAAckI,GAAM,SAAE,GAAI,EAAElF,GAAAhD,EAAA8B,EAAMoG,CAAC,GAAE,OAAT,MAAAlF,EAAA,KAAAhD,EAAmB,MAAQ,CAAe,CAAE,EACxE,eAAgB,CAACsJ,EAAQC,IAAShC,EAAQ,qBAAsB,IAAMzF,EAAMwH,CAAM,EAAE,eAAexH,EAAMyH,CAAI,CAAC,CAAC,EAC/G,kBAAmB,CAACD,EAAQC,IAAS,OACnC,MAAMjI,EAAMQ,EAAMwH,CAAM,EAIpB7G,GAAc,IAAInB,CAAG,GAAKmB,GAAc,KAAIzC,EAAAsB,GAAA,YAAAA,EAAK,SAAL,YAAAtB,EAAA,KAAAsB,EAAe,GAC/DiG,EAAQ,wBAAyB,IAAMjG,EAAI,kBAAkBQ,EAAMyH,CAAI,CAAC,CAAC,CAC3E,EAGA,WAAY,CAACzB,EAAKb,IAAM,SACtBM,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWhG,EAAMmF,CAAC,CAAC,CAAC,EAChE,MAAM3F,EAAMQ,EAAMmF,CAAC,GACfjH,EAAAsB,GAAA,YAAAA,EAAK,UAAL,MAAAtB,EAAc,4BAChBgD,EAAAT,GAAkB,IAAIP,EAAO8F,CAAG,CAAC,IAAjC,MAAA9E,EAAoC,SAAS1B,GAEjD,EACA,cAAe,CAACwG,EAAKb,IAAM,SACzB,MAAM3F,EAAMQ,EAAMmF,CAAC,GACnBjH,EAAAuC,GAAkB,IAAIP,EAAO8F,CAAG,CAAC,IAAjC,MAAA9H,EAAoC,WAAWsB,GAG/C,GAAI,EAAE0B,EAAA1B,GAAA,YAAAA,EAAK,iBAAL,MAAA0B,EAAA,KAAA1B,EAAyB,MAAQ,CAAe,CACtDiG,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,cAAcxG,CAAG,CAAC,CACnE,EACA,cAAgBwG,GAAQ,QACtB9H,EAAAuC,GAAkB,IAAIP,EAAO8F,CAAG,CAAC,IAAjC,MAAA9H,EAAoC,QACpCuH,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,eAAe,CAChE,EACA,YAAcA,GAAQN,EAAO,kBAAmB,KAAOxF,EAAO8F,CAAG,EAAE,YAAA,GAAiB,CAAA,GAAI,IAAKb,GAAW1F,GAAc0F,EAAGuC,GAAiBvC,CAAC,CAAC,CAAC,EAAG,EAAE,EAGlJ,eAAgB,CAACwC,EAAQC,IAAUnC,EAAQ,kBAAmB,IAAA,SAAM,OAAAvE,GAAAhD,EAAA8B,EAAM2H,CAAM,IAAZ,YAAAzJ,EAAe,WAAf,YAAAgD,EAAA,KAAAhD,EAA0B8B,EAAM4H,CAAK,GAAE,EAG3G,kBAAmB,CAACD,EAAQC,IAAU,aACpC,GAAI,EACF1G,GAAAhD,EAAA8B,EAAM4H,CAAK,IAAX,YAAA1J,EAAc,OAAd,MAAAgD,EAAA,KAAAhD,GACA,MAAMiC,EAAIH,EAAM2H,CAAM,EAClBxH,GAAA,MAAAA,EAAG,SAAWA,EAAE,QAAQ,QAAUH,EAAM4H,CAAK,IAAGzH,EAAE,QAAQ,MAAQ,MAEtE,GAAI,EAAEqB,EAAArB,GAAA,YAAAA,EAAG,WAAH,MAAAqB,EAAA,KAAArB,IAAcoB,EAAApB,EAAE,cAAF,YAAAoB,EAAA,KAAApB,KAAqBA,EAAE,MAAQ,MAAQ,CAAe,CAC5E,MAAQ,CAAe,CACzB,EAGA,SAAU,CAAC6F,EAAK3F,IAAM,CACpB,GAAID,GAAmBC,CAAC,EAAG,CAAEoF,EAAQ,iBAAkB,IAAMvF,EAAO8F,CAAG,EAAE,WAAWhG,EAAMK,CAAC,CAAC,CAAC,EAAG,MAAQ,CACxGoF,EAAQ,eAAgB,IAAMvF,EAAO8F,CAAG,EAAE,SAASzF,GAAkBP,EAAMK,CAAC,CAAC,CAAC,CAAC,CACjF,EACA,YAAa,CAAC2F,EAAK3F,IAAM,CACvB,GAAID,GAAmBC,CAAC,EAAG,CAAEoF,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,cAAchG,EAAMK,CAAC,CAAC,CAAC,EAAG,MAAQ,CAC9GoF,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,YAAYzF,GAAkBP,EAAMK,CAAC,CAAC,CAAC,CAAC,CACvF,EACA,aAAc,CAAC2F,EAAK3F,IAAMoF,EAAQ,mBAAoB,IAAMvF,EAAO8F,CAAG,EAAE,aAAahG,EAAMK,CAAC,CAAC,CAAC,EAC9F,gBAAiB,CAAC2F,EAAK3F,IAAMoF,EAAQ,sBAAuB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgBhG,EAAMK,CAAC,CAAC,CAAC,EACvG,aAAc,CAAC2F,EAAKK,IAAM,SACxB,GAAI,CAACb,EAAa,IAAI,kBAAkB,EAAK,OAAAlH,EAAkB,mBAAoBD,EAASE,CAAQ,EAAU,KAC9G,MAAMe,GAAI4B,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,eAAZ,YAAA9E,EAAA,KAAAhD,EAA2BmI,GACrC,OAAO/G,EAAIM,GAAYN,EAAG,MAAM,EAAI,IACtC,EACA,gBAAiB,CAAC0G,EAAK3F,IAAMoF,EAAQ,sBAAuB,IAAMvF,EAAO8F,CAAG,EAAE,gBAAgBhG,EAAMK,CAAC,CAAC,CAAC,EACvG,mBAAoB,CAAC2F,EAAK3F,IAAMoF,EAAQ,yBAA0B,IAAMvF,EAAO8F,CAAG,EAAE,mBAAmBhG,EAAMK,CAAC,CAAC,CAAC,EAChH,iBAAkB,CAAC2F,EAAK3F,IAAMoF,EAAQ,uBAAwB,IAAMvF,EAAO8F,CAAG,EAAE,iBAAiBhG,EAAMK,CAAC,CAAC,CAAC,EAC1G,oBAAqB,CAAC2F,EAAK3F,IAAMoF,EAAQ,0BAA2B,IAAMvF,EAAO8F,CAAG,EAAE,oBAAoBhG,EAAMK,CAAC,CAAC,CAAC,EACnH,eAAgB,CAAC2F,EAAK3F,IAAMoF,EAAQ,qBAAsB,IAAMvF,EAAO8F,CAAG,EAAE,eAAehG,EAAMK,CAAC,CAAC,CAAC,EACpG,kBAAmB,CAAC2F,EAAK3F,IAAMoF,EAAQ,wBAAyB,IAAMvF,EAAO8F,CAAG,EAAE,kBAAkBhG,EAAMK,CAAC,CAAC,CAAC,EAC7G,aAAe2F,GAAQP,EAAQ,mBAAoB,IAAMvF,EAAO8F,CAAG,EAAE,cAAc,EACnF,cAAgBA,GAAQP,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,eAAe,EACtF,qBAAuBA,GAAQP,EAAQ,2BAA4B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,uBAAZ,YAAA9E,EAAA,KAAAhD,GAAoC,EAC7G,qBAAuB8H,GAAQP,EAAQ,2BAA4B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,uBAAZ,YAAA9E,EAAA,KAAAhD,GAAoC,EAG7G,eAAgB,CAACsJ,EAAQP,EAAIR,IAAU,CACrC,MAAMJ,EAAIrG,EAAMwH,CAAM,EAClB,OAAOnB,EAAE,gBAAmB,WAC9BZ,EAAQ,wBAAyB,IAAMY,EAAE,eAAerG,EAAMiH,CAAE,EAAGR,GAASrE,EAAWmD,EAAQkB,CAAK,CAAC,CAAC,EAEtGnI,EAAkB,wBAAyBD,EAASE,CAAQ,CAEhE,EACA,gBAAkBiJ,GAAW/B,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAA8B,EAAMwH,CAAM,GAAE,kBAAd,YAAAtG,EAAA,KAAAhD,GAAiC,EACnG,qBAAsB,CAAC8H,EAAKiB,EAAIR,IAAUhB,EAAQ,2BAA4B,aAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,uBAAZ,YAAA9E,EAAA,KAAAhD,EAAmC8B,EAAMiH,CAAE,EAAG7E,EAAWmD,EAAQkB,CAAK,GAAE,EAC5J,sBAAwBT,GAAQP,EAAQ,4BAA6B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,YAAA9E,EAAA,KAAAhD,GAAqC,EAGhH,YAAa,CAAC8H,EAAKb,IAAMM,EAAQ,kBAAmB,IAAMvF,EAAO8F,CAAG,EAAE,YAAYb,CAAC,CAAC,EACpF,cAAe,CAACa,EAAKb,IAAMM,EAAQ,oBAAqB,IAAMvF,EAAO8F,CAAG,EAAE,cAAcb,CAAC,CAAC,EAC1F,SAAU,CAACa,EAAKK,EAAGwB,IAAOpC,EAAQ,eAAgB,IAAMvF,EAAO8F,CAAG,EAAE,SAASK,EAAGwB,CAAE,CAAC,EACnF,mBAAoB,CAAC7B,EAAK3F,EAAG+F,IAAMX,EAAQ,yBAA0B,IAAMvF,EAAO8F,CAAG,EAAE,mBAAmB3F,EAAG+F,CAAC,CAAC,EAC/G,iBAAkB,CAACJ,EAAKI,IAAMX,EAAQ,uBAAwB,IAAMvF,EAAO8F,CAAG,EAAE,iBAAiBI,CAAC,CAAC,EACnG,iBAAmBJ,GAAQN,EAAO,uBAAwB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,mBAAZ,YAAA9E,EAAA,KAAAhD,KAAoC,IAAI,EAAE,EAC1G,kBAAmB,CAAC8H,EAAKI,IAAMX,EAAQ,wBAAyB,IAAMvF,EAAO8F,CAAG,EAAE,kBAAkBI,CAAC,CAAC,EACtG,kBAAoBJ,GAAQN,EAAO,wBAAyB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,KAAqC,IAAI,EAAE,EAC7G,qBAAsB,CAAC8H,EAAKI,IAAMX,EAAQ,2BAA4B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,uBAAZ,YAAA9E,EAAA,KAAAhD,EAAmCkI,GAAE,EAKjH,mBAAoB,CAACJ,EAAK,IAAMN,EAAO,yBAA0B,IAAMxF,EAAO8F,CAAG,EAAE,mBAAmB,CAAC,GAAK,EAAG,CAAC,EAChH,mBAAoB,CAACA,EAAK,IAAM,SAAE,GAAI,EAAE9E,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,qBAAZ,MAAA9E,EAAA,KAAAhD,EAAiC,EAAI,MAAQ,CAAe,CAAE,EACtG,sBAAuB,CAAC8H,EAAK,IAAM,SAAE,GAAI,EAAE9E,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,MAAA9E,EAAA,KAAAhD,EAAoC,EAAI,MAAQ,CAAe,CAAE,EAC5G,oBAAqB,CAAC8H,EAAK,IAAM,SAAE,GAAI,EAAE9E,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,sBAAZ,MAAA9E,EAAA,KAAAhD,EAAkC,EAAI,MAAQ,CAAe,CAAE,EAGxG,cAAgB8H,GAAQN,EAAO,oBAAqB,IAAA,aAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,OAAiCsD,GAAAD,EAAArB,EAAO8F,CAAG,GAAE,mBAAZ,YAAAxE,EAAA,KAAAD,KAAoC,IAAI,EAAE,EAGrI,eAAiByE,GAAQN,EAAO,qBAAsB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,iBAAZ,YAAA9E,EAAA,KAAAhD,KAAkC,IAAO,EAAK,EAC1G,SAAW8H,GAAQN,EAAO,eAAgB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,WAAZ,YAAA9E,EAAA,KAAAhD,IAA0B,IAAI,EAC9E,kBAAoB8H,GAAQP,EAAQ,wBAAyB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,GAAiC,EACpG,kBAAoB8H,GAAQP,EAAQ,wBAAyB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,GAAiC,EACpG,gBAAiB,CAAC8H,EAAKM,IAAMb,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,EAA8BoI,GAAE,EAClG,gBAAiB,CAACN,EAAKM,IAAMb,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,EAA8BoI,GAAE,EAGlG,WAAY,CAACN,EAAKe,EAAKe,IAAUrC,EAAQ,iBAAkB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,aAAZ,YAAA9E,EAAA,KAAAhD,EAAyB6I,EAAKe,GAAM,EACrG,UAAW,CAAC9B,EAAKe,EAAKe,IAAUrC,EAAQ,gBAAiB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,YAAZ,YAAA9E,EAAA,KAAAhD,EAAwB6I,EAAKe,GAAM,EAClG,cAAgB9B,GAAQN,EAAO,oBAAqB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,KAAiC,MAAM,IAAI,EACrG,gBAAiB,CAAC8H,EAAKpD,IAAS8C,EAAO,sBAAuB,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,EAA8B0E,IAAO,IAAI,EAC7G,oBAAqB,CAACoD,EAAK+B,IAAYtC,EAAQ,0BAA2B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,sBAAZ,YAAA9E,EAAA,KAAAhD,EAAkC6J,GAAQ,EAC1H,mBAAqB/B,GAAQN,EAAO,yBAA0B,aAAM,OAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,qBAAZ,YAAA9E,EAAA,KAAAhD,IAAoC,IAAI,EAG5G,gBAAiB,CAAC8H,EAAKtE,IAAM+D,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,EAA8BwD,GAAE,EAClG,gBAAkBsE,GAAQP,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,GAA+B,EAC9F,kBAAoB8H,GAAQN,EAAO,wBAAyB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,KAAqC,IAAO,EAAK,EACnH,sBAAwB8H,GAAQP,EAAQ,4BAA6B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,YAAA9E,EAAA,KAAAhD,GAAqC,EAChH,sBAAwB8H,GAAQP,EAAQ,4BAA6B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,YAAA9E,EAAA,KAAAhD,GAAqC,EAGhH,YAAc8H,GAAQN,EAAO,kBAAmB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,cAAZ,YAAA9E,EAAA,KAAAhD,KAA+B,IAAI,EAAE,EAC3F,eAAgB,CAAC8H,EAAK3F,IAAMoF,EAAQ,qBAAsB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,iBAAZ,YAAA9E,EAAA,KAAAhD,EAA6BmC,GAAE,EAC/F,wBAAyB,CAAC2F,EAAK3F,IAAMoF,EAAQ,8BAA+B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,0BAAZ,YAAA9E,EAAA,KAAAhD,EAAsCmC,GAAE,EAC1H,yBAA2B2F,GAAQP,EAAQ,+BAAgC,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,2BAAZ,YAAA9E,EAAA,KAAAhD,GAAwC,EAGzH,QAAS,CAAC8H,EAAK3F,IAAMoF,EAAQ,cAAe,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,UAAZ,YAAA9E,EAAA,KAAAhD,EAAsBmC,GAAE,EAC1E,kBAAmB,CAAC2F,EAAK1G,IAAMmG,EAAQ,wBAAyB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,EAAgCoB,GAAE,EACxG,kBAAoB0G,GAAQN,EAAO,wBAAyB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,KAAqC,CAAA,GAAI,CAAA,CAAE,EAC7G,iBAAkB,CAAC8H,EAAKtE,IAAM+D,EAAQ,uBAAwB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,mBAAZ,YAAA9E,EAAA,KAAAhD,EAA+BwD,GAAE,EACrG,iBAAmBsE,GAAQN,EAAO,uBAAwB,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,mBAAZ,YAAA9E,EAAA,KAAAhD,KAAoC,IAAO,EAAK,EAChH,cAAe,CAAC8H,EAAKI,IAAMX,EAAQ,oBAAqB,IAAM,SAC5D,MAAMuC,EAAO5B,GAAK,CAAA,EAEZ6B,EAAS,MAAM,QAAQD,EAAI,IAAI,EAAI,CAAE,GAAGA,EAAK,KAAM3E,GAAYkC,EAAQyC,EAAI,IAAI,GAAMA,EAC3F,OAAO9G,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,YAAA9E,EAAA,KAAAhD,EAA4B+J,EACrC,CAAC,EACD,aAAc,CAACjC,EAAK7F,IAAMsF,EAAQ,mBAAoB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,eAAZ,YAAA9E,EAAA,KAAAhD,EAA2BiC,GAAE,EACzF,gBAAiB,CAAC6F,EAAK7F,IAAMsF,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,EAA8BiC,GAAE,EAClG,gBAAkB6F,GAAQP,EAAQ,sBAAuB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,kBAAZ,YAAA9E,EAAA,KAAAhD,GAA+B,EAC9F,mBAAoB,CAAC8H,EAAK3F,IAAMoF,EAAQ,yBAA0B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,qBAAZ,YAAA9E,EAAA,KAAAhD,EAAiCmC,GAAE,EAC3G,sBAAuB,CAAC2F,EAAK3F,IAAMoF,EAAQ,4BAA6B,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,YAAA9E,EAAA,KAAAhD,EAAoCmC,GAAE,EACpH,eAAgB,CAAC2F,EAAK3F,IAAMoF,EAAQ,qBAAsB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,iBAAZ,YAAA9E,EAAA,KAAAhD,EAA6BmC,GAAE,EAC/F,kBAAmB,CAAC2F,EAAK3G,IAAMoG,EAAQ,wBAAyB,IAAA,SAAM,OAAAvE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,oBAAZ,YAAA9E,EAAA,KAAAhD,EAAgCmB,GAAE,EAGxG,eAAgB,IAAMf,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,iBAAkB,IAAMD,EAAkB,uBAAwBD,EAASE,CAAQ,EACnF,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,YAAa,IAAMD,EAAkB,kBAAmBD,EAASE,CAAQ,EACzE,YAAa,IAAMK,GAAiB,kBAAmBP,EAASE,EAAU,IAAI,EAC9E,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,sBAAwByH,GAAQN,EAAO,4BAA6B,IAAA,SAAM,QAAAxE,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,wBAAZ,YAAA9E,EAAA,KAAAhD,KAAyC,IAAO,EAAK,EAC/H,WAAY,CAAC8H,EAAK/F,IAAM,SAAE,GAAI,EAAEiB,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,aAAZ,MAAA9E,EAAA,KAAAhD,EAAyB8B,EAAMC,CAAC,EAAI,MAAQ,CAAe,CAAE,EAC7F,cAAe,CAAC+F,EAAK/F,IAAM,SAAE,GAAI,EAAEiB,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,MAAA9E,EAAA,KAAAhD,EAA4B8B,EAAMC,CAAC,EAAI,MAAQ,CAAe,CAAE,EACnG,cAAgB+F,GAAQ,SAAE,GAAI,EAAE9E,GAAAhD,EAAAgC,EAAO8F,CAAG,GAAE,gBAAZ,MAAA9E,EAAA,KAAAhD,EAA+B,MAAQ,CAAe,CAAE,EAGxF,aAAc,CAACmB,EAAG8F,IAAM,CAGtB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtCpE,GAAA,MAAAA,EAAK,OAAMoE,EAAS,KAAOtB,GAAUiD,EAAQ/F,EAAI,IAAI,GACrDA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAM,GAE3D,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,cAAgB,YAAWoE,EAAS,YAAcpE,EAAI,aAClE,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,WAAUoE,EAAS,eAAiBpE,EAAI,gBACvE,OAAOA,GAAA,YAAAA,EAAK,2BAA6B,YAAWoE,EAAS,yBAA2BpE,EAAI,0BAC5F,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,YAAWoE,EAAS,kBAAoBpE,EAAI,mBAC9E,OAAOA,GAAA,YAAAA,EAAK,aAAe,WAAUoE,EAAS,WAAapE,EAAI,YAC/D,OAAOA,GAAA,YAAAA,EAAK,uBAAyB,YAAWoE,EAAS,qBAAuBpE,EAAI,sBACpF,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAEvDA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAAStB,GAAUiD,EAAQ/F,EAAI,MAAM,GAC/D,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EACzC6C,EAAQrE,EAAWmD,EAAQlG,CAAC,EAClC,OAAOsG,EAAqB,SAAU,IACpCuC,EAAU,IAAI3C,EAAO,OAAOkB,EAAO7C,CAAQ,EAAI,IAAI2B,EAAO,OAAOkB,CAAK,EACxE,QAAA,CACF,EACA,YAAa,CAACL,EAAGjB,IAAM,CACrB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EAU1C,GATIpE,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAM,GAC3DA,GAAA,MAAAA,EAAK,WAAUoE,EAAS,SAAWxB,EAAWmD,EAAQ/F,EAAI,QAAiB,GAC3E,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QACvD,OAAOA,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,QAAU,UAAYA,EAAI,MAAQ,IAAGoE,EAAS,MAAQpE,EAAI,OAItEA,GAAA,MAAAA,EAAK,QAAU,OAAOA,EAAI,QAAW,SAAU,CACjD,MAAMkC,EAAIlC,EAAI,OACdoE,EAAS,OAAU,eAAgBlC,EAAKA,EAAI,CAAE,WAAY,SAAU,GAAGA,CAAA,CACzE,CACA,MAAMwG,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,QAAS,IACnCuC,EAAU,IAAI3C,EAAO,MAAMa,EAAGxC,CAAQ,EAAI,IAAI2B,EAAO,MAAMa,CAAC,EAC9D,OAAA,CACF,EACA,eAAgB,CAAC/G,EAAG8F,IAAM,CACxB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACpCuE,EAAe,CAAC,cAAe,eAAgB,gBAAiB,cAAe,gBAAiB,gBAAgB,EACtH,UAAWC,KAAKD,GAAoB3I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GAC3E,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,YAAWoE,EAAS,cAAgBpE,EAAI,eACtE,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,WAAa,YAAWoE,EAAS,SAAWpE,EAAI,UAC5D,OAAOA,GAAA,YAAAA,EAAK,YAAc,YAAWoE,EAAS,UAAYpE,EAAI,WAC9D,OAAOA,GAAA,YAAAA,EAAK,OAAS,YAAWoE,EAAS,KAAOpE,EAAI,MACpD,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7DA,GAAA,MAAAA,EAAK,QAAOoE,EAAS,MAASpE,EAAI,MAAoB,IAAI6I,GAC5DA,GAAM,OAAOA,GAAO,UAAY,QAASA,EAAKrI,EAAMqI,CAAS,EAAIA,CAAA,GAE/D7I,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYpE,EAAI,WACzCA,GAAA,MAAAA,EAAK,gBAAeoE,EAAS,cAAgBpE,EAAI,eACjD,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3DmE,GAAmB4B,EAAQ/F,EAAKoE,CAAQ,EACxC,MAAMsE,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,WAAY,IACtCuC,EAAU,IAAI3C,EAAO,SAASlC,GAAYkC,EAAQlG,CAAC,EAAGuE,CAAQ,EAAI,IAAI2B,EAAO,SAASlC,GAAYkC,EAAQlG,CAAC,CAAC,EAC9G,UAAA,CACF,EACA,cAAe,CAACA,EAAG8F,IAAM,CACvB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACpC0E,EAAS,CAAC,cAAe,YAAa,eAAgB,gBAAiB,cAAe,cAAe,gBAAiB,gBAAgB,EAC5I,UAAWF,KAAKE,GAAc9I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GACrE,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,YAAWoE,EAAS,cAAgBpE,EAAI,eACtE,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,YAAc,YAAWoE,EAAS,UAAYpE,EAAI,WAC9D,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7DA,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYpE,EAAI,WACzC,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3DmE,GAAmB4B,EAAQ/F,EAAKoE,CAAQ,EACxC,MAAMsE,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAEzC2E,EAAU7E,GAAiB6B,EAAQlG,CAAwB,EACjE,OAAOsG,EAAqB,UAAW,IACrCuC,EAAU,IAAI3C,EAAO,QAAQgD,EAAS3E,CAAQ,EAAI,IAAI2B,EAAO,QAAQgD,CAAO,EAC9E,SAAA,CACF,EACA,aAAc,CAACnC,EAAG9G,EAAG6F,IAAM,CACzB,MAAM3F,EAAM2F,EAKNqD,GAAchJ,GAAA,YAAAA,EAAK,iBAAkB,GACrCoE,EAAoC,CAAA,EACpC0E,EAAS,CAAC,cAAe,YAAa,eAAgB,gBAAiB,cAAe,aAAa,EACzG,UAAWF,KAAKE,GAAc9I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GACrE,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7DA,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYpE,EAAI,WACzC,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3DmE,GAAmB4B,EAAQ/F,EAAKoE,CAAQ,EACxC,MAAMsE,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,SAAU,IAAM,OAC1C,MAAM7C,EAAOoF,EACT,IAAI3C,EAAO,OAAOnD,EAAWmD,EAAQa,CAAC,EAAG9G,EAAGsE,CAAQ,EACpD,IAAI2B,EAAO,OAAOnD,EAAWmD,EAAQa,CAAC,EAAG9G,CAAC,EAC9C,GAAIkJ,EAAa,CACf,MAAMC,EAAQ,sBAAsB,IAAM,OACxC,GAAI,EAAEvK,EAAA4E,EAAK,gBAAL,MAAA5E,EAAA,KAAA4E,EAAwB,MAAQ,CAAe,CACvD,CAAC,EACK4F,GAAaxK,EAAA4E,EAAK,SAAL,YAAA5E,EAAa,KAAK4E,GACjC4F,IAAY5F,EAAK,OAAS,UAAY,CAAE,4BAAqB2F,CAAK,EAAUC,EAAA,CAAc,EAChG,CACA,OAAO5F,CACT,EAAG,QAAQ,CACb,EACA,gBAAiB,CAAC5D,EAAGiG,IAAM,CACzB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACpC0E,EAAS,CAAC,cAAe,YAAa,eAAgB,gBAAiB,cAAe,aAAa,EACzG,UAAWF,KAAKE,GAAc9I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GACrE,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,YAAc,YAAWoE,EAAS,UAAYpE,EAAI,WAC9D,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7DA,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYpE,EAAI,WACzC,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3DmE,GAAmB4B,EAAQ/F,EAAKoE,CAAQ,EACxC,MAAMsE,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,YAAa,IACvCuC,EACI,IAAI3C,EAAO,UAAUzB,GAAYyB,EAAQrG,CAAC,EAAG0E,CAAQ,EACrD,IAAI2B,EAAO,UAAUzB,GAAYyB,EAAQrG,CAAC,CAAC,EACjD,WAAA,CACF,EACA,kBAAmB,CAACG,EAAGsJ,EAAIxD,IAAM,CAC/B,MAAM3F,EAAM2F,EAENyD,EAAS,MAAM,QAAQD,CAAE,EAAIA,EAAK,CAAA,EAElCE,EAAU,MAAM,QAAQxJ,CAAC,EAAIA,EAAE,OAAS,EAC9C,GAAIuJ,EAAO,OAAS,KAAK,IAAI,EAAGC,EAAU,CAAC,EAGzC,IADA,QAAQ,KAAK,8CAA8CA,EAAU,CAAC,SAASD,EAAO,MAAM,UAAU,EAC/FA,EAAO,OAASC,EAAU,GAAGD,EAAO,KAAK,CAAC,CAAE,IAAK,EAAG,IAAK,CAAA,CAAG,CAAC,EAEtE,MAAMhF,EAAoC,CAAA,EACpC0E,EAAS,CAAC,cAAe,eAAgB,gBAAiB,aAAa,EAC7E,UAAWF,KAAKE,GAAc9I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GACrE,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,YAAWoE,EAAS,cAAgBpE,EAAI,eACtEA,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYpE,EAAI,WACzC,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3DmE,GAAmB4B,EAAQ/F,EAAKoE,CAAQ,EACxC,MAAMsE,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAE/C,OAAO+B,EAAqB,cAAe,IACzCuC,EACI,IAAI3C,EAAO,YAAYlC,GAAYkC,EAAQlG,CAAC,EAAGiE,GAAiBiC,EAAQqD,CAAM,EAAGhF,CAAQ,EACzF,IAAI2B,EAAO,YAAYlC,GAAYkC,EAAQlG,CAAC,EAAGiE,GAAiBiC,EAAQqD,CAAM,CAAC,EACrF,aAAA,CACF,EACA,YAAa,CAACvJ,EAAGyJ,EAAU3D,IAAM,CAC/B,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACpC0E,EAAS,CAAC,eAAgB,iBAAkB,gBAAiB,iBAAiB,EACpF,UAAWF,KAAKE,GAAc9I,GAAA,YAAAA,EAAM4I,MAAO,WAAoBA,CAAC,EAAI5I,EAAI4I,CAAC,GACrE,OAAO5I,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QAC3D,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAE/C,OAAO+B,EAAqB,QAAS,IACnCuC,EACI,IAAI3C,EAAO,MAAM7B,GAAiB6B,EAAQlG,CAAC,EAAGyJ,EAAUlF,CAAQ,EAChE,IAAI2B,EAAO,MAAM7B,GAAiB6B,EAAQlG,CAAC,EAAGyJ,CAAQ,EAC5D,OAAA,CACF,EACA,oBAAqB,CAAC5J,EAAGiG,IAAM,CAC7B,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtC,OAAOpE,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,iBAExEA,GAAA,YAAAA,EAAK,OAAQ,SACfoE,EAAS,IAAMpE,EAAI,IAEf,OAAOA,EAAI,KAAQ,UAAY,OAAOA,EAAI,UAAa,WAAUoE,EAAS,SAAWpE,EAAI,MAE3F,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,WAAUoE,EAAS,kBAAoBpE,EAAI,mBAC7E,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,WAAUoE,EAAS,kBAAoBpE,EAAI,mBAC7E,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAC3D,OAAOA,GAAA,YAAAA,EAAK,UAAY,YAAWoE,EAAS,QAAUpE,EAAI,SAC1D,OAAOA,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACnD,OAAOA,GAAA,YAAAA,EAAK,MAAQ,YAAWoE,EAAS,IAAMpE,EAAI,KAClD,OAAOA,GAAA,YAAAA,EAAK,WAAa,YAAWoE,EAAS,SAAWpE,EAAI,UAC5D,OAAOA,GAAA,YAAAA,EAAK,WAAa,aAAYoE,EAAS,SAAWpE,EAAI,UAEjE,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,gBAAiB,IAC3CuC,EACI,IAAI3C,EAAO,cAAczB,GAAYyB,EAAQrG,CAAC,EAAG0E,CAAQ,EACzD,IAAI2B,EAAO,cAAczB,GAAYyB,EAAQrG,CAAC,CAAC,EACrD,eAAA,CACF,EACA,kBAAmB,CAACG,EAAG8F,IAAM,CAC3B,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EAE1C,OAAI,OAAOpE,GAAA,YAAAA,EAAK,MAAQ,WAAUoE,EAAS,IAAMpE,EAAI,KACjDA,GAAA,MAAAA,EAAK,OAAMoE,EAAS,KAAOb,GAAUwC,EAAQ/F,EAAI,IAAY,GAC7DA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAc,GACnE,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAC3DA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAc,GACnE,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OAErD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,WAAUoE,EAAS,kBAAoBpE,EAAI,mBAC7E,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,WAAUoE,EAAS,kBAAoBpE,EAAI,mBAC7E,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAE3D,OAAOA,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACnD,OAAOA,GAAA,YAAAA,EAAK,MAAQ,YAAWoE,EAAS,IAAMpE,EAAI,KAClD,OAAOA,GAAA,YAAAA,EAAK,WAAa,YAAWoE,EAAS,SAAWpE,EAAI,UAC5D,OAAOA,GAAA,YAAAA,EAAK,WAAa,aAAYoE,EAAS,SAAWpE,EAAI,UAG1DmG,EAAqB,cAAe,IACzC,IAAIJ,EAAO,YAAYnD,EAAWmD,EAAQlG,CAAC,EAAGuE,CAAQ,EACxD,aAAA,CACF,EACA,sBAAuB,CAACvE,EAAG8F,IAAM,CAC/B,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,GACtCpE,GAAA,YAAAA,EAAK,SAAU,SAAWoE,EAAS,MAAQpE,EAAI,OAC/C,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,QACrDA,GAAA,YAAAA,EAAK,QAAS,SAAWoE,EAAS,KAAOpE,EAAI,MACjD,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,kBAAmB,IAC7CuC,EAAU,IAAI3C,EAAO,gBAAgBlC,GAAYkC,EAAQlG,CAAC,EAAGuE,CAAQ,EAAI,IAAI2B,EAAO,gBAAgBlC,GAAYkC,EAAQlG,CAAC,CAAC,EAC5H,iBAAA,CACF,EACA,iBAAkB,CAAC+G,EAAGjB,IAAM,CAC1B,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtC,OAAOpE,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QACvD,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAC3DA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAc,GACnE,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,YAAWoE,EAAS,cAAgBpE,EAAI,eACtE,OAAOA,GAAA,YAAAA,EAAK,qBAAuB,YAAWoE,EAAS,mBAAqBpE,EAAI,oBAChF,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,YAAWoE,EAAS,cAAgBpE,EAAI,eACtE,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,aAAe,WAAUoE,EAAS,WAAapE,EAAI,YAC/D,OAAOA,GAAA,YAAAA,EAAK,iBAAmB,YAAWoE,EAAS,eAAiBpE,EAAI,gBACxE,OAAOA,GAAA,YAAAA,EAAK,mBAAqB,YAAWoE,EAAS,iBAAmBpE,EAAI,kBAChF,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,aAAc,IACxCuC,EAAU,IAAI3C,EAAO,WAAWa,EAAGxC,CAAQ,EAAI,IAAI2B,EAAO,WAAWa,CAAC,EACxE,YAAA,CACF,EACA,aAAc,CAAC5D,EAAM2C,IAAM,CACzB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtCpE,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAc,GACnE,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7D,OAAOA,GAAA,YAAAA,EAAK,cAAgB,WAAUoE,EAAS,YAAcpE,EAAI,aACjE,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAC3D,OAAOA,GAAA,YAAAA,EAAK,cAAgB,WAAUoE,EAAS,YAAcpE,EAAI,aACjE,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,WAAUoE,EAAS,cAAgBpE,EAAI,eACrE,OAAOA,GAAA,YAAAA,EAAK,eAAiB,WAAUoE,EAAS,aAAepE,EAAI,cACvE,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,SAAU,IACpCuC,EAAU,IAAI3C,EAAO,OAAO/C,EAAMoB,CAAQ,EAAI,IAAI2B,EAAO,OAAO/C,CAAI,EACtE,QAAA,CACF,EACA,WAAY,CAACuG,EAAKxC,EAAMpB,IAAM,CAC5B,MAAM3F,EAAM2F,EACVxC,EAAO,OAAQ,WAAoC,OAAW,IAC1DiB,EAAoC,CAAA,EAG1C,GAFIpE,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASb,GAAUwC,EAAQ/F,EAAI,MAAc,GAEnEA,GAAA,MAAAA,EAAK,YAAa,CACpB,MAAMqD,EAAMrD,EAAI,YAChBoE,EAAS,YAAcjB,EACnB,IAAI4C,EAAO,KAAK,CAAC1C,EAAI,MAAO,CAACA,EAAI,MAAM,EACvCE,GAAUwC,EAAQ1C,CAAG,CAC3B,CACIrD,GAAA,MAAAA,EAAK,YAAWoE,EAAS,UAAYb,GAAUwC,EAAQ/F,EAAI,SAAiB,GAC5EA,GAAA,MAAAA,EAAK,mBAAkBoE,EAAS,iBAAmBb,GAAUwC,EAAQ/F,EAAI,gBAAwB,GACjG,OAAOA,GAAA,YAAAA,EAAK,gBAAkB,WAAUoE,EAAS,cAAgBpE,EAAI,eACrEA,GAAA,MAAAA,EAAK,SAAQoE,EAAS,OAASpE,EAAI,QACvC,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EACzCoF,EAAUxJ,GAAA,MAAAA,EAAK,UAAYuD,GAAUwC,EAAQ/F,EAAI,SAAiB,EAAI,KAC5E,OAAOmG,EAAqB,OAAQ,IAAM,CACxC,MAAM7C,EAAOoF,EACT,IAAI3C,EAAO,KAAKwD,EAAK,IAAIxD,EAAO,KAAKgB,EAAK,MAAOA,EAAK,MAAM,EAAG3C,CAAQ,EACvE,IAAI2B,EAAO,KAAKwD,EAAK,IAAIxD,EAAO,KAAKgB,EAAK,MAAOA,EAAK,MAAM,CAAC,EAEjE,OAAIyC,GAAW,OAAOlG,EAAK,cAAiB,YAAYA,EAAK,aAAakG,CAAO,EAC1ElG,CACT,EAAG,MAAM,CACX,EACA,mBAAoB,CAACmG,EAAKC,EAAQC,EAAQC,IAAOzD,EAAqB,eAAgB,IAAM,IAAIJ,EAAO,aAAa0D,EAAMjJ,EAAMiJ,CAAG,EAAI,OAAWC,EAAQC,GAAU,GAAIC,CAAE,EAAG,cAAc,EAC3L,cAAe,CAAC/J,EAAG8F,IAAM,CACvB,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtC,OAAOpE,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACnD,MAAM,QAAQA,GAAA,YAAAA,EAAK,OAAO,IAAGoE,EAAS,QAAUpE,EAAI,UACpDA,GAAA,YAAAA,EAAK,YAAa,SAAWoE,EAAS,SAAWpE,EAAI,UACrD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SAC7D,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,UAAW,IACrCuC,EAAU,IAAI3C,EAAO,QAAQnD,EAAWmD,EAAQlG,CAAC,EAAGuE,CAAQ,EAAI,IAAI2B,EAAO,QAAQnD,EAAWmD,EAAQlG,CAAC,CAAC,EAC1G,SAAA,CACF,EACA,oBAAqB,CAACgK,EAAWlE,IAAM,CACrC,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EAC1C,OAAIpE,GAAA,MAAAA,EAAK,QAAOoE,EAAS,MAAQxB,EAAWmD,EAAQ/F,EAAI,KAAc,GAClEA,GAAA,MAAAA,EAAK,UAASoE,EAAS,QAAUpE,EAAI,SACrC,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,WAAa,WAAUoE,EAAS,SAAWpE,EAAI,UAC3D,OAAOA,GAAA,YAAAA,EAAK,eAAiB,WAAUoE,EAAS,aAAepE,EAAI,cACnE,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,UACzDA,GAAA,YAAAA,EAAK,cAAe,SAAWoE,EAAS,WAAapE,EAAI,YACzD,OAAOA,GAAA,YAAAA,EAAK,YAAc,YAAWoE,EAAS,UAAYpE,EAAI,WAC9D,OAAOA,GAAA,YAAAA,EAAK,eAAiB,YAAWoE,EAAS,aAAepE,EAAI,cACpE,OAAOA,GAAA,YAAAA,EAAK,2BAA6B,YAAWoE,EAAS,yBAA2BpE,EAAI,0BAC5F,OAAOA,GAAA,YAAAA,EAAK,SAAW,WAAUoE,EAAS,OAASpE,EAAI,QACvD,OAAOA,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC1E,OAAOA,GAAA,YAAAA,EAAK,oBAAsB,YAAWoE,EAAS,kBAAoBpE,EAAI,mBAC3EmG,EAAqB,gBAAiB,IAC3C,IAAIJ,EAAO,cAAc8D,IAAc,IAAM,SAAS,cAAc,KAAK,GAAIzF,CAAQ,EACvF,eAAA,CACF,EACA,eAAgB,CAACvE,EAAGiK,EAAQnE,IAAM,CAChC,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtC,OAAOpE,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACnD,OAAOA,GAAA,YAAAA,EAAK,YAAc,WAAUoE,EAAS,UAAYpE,EAAI,WAC7D,OAAOA,GAAA,YAAAA,EAAK,cAAgB,WAAUoE,EAAS,YAAcpE,EAAI,aACjE,OAAOA,GAAA,YAAAA,EAAK,kBAAoB,YAAWoE,EAAS,gBAAkBpE,EAAI,iBAC9E,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EAC/C,OAAO+B,EAAqB,WAAY,IACtCuC,EACI,IAAI3C,EAAO,SAASnD,EAAWmD,EAAQlG,CAAC,EAAGiK,EAAQ1F,CAAQ,EAC3D,IAAI2B,EAAO,SAASnD,EAAWmD,EAAQlG,CAAC,EAAGiK,CAAM,EACvD,UAAA,CACF,EAGA,mBAAoB,CAACC,EAAIlK,IAAM,WAC7B,GAAI,CACF,MAAMC,EAAIU,EAAMuJ,CAAE,EAEdA,EAAG,OAAS,UAAUrL,EAAAoB,EAAE,YAAF,MAAApB,EAAA,KAAAoB,EAAc8C,EAAWmD,EAAQlG,CAAC,GACnDkK,EAAG,OAAS,eAAerI,EAAA5B,EAAE,WAAF,MAAA4B,EAAA,KAAA5B,EAAa8C,EAAWmD,EAAQlG,CAAC,IAChEkC,EAAAjC,EAAE,cAAF,MAAAiC,EAAA,KAAAjC,EAAgB8C,EAAWmD,EAAQlG,CAAC,EAC3C,MAAQ,CAAe,CACzB,EACA,eAAgB,CAACkK,EAAI/G,IAAS,iBAC5B,GAAI,CAEF,GAAI+G,EAAG,OAAS,kBAAmB,EACjCrI,GAAAhD,EAAA8B,EAAMuJ,CAAE,GAAE,YAAV,MAAArI,EAAA,KAAAhD,EAAsBmF,GAAYkC,EAAQ/C,CAAe,GACzD,MACF,CACA,GAAIiB,GAAajB,CAAI,EAAG,CAGlB+G,EAAG,OAAS,aAAW/H,GAAAD,EAAAvB,EAAMuJ,CAAE,GAAE,UAAV,MAAA/H,EAAA,KAAAD,EAAoB+B,GAAiBiC,EAAQ/C,CAAI,IAC5E,MACF,EACAR,GAAAC,EAAAjC,EAAMuJ,CAAE,GAAE,UAAV,MAAAvH,EAAA,KAAAC,EAAoBoB,GAAYkC,EAAQ/C,CAAe,EACzD,MAAQ,CAAe,CACzB,EACA,kBAAmB,CAAC+G,EAAI/E,IAAY,qJAClC,MAAMlF,EAAIU,EAAMuJ,CAAE,EACZpE,EAAIX,EACVU,GAA4BqE,EAAG,KAAMpE,CAAC,EACtC,GAAI,CAkDF,GAjDI,OAAOA,EAAE,aAAgB,YAAUjH,EAAAoB,EAAE,iBAAF,MAAApB,EAAA,KAAAoB,EAAmB6F,EAAE,cACxD,OAAOA,EAAE,cAAiB,YAAUjE,EAAA5B,EAAE,kBAAF,MAAA4B,EAAA,KAAA5B,EAAoB6F,EAAE,eAC1D,OAAOA,EAAE,eAAkB,YAAU5D,EAAAjC,EAAE,mBAAF,MAAAiC,EAAA,KAAAjC,EAAqB6F,EAAE,gBAC5D,OAAOA,EAAE,aAAgB,YAAU3D,EAAAlC,EAAE,iBAAF,MAAAkC,EAAA,KAAAlC,EAAmB6F,EAAE,cACxDA,EAAE,gBAAkB,IAAMlD,EAAA3C,EAAE,gBAAF,MAAA2C,EAAA,KAAA3C,GACrB6F,EAAE,gBAAkB,IAASoE,EAAG,OAAS,gBAAY,kCAC1D,OAAOpE,EAAE,WAAc,YAAUhD,EAAA7C,EAAE,eAAF,MAAA6C,EAAA,KAAA7C,EAAiB6F,EAAE,YACpD,OAAOA,EAAE,aAAgB,YAAUjD,EAAA5C,EAAE,iBAAF,MAAA4C,EAAA,KAAA5C,EAAmB6F,EAAE,cAExD,OAAOA,EAAE,cAAiB,YAAUqE,EAAAlK,EAAE,kBAAF,MAAAkK,EAAA,KAAAlK,EAAoB6F,EAAE,eAC1D,OAAOA,EAAE,gBAAmB,YAAUsE,EAAAnK,EAAE,oBAAF,MAAAmK,EAAA,KAAAnK,EAAsB6F,EAAE,iBAC9D,OAAOA,EAAE,eAAkB,YAAUuE,EAAApK,EAAE,mBAAF,MAAAoK,EAAA,KAAApK,EAAqB6F,EAAE,gBAC5D,OAAOA,EAAE,iBAAoB,YAAUwE,EAAArK,EAAE,qBAAF,MAAAqK,EAAA,KAAArK,EAAuB6F,EAAE,kBAChE,OAAOA,EAAE,QAAW,UAAYoE,EAAG,OAAS,YAAUK,EAAAtK,EAAE,YAAF,MAAAsK,EAAA,KAAAtK,EAAc6F,EAAE,SACtEA,EAAE,SAAWoE,EAAG,OAAS,aAAeA,EAAG,OAAS,oBAAkBM,EAAAvK,EAAE,YAAF,MAAAuK,EAAA,KAAAvK,EAAcwE,GAAYyB,EAAQJ,EAAE,MAAgB,IAC1HA,EAAE,eAAiBoE,EAAG,OAAS,iBAAeO,EAAAxK,EAAE,mBAAF,MAAAwK,EAAA,KAAAxK,EAAqBgE,GAAiBiC,EAAQJ,EAAE,aAA0B,IACxH,OAAOA,EAAE,UAAa,UAAYoE,EAAG,OAAS,WAASQ,EAAAzK,EAAE,cAAF,MAAAyK,EAAA,KAAAzK,EAAgB6F,EAAE,YAKzEoE,EAAG,OAAS,iBAAmBA,EAAG,OAAS,iBACzC,OAAOpE,EAAE,KAAQ,YAAU6E,EAAA1K,EAAE,WAAF,MAAA0K,EAAA,KAAA1K,EAAa6F,EAAE,MAC1C,OAAOA,EAAE,UAAa,UAAU8E,EAAA3K,EAAE,cAAF,MAAA2K,EAAA,KAAA3K,EAAgB6F,EAAE,UAC7C,OAAOA,EAAE,KAAQ,YAAU+E,EAAA5K,EAAE,cAAF,MAAA4K,EAAA,KAAA5K,EAAgB6F,EAAE,MAClD,OAAOA,EAAE,mBAAsB,YAAUgF,EAAA7K,EAAE,uBAAF,MAAA6K,EAAA,KAAA7K,EAAyB6F,EAAE,oBACpE,OAAOA,EAAE,mBAAsB,YAAUiF,EAAA9K,EAAE,uBAAF,MAAA8K,EAAA,KAAA9K,EAAyB6F,EAAE,qBAGtEoE,EAAG,OAAS,eACVpE,EAAE,MAAQ,OAAOA,EAAE,MAAS,YAAUkF,EAAA/K,EAAE,UAAF,MAAA+K,EAAA,KAAA/K,EAAYyD,GAAUwC,EAAQJ,EAAE,IAAY,IAGpF,OAAOA,EAAE,OAAU,WAAaoE,EAAG,OAAS,eAAiBA,EAAG,OAAS,aAAWe,EAAAhL,EAAE,WAAF,MAAAgL,EAAA,KAAAhL,EAAa6F,EAAE,QAEnGoE,EAAG,OAAS,UAAYpE,EAAE,OAAS,UAAWoF,EAAAjL,EAAE,UAAF,MAAAiL,EAAA,KAAAjL,EAAY6F,EAAE,OAG5DoE,EAAG,OAAS,SACV,OAAOpE,EAAE,KAAQ,YAAUqF,EAAAlL,EAAE,cAAF,MAAAkL,EAAA,KAAAlL,EAAgB6F,EAAE,MAC7CA,EAAE,MAAQ,OAAOA,EAAE,MAAS,YAAUsF,EAAAnL,EAAE,UAAF,MAAAmL,EAAA,KAAAnL,EAAYyD,GAAUwC,EAAQJ,EAAE,IAAY,IAClFA,EAAE,aAAe,OAAOA,EAAE,aAAgB,YAAUuF,EAAApL,EAAE,iBAAF,MAAAoL,EAAA,KAAApL,EAAmByD,GAAUwC,EAAQJ,EAAE,WAAmB,IAC9GA,EAAE,WAAa,OAAOA,EAAE,WAAc,YAAUwF,GAAArL,EAAE,eAAF,MAAAqL,GAAA,KAAArL,EAAiByD,GAAUwC,EAAQJ,EAAE,SAAiB,IACtGA,EAAE,kBAAoB,OAAOA,EAAE,kBAAqB,YAAUyF,GAAAtL,EAAE,sBAAF,MAAAsL,GAAA,KAAAtL,EAAwByD,GAAUwC,EAAQJ,EAAE,gBAAwB,IAClI,OAAOA,EAAE,eAAkB,YAAU0F,GAAAvL,EAAE,mBAAF,MAAAuL,GAAA,KAAAvL,EAAqB6F,EAAE,gBAC5DA,EAAE,UAAQ2F,EAAAxL,EAAE,iBAAF,MAAAwL,EAAA,KAAAxL,EAAmB6F,EAAE,UAIjCoE,EAAG,OAAS,kBAAmB,CACjC,MAAMwB,GAAkC,CAAA,EACpC5F,EAAE,QAAU,SAAW4F,GAAO,MAAQ5F,EAAE,OACxC,OAAOA,EAAE,OAAU,WAAU4F,GAAO,MAAQ5F,EAAE,OAC9CA,EAAE,OAAS,SAAW4F,GAAO,KAAO5F,EAAE,MACtC,OAAO,KAAK4F,EAAM,EAAE,OAAS,KAAGC,EAAA1L,EAAE,YAAF,MAAA0L,EAAA,KAAA1L,EAAcyL,IACpD,CAEI,OAAO5F,EAAE,UAAa,YAAU8F,GAAA3L,EAAE,cAAF,MAAA2L,GAAA,KAAA3L,EAAgB6F,EAAE,WAClD,OAAOA,EAAE,OAAU,YAAU+F,GAAA5L,EAAE,WAAF,MAAA4L,GAAA,KAAA5L,EAAa6F,EAAE,QAC5C,OAAOA,EAAE,SAAY,YAAUgG,GAAA7L,EAAE,aAAF,MAAA6L,GAAA,KAAA7L,EAAe6F,EAAE,UAEhDoE,EAAG,OAAS,YACV,OAAOpE,EAAE,MAAS,YAAUiG,GAAA9L,EAAE,UAAF,MAAA8L,GAAA,KAAA9L,EAAY6F,EAAE,OAC1CA,EAAE,WAAa,UAAWkG,GAAA/L,EAAE,cAAF,MAAA+L,GAAA,KAAA/L,EAAgB6F,EAAE,YAG9CoE,EAAG,OAAS,kBACVpE,EAAE,SAAOmG,GAAAhM,EAAE,WAAF,MAAAgM,GAAA,KAAAhM,EAAa8C,EAAWmD,EAAQJ,EAAE,KAAc,IACzD,OAAOA,EAAE,cAAiB,YAAUoG,GAAAjM,EAAE,oBAAF,MAAAiM,GAAA,KAAAjM,EAAsB6F,EAAE,eAC5DA,EAAE,aAAe,UAAWqG,GAAAlM,EAAE,gBAAF,MAAAkM,GAAA,KAAAlM,EAAkB6F,EAAE,cAGlDoE,EAAG,OAAS,aACV,OAAOpE,EAAE,QAAW,YAAUsG,GAAAnM,EAAE,YAAF,MAAAmM,GAAA,KAAAnM,EAAc6F,EAAE,SAC9C,OAAOA,EAAE,WAAc,YAAUuG,GAAApM,EAAE,eAAF,MAAAoM,GAAA,KAAApM,EAAiB6F,EAAE,YACpD,OAAOA,EAAE,aAAgB,YAAUwG,GAAArM,EAAE,iBAAF,MAAAqM,GAAA,KAAArM,EAAmB6F,EAAE,eAG1DA,EAAE,QAAU,OAAOA,EAAE,QAAW,YAAUyG,GAAAtM,EAAE,YAAF,MAAAsM,GAAA,KAAAtM,EAAc6F,EAAE,SAC1D,OAAOA,EAAE,SAAY,WACnBoE,EAAG,OAAS,UAAY,OAAOjK,EAAE,YAAe,WAAYA,EAAE,WAAW,CAAE,QAAS6F,EAAE,QAAS,GAC9F0G,GAAAvM,EAAE,aAAF,MAAAuM,GAAA,KAAAvM,EAAe6F,EAAE,UAEpBA,EAAE,OAAS,UAAW2G,GAAAxM,EAAE,UAAF,MAAAwM,GAAA,KAAAxM,EAAYgD,GAAUiD,EAAQJ,EAAE,IAAI,IAE1D,OAAOA,EAAE,QAAW,UAAU4G,GAAAzM,EAAE,YAAF,MAAAyM,GAAA,KAAAzM,EAAc6F,EAAE,QACzCA,EAAE,QAAU,OAAOA,EAAE,QAAW,WAAaoE,EAAG,OAAS,eAAiBA,EAAG,OAAS,UAAYA,EAAG,OAAS,WAASyC,GAAA1M,EAAE,YAAF,MAAA0M,GAAA,KAAA1M,EAAcyD,GAAUwC,EAAQJ,EAAE,MAAc,IAG5KA,EAAE,iBAAmB,IAAM8G,GAAA3M,EAAE,iBAAF,MAAA2M,GAAA,KAAA3M,GACtB6F,EAAE,iBAAmB,MAAO+G,GAAA5M,EAAE,kBAAF,MAAA4M,GAAA,KAAA5M,IACjC6F,EAAE,kBAAoB,IAAMgH,GAAA7M,EAAE,kBAAF,MAAA6M,GAAA,KAAA7M,GACvB6F,EAAE,kBAAoB,MAAOiH,GAAA9M,EAAE,mBAAF,MAAA8M,GAAA,KAAA9M,IAClC,OAAO6F,EAAE,QAAW,YAAUkH,GAAA/M,EAAE,YAAF,MAAA+M,GAAA,KAAA/M,EAAc6F,EAAE,SAC9CA,EAAE,UAAQmH,GAAAhN,EAAE,YAAF,MAAAgN,GAAA,KAAAhN,EAAcyD,GAAUwC,EAAQJ,EAAE,MAAM,IAElD,OAAOA,EAAE,OAAU,UAAYoE,EAAG,OAAS,YAAUgD,GAAAjN,EAAE,WAAF,MAAAiN,GAAA,KAAAjN,EAAa6F,EAAE,QACpE,OAAOA,EAAE,MAAS,UAAYoE,EAAG,OAAS,YAAYiD,GAAAlN,EAAE,UAAF,MAAAkN,GAAA,KAAAlN,EAAY6F,EAAE,OAAOsH,EAAA/L,GAAY,IAAIpB,CAAC,IAAjB,MAAAmN,EAAoB,YAC/F,OAAOtH,EAAE,gBAAmB,UAAYoE,EAAG,OAAS,YAAUmD,GAAApN,EAAE,oBAAF,MAAAoN,GAAA,KAAApN,EAAsB6F,EAAE,gBAC5F,MAAQ,CAAe,CACzB,EAKA,uBAAwB,CAACoE,EAAIoD,IAAS,CACpC,MAAMlI,EAA+B,CAAA,EAC/B,EAAIzE,EAAMuJ,CAAE,EAClB,GAAI,CAAC,EAAG,OAAO9E,EACf,UAAWW,KAAKuH,EAAM,CACpB,KAAM,CAAE,IAAAC,EAAK,IAAAC,GAAQ5J,GAAemC,CAAC,EAErC,GAAI,SAAO,EAAEwH,CAAG,GAAM,YAAc,OAAO,EAAEC,CAAG,GAAM,YACtD,GAAI,CACF,MAAMnI,EAAI,EAAEkI,CAAG,EAAA,EACQlI,GAAM,OAAMD,EAAIW,CAAC,EAAIV,EAC9C,MAAQ,CAAwB,CAClC,CACA,OAAOD,CACT,EACA,sBAAuB,CAAC8E,EAAIuD,IAAa,CACvC,MAAMC,EAAmB,CAAA,EACnB,EAAI/M,EAAMuJ,CAAE,EAClB,SAAW,CAACnE,EAAGV,CAAC,IAAK,OAAO,QAAQoI,CAAQ,EAAG,CAC7C,KAAM,CAAE,IAAAD,CAAA,EAAQ5J,GAAemC,CAAC,EAChC,GAAI,CAAC,GAAK,OAAO,EAAEyH,CAAG,GAAM,WAAY,CAAEE,EAAO,KAAK3H,CAAC,EAAG,QAAU,CAEpE,GAAI,CAAE,EAAEyH,CAAG,EAAEnI,CAAC,CAAG,MAAQ,CAAEqI,EAAO,KAAK3H,CAAC,CAAG,CAC7C,CACA,OAAO2H,CACT,EAGA,YAAcxD,GAAO,SACnB,MAAM/J,EAAMQ,EAAMuJ,CAAE,EACd7H,EAAIlB,GAAe,IAAIhB,CAAG,EAChC,GAAIkC,IAAKA,EAAE,YAAc,GAAUA,EAAE,QAAQ,OAC7C,GAAI,EAAExD,EAAAsB,EAAI,OAAJ,MAAAtB,EAAA,KAAAsB,EAAc,MAAQ,CAAe,CAC3C,MAAM4G,IAAIlF,EAAA1B,GAAA,YAAAA,EAAK,eAAL,YAAA0B,EAAA,KAAA1B,MAAyBA,GAAA,YAAAA,EAAK,YACpC4G,IAAGA,EAAE,MAAM,QAAU,GAC3B,EACA,YAAcmD,GAAO,SACnB,MAAM/J,EAAMQ,EAAMuJ,CAAE,EACd7H,EAAIlB,GAAe,IAAIhB,CAAG,EAC5BkC,MAAK,YAAc,IACvB,GAAI,EAAExD,EAAAsB,EAAI,OAAJ,MAAAtB,EAAA,KAAAsB,EAAc,MAAQ,CAAe,CAC3C,MAAM4G,IAAIlF,EAAA1B,GAAA,YAAAA,EAAK,eAAL,YAAA0B,EAAA,KAAA1B,MAAyBA,GAAA,YAAAA,EAAK,YACpC4G,IAAGA,EAAE,MAAM,QAAU,OAC3B,EACA,gBAAiB,CAACuB,EAAQqF,IAAOvH,EAAQ,yBAA0B,IAAA,SAAM,OAAAvE,GAAAhD,EAAA8B,EAAM2H,CAAM,GAAE,kBAAd,YAAAzG,EAAA,KAAAhD,EAAgC8B,EAAMgN,CAAE,GAAE,EACnH,iBAAmBrF,GAAW,SAAE,GAAI,EAAEzG,GAAAhD,EAAA8B,EAAM2H,CAAM,GAAE,mBAAd,MAAAzG,EAAA,KAAAhD,EAAoC,MAAQ,CAAe,CAAE,EAGnG,wBAA0B,GAAM2H,EAAqB,oBAAqB,IAAM,IAAIN,EAAO,kBAAkBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,YAAY,EAC1J,0BAA4B,GAAMM,EAAqB,sBAAuB,IAAM,IAAIN,EAAO,oBAAoBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,cAAc,EAClK,mBAAqB,GAAMM,EAAqB,eAAgB,IAAM,IAAIN,EAAO,aAAahB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,OAAO,EACtI,yBAA2B,GAAMM,EAAqB,qBAAsB,IAAM,IAAIN,EAAO,mBAAmBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,UAAU,EAC3J,qBAAuB,GAAMM,EAAqB,iBAAkB,IAAM,IAAIN,EAAO,eAAehB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,SAAS,EAC9I,uBAAyB,GAAMM,EAAqB,mBAAoB,IAAM,CAAE,MAAMO,EAAI,IAAIb,EAAO,iBAAiBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,OAAAZ,GAAgBY,EAAQa,EAAI,iBAAW,UAAU,EAAUA,CAAG,EAAG,WAAW,EACnO,yBAA2B,GAAMP,EAAqB,qBAAsB,IAAM,IAAIN,EAAO,mBAAmBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,aAAa,EAC9J,sBAAuB,IAAMM,EAAqB,kBAAmB,IAAM,IAAIN,EAAO,gBAAmB,UAAU,EACnH,kBAAoB,GAAMM,EAAqB,cAAe,IAAM,IAAIN,EAAO,YAAYhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,MAAM,EAClI,sBAAwB,GAAMM,EAAqB,kBAAmB,IAAM,IAAIN,EAAO,gBAAgBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,UAAU,EAClJ,sBAAwB,GAAMM,EAAqB,qBAAsB,IAAM,IAAIN,EAAO,mBAAmBhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,aAAa,EAC3J,kBAAoB,GAAMM,EAAqB,cAAe,IAAM,IAAIN,EAAO,YAAYhB,GAAoBgB,EAAQ,CAAC,CAAC,EAAG,MAAM,EAClI,cAAgB,GAAMM,EAAqB,UAAW,IAAM,CAAE,MAAMO,EAAI,IAAIb,EAAO,QAAW,cAAO,OAAOa,EAAG7B,GAAoBgB,EAAQ,CAAC,CAAC,EAAUa,CAAG,EAAG,QAAQ,EACrK,oBAAqB,CAACiD,EAAWlE,IAAMU,EAAqB,UAAW,IAAM,CAe3E,MAAMjD,EAAO2B,GAAoBgB,EAAQJ,CAAC,EAC1C,MAAM8H,UAA0B1H,EAAO,OAAQ,CAA/C,kCACEzE,GAAA,qBAAgB,GAChBA,GAAA,qBAAgB,IAAIyE,EAAO,KAAK,EAAG,CAAC,GACpC,WAAWS,EAAe,CACxB,MAAMkH,EAAM7D,EAAA,EACZ,OAAArD,EAAI,aAAA,EAAe,YAAYkH,CAAG,EAClC,KAAK,MAAQ,CAAE,UAAW,GAAO,OAAQtK,EAAK,MAAA,EAC1CA,EAAK,SAAW,QAAW,KAAK,UAAUA,EAAK,MAAM,EAClDsK,CACT,CAAA,CAGF,OADU,IAAID,CAEhB,EAAG,QAAQ,EAGX,gBAAkB,GAAMnH,EAAmB,YAAa,IAAM,IAAIP,EAAO,UAAU,CAAC,EAAG,MAAM,EAC7F,kBAAoB,GAAMO,EAAmB,cAAe,IAAM,IAAIP,EAAO,YAAY,CAAC,EAAG,QAAQ,EACrG,mBAAqB,GAAM,CACzB,MAAM3C,EAAO,EACPuK,GAAavK,GAAAA,YAAAA,EAAM,YAAwB,qBACjD,OAAOkD,EAAmB,eAAgB,IAAM,IAAIP,EAAO,aAAa4H,EAAWvK,CAAI,EAAG,SAAS,CACrG,EACA,oBAAsB,GAAMkD,EAAmB,gBAAiB,IAAM,IAAIP,EAAO,cAAc,CAAC,EAAG,UAAU,EAC7G,mBAAqB,GAAMO,EAAmB,eAAgB,IAAM,IAAIP,EAAO,aAAa,CAAC,EAAG,SAAS,EACzG,kBAAoB,GAAMO,EAAmB,cAAe,IAAM,IAAIP,EAAO,YAAY,CAAC,EAAG,QAAQ,EACrG,kBAAoB,GAAMO,EAAmB,cAAe,IAAM,IAAIP,EAAO,YAAY,CAAC,EAAG,QAAQ,EAGrG,sBAAwB,GAAMO,EAAmB,kBAAmB,IAAM,IAAIP,EAAO,gBAAgB,CAAC,EAAG,MAAM,EAC/G,eAAiB,GAAMO,EAAmB,WAAY,IAAM,IAAIP,EAAO,SAAS,CAAC,EAAG,MAAM,EAC1F,gBAAkB,GAAMO,EAAmB,YAAa,IAAM,IAAIP,EAAO,UAAU,CAAC,EAAG,MAAM,EAC7F,eAAiB,GAAMO,EAAmB,WAAY,IAAM,IAAIP,EAAO,SAAS,CAAC,EAAG,MAAM,EAC1F,eAAiB,GAAMO,EAAmB,WAAY,IAAM,IAAIP,EAAO,SAAS,CAAC,EAAG,MAAM,EAC1F,mBAAqB,GAAMO,EAAmB,eAAgB,IAAM,IAAIP,EAAO,aAAa,CAAC,EAAG,QAAQ,EACxG,gBAAkB,GAAMO,EAAmB,YAAa,IAAM,IAAIP,EAAO,UAAU,CAAC,EAAG,QAAQ,EAC/F,eAAiB,GAAMO,EAAmB,WAAY,IAAM,CAE1D,MAAMsH,EAAa,iBAAW,UAC9B,GAAI,CAACA,EAAW,MAAM,IAAI,MAAM,sCAAsC,EACtE,KAAM,CAAE,UAAWC,EAAK,GAAGzK,GAAS,EACpC,OAAO,IAAI2C,EAAO,SAAS6H,EAAWxK,CAAI,CAC5C,EAAG,QAAQ,EACX,qBAAuB,GAAMkD,EAAmB,iBAAkB,IAAM,IAAIP,EAAO,eAAe,CAAC,EAAG,QAAQ,EAC9G,sBAAwB,GAAMO,EAAmB,kBAAmB,IAAM,IAAIP,EAAO,gBAAgB,CAAC,EAAG,QAAQ,EACjH,4BAA8B,GAAMO,EAAmB,wBAAyB,IAAM,IAAIP,EAAO,sBAAsB,CAAC,EAAG,QAAQ,EACnI,gBAAkB,GAAMO,EAAmB,YAAa,IAAM,IAAIP,EAAO,UAAU,CAAC,EAAG,QAAQ,EAC/F,iBAAmB,GAAMO,EAAmB,aAAc,IAAM,IAAIP,EAAO,WAAW,CAAC,EAAG,QAAQ,EAClG,iBAAmB,GAAMO,EAAmB,aAAc,IAAM,IAAIP,EAAO,WAAW,CAAC,EAAG,QAAQ,EAClG,iBAAmB,GAAMO,EAAmB,aAAc,IAAM,IAAIP,EAAO,WAAW,CAAC,EAAG,QAAQ,EAGlG,kBAAoB,GAAMI,EAAqB,cAAe,IAAM,IAAIJ,EAAO,YAAY,CAAC,EAAG,aAAa,EAC5G,eAAgB,CAAC+H,EAAMtG,EAAI7B,IAAMQ,EAAqB,WAAY,IAAM,IAAIJ,EAAO,SAAS+H,EAAMtG,EAAI7B,CAAC,EAAG,UAAU,EACpH,YAAa,CAACsC,EAAM3C,EAAMyI,IAAQ,SAAE,GAAI,EAAErM,GAAAhD,EAAA8B,EAAMyH,CAAI,GAAE,UAAZ,MAAAvG,EAAA,KAAAhD,EAAsB8B,EAAM8E,CAAI,EAAGyI,EAAM,MAAQ,CAAe,CAAE,EAC5G,eAAgB,CAAC9F,EAAM3C,IAAS,SAAE,GAAI,EAAE5D,GAAAhD,EAAA8B,EAAMyH,CAAI,GAAE,aAAZ,MAAAvG,EAAA,KAAAhD,EAAyB8B,EAAM8E,CAAI,EAAI,MAAQ,CAAe,CAAE,EAGxG,eAAgB,CAAC/C,EAAWoD,IAAM,CAChC,GAAI,CAACK,EAAa,IAAI,UAAU,EAAK,OAAAlH,EAAkB,WAAYD,EAASE,CAAQ,EAAU,KAC9F,GAAI,CAAE,OAAOgB,GAAU,IAAIgG,EAAO,SAASxD,EAAWoD,CAAC,CAAC,CAAG,OACpD,EAAG,CAAE,OAAAzG,GAAkB,WAAYL,EAASE,EAAU,CAAC,EAAU,IAAM,CAChF,EACA,oBAAsB,GAAM,CAC1B,MAAMqE,EAAO,EACP4K,GAAW5K,GAAAA,YAAAA,EAAM,UAAsB,GACvC6K,EAAqC,CAAA,EAC3C,OAAI7K,GAAAA,MAAAA,EAAM,WAAU6K,EAAU,SAAWrL,EAAWmD,EAAQ3C,EAAK,QAAiB,GAC9E,OAAOA,GAAAA,YAAAA,EAAM,WAAa,WAAU6K,EAAU,SAAW7K,EAAK,UAC9D,OAAOA,GAAAA,YAAAA,EAAM,kBAAoB,YAAW6K,EAAU,gBAAkB7K,EAAK,iBAC7EA,GAAAA,MAAAA,EAAM,cAAa6K,EAAU,YAAc7K,EAAK,aAC7C+C,EAAqB,gBAAiB,IAAM,IAAIJ,EAAO,cAAciI,EAASC,CAAS,EAAG,eAAe,CAClH,EACA,gBAAkBxH,GAAW,SAAE,GAAI,EAAE/E,GAAAhD,EAAA8B,EAAMiG,CAAM,GAAE,UAAd,MAAA/E,EAAA,KAAAhD,EAA2B,MAAQ,CAAe,CAAE,EAGzF,kBAAmB,CAACwP,EAAKvI,IAAMY,EAAqB,cAAe,IAAM,IAAIR,EAAO,YAAY5H,GAAa+P,CAAG,EAAGvI,CAAC,CAAC,EACrH,eAAgB,IAAMY,EAAqB,WAAY,IAAM,IAAIR,EAAO,QAAU,EAClF,mBAAqB,GAAMQ,EAAqB,eAAgB,IAAM,IAAIR,EAAO,aAAc,iBAAW,SAAU,CAAC,CAAC,EACtH,mBAAqB,GAAMQ,EAAqB,eAAgB,IAAM,IAAIR,EAAO,aAAc,iBAAW,SAAU,CAAC,CAAC,EACtH,kBAAoB,GAAMQ,EAAqB,cAAe,IAAM,IAAIR,EAAO,YAAa,iBAAW,SAAU,CAAC,CAAC,EACnH,mBAAqB,GAAMQ,EAAqB,eAAgB,IAAM,IAAIR,EAAO,aAAc,iBAAW,SAAU,CAAC,CAAC,EACtH,oBAAsB,GAAMQ,EAAqB,gBAAiB,IAAM,IAAIR,EAAO,cAAe,iBAAW,SAAU,CAAC,CAAC,EACzH,mBAAqB,GAAMQ,EAAqB,eAAgB,IAAM,IAAIR,EAAO,aAAa,CAAC,CAAC,EAChG,eAAgB,IAAMQ,EAAqB,WAAY,IAAM,IAAIR,EAAO,QAAU,EAClF,kBAAoB,GAAMQ,EAAqB,cAAe,IAAM,IAAIR,EAAO,YAAY,CAAC,CAAC,EAC7F,gBAAkB,GAAMQ,EAAqB,YAAa,IAAM,IAAIR,EAAO,UAAU,CAAC,CAAC,EACvF,kBAAoB,GAAMQ,EAAqB,cAAe,IAAM,CAClE,MAAMhE,GAAa,iBAAW,YAAa,SAAS,cAAc,KAAK,EACjE7B,EAAU,iBAAW,IACrB0C,EAAgC,CAAE,GAAI,EAA+B,IAAK1C,CAAAA,EAChF,OAAO,IAAIqF,EAAO,YAAYxD,EAAWa,CAAI,CAC/C,CAAC,EACD,gBAAiB,IAAMmD,EAAqB,YAAa,IAAM,IAAIR,EAAO,SAAW,EACrF,sBAAuB,IAAMQ,EAAqB,kBAAmB,IAAM,IAAIR,EAAO,eAAiB,EACvG,iBAAmB,GAAMQ,EAAqB,aAAc,IAAM,CAChE,GAAI,CAACR,EAAO,WAAY,MAAM,IAAI,MAAM,uCAAuC,EAC/E,OAAO,IAAIA,EAAO,WAAY,iBAAW,SAAU,CAAC,CACtD,CAAC,EAED,cAAcoI,EAASC,EAAOC,EAAW,OACvC,MAAMrO,EAAMQ,EAAM2N,CAAO,EACzB,GAAI,CAACnO,EAAK,MAAO,IAAM,CAAC,EACxB,IAAIsO,EAAY,GAChB,MAAMC,EAAchP,GAA4BiP,GAAY,CAAOF,GAAW/O,GAAA,MAAAA,EAAKiP,EAAO,EACtF,OAAOxO,EAAI,2BAA8B,aAAgB,0BAA0BuO,EAAOF,EAAU,SAAS,CAAC,EACzG,OAAOrO,EAAI,mBAAsB,cAAgB,kBAAkBuO,EAAOF,EAAU,SAAS,CAAC,EACvG,GAAI,EAAE3P,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAaoO,EAAQ,OAASK,EAAK,CAAGF,EAAOF,EAAU,OAAc,EAAGI,CAAY,CAAG,CAC7F,MAAO,IAAM,CAAEH,EAAY,EAAM,CACnC,EACA,kBAAkBH,EAAS,CACzB,MAAMnO,EAAMQ,EAAM2N,CAAO,EACzB,MAAI,CAACnO,GAAO,OAAOA,EAAI,YAAe,WAAmB,KAClDA,EAAI,WAAA,CACb,EAGA,iBAAiBgI,EAAQ9H,EAAMwO,EAAS,OACtC,MAAM1O,EAAMQ,EAAMwH,CAAM,EACxB,OAAAtJ,EAAAsB,EAAI,mBAAJ,MAAAtB,EAAA,KAAAsB,EAAuBE,EAAMwO,GACtB,WAAM,OAAAhQ,EAAAsB,EAAI,sBAAJ,YAAAtB,EAAA,KAAAsB,EAA0BE,EAAMwO,GAC/C,EACA,oBAAoB1G,EAAQ9H,EAAMwO,EAAS,UACzChN,GAAAhD,EAAA8B,EAAMwH,CAAM,GAAE,sBAAd,MAAAtG,EAAA,KAAAhD,EAAoCwB,EAAMwO,EAC5C,CAAA,CAEJ,CAEA,SAASxG,GAAiBlI,EAAkB,OAC1C,SAAQtB,EAAAsB,GAAA,YAAAA,EAAK,cAAL,YAAAtB,EAAkB,OAAQ,WAAW,YAAA,CAC/C,CC56CA,MAAMiQ,GAAc,WAOb,SAASC,IAAkB,CAChC,MAAMC,EAAMF,GAAY,KACxB,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,yDAAyD,EAE3E,OAAOA,CACT,CAMO,SAASC,IAAiC,CAC/C,OAAOH,GAAY,IACrB,CC5CO,SAASI,GAAehJ,EAAa3C,EAAgE,CAC1G,MAAMrE,EAAWqE,EAAK,oBAChBvE,EAAU,MAiVhB,MAAO,CACL,GA/UWiH,GAAeC,EAAQ,CAAE,GAAG3C,EAAM,QAAAvE,EAAS,EAgVtD,GA9UkC,CAElC,eAAiB2H,GAAQ,UAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,iBAAhB,MAAA9E,EAAA,KAAAhD,EAAoC,EAChE,gBAAkB8H,GAAQ,UAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,kBAAhB,MAAA9E,EAAA,KAAAhD,EAAqC,EAClE,iBAAmB8H,GAAQ,SAAE,GAAI,EAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,mBAAhB,MAAA9E,EAAA,KAAAhD,EAAsC,MAAQ,CAAyC,CAAE,EAC7H,kBAAoB8H,GAAQ,SAAE,GAAI,EAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,oBAAhB,MAAA9E,EAAA,KAAAhD,EAAuC,MAAQ,CAAyC,CAAE,EAC/H,YAAa,CAAC8H,EAAKwI,IAAS,SAAE,GAAI,CAAMA,KAAOtN,GAAAhD,EAAA8H,EAAI,KAAY,cAAhB,MAAA9E,EAAA,KAAAhD,EAA8BsQ,GAAO,MAAQ,CAAe,CAAE,EAC7G,YAAcxI,GAAA,SAAS,QAAA9E,GAAAhD,EAAA8H,EAAI,KAAY,cAAhB,YAAA9E,EAAA,KAAAhD,KAAmC,MAC1D,eAAgB,CAAC8H,EAAKyI,IAAS,UAAGvN,GAAAhD,EAAA8H,EAAI,KAAY,iBAAhB,MAAA9E,EAAA,KAAAhD,EAAiCuQ,EAAO,EAC1E,sBAAwBzI,GAAA,SAAS,QAAA9E,GAAAhD,EAAA8H,EAAI,KAAY,wBAAhB,YAAA9E,EAAA,KAAAhD,KAA6C,IAC9E,WAAY,CAAC8H,EAAK/F,IAAM,SAAE,GAAI,CAAMA,GAAA,MAAAA,EAAG,OAAMiB,GAAAhD,EAAA8H,EAAI,KAAY,aAAhB,MAAA9E,EAAA,KAAAhD,EAA6B+B,EAAE,KAAM,MAAQ,CAAe,CAAE,EAC3G,cAAe,CAAC+F,EAAK/F,IAAM,UAAGiB,GAAAhD,EAAA8H,EAAI,KAAY,gBAAhB,MAAA9E,EAAA,KAAAhD,EAAgC+B,EAAE,IAAM,EACtE,cAAgB+F,GAAQ,UAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,gBAAhB,MAAA9E,EAAA,KAAAhD,EAAmC,EAU9D,WAAY,CAAC8H,EAAKK,IAAM,OACtB,MAAM7G,EAAMwG,EAAI,IAChB,GAAI,OAAO,OAAW,IAAa,CACjC,MAAM0I,EAAI,OACNrI,IAAM,eAAgBA,EAAIqI,EAAE,iBAAmBrI,EAC1CA,IAAM,kBAAmBA,EAAIqI,EAAE,oBAAsBrI,EACrDA,IAAM,iBAAgBA,EAAIqI,EAAE,iBAAmBrI,EAC1D,EACAnI,EAAAsB,EAAI,aAAJ,MAAAtB,EAAA,KAAAsB,EAAiB6G,EACnB,EAUA,oBAAqB,CAACgD,EAAWlE,IAAM,CACrC,GAAI,CAGF,MAAM3F,EAAO2F,GAAK,CAAA,EACZwJ,EAASnP,EAAI,OACboP,EAAYpP,EAAI,OAChBqP,EAActJ,EAAO,QACrBuJ,EAAWvJ,EAAO,KAClB2D,EAAS0F,EAAY,IAAIE,EAASF,EAAU,MAAOA,EAAU,MAAM,EAAI,OAEvEG,EAAQ,OAAO,OAAOF,EAAY,SAAS,EACjDE,EAAM,WAAa,SAAU/I,EAAU,OACrC,MAAMjE,GAAYiE,GAAA,YAAAA,EAAK,cAAa9H,EAAA8H,GAAA,YAAAA,EAAK,eAAL,YAAA9H,EAAA,KAAA8H,IACpC,GAAI,CAACjE,EAAW,OAChB,MAAMmL,EAAM7D,EAAA,EACZ,OAAAtH,EAAU,YAAYmL,CAAG,EAIzB,KAAK,WAAaA,EAClB,KAAK,UAAUyB,CAAM,EACjBzF,IAAW,QAAW,KAAK,UAAUA,CAAM,EACxCgE,CACT,EAIA6B,EAAM,cAAgB,EACtBA,EAAM,cAAgB,IAAID,EAAS,EAAG,CAAC,EAEvC,MAAME,EAAW,OAAO,OAAOD,CAAK,EACpC,OAAAF,EAAY,KAAKG,CAAQ,EAClB,CAAE,QAAS,gBAA0B,IAAKA,EAAU,KAAM,QAAA,CACnE,OAASvQ,EAAG,CACV,OAAAC,GAAkB,UAAWL,EAASE,EAAUE,CAAC,EAC1C,IACT,CACF,EAIA,cAAe,CAACY,EAAG8F,IAAM,CACvB,GAAI,CACF,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,EACtC,OAAOpE,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACnD,MAAM,QAAQA,GAAA,YAAAA,EAAK,OAAO,IAAGoE,EAAS,QAAUpE,EAAI,UACpDA,GAAA,YAAAA,EAAK,YAAa,SAAWoE,EAAS,SAAWpE,EAAI,UACrD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SACzD,OAAOA,GAAA,YAAAA,EAAK,UAAY,WAAUoE,EAAS,QAAUpE,EAAI,SAC7D,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EACzC6C,EAAQ,IAAIlB,EAAO,MAAOlG,EAAY,IAAMA,EAAY,GAAG,EAEjE,MAAO,CAAE,QAAS,gBAAiB,IADtB6I,EAAU,IAAI3C,EAAO,QAAQkB,EAAO7C,CAAQ,EAAI,IAAI2B,EAAO,QAAQkB,CAAK,EACvC,KAAM,SAAA,CACtD,OAAShI,EAAG,CAAE,OAAAC,GAAkB,UAAWL,EAASE,EAAUE,CAAC,EAAU,IAAM,CACjF,EAGA,sBAAuB,CAACY,EAAG8F,IAAM,CAC/B,GAAI,CACF,MAAM3F,EAAM2F,EACNvB,EAAoC,CAAA,GACtCpE,GAAA,YAAAA,EAAK,SAAU,SAAWoE,EAAS,MAAQpE,EAAI,OAC/C,OAAOA,GAAA,YAAAA,EAAK,QAAU,WAAUoE,EAAS,MAAQpE,EAAI,OACrD,OAAOA,GAAA,YAAAA,EAAK,OAAS,WAAUoE,EAAS,KAAOpE,EAAI,MACvD,MAAM0I,EAAU,OAAO,KAAKtE,CAAQ,EAAE,OAAS,EACzCqL,EAAU5P,EAAc,IAAI6P,GAAM,IAAI3J,EAAO,MAAM2J,EAAG,IAAKA,EAAG,GAAG,CAAC,EAExE,MAAO,CAAE,QAAS,gBAAiB,IADtBhH,EAAU,IAAI3C,EAAO,gBAAgB0J,EAAQrL,CAAQ,EAAI,IAAI2B,EAAO,gBAAgB0J,CAAM,EACzD,KAAM,iBAAA,CACtD,OAASxQ,EAAG,CAAE,OAAAC,GAAkB,kBAAmBL,EAASE,EAAUE,CAAC,EAAU,IAAM,CACzF,EAGA,YAAa,CAACuH,EAAKxB,IAAY,UAAGtD,GAAAhD,EAAA8H,EAAI,KAAY,cAAhB,MAAA9E,EAAA,KAAAhD,EAA8BsG,EAAU,EAC1E,cAAe,CAACwB,EAAKxB,IAAY,UAAGtD,GAAAhD,EAAA8H,EAAI,KAAY,gBAAhB,MAAA9E,EAAA,KAAAhD,EAAgCsG,EAAU,EAG9E,iBAAkB,CAACwB,EAAKU,EAAKC,IAAQ,CACnC,GAAI,CACF,MAAMwI,EAAK5J,GAAA,YAAAA,EAAQ,mBACnB,GAAI4J,EAAI,CACN,MAAMC,EAAO,IAAID,EACjB,GAAI,OAAOC,EAAK,kBAAqB,WAAY,CAC/C,MAAM9P,EAAI8P,EAAK,iBAAiB,IAAI7J,EAAO,MAAMmB,EAAKC,CAAG,CAAC,EAC1D,GAAIrH,EAAG,MAAO,CAACA,EAAE,KAAOA,EAAE,EAAGA,EAAE,KAAOA,EAAE,CAAC,CAC3C,CACF,CACA,MAAMa,EAAI6F,EAAI,IACd,GAAI,OAAO7F,EAAE,kBAAqB,WAAY,CAC5C,MAAMb,EAAIa,EAAE,iBAAiBuG,EAAKC,CAAG,EACrC,GAAIrH,EAAG,MAAO,CAACA,EAAE,KAAOA,EAAE,EAAGA,EAAE,KAAOA,EAAE,CAAC,CAC3C,CACF,MAAQ,CAAe,CACvB,MAAO,CAAC,IAAK,GAAG,CAClB,EACA,iBAAkB,CAAC0G,EAAKY,EAAGC,IAAM,CAC/B,GAAI,CACF,MAAMsI,EAAK5J,GAAA,YAAAA,EAAQ,mBACnB,GAAI4J,EAAI,CACN,MAAMC,EAAO,IAAID,EACjB,GAAI,OAAOC,EAAK,kBAAqB,WAAY,CAC/C,MAAM9P,EAAI8P,EAAK,iBAAiB,CAAE,EAAAxI,EAAG,EAAAC,EAAG,EACxC,GAAIvH,EAAG,MAAO,CAACA,EAAE,KAAOA,EAAE,EAAGA,EAAE,KAAOA,EAAE,CAAC,CAC3C,CACF,CACA,MAAMa,EAAI6F,EAAI,IACd,GAAI,OAAO7F,EAAE,kBAAqB,WAAY,CAC5C,MAAMb,EAAIa,EAAE,iBAAiByG,EAAGC,CAAC,EACjC,GAAIvH,EAAG,MAAO,CAACA,EAAE,KAAOA,EAAE,EAAGA,EAAE,KAAOA,EAAE,CAAC,CAC3C,CACF,MAAQ,CAAe,CACvB,MAAO,CAAC,IAAK,GAAG,CAClB,EAGA,eAAgB,CAACkI,EAAQP,EAAIR,IAAU,CACrC,MAAMJ,EAAKmB,EAAe,IAC1B,GAAI,OAAOnB,EAAE,gBAAmB,WAAY,CAC1C,MAAMhE,EAAM+L,GAAA,EACNc,EAAKzI,GAAS,IAAIpE,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EACtDJ,EAAE,eAAgBY,EAAW,IAAKiI,CAAE,CACtC,CACF,EAGA,MAAO,IAAM5Q,EAAkB,YAAaD,EAASE,CAAQ,EAC7D,WAAY,IAAMD,EAAkB,iBAAkBD,EAASE,CAAQ,EACvE,WAAY,IAAMK,GAAiB,iBAAkBP,EAASE,EAAU,GAAG,EAC3E,QAAS,IAAMD,EAAkB,cAAeD,EAASE,CAAQ,EACjE,QAAS,IAAMK,GAAiB,cAAeP,EAASE,EAAU,GAAG,EACrE,kBAAmB,IAAMK,GAAiB,wBAAyBP,EAASE,EAAU,GAAG,EACzF,mBAAoB,IAAMK,GAAiB,yBAA0BP,EAASE,EAAU,CAAC,EACzF,mBAAoB,IAAMD,EAAkB,yBAA0BD,EAASE,CAAQ,EACvF,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,oBAAqB,IAAMD,EAAkB,0BAA2BD,EAASE,CAAQ,EACzF,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,WAAY,IAAMD,EAAkB,iBAAkBD,EAASE,CAAQ,EACvE,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,aAAc,IAAMD,EAAkB,mBAAoBD,EAASE,CAAQ,EAC3E,cAAe,IAAMD,EAAkB,oBAAqBD,EAASE,CAAQ,EAC7E,qBAAsB,IAAMD,EAAkB,2BAA4BD,EAASE,CAAQ,EAC3F,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,WAAY,IAAMD,EAAkB,iBAAkBD,EAASE,CAAQ,EACvE,YAAa,IAAMD,EAAkB,kBAAmBD,EAASE,CAAQ,EACzE,mBAAoB,IAAMD,EAAkB,yBAA0BD,EAASE,CAAQ,EACvF,oBAAqB,IAAMD,EAAkB,0BAA2BD,EAASE,CAAQ,EACzF,qBAAsB,IAAMD,EAAkB,2BAA4BD,EAASE,CAAQ,EAC3F,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAM7F,qBAAuByH,GAAQ,UAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,iBAAhB,MAAA9E,EAAA,KAAAhD,EAAoC,EACtE,sBAAwB8H,GAAQ,UAAG9E,GAAAhD,EAAA8H,EAAI,KAAY,kBAAhB,MAAA9E,EAAA,KAAAhD,EAAqC,EACxE,SAAU,IAAMI,EAAkB,eAAgBD,EAASE,CAAQ,EACnE,aAAc,IAAMK,GAAiB,mBAAoBP,EAASE,EAAU,EAAE,EAC9E,gBAAiB,IAAMK,GAAiB,sBAAuBP,EAASE,EAAU,EAAE,EACpF,cAAe,IAAMK,GAAiB,oBAAqBP,EAASE,EAAU,EAAE,EAChF,eAAgB,IAAMK,GAAiB,qBAAsBP,EAASE,EAAU,EAAE,EAClF,cAAe,IAAMK,GAAiB,oBAAqBP,EAASE,EAAU,EAAE,EAChF,YAAa,IAAMK,GAAiB,kBAAmBP,EAASE,EAAU,EAAK,EAC/E,iBAAmByH,GAAA,SAAS,QAAA9E,GAAAhD,EAAA8H,EAAI,KAAY,mBAAhB,YAAA9E,EAAA,KAAAhD,KAAyC8H,EAAI,IAAY,QAAA,GACrF,aAAc,IAAMpH,GAAiB,mBAAoBP,EAASE,EAAU,GAAG,EAC/E,SAAWyH,GAAS,OAAQA,EAAI,IAAY,UAAa,WAAcA,EAAI,IAAY,SAAA,EAAa,GACpG,aAAeA,GAAS,OAAQA,EAAI,IAAY,cAAiB,WAAcA,EAAI,IAAY,aAAA,EAAiB,GAChH,cAAgBA,GAAA,SAAS,QAAA9E,GAAAhD,EAAA8H,EAAI,KAAY,gBAAhB,YAAA9E,EAAA,KAAAhD,KAAqC,MAC9D,aAAc,IAAMU,GAAiB,mBAAoBP,EAASE,EAAU,IAAI,EAChF,UAAW,IAAMK,GAAiB,gBAAiBP,EAASE,EAAU,EAAE,EACxE,YAAa,IAAMD,EAAkB,kBAAmBD,EAASE,CAAQ,EACzE,QAAS,IAAMD,EAAkB,cAAeD,EAASE,CAAQ,EACjE,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,kBAAmB,IAAMK,GAAiB,wBAAyBP,EAASE,EAAU,CAAA,CAAE,EACxF,iBAAkB,IAAMD,EAAkB,uBAAwBD,EAASE,CAAQ,EACnF,iBAAkB,IAAMK,GAAiB,uBAAwBP,EAASE,EAAU,EAAK,EACzF,cAAe,IAAMD,EAAkB,oBAAqBD,EAASE,CAAQ,EAC7E,aAAc,IAAMD,EAAkB,mBAAoBD,EAASE,CAAQ,EAC3E,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,mBAAoB,IAAMD,EAAkB,yBAA0BD,EAASE,CAAQ,EACvF,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,eAAgB,IAAMK,GAAiB,qBAAsBP,EAASE,EAAU,EAAK,EACrF,SAAU,IAAMK,GAAiB,eAAgBP,EAASE,EAAU,IAAI,EACxE,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,WAAY,IAAMD,EAAkB,iBAAkBD,EAASE,CAAQ,EACvE,UAAW,IAAMD,EAAkB,gBAAiBD,EAASE,CAAQ,EACrE,cAAe,IAAMK,GAAiB,oBAAqBP,EAASE,EAAU,IAAI,EAClF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,kBAAmB,IAAMK,GAAiB,wBAAyBP,EAASE,EAAU,EAAK,EAC3F,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,YAAa,IAAMK,GAAiB,kBAAmBP,EAASE,EAAU,EAAE,EAC5E,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,wBAAyB,IAAMD,EAAkB,8BAA+BD,EAASE,CAAQ,EACjG,yBAA0B,IAAMD,EAAkB,+BAAgCD,EAASE,CAAQ,EACnG,SAAU,IAAMK,GAAiB,eAAgBP,EAASE,EAAU,EAAE,EACtE,SAAU,IAAMK,GAAiB,eAAgBP,EAASE,EAAU,CAAA,CAAE,EACtE,YAAa,IAAMD,EAAkB,kBAAmBD,EAASE,CAAQ,EACzE,WAAY,IAAMD,EAAkB,iBAAkBD,EAASE,CAAQ,EACvE,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,oBAAqB,IAAMD,EAAkB,0BAA2BD,EAASE,CAAQ,EACzF,YAAa,IAAMK,GAAiB,kBAAmBP,EAASE,EAAU,EAAE,EAC5E,YAAa,IAAMK,GAAiB,kBAAmBP,EAASE,EAAU,CAAA,CAAE,EAC5E,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,YAAa,IAAMD,EAAkB,kBAAmBD,EAASE,CAAQ,EACzE,aAAc,IAAMK,GAAiB,mBAAoBP,EAASE,EAAU,CAAA,CAAE,EAC9E,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,uBAAwB,IAAMK,GAAiB,6BAA8BP,EAASE,EAAU,IAAI,EACpG,UAAW,IAAMD,EAAkB,gBAAiBD,EAASE,CAAQ,EACrE,cAAe,IAAMK,GAAiB,oBAAqBP,EAASE,EAAU,EAAE,EAChF,mBAAoB,IAAMD,EAAkB,yBAA0BD,EAASE,CAAQ,EACvF,qBAAsB,IAAMD,EAAkB,2BAA4BD,EAASE,CAAQ,EAC3F,eAAgB,IAAMD,EAAkB,qBAAsBD,EAASE,CAAQ,EAC/E,kBAAmB,IAAMD,EAAkB,wBAAyBD,EAASE,CAAQ,EACrF,gBAAiB,IAAMD,EAAkB,sBAAuBD,EAASE,CAAQ,EACjF,mBAAoB,IAAMD,EAAkB,yBAA0BD,EAASE,CAAQ,EACvF,iBAAkB,IAAMD,EAAkB,uBAAwBD,EAASE,CAAQ,EACnF,oBAAqB,IAAMD,EAAkB,0BAA2BD,EAASE,CAAQ,EACzF,aAAc,IAAMD,EAAkB,mBAAoBD,EAASE,CAAQ,EAC3E,cAAe,IAAMD,EAAkB,oBAAqBD,EAASE,CAAQ,EAC7E,SAAU,CAACyH,EAAK3F,IAAM,aACpB,MAAMb,EAAOa,EAAU,IACTA,EAAU,OAEX,QAAU,OAAOb,GAAA,YAAAA,EAAK,cAAgB,YAChD0B,GAAAhD,EAAA8H,EAAI,KAAY,eAAhB,MAAA9E,EAAA,KAAAhD,EAA+BsB,IAE/BgC,GAAAD,EAAAyE,EAAI,KAAY,aAAhB,MAAAxE,EAAA,KAAAD,EAA6B/B,EAElC,EACA,YAAa,CAACwG,EAAK3F,IAAM,aACvB,MAAMb,EAAOa,EAAU,IACTA,EAAU,OACX,QAAU,OAAOb,GAAA,YAAAA,EAAK,cAAgB,YAChD0B,GAAAhD,EAAA8H,EAAI,KAAY,kBAAhB,MAAA9E,EAAA,KAAAhD,EAAkCsB,IAElCgC,GAAAD,EAAAyE,EAAI,KAAY,gBAAhB,MAAAxE,EAAA,KAAAD,EAAgC/B,EAErC,EACA,qBAAsB,IAAMlB,EAAkB,2BAA4BD,EAASE,CAAQ,EAC3F,qBAAsB,IAAMD,EAAkB,2BAA4BD,EAASE,CAAQ,EAG3F,kBAAmB,KAAO,CAAE,QAAS,gBAA0B,IAAK,KAAM,OAAQ,KAGlF,0BAA2B,KAAQD,EAAkB,sBAAuBD,EAASE,CAAQ,EAAU,MACvG,kBAAmB,KAAQD,EAAkB,cAAeD,EAASE,CAAQ,EAAU,MACvF,kBAAmB,KAAQD,EAAkB,cAAeD,EAASE,CAAQ,EAAU,MACvF,gBAAiB,KAAQD,EAAkB,YAAaD,EAASE,CAAQ,EAAU,MACnF,kBAAmB,KAAQD,EAAkB,cAAeD,EAASE,CAAQ,EAAU,MACvF,YAAa,KAAQD,EAAkB,QAASD,EAASE,CAAQ,EAAU,MAC3E,kBAAmB,KAAQD,EAAkB,cAAeD,EAASE,CAAQ,EAAU,MACvF,oBAAqB,KAAQD,EAAkB,gBAAiBD,EAASE,CAAQ,EAAU,MAC3F,eAAgB,KAAQD,EAAkB,WAAYD,EAASE,CAAQ,EAAU,MACjF,qBAAsB,IAAMD,EAAkB,2BAA4BD,EAASE,CAAQ,EAC3F,sBAAuB,IAAMD,EAAkB,4BAA6BD,EAASE,CAAQ,EAC7F,kBAAmB,KAAQD,EAAkB,cAAeD,EAASE,CAAQ,EAAU,MACvF,mBAAoB,KAAQD,EAAkB,eAAgBD,EAASE,CAAQ,EAAU,MACzF,oBAAqB,KAAQD,EAAkB,gBAAiBD,EAASE,CAAQ,EAAU,MAE3F,sBAAuB,KAAQD,EAAkB,kBAAmBD,EAASE,CAAQ,EAAU,MAC/F,eAAgB,KAAQD,EAAkB,WAAYD,EAASE,CAAQ,EAAU,MACjF,gBAAiB,KAAQD,EAAkB,YAAaD,EAASE,CAAQ,EAAU,MACnF,eAAgB,KAAQD,EAAkB,WAAYD,EAASE,CAAQ,EAAU,MACjF,eAAgB,KAAQD,EAAkB,WAAYD,EAASE,CAAQ,EAAU,MACjF,mBAAoB,KAAQD,EAAkB,eAAgBD,EAASE,CAAQ,EAAU,MACzF,gBAAiB,KAAQD,EAAkB,YAAaD,EAASE,CAAQ,EAAU,MACnF,eAAgB,KAAQD,EAAkB,WAAYD,EAASE,CAAQ,EAAU,MACjF,qBAAsB,KAAQD,EAAkB,iBAAkBD,EAASE,CAAQ,EAAU,MAC7F,sBAAuB,KAAQD,EAAkB,kBAAmBD,EAASE,CAAQ,EAAU,MAG/F,kBAAoB4G,GAAM,CACxB,GAAI,CAAE,MAAO,CAAE,QAAS,cAAwB,IAAK,IAAII,EAAO,YAAYJ,CAAC,EAAG,KAAM,QAAA,CAAmB,OAClG1G,EAAG,CAAE,OAAAC,GAAkB,cAAeL,EAASE,EAAUE,CAAC,EAAU,IAAM,CACnF,EACA,kBAAoB0G,GAAM,CACxB,GAAI,CAAE,MAAO,CAAE,QAAS,cAAwB,IAAK,IAAII,EAAO,YAAYJ,CAAC,EAAG,KAAM,QAAA,CAAmB,OAClG1G,EAAG,CAAE,OAAAC,GAAkB,cAAeL,EAASE,EAAUE,CAAC,EAAU,IAAM,CACnF,CAAA,EAMA,QAAAJ,EACA,aAAcb,GAAkB,KAAK,CAAA,CAEzC,CC5VO,SAAS6R,GACdhR,EACAkH,EACA3C,EACY,CACZ,OAAIvE,IAAY,MACPkQ,GAAehJ,EAAe3C,CAAI,EAGpC0C,GAAeC,EAAe3C,CAAI,CAC3C,CCtBO,SAAS0M,GAAW5R,EAAwB,CACjD,OAAIA,IAAU,MAAQ,OAAOA,GAAU,SAAiB,OAAOA,CAAK,EAChE,MAAM,QAAQA,CAAK,EAAU,IAAIA,EAAM,IAAI4R,EAAU,EAAE,KAAK,GAAG,CAAC,IAE7D,IADM,OAAO,KAAK5R,CAAgC,EAAE,KAAA,EAC3C,IAAI0H,GAAK,GAAGA,CAAC,IAAIkK,GAAY5R,EAAkC0H,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,GACjG,CCGA,MAAMmK,OAAiD,IAEhD,SAASC,GAAapJ,EAA8B,CACzD,OAAOkJ,GAAW,CAChB,EAAGlJ,EAAE,QACL,GAAIA,EAAE,GACN,KAAMA,EAAE,aAAe,GACvB,KAAMA,EAAE,UAAY,GACpB,SAAUA,EAAE,SAAW,CAAA,GAAI,MAAA,EAAQ,KAAA,CAAK,CACzC,CACH,CAEO,SAASqJ,GAAYC,EAA4C,CACtE,OAAOH,GAAe,IAAIG,CAAO,CACnC,CAEO,SAASC,GAASD,EAAiBE,EAA+BC,EAAiC,CACxGN,GAAe,IAAIG,EAAS,CAAE,QAAAG,EAAS,QAAAH,EAAS,WAAAE,EAAY,EAC5DC,EAAQ,MAAM,IAAMN,GAAe,OAAOG,CAAO,CAAC,CACpD,CAEO,SAASI,IAAiC,CAC/C,OAAO,MAAM,KAAKP,GAAe,OAAA,CAAQ,CAC3C,CAEO,SAASQ,GAAeL,EAAiBM,EAAwD,CAEtG,UAAWC,KAASV,GAAe,SACjC,GAAIU,EAAM,UAAYP,EAAS,OAAOO,EAAM,WAG9C,OAAO,IACT,CCvBA,eAAsBC,GAAUN,EAA+BhN,EAKrC,OACxB,MAAM8M,EAAUF,GAAaI,CAAU,EACjCO,EAAWV,GAAYC,CAAO,EACpC,GAAIS,EAEF,MAAO,CAAE,OADG,MAAMA,EAAS,QACL,QAASP,EAAW,QAAS,QAAAF,CAAA,EAGrD,MAAMU,EAAWL,GAAeL,CAAmB,EACnD,GAAIU,EAAU,EACZlS,EAAA0E,EAAK,iBAAL,MAAA1E,EAAA,KAAA0E,EAAsBwN,EAAUR,GAEhC,UAAWK,KAASH,KAClB,GAAIG,EAAM,UAAYP,EAEpB,MAAO,CAAE,OADG,MAAMO,EAAM,QACF,QAASA,EAAM,WAAW,QAAS,QAASA,EAAM,OAAA,CAG9E,CAEA,MAAMJ,EAAUQ,GAAOT,EAAYhN,CAAI,EACvC,OAAA+M,GAASD,EAASE,EAAYC,CAAO,EAE9B,CAAE,OADM,MAAMA,EACJ,QAASD,EAAW,QAAS,QAAAF,CAAA,CAChD,CAEA,eAAeW,GAAOT,EAA+BhN,EAIhC,CAEnB,MAAM0N,EAAW,KAAM,QAAO,wBAAwB,EAMtD,OALeA,EAAI,SAAWA,GAKhB,KAAK,CACjB,GAAIV,EAAW,GACf,QAASA,EAAW,QACpB,GAAIA,EAAW,YAAc,CAAE,YAAaA,EAAW,WAAA,EAAgB,CAAA,EACvE,GAAIhN,EAAK,SAAW,CAAE,SAAUA,EAAK,QAAA,EAAa,CAAA,EAClD,GAAIA,EAAK,QAAU,CAAE,QAASA,EAAK,OAAA,EAAY,CAAA,EAC/C,GAAIA,EAAK,aAAe,CAAE,aAAcA,EAAK,YAAA,EAAiB,CAAA,CAAC,CAChE,CACH,CC5DO,SAAS2N,EAAgB7S,EAAwB,CACtD,OAAO8S,GAAU9S,EAAO,IAAI,OAAS,CACvC,CAEA,SAAS8S,GAAU9S,EAAgB2H,EAA+B,CAChE,GAAI3H,IAAU,OAAW,MAAO,YAChC,GAAIA,IAAU,KAAM,MAAO,OAC3B,GAAI,OAAOA,GAAU,WAAY,MAAO,KACxC,GAAI,OAAOA,GAAU,SAAU,OAAO,OAAOA,CAAK,EAElD,GAAI,OAAO,YAAgB,KAAeA,aAAiB,YAAa,MAAO,gBAC/E,GAAI,OAAO,KAAS,KAAeA,aAAiB,KAAM,MAAO,SAEjE,GAAI,YAAcA,EAAe,MAAO,WACxC,GAAI2H,EAAK,IAAI3H,CAAe,EAAG,MAAO,aACtC2H,EAAK,IAAI3H,CAAe,EAGxB,IAAI+G,EACJ,OAAI,MAAM,QAAQ/G,CAAK,EACrB+G,EAAM,IAAI/G,EAAM,IAAIgH,GAAK8L,GAAU9L,EAAGW,CAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAGtDZ,EAAM,IADO,OAAO,KAAK/G,CAAgC,EAAE,KAAA,EAC5C,IAAI0H,GAAK,GAAGA,CAAC,IAAIoL,GAAW9S,EAAkC0H,CAAC,EAAGC,CAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,IAErGA,EAAK,OAAO3H,CAAe,EACpB+G,CACT,CCEO,SAASgM,GAAa,CAC3B,GAAAC,EACA,QAAArS,EAAU,MACV,SAAAsS,EACA,YAAAC,EACA,SAAAC,EACA,QAAAC,EACA,QAAAC,EACA,aAAAC,EACA,oBAAAC,EAAsB,OACtB,QAAAC,EACA,eAAAC,EACA,SAAAtS,EAAW,KACX,cAAAuS,EAAgB,KAChB,SAAAC,CACF,EAAsB,CACpB,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAA2B,CACnD,OAAQ,UACR,OAAQ,KACR,QAAAnT,EACA,MAAO,IAAA,CACR,EAEKoT,EAAgBC,EAAAA,OAAO,CAAC,EACxBC,EAAaD,EAAAA,OAAOR,CAAO,EACjCS,EAAW,QAAUT,EAErB,MAAMU,EAAoBF,EAAAA,OAAOP,CAAc,EAC/CS,EAAkB,QAAUT,EAE5B,MAAMvB,EAAgCiC,EAAAA,QACpC,KAAO,CAAE,QAAAxT,EAAS,GAAAqS,EAAI,YAAAE,EAAa,SAAAC,EAAU,QAAAC,CAAA,GAE7C,CAACzS,EAASqS,EAAIE,EAAaC,GAAWC,GAAW,CAAA,GAAI,KAAK,GAAG,CAAC,CAAA,EAK1DgB,EAAkBvB,EAAgBS,CAAY,EA6CpD,OA3CAe,EAAAA,UAAU,IAAM,CACd,GAAI,OAAO,OAAW,IAAa,OAEnC,IAAIjE,EAAY,GAChB,MAAMkE,EAAK,EAAEP,EAAc,QAE3B,OAAAvB,GAAUN,EAAY,CACpB,SAAAe,EACA,QAAAI,EACA,aAAAC,EACA,eAAgB,CAACiB,EAASjC,WAAc,OAAA9R,EAAA0T,EAAkB,UAAlB,YAAA1T,EAAA,KAAA0T,EAA4BK,EAASjC,GAAS,CACvF,EACE,KAAK,CAAC,CAAE,OAAAzK,EAAQ,QAAS2M,KAAW,CACnC,GAAIpE,GAAakE,IAAOP,EAAc,QAAS,OAC/C,MAAMU,EAAS9C,GAAa6C,EAAM3M,EAAQ,CAAE,oBAAA0L,EAAqB,EACjEM,EAAS,CAAE,OAAQ,QAAS,OAAAY,EAAQ,QAASD,EAAM,MAAO,KAAM,CAClE,CAAC,EACA,MAAOjE,GAAiB,CACvB,GAAIH,GAAakE,IAAOP,EAAc,QAAS,OAC/C,MAAM9S,EAAQsP,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,EAChEsD,MAAe,CAAE,GAAG7P,EAAG,OAAQ,QAAS,MAAA/C,GAAQ,EAC5CgT,EAAW,QACbA,EAAW,QAAQhT,CAAK,EACf,OAAO,QAAY,KAI5B,QAAQ,MACN,iIAGAA,CAAA,CAGN,CAAC,EAEI,IAAM,CACXmP,EAAY,GACZ2D,EAAc,SAChB,CAEF,EAAG,CAAC7B,EAAYe,EAAUI,EAASe,EAAiBb,CAAmB,CAAC,EAEpEK,EAAM,SAAW,8BAAqB,SAAAzS,EAAS,EAC/CyS,EAAM,SAAW,4BAAmB,SAAAF,EAAc,SAE9C7U,GAAY,SAAZ,CAAqB,MAAO+U,EAAQ,SAAAD,EAAS,CACvD,CCrHO,MAAMe,GAAuB,EACvBC,GAAwB,EACxBC,GAA0B,EAC1BC,GAA2B,EAC3BC,GAAyB,EACzBC,GAA0B,EAC1BC,GAAqB,EACrBC,GAA2B,EAC3BC,GAA4B,EAI5BC,GAAsB,EACtBC,GAAwB,EACxBC,GAA+B,EAC/BC,GAA4B,EAC5BC,GAA0B,EAC1BC,GAA8B,EAC9BC,GAAgC,EAChCC,GAAkC,EAClCC,GAAsB,EAItBC,GAA8B,EAC9BC,GAA+B,EAC/BC,GAAqC,EACrCC,GAAqC,EACrCC,GAAuC,EACvCC,GAAgC,EAChCC,GAAgD,EAChDC,GAAgD,EAChDC,GAA2C,EAC3CC,GAAoD,GACpDC,GAAyC,GACzCC,GAAwC,GACxCC,GAAoC,GAIpCC,GAAgC,EAChCC,GAAqC,EACrCC,GAAoC,EACpCC,GAAoC,EACpCC,GAAiC,EACjCC,GAAoC,EAWpCC,GAAwB,EACxBC,GAAsB,EAItBC,GAAmB,SACnBC,GAAqB,KAIrBC,GAAe,EACfC,GAAe,EAIfC,GAAgC,EAChCC,GAAgC,EAChCC,GAA8B,EAC9BC,GAA+B,EAI/BC,GAAkC,EAClCC,GAAgC,EAChCC,GAA2B,EAQ3BC,GAAoB,EACpBC,GAAuB,EAO7B,SAASC,GAAeC,EAAc5W,EAA0B,CACrE,MAAMwD,EAAMiM,GAAA,EACZ,OAAQjM,GAAA,YAAAA,EAAMoT,KAAgC5W,CAChD,CChGO,MAAM6W,GAA0B,EAC1BC,GAA2B,EAK3BC,GAAkB,eAClBC,GAAqB,kBAKrBC,GAAkB,eAClBC,GAAiB,cA2DjBC,GAA4B,EAC5BC,GAA+B,EAI/BC,GAAiC,EACjCC,GAAoC,EACpCC,GAAiC,EAIjCC,GAA+B,EAC/BC,GAA8B,EAI9BC,GAAmC,EACnCC,GAAoC,EACpCC,GAAoC,EAIpCC,GAAmB,KACnBC,GAAmB,KACnBC,GAAsB,QACtBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KACnBC,GAAmB,KASnBC,GAAsB,sBACtBC,GAAmB,mBACnBC,GAAkB,kBAClBC,GAA2B,2BAC3BC,GAAmB,mBACnBC,GAAsB,sBAItBC,GAA2B,EAC3BC,GAA8B,EAC9BC,GAA4B,EAC5BC,GAAyB,EACzBC,GAA0C,EAC1CC,GAAyC,EACzCC,GAAwC,EACxCC,GAAuC,EACvCC,GAA0B,EAC1BC,GAA0B,GAC1BC,GAA2B,GAC3BC,GAA4B,GAC5BC,GAA0B,GAC1BC,GAA0B,GAI1BC,GAAwB,EACxBC,GAA6B,EAC7BC,GAA0B,EAC1BC,GAA0B,EAC1BC,GAA2B,EAK3BC,GAAgC,EAChCC,GAAgC,EAChCC,GAAkC,EAClCC,GAAiC,EACjCC,GAA+B,EAC/BC,GAA+B,EAC/BC,GAAoC,EACpCC,GAA8B,EAC9BC,GAAmC,EAInCC,GAAuB,EACvBC,GAA0B,EAC1BC,GAAwB,EACxBC,GAAyB,EACzBC,GAAsB,EACtBC,GAAyB,EACzBC,GAAuB,EAKvBC,GAAkB,EAIlBC,GAAsB,EACtBC,GAAuB,EAIvBC,GAAuB,EACvBC,GAAwB,EACxBC,GAAwB,EACxBC,GAAwB,EACxBC,GAAwB,EAIxBC,GAAoB,UACpBC,GAAoB,UACpBC,GAAoB,UACpBC,GAAuB,aAIvBC,GAA2B,EAC3BC,GAA0B,EAC1BC,GAA4B,EAI5BC,GAA0B,EAC1BC,GAA0B,EAC1BC,GAAyB,EAIzBC,GAA4B,EAC5BC,GAA8B,EAC9BC,GAA4B,EAC5BC,GAA2B,EAI3BC,GAA0B,IAC1BC,GAA4B,IAC5BC,GAAyB,GAIzBC,GAAwC,gCACxCC,GAAyC,iCAIzCC,GAAqB,EACrBC,GAAwB,EACxBC,GAAuB,EACvBC,GAAuB,EACvBC,GAA0B,EAC1BC,GAAuB,EAIvBC,GAA0B,QAC1BC,GAA6B,WAC7BC,GAA0B,QAC1BC,GAA4B,UAC5BC,GAAiC,eACjCC,GAAyB,OAIzBC,GAA6B,SAC7BC,GAA6B,QC3P7BC,GAAapgB,EAAAA,cAAsC,IAAI,EAE7D,SAASqgB,GAAiC,CAC/C,MAAMC,EAAMpgB,EAAAA,WAAWkgB,EAAU,EACjC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sDAAsD,EAExE,OAAOA,CACT,CCuBO,MAAMC,GAAuBvgB,EAAAA,cAAyC,IAAI,EAE3EwgB,GAAiB,IAAM,IAAM,CAAC,EAC9BC,GAAiB,IAAwC,KAaxD,SAASC,IAA8C,CAC5D,MAAMC,EAAQzgB,EAAAA,WAAWqgB,EAAoB,EAEvCvV,EAAS4V,EAAAA,qBACbD,EAAQA,EAAM,UAAYH,GAC1BG,EAAQA,EAAM,UAAYF,GAC1BA,EAAA,EAGII,EAAU3L,EAAAA,OAAkC,IAAI,EACtD,GAAIyL,EAAO,CACT,MAAMG,EAAOD,EAAQ,SACjB,CAACC,GACAA,EAAK,SAAW9V,GAChB8V,EAAK,OAASH,EAAM,MACpBG,EAAK,aAAeH,EAAM,YAC1BG,EAAK,gBAAkBH,EAAM,iBAChCE,EAAQ,QAAU,CAChB,KAAMF,EAAM,KACZ,OAAA3V,EACA,WAAY2V,EAAM,WAClB,cAAeA,EAAM,aAAA,EAG3B,MACEE,EAAQ,QAAU,KAEpB,OAAOA,EAAQ,OACjB,CCxEO,MAAME,EAAW,CACtB,YAAoBvX,EAAwBmM,EAAoB,CAA5C,KAAA,IAAAnM,EAAwB,KAAA,OAAAmM,CAAqB,CAGjE,gBAAuB,CAAE,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CAC/D,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,wBAA+B,CAAE,KAAK,OAAO,uBAAuB,KAAK,GAAG,CAAG,CAC/E,yBAAgC,CAAE,KAAK,OAAO,wBAAwB,KAAK,GAAG,CAAG,CACjF,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,wBAA+B,CAAE,KAAK,OAAO,uBAAuB,KAAK,GAAG,CAAG,CAC/E,sBAA6B,CAAE,KAAK,OAAO,qBAAqB,KAAK,GAAG,CAAG,CAC3E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,sBAA6B,CAAE,KAAK,OAAO,qBAAqB,KAAK,GAAG,CAAG,CAC3E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,wBAA+B,CAAE,KAAK,OAAO,uBAAuB,KAAK,GAAG,CAAG,CAC/E,gBAAuB,CAAE,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CAC/D,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,mBAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CACrE,oBAA2B,CAAE,KAAK,OAAO,mBAAmB,KAAK,GAAG,CAAG,CACvE,cAAqB,CAAE,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CAC3D,eAAsB,CAAE,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAC7D,sBAA6B,CAAE,KAAK,OAAO,qBAAqB,KAAK,GAAG,CAAG,CAC3E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,YAAmB,CAAE,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CACvD,aAAoB,CAAE,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CACzD,oBAA2B,CAAE,KAAK,OAAO,mBAAmB,KAAK,GAAG,CAAG,CACvE,qBAA4B,CAAE,KAAK,OAAO,oBAAoB,KAAK,GAAG,CAAG,CACzE,kBAAyB,CAAE,KAAK,OAAO,iBAAiB,KAAK,GAAG,CAAG,CACnE,mBAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CAGrE,WAAWqL,EAAiBhZ,EAAyB,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKgZ,EAAShZ,CAAO,CAAG,CAC3G,YAAqB,CAAE,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CAChE,QAAQiZ,EAAcjZ,EAAyB,CAAE,KAAK,OAAO,QAAQ,KAAK,IAAKiZ,EAAMjZ,CAAO,CAAG,CAC/F,SAAkB,CAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG,CAAG,CAC1D,mBAA4B,CAAE,OAAO,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CAG9E,WAAWkZ,EAAoB,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAI,CAAG,CACzE,WAAWA,EAAoB,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAI,CAAG,CACzE,YAAqB,CAAE,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CAChE,YAAqB,CAAE,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CAGhE,aAAoB,CAAE,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CACzD,QAAe,CAAE,KAAK,OAAO,OAAO,KAAK,GAAG,CAAG,CAC/C,QAAQnX,EAA+C,CAAE,KAAK,OAAO,QAAQ,KAAK,IAAKA,CAAI,CAAG,CAC9F,OAAOC,EAAeC,EAAuB,CAAE,KAAK,OAAO,OAAO,KAAK,IAAKD,EAAOC,CAAK,CAAG,CAG3F,kBAAkBjC,EAAwB,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAO,CAAG,CAC9F,WAAWA,EAAwB,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAO,CAAG,CAGhF,SAAgB,CAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG,CAAG,CACxD,kBAAyB,CAAE,OAAO,KAAK,OAAO,iBAAiB,KAAK,GAAG,CAAG,CAC1E,cAAuB,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CACpE,cAA4B,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CAGzE,aAAamZ,EAAcnZ,EAA0B,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,IAAKmZ,EAAOnZ,CAAO,CAAG,CAClH,aAAaiC,EAAcjC,EAA0B,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,IAAKiC,EAAOjC,CAAO,CAAG,CAClH,iBAAiBkC,EAAaC,EAA+B,CAAE,OAAO,KAAK,OAAO,iBAAiB,KAAK,IAAKD,EAAKC,CAAG,CAAG,CACxH,iBAAiBiX,EAAeC,EAAiC,CAAE,OAAO,KAAK,OAAO,iBAAiB,KAAK,IAAKD,EAAOC,CAAK,CAAG,CAChI,oBAAoBpX,EAAcjC,EAA0B,CAAE,OAAO,KAAK,OAAO,oBAAoB,KAAK,IAAKiC,EAAOjC,CAAO,CAAG,CAChI,oBAAoBmZ,EAAcnZ,EAA0B,CAAE,OAAO,KAAK,OAAO,oBAAoB,KAAK,IAAKmZ,EAAOnZ,CAAO,CAAG,CAChI,YAAYsZ,EAAcC,EAAoB,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,IAAKD,EAAOC,CAAG,CAAG,CAGtG,UAAoB,CAAE,OAAO,KAAK,OAAO,SAAS,KAAK,GAAG,CAAG,CAC7D,cAAuB,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CACpE,cAAuB,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CACpE,iBAA0B,CAAE,OAAO,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CAC1E,eAAwB,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CACtE,gBAAyB,CAAE,OAAO,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CACxE,eAAwB,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CACtE,aAAuB,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CACnE,eAAyB,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAEvE,aAAajX,EAAqB,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,IAAKA,CAAI,CAAG,CACrF,UAAUL,EAAcD,EAAuB,CAAE,OAAO,KAAK,OAAO,UAAU,KAAK,IAAKC,EAAOD,CAAK,CAAG,CACvG,YAAYO,EAAaiX,EAAwC,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKjX,EAAKiX,CAAQ,CAAG,CACrH,UAAoB,CAAE,OAAO,KAAK,OAAO,SAAS,KAAK,GAAG,CAAG,CAC7D,eAAsC,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAGpF,SAASC,EAAkBzZ,EAA2B,CAAE,OAAO,KAAK,OAAO,SAAS,KAAK,IAAKyZ,EAAOzZ,CAAO,CAAG,CAC/G,SAAS0C,EAAuB,CAAE,OAAO,KAAK,OAAO,SAAS,KAAK,IAAKA,CAAE,CAAG,CAC7E,YAAYA,EAAkB,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKA,CAAE,CAAG,CACvE,YAAmB,CAAE,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CACvD,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,oBAAoBH,EAAaI,EAA0B,CAAE,KAAK,OAAO,oBAAoB,KAAK,IAAKJ,EAAKI,CAAU,CAAG,CACzH,YAAY+W,EAAoB1Z,EAA2B,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,IAAK0Z,EAAU1Z,CAAO,CAAG,CAC1H,YAAY0C,EAAsB,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,IAAKA,CAAE,CAAG,CAClF,eAAeA,EAAkB,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAE,CAAG,CAC7E,gBAAuB,CAAE,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CAC/D,aAAoB,CAAE,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CACzD,aAAaiX,EAA6B,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,IAAKA,CAAM,CAAG,CAC/F,gBAAgBC,EAA2B,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAS,CAAG,CAC/F,uBAAuBC,EAAsC,CAAE,OAAO,KAAK,OAAO,uBAAuB,KAAK,IAAKA,CAAa,CAAG,CACnI,UAAUC,EAAsB,CAAE,KAAK,OAAO,UAAU,KAAK,IAAKA,CAAM,CAAG,CAG3E,cAAcC,EAAwBb,EAAelZ,EAAyB,CAAE,KAAK,OAAO,cAAc,KAAK,IAAK+Z,EAAQb,EAAMlZ,CAAO,CAAG,CAC5I,MAAM+Z,EAAe/Z,EAAyB,CAAE,KAAK,OAAO,MAAM,KAAK,IAAK+Z,EAAQ/Z,CAAO,CAAG,CAC9F,MAAMoC,EAAWC,EAAWrC,EAAyB,CAAE,KAAK,OAAO,MAAM,KAAK,IAAKoC,EAAGC,EAAGrC,CAAO,CAAG,CACnG,MAAM+Z,EAAeb,EAAclZ,EAAyB,CAAE,KAAK,OAAO,MAAM,KAAK,IAAK+Z,EAAQb,EAAMlZ,CAAO,CAAG,CAClH,OAAc,CAAE,KAAK,OAAO,MAAM,KAAK,GAAG,CAAG,CAC7C,UAAU+Z,EAAwB/Z,EAAyB,CAAE,KAAK,OAAO,UAAU,KAAK,IAAK+Z,EAAQ/Z,CAAO,CAAG,CAC/G,WAAmB,CAAE,OAAO,KAAK,OAAO,UAAU,KAAK,GAAG,CAAG,CAC7D,YAAYga,EAAwBC,EAAiC,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKD,EAAMC,CAAe,CAAG,CACjI,YAAYD,EAAwBC,EAAoC,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,IAAKD,EAAMC,CAAe,CAAG,CAC3I,QAAQf,EAAclZ,EAAyB,CAAE,KAAK,OAAO,QAAQ,KAAK,IAAKkZ,EAAMlZ,CAAO,CAAG,CAC/F,SAAkB,CAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG,CAAG,CAC1D,OAAOka,EAA0B,CAAE,KAAK,OAAO,OAAO,KAAK,IAAKA,CAAU,CAAG,CAC7E,QAAQA,EAA0B,CAAE,KAAK,OAAO,QAAQ,KAAK,IAAKA,CAAU,CAAG,CAC/E,WAAoB,CAAE,OAAO,KAAK,OAAO,UAAU,KAAK,GAAG,CAAG,CAC9D,eAAeJ,EAA6B,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAM,CAAG,CAG5F,WAAWK,EAAkC,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAS,CAAG,CAC5F,YAAqB,CAAE,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CAGhE,WAAW/Z,EAA8B,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAO,CAAG,CACtF,cAAcA,EAA8B,CAAE,KAAK,OAAO,cAAc,KAAK,IAAKA,CAAO,CAAG,CAC5F,eAAe6C,EAA2B,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAI,CAAG,CACxF,kBAAkBA,EAA2B,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAI,CAAG,CAG9F,WAAWmX,EAA8B,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAO,CAAG,CACtF,cAAcA,EAA8B,CAAE,KAAK,OAAO,cAAc,KAAK,IAAKA,CAAO,CAAG,CAC5F,eAAsB,CAAE,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAC7D,aAA+B,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CAG3E,SAASzY,EAA0B,CAAE,KAAK,OAAO,SAAS,KAAK,IAAKA,CAAK,CAAG,CAC5E,YAAYA,EAA0B,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKA,CAAK,CAAG,CAClF,aAAaA,EAA0B,CAAE,KAAK,OAAO,aAAa,KAAK,IAAKA,CAAK,CAAG,CACpF,gBAAgBA,EAA0B,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAK,CAAG,CAC1F,aAAa0Y,EAAqC,CAAE,OAAO,KAAK,OAAO,aAAa,KAAK,IAAKA,CAAO,CAAG,CACxG,gBAAgB1Y,EAA0B,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAK,CAAG,CAC1F,mBAAmBA,EAA0B,CAAE,KAAK,OAAO,mBAAmB,KAAK,IAAKA,CAAK,CAAG,CAChG,iBAAiBA,EAA0B,CAAE,KAAK,OAAO,iBAAiB,KAAK,IAAKA,CAAK,CAAG,CAC5F,oBAAoBA,EAA0B,CAAE,KAAK,OAAO,oBAAoB,KAAK,IAAKA,CAAK,CAAG,CAClG,eAAeA,EAA0B,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAK,CAAG,CACxF,kBAAkBA,EAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAK,CAAG,CAC9F,cAAqB,CAAE,KAAK,OAAO,aAAa,KAAK,GAAG,CAAG,CAC3D,eAAsB,CAAE,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAC7D,sBAA6B,CAAE,KAAK,OAAO,qBAAqB,KAAK,GAAG,CAAG,CAC3E,sBAA6B,CAAE,KAAK,OAAO,qBAAqB,KAAK,GAAG,CAAG,CAG3E,eAAec,EAAmBR,EAAqB,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKQ,EAAIR,CAAK,CAAG,CAC1G,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CAGjE,YAAYqY,EAAuB,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKA,CAAM,CAAG,CAChF,cAActa,EAAwB,CAAE,KAAK,OAAO,cAAc,KAAK,IAAKA,CAAO,CAAG,CACtF,SAASua,EAAeC,EAA2C,CAAE,KAAK,OAAO,SAAS,KAAK,IAAKD,EAAOC,CAAU,CAAG,CACxH,mBAAmBC,EAAeC,EAAoB,CAAE,KAAK,OAAO,mBAAmB,KAAK,IAAKD,EAAMC,CAAG,CAAG,CAC7G,iBAAiBC,EAAsB,CAAE,KAAK,OAAO,iBAAiB,KAAK,IAAKA,CAAM,CAAG,CACzF,kBAA2B,CAAE,OAAO,KAAK,OAAO,iBAAiB,KAAK,GAAG,CAAG,CAC5E,kBAAkBA,EAAsB,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAM,CAAG,CAC3F,mBAA4B,CAAE,OAAO,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CAC9E,qBAAqBA,EAAsB,CAAE,KAAK,OAAO,qBAAqB,KAAK,IAAKA,CAAM,CAAG,CAGjG,mBAAmBC,EAAgC,CAAE,OAAO,KAAK,OAAO,mBAAmB,KAAK,IAAKA,CAAa,CAAG,CACrH,mBAAmBA,EAA+B,CAAE,KAAK,OAAO,mBAAmB,KAAK,IAAKA,CAAa,CAAG,CAC7G,sBAAsBA,EAA+B,CAAE,KAAK,OAAO,sBAAsB,KAAK,IAAKA,CAAa,CAAG,CACnH,oBAAoBA,EAA+B,CAAE,KAAK,OAAO,oBAAoB,KAAK,IAAKA,CAAa,CAAG,CAG/G,eAAwB,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAGtE,gBAA0B,CAAE,OAAO,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CACzE,UAAoB,CAAE,OAAO,KAAK,OAAO,SAAS,KAAK,GAAG,CAAG,CAC7D,mBAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CACrE,mBAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CACrE,gBAAgB1B,EAAoB,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAI,CAAG,CACnF,gBAAgBA,EAAoB,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAI,CAAG,CAGnF,WAAW3W,EAAae,EAAqB,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKf,EAAKe,CAAK,CAAG,CAC7F,UAAUf,EAAae,EAAqB,CAAE,KAAK,OAAO,UAAU,KAAK,IAAKf,EAAKe,CAAK,CAAG,CAC3F,eAAgC,CAAE,OAAO,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAC9E,gBAAgBlF,EAAyB,CAAE,OAAO,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAI,CAAG,CAC/F,oBAAoBmF,EAAwB,CAAE,KAAK,OAAO,oBAAoB,KAAK,IAAKA,CAAO,CAAG,CAClG,oBAA8B,CAAE,OAAO,KAAK,OAAO,mBAAmB,KAAK,GAAG,CAAG,CAGjF,gBAAgBsX,EAAqB,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAI,CAAG,CACpF,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,mBAA6B,CAAE,OAAO,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CAC/E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAC7E,uBAA8B,CAAE,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CAG7E,aAAsB,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CAClE,eAAexO,EAAwB,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAQ,CAAG,CACzF,wBAAwBA,EAAwB,CAAE,KAAK,OAAO,wBAAwB,KAAK,IAAKA,CAAQ,CAAG,CAC3G,0BAAiC,CAAE,KAAK,OAAO,yBAAyB,KAAK,GAAG,CAAG,CAGnF,QAAQyO,EAAqB,CAAE,KAAK,OAAO,QAAQ,KAAK,IAAKA,CAAI,CAAG,CACpE,kBAAkBC,EAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAO,CAAG,CAChG,mBAA+B,CAAE,OAAO,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CACjF,iBAAiBC,EAAqB,CAAE,KAAK,OAAO,iBAAiB,KAAK,IAAKA,CAAI,CAAG,CACtF,kBAA4B,CAAE,OAAO,KAAK,OAAO,iBAAiB,KAAK,GAAG,CAAG,CAC7E,cAAcV,EAAuB,CAAE,KAAK,OAAO,cAAc,KAAK,IAAKA,CAAM,CAAG,CACpF,aAAaW,EAAqB,CAAE,KAAK,OAAO,aAAa,KAAK,IAAKA,CAAI,CAAG,CAC9E,gBAAgBA,EAAqB,CAAE,KAAK,OAAO,gBAAgB,KAAK,IAAKA,CAAI,CAAG,CACpF,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,mBAAmBtZ,EAAsB,CAAE,KAAK,OAAO,mBAAmB,KAAK,IAAKA,CAAK,CAAG,CAC5F,sBAAsBA,EAAsB,CAAE,KAAK,OAAO,sBAAsB,KAAK,IAAKA,CAAK,CAAG,CAClG,eAAeA,EAAsB,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAK,CAAG,CACpF,kBAAkBuZ,EAAwB,CAAE,KAAK,OAAO,kBAAkB,KAAK,IAAKA,CAAO,CAAG,CAG9F,gBAAuB,CAAE,KAAK,OAAO,eAAe,KAAK,GAAG,CAAG,CAC/D,iBAAwB,CAAE,KAAK,OAAO,gBAAgB,KAAK,GAAG,CAAG,CACjE,kBAAyB,CAAE,KAAK,OAAO,iBAAiB,KAAK,GAAG,CAAG,CACnE,mBAA0B,CAAE,KAAK,OAAO,kBAAkB,KAAK,GAAG,CAAG,CACrE,YAAYlR,EAAqB,CAAE,KAAK,OAAO,YAAY,KAAK,IAAKA,CAAI,CAAG,CAC5E,aAAuB,CAAE,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,CAAG,CACnE,eAAeC,EAAoB,CAAE,KAAK,OAAO,eAAe,KAAK,IAAKA,CAAI,CAAG,CACjF,uBAAiC,CAAE,OAAO,KAAK,OAAO,sBAAsB,KAAK,GAAG,CAAG,CACvF,WAAWkR,EAA8B,CAAE,KAAK,OAAO,WAAW,KAAK,IAAKA,CAAO,CAAG,CACtF,cAAcA,EAA8B,CAAE,KAAK,OAAO,cAAc,KAAK,IAAKA,CAAO,CAAG,CAC5F,eAAsB,CAAE,KAAK,OAAO,cAAc,KAAK,GAAG,CAAG,CAG7D,iBAAiBjgB,EAAcwO,EAA6C,CAC1E,OAAO,KAAK,OAAO,iBAAiB,KAAK,IAAKxO,EAAMwO,CAAO,CAC7D,CACA,oBAAoBxO,EAAcwO,EAAuC,CACvE,KAAK,OAAO,oBAAoB,KAAK,IAAKxO,EAAMwO,CAAO,CACzD,CAGA,SAAgB,CAAE,KAAK,OAAO,WAAW,KAAK,GAAG,CAAG,CACtD,CC1PO,SAAS0R,GAAaliB,EAAqC,CAChE,MAAMmiB,EAAMnO,EAAAA,OAAOhU,CAAK,EACxB,OAAAmiB,EAAI,QAAUniB,EACPmiB,CACT,CCoIO,MAAMC,GAAMC,EAAAA,WAA6B,SAAaC,EAAOH,EAAK,CACvE,KAAM,CACJ,OAAAtB,EAAQ,KAAAb,EAAM,QAAAF,EAAS,KAAAC,EACvB,cAAAwC,EAAe,YAAAC,EAAa,eAAAC,EAAgB,YAAAC,EAC5C,QAAA5b,EAAS,eAAA6b,EAAgB,SAAAC,EAAU,WAAAC,EAAY,WAAAC,EAC/C,eAAAC,EAAgB,uBAAAC,EAAwB,sBAAAC,EAAuB,qBAAAC,EAC/D,qBAAAC,EAAsB,sBAAAC,EAAuB,eAAAC,EAAgB,kBAAAC,EAC7D,aAAAC,EAAc,qBAAAC,EAAsB,WAAYC,EAAgB,mBAAAC,EAChE,iBAAAC,EAAkB,qBAAAC,EAAsB,wBAAAC,EACxC,QAAAC,EAAS,QAAAC,EAAS,OAAAnD,EAAQ,QAAAO,EAAS,cAAA6C,EAAe,eAAAC,EAAgB,MAAA5C,EAClE,QAAA6C,EAAS,eAAAC,EAAgB,aAAAC,EAAc,gBAAAC,EAAiB,aAAAC,GACxD,QAAAC,GAAS,WAAAC,GAAY,aAAAC,EAAc,YAAAC,EAAa,YAAAC,GAAa,UAAAC,GAAW,YAAAC,GAAa,WAAAC,GACrF,YAAAC,GAAa,WAAAC,GAAY,UAAAC,GAAW,YAAAC,GAAa,SAAAC,GAAU,UAAAC,GAC3D,YAAAC,GAAa,UAAAC,GAAW,UAAAC,GAAW,SAAAC,GAAU,cAAAC,GAAe,gBAAAC,GAC5D,aAAAC,GAAc,YAAAC,GAAa,WAAAC,GAAY,YAAAC,GACvC,UAAAC,GAAW,MAAAC,GAAO,cAAAtS,GAAgB,KAAM,SAAAC,EAAA,EACtC2O,EAEE,CAAE,OAAA7N,EAAQ,OAAAwR,EAAA,EAAWlnB,GAAA,EACrBmnB,GAAelS,EAAAA,OAAuB,IAAI,EAC1C,CAAC1L,EAAK6d,EAAM,EAAIrS,EAAAA,SAA2B,IAAI,EAE/CsS,GAAalE,GAAUgC,CAAO,EAC9BmC,GAAoBnE,GAAUiC,CAAc,EAC5CmC,GAAkBpE,GAAUkC,CAAY,EACxCmC,GAAqBrE,GAAUmC,CAAe,EAC9CmC,GAAkBtE,GAAUoC,EAAY,EACxCmC,GAAoBzS,EAAAA,OAAO,EAAK,EAGtCK,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8N,EAAK,OACV,MAAM7Q,GAAWhJ,GAAOmM,EAAS,IAAIoL,GAAWvX,EAAKmM,CAAM,EAAI,KAC3D,OAAO0N,GAAQ,WACjBA,EAAI7Q,EAAQ,EAEX6Q,EAA8C,QAAU7Q,EAE7D,EAAG,CAAChJ,EAAKmM,EAAQ0N,CAAG,CAAC,EAGrBuE,EAAAA,gBAAgB,IAAM,CACpB,GAAIT,KAAW,SAAW,CAACxR,GAAU,CAACyR,GAAa,QAAS,OAa5D,MAAMS,GAAe,2CACfC,GAAiB,qFACjBC,GAAW,yBACjB,IAAIC,GAAc,GAClB,MAAMC,GAAkBC,IAAsB,QAC5C,MAAMC,GAAMD,GAAM,SAAW,GACvBE,KAAS1mB,GAAAwmB,GAAM,QAAN,YAAAxmB,GAAuB,QAAS,GAC/C,GAAIymB,GAAI,SAAS,SAAS,IAAMC,GAAM,SAAS,oBAAoB,GAAKA,GAAM,SAAS,2BAA2B,GAAI,CACpHF,GAAM,eAAA,EACNA,GAAM,gBAAA,EACN,MACF,CACA,MAAMG,GAAYF,GAAI,MAAM,4DAA4D,EAEtFH,IACAH,GAAa,KAAKK,GAAM,UAAY,EAAE,GACtCJ,GAAe,MAAKO,IAAA,YAAAA,GAAY,KAAM,EAAE,GACxC,CAACN,GAAS,KAAKK,EAAK,IAEpBF,GAAM,eAAA,EACNA,GAAM,gBAAA,EAEV,EACA,OAAO,iBAAiB,QAASD,GAAgB,EAAI,EAGrD,MAAMK,GAAmC,CAAE,GAAGtgB,CAAA,EAC9C,OAAO,KAAKsgB,EAAO,EAAE,QAAQ1f,IAAK0f,GAAQ1f,EAAC,IAAM,QAAa,OAAO0f,GAAQ1f,EAAC,CAAC,EAK/E,MAAM2f,GAAexE,GAAcD,EAC/ByE,KAAiB,SAAWD,GAAQ,MAAQC,IAEhD,MAAM9e,GAASkM,EAAO,UAAUyR,GAAa,QAASkB,EAAO,EAMvDE,GAAa/E,GAAiB1B,EAC9B0G,GAAW/E,GAAexC,GAAQ,GACxC,GAAIsH,GACF,GAAI,CACF7S,EAAO,cAAclM,GAAQ+e,GAAYC,GAAU,CAAE,YAAa,GAAM,CAC1E,OAASxmB,GAAG,CACV,QAAQ,KAAK,8DAA+DA,EAAC,CAC/E,CAGF,MAAMymB,GAAc/E,GAAkB3C,EAChC2H,GAAW/E,GAAe3C,EAChC,GAAIyH,IAAe,KACjB,GAAI,CAAE/S,EAAO,WAAWlM,GAAQif,GAAa,CAAE,YAAa,GAAM,CAAG,MAAQ,CAAe,CAE9F,GAAIC,IAAY,KACd,GAAI,CAAEhT,EAAO,QAAQlM,GAAQkf,GAAU,CAAE,YAAa,GAAM,CAAG,MAAQ,CAAe,CAOxF,GAAItG,IAAY,OACd,GAAI,CAAE1M,EAAO,WAAWlM,GAAQ4Y,CAAO,CAAG,MAAQ,CAAe,CAOnE,GAAI2B,EACF,GAAI,CACFrO,EAAO,YAAYlM,GAAQua,EAAW,aAAe,CAAE,UAAW,CAAA,EAAI,EACtErO,EAAO,cAAclM,GAAQ,CAAE,KAAMua,EAAW,KAAM,MAAOA,EAAW,MAAO,CACjF,MAAQ,CAAe,CAMzB,GAAIH,IAAmB,OACrB,GAAI,CAAElO,EAAO,kBAAkBlM,GAAQoa,CAAc,CAAG,MAAQ,CAAe,CASjF,MAAM+E,GAA4B,CAAA,EAClC,IAAIC,GAAW,GACf,MAAMC,GAAY,IAAM,QAClBD,KACJA,GAAW,GACXxB,GAAO5d,EAAM,GACb/H,GAAA4lB,GAAW,UAAX,MAAA5lB,GAAA,KAAA4lB,GAAqB7d,IACvB,EACAmf,GAAO,KAAKjT,EAAO,iBAAiBlM,GAAQ,cAAeqf,EAAS,CAAC,EACrE,MAAMC,GAAa,WAAWD,GAAW,GAAG,EAC5C,OAAAF,GAAO,KAAK,IAAM,aAAaG,EAAU,CAAC,EAE1CH,GAAO,KAAKjT,EAAO,iBAAiBlM,GAAQ,UAAW,IAAM,QAC3D,GAAIke,GAAkB,QAAS,OAC/B,MAAM/d,GAAI+L,EAAO,UAAUlM,EAAM,GACjC/H,GAAA6lB,GAAkB,UAAlB,MAAA7lB,GAAA,KAAA6lB,GAA4B3d,GAC9B,CAAC,CAAC,EACFgf,GAAO,KAAKjT,EAAO,iBAAiBlM,GAAQ,UAAW,IAAM,QAC3D,GAAIke,GAAkB,QAAS,OAC/B,MAAM7d,GAAI6L,EAAO,QAAQlM,EAAM,GAC/B/H,GAAA8lB,GAAgB,UAAhB,MAAA9lB,GAAA,KAAA8lB,GAA0B1d,GAC5B,CAAC,CAAC,EACF8e,GAAO,KAAKjT,EAAO,iBAAiBlM,GAAQ,gBAAiB,IAAM,QACjE,GAAI,CAAAke,GAAkB,QACtB,GAAI,CACF,MAAMlkB,GAAIkS,EAAO,WAAWlM,EAAM,EAC9B,OAAOhG,IAAM,UAAY,CAAC,OAAO,MAAMA,EAAC,KAAG/B,GAAA+lB,GAAmB,UAAnB,MAAA/lB,GAAA,KAAA+lB,GAA6BhkB,IAC9E,MAAQ,CAAe,CACzB,CAAC,CAAC,EACFmlB,GAAO,KAAKjT,EAAO,iBAAiBlM,GAAQ,aAAc,IAAM,QAC9D,GAAI,CAAAke,GAAkB,QACtB,GAAI,CACF,MAAM9d,GAAI8L,EAAO,QAAQlM,EAAM,EAC3B,OAAOI,IAAM,UAAY,CAAC,OAAO,MAAMA,EAAC,KAAGnI,GAAAgmB,GAAgB,UAAhB,MAAAhmB,GAAA,KAAAgmB,GAA0B7d,IAC3E,MAAQ,CAAe,CACzB,CAAC,CAAC,EAEK,IAAM,CACXme,GAAc,GACdY,GAAO,QAAQhe,IAAKA,GAAA,CAAG,EACvB+K,EAAO,WAAWlM,EAAM,EACxB4d,GAAO,IAAI,EAEX,WAAW,IAAM,OAAO,oBAAoB,QAASY,GAAgB,EAAI,EAAG,CAAC,CAC/E,CAEF,EAAG,CAACtS,EAAQwR,EAAM,CAAC,EAKnBS,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,GAAU,CAACoM,EAAQ,OAChC,MAAMtM,GAAUE,EAAO,UAAUnM,CAAG,EACpC,GAAI,CAAChH,GAAYiT,GAASsM,CAAM,EAAG,CACjC4F,GAAkB,QAAU,GAE5B,GAAI,CAAEhS,EAAO,UAAUnM,EAAKuY,CAAM,CAAG,OAAS9f,GAAG,CAC/C,QAAQ,KAAK,gCAAiCA,EAAC,CACjD,CACA,sBAAsB,IAAM,CAAE0lB,GAAkB,QAAU,EAAO,CAAC,CACpE,CAEF,EAAG,CAACne,EAAKmM,EAAQoM,GAAA,YAAAA,EAAQ,IAAKA,GAAA,YAAAA,EAAQ,GAAG,CAAC,EAG1C6F,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,GAAUuL,GAAQ,KAAM,OACrC,IAAI8H,GACJ,GAAI,CAAEA,GAAcrT,EAAO,QAAQnM,CAAG,CAAG,MAAQ,CAAc,CAC/D,GAAIwf,KAAgB,QAAaA,KAAgB9H,EAAM,CACrDyG,GAAkB,QAAU,GAC5B,GAAI,CAAEhS,EAAO,QAAQnM,EAAK0X,CAAI,CAAG,OAASjf,GAAG,CAC3C,QAAQ,KAAK,8BAA+BA,EAAC,CAC/C,CACA,sBAAsB,IAAM,CAAE0lB,GAAkB,QAAU,EAAO,CAAC,CACpE,CACF,EAAG,CAACne,EAAKmM,EAAQuL,CAAI,CAAC,EAGtB0G,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,GAAUqL,GAAW,KAAM,OACxC,IAAIiI,GACJ,GAAI,CAAEA,GAAiBtT,EAAO,WAAWnM,CAAG,CAAG,MAAQ,CAAE,MAAQ,CACjE,GAAI,SAAOyf,IAAmB,UAAY,OAAO,MAAMA,EAAc,IACjE,KAAK,IAAIA,GAAiBjI,CAAO,EAAI,IAAM,CAC7C2G,GAAkB,QAAU,GAC5B,GAAI,CAAEhS,EAAO,WAAWnM,EAAKwX,CAAO,CAAG,OAAS/e,GAAG,CACjD,QAAQ,KAAK,iCAAkCA,EAAC,CAClD,CACA,sBAAsB,IAAM,CAAE0lB,GAAkB,QAAU,EAAO,CAAC,CACpE,CACF,EAAG,CAACne,EAAKmM,EAAQqL,CAAO,CAAC,EAGzB4G,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,GAAUsL,GAAQ,KAAM,OACrC,IAAIiI,GACJ,GAAI,CAAEA,GAAcvT,EAAO,QAAQnM,CAAG,CAAG,MAAQ,CAAE,MAAQ,CAC3D,GAAI,SAAO0f,IAAgB,UAAY,OAAO,MAAMA,EAAW,IAC3D,KAAK,IAAIA,GAAcjI,CAAI,EAAI,IAAM,CACvC0G,GAAkB,QAAU,GAC5B,GAAI,CAAEhS,EAAO,QAAQnM,EAAKyX,CAAI,CAAG,OAAShf,GAAG,CAC3C,QAAQ,KAAK,8BAA+BA,EAAC,CAC/C,CACA,sBAAsB,IAAM,CAAE0lB,GAAkB,QAAU,EAAO,CAAC,CACpE,CACF,EAAG,CAACne,EAAKmM,EAAQsL,CAAI,CAAC,EAGtB,MAAMkI,GAAe,CAACC,GAA2BC,GAAoBC,KAAwB,CAC3F1B,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUyT,KAAS,QAChC,GAAI,CAAEA,GAAOC,GAAA,EAAWC,GAAA,CAAW,MAAQ,CAAe,CAE5D,EAAG,CAAC9f,EAAKmM,EAAQyT,EAAI,CAAC,CACxB,EACAD,GAAalF,EAAgB,IAAMtO,EAAQ,eAAenM,CAAI,EAAG,IAAMmM,EAAQ,gBAAgBnM,CAAI,CAAC,EACpG2f,GAAajF,EAAwB,IAAMvO,EAAQ,uBAAuBnM,CAAI,EAAG,IAAMmM,EAAQ,wBAAwBnM,CAAI,CAAC,EAC5H2f,GAAahF,EAAuB,IAAMxO,EAAQ,sBAAsBnM,CAAI,EAAG,IAAMmM,EAAQ,uBAAuBnM,CAAI,CAAC,EACzH2f,GAAa/E,EAAsB,IAAMzO,EAAQ,qBAAqBnM,CAAI,EAAG,IAAMmM,EAAQ,sBAAsBnM,CAAI,CAAC,EACtH2f,GAAa9E,EAAsB,IAAM1O,EAAQ,qBAAqBnM,CAAI,EAAG,IAAMmM,EAAQ,sBAAsBnM,CAAI,CAAC,EACtH2f,GAAa7E,EAAuB,IAAM3O,EAAQ,sBAAsBnM,CAAI,EAAG,IAAMmM,EAAQ,uBAAuBnM,CAAI,CAAC,EACzH2f,GAAa5E,EAAgB,IAAM5O,EAAQ,eAAenM,CAAI,EAAG,IAAMmM,EAAQ,gBAAgBnM,CAAI,CAAC,EACpG2f,GAAa3E,EAAmB,IAAM7O,EAAQ,kBAAkBnM,CAAI,EAAG,IAAMmM,EAAQ,mBAAmBnM,CAAI,CAAC,EAC7G2f,GAAa1E,EAAc,IAAM9O,EAAQ,aAAanM,CAAI,EAAG,IAAMmM,EAAQ,cAAcnM,CAAI,CAAC,EAC9F2f,GAAazE,EAAsB,IAAM/O,EAAQ,qBAAqBnM,CAAI,EAAG,IAAMmM,EAAQ,sBAAsBnM,CAAI,CAAC,EACtH2f,GAAaxE,EAAgB,IAAMhP,EAAQ,WAAWnM,CAAI,EAAG,IAAMmM,EAAQ,YAAYnM,CAAI,CAAC,EAC5F2f,GAAavE,EAAoB,IAAMjP,EAAQ,mBAAmBnM,CAAI,EAAG,IAAMmM,EAAQ,oBAAoBnM,CAAI,CAAC,EAChH2f,GAAatE,EAAkB,IAAMlP,EAAQ,iBAAiBnM,CAAI,EAAG,IAAMmM,EAAQ,kBAAkBnM,CAAI,CAAC,EAC1G2f,GAAarE,EAAsB,IAAMnP,EAAQ,qBAAqBnM,CAAI,EAAG,IAAMmM,EAAQ,sBAAsBnM,CAAI,CAAC,EAGtHoe,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUoP,IAA4B,QACnD,GAAI,CACEA,IAA4B,GAAOpP,EAAO,yBAAyBnM,CAAG,EACrEmM,EAAO,wBAAwBnM,EAAKub,CAAuB,CAClE,MAAQ,CAAe,CACzB,EAAG,CAACvb,EAAKmM,EAAQoP,CAAuB,CAAC,EAGzC6C,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUqP,IAAY,QACnC,GAAI,CAAErP,EAAO,WAAWnM,EAAKwb,CAAO,CAAG,MAAQ,CAAe,CAChE,EAAG,CAACxb,EAAKmM,EAAQqP,CAAO,CAAC,EAEzB4C,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUsP,IAAY,QACnC,GAAI,CAAEtP,EAAO,WAAWnM,EAAKyb,CAAO,CAAG,MAAQ,CAAe,CAChE,EAAG,CAACzb,EAAKmM,EAAQsP,CAAO,CAAC,EAGzB2C,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUmM,IAAW,QAClC,GAAI,CAAEnM,EAAO,eAAenM,EAAKsY,CAAM,CAAG,MAAQ,CAAe,CAEnE,EAAG,CAACtY,EAAKmM,EAAQmM,GAAA,YAAAA,EAAQ,GAAG,IAAKA,GAAA,YAAAA,EAAQ,GAAG,IAAKA,GAAA,YAAAA,EAAQ,GAAG,IAAKA,GAAA,YAAAA,EAAQ,GAAG,GAAG,CAAC,EAGhF8F,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAU0M,IAAY,QACnC,GAAI,CAAE1M,EAAO,WAAWnM,EAAK6Y,CAAO,CAAG,MAAQ,CAAe,CAChE,EAAG,CAAC7Y,EAAKmM,EAAQ0M,CAAO,CAAC,EAGzBuF,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUuP,IAAkB,QACzC,GAAI,CAAEvP,EAAO,iBAAiBnM,EAAK0b,CAAa,CAAG,MAAQ,CAAe,CAC5E,EAAG,CAAC1b,EAAKmM,EAAQuP,CAAa,CAAC,EAE/B0C,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUwP,IAAmB,QAC1C,GAAI,CAAExP,EAAO,kBAAkBnM,EAAK2b,CAAc,CAAG,MAAQ,CAAe,CAC9E,EAAG,CAAC3b,EAAKmM,EAAQwP,CAAc,CAAC,EAGhCyC,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAU4M,IAAU,QACjC,GAAI,CAAE5M,EAAO,SAASnM,EAAK+Y,CAAK,CAAG,MAAQ,CAAe,CAC5D,EAAG,CAAC/Y,EAAKmM,EAAQ4M,CAAK,CAAC,EAGvBqF,EAAAA,gBAAgB,IAAM,CACpB,GAAI,GAACpe,GAAO,CAACmM,GAAUkO,IAAmB,QAC1C,GAAI,CAAElO,EAAO,kBAAkBnM,EAAKqa,CAAc,CAAG,MAAQ,CAAe,CAC9E,EAAG,CAACra,EAAKmM,EAAQkO,CAAc,CAAC,EAGhCtO,EAAAA,UAAU,IAAM,CACV,CAAC/L,GAAO,CAACmM,GAAUmO,IAAa,QACpCnO,EAAO,YAAYnM,EAAKsa,CAAQ,CAClC,EAAG,CAACta,EAAKmM,EAAQmO,CAAQ,CAAC,EAE1BvO,EAAAA,UAAU,IAAM,CACV,CAAC/L,GAAO,CAACmM,GAAUoO,IAAe,QACtCpO,EAAO,cAAcnM,EAAKua,CAAU,CACtC,EAAG,CAACva,EAAKmM,EAAQoO,CAAU,CAAC,EAM5B,MAAMwF,GAAoBrU,EAAAA,OAAuB,IAAI,EAC/CsU,GAAgBnU,EAAAA,QACpB,IAAO2O,EAAa,KAAK,UAAUA,CAAU,EAAIA,IAAe,GAAQ,QAAU,GAClF,CAACA,CAAU,CAAA,EAEbzO,EAAAA,UAAU,IAAM,CACd,GAAI,GAAC/L,GAAO,CAACmM,IACb,GAAIqO,EACF,GAAI,CACFrO,EAAO,YAAYnM,EAAKwa,EAAW,aAAe,CAAE,UAAW,CAAA,EAAI,EACnErO,EAAO,cAAcnM,EAAK,CAAE,KAAMwa,EAAW,KAAM,MAAOA,EAAW,MAAO,EAC5EuF,GAAkB,QAAUvF,EAAW,IACzC,MAAQ,CAAe,SACdA,IAAe,IAASuF,GAAkB,QACnD,GAAI,CACF5T,EAAO,cAAcnM,EAAK,CAAE,KAAM+f,GAAkB,QAAS,MAAO,CAAE,UAAW,CAAA,CAAC,CAAE,CAAG,CACzF,MAAQ,CAAe,EAG3B,EAAG,CAAC/f,EAAKmM,EAAQ6T,EAAa,CAAC,EAG/B,MAAMC,GAAa,CACjB,QAAAhE,GAAS,WAAAC,GAAY,aAAAC,EAAc,YAAAC,EAAa,YAAAC,GAAa,UAAAC,GAAW,YAAAC,GAAa,WAAAC,GACrF,YAAAC,GAAa,WAAAC,GAAY,UAAAC,GAAW,YAAAC,GAAa,SAAAC,GAAU,UAAAC,GAC3D,YAAAC,GAAa,UAAAC,GAAW,UAAAC,GAAW,SAAAC,GAAU,cAAAC,GAAe,gBAAAC,GAC5D,aAAAC,GAAc,YAAAC,GAAa,WAAAC,GAAY,YAAAC,EAAA,EAInC0C,GAAgBtG,GAAUqG,EAAU,EACpCE,GAAW,OAAO,QAAQF,EAAU,EAAE,IAAI,CAAC,CAAC7gB,GAAGV,EAAC,IAAM,GAAGU,EAAC,IAAIV,GAAI,EAAI,CAAC,EAAE,EAAE,KAAK,GAAG,EACzFqN,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC/L,GAAO,CAACmM,EAAQ,OACrB,MAAMiU,GAAoC,CACxC,QAAS,QAAS,WAAY,WAAY,aAAc,aACxD,YAAa,YAAa,YAAa,YAAa,UAAW,UAC/D,YAAa,YAAa,WAAY,WACtC,YAAa,YAAa,WAAY,WAAY,UAAW,UAC7D,YAAa,YAAa,SAAU,SAAU,UAAW,UACzD,YAAa,YAAa,UAAW,UAAW,UAAW,UAC3D,SAAU,SAAU,cAAe,cAAe,gBAAiB,gBACnE,aAAc,aAAc,YAAa,YAAa,WAAY,WAClE,YAAa,WAAA,EAEThB,GAA4B,CAAA,EAClC,SAAW,CAACQ,GAAMS,EAAG,IAAK,OAAO,QAAQD,EAAS,EAC/BF,GAAc,QAAoCN,EAAI,GAEvER,GAAO,KAAKjT,EAAO,iBAAiBnM,EAAKqgB,GAAM5nB,IAAe,CAC5D,MAAMM,GAAMmnB,GAAc,QAA+DN,EAAI,EACzF,OAAO7mB,IAAO,YAAYA,GAAGN,EAAC,CACpC,CAAC,CAAC,EAEJ,MAAO,IAAM2mB,GAAO,QAAQhe,IAAKA,IAAG,CAEtC,EAAG,CAACpB,EAAKmM,EAAQgU,EAAQ,CAAC,EAE1B,MAAMG,GAAWzU,EAAAA,QAAQ,IAAO7L,GAAOmM,EAAS,CAAE,IAAAnM,EAAK,OAAAmM,CAAA,EAAW,KAAO,CAACnM,EAAKmM,CAAM,CAAC,EAEtF,OAAIwR,KAAW,QAAgB4C,GAAAA,IAAAC,GAAAA,SAAA,CAAG,SAAApV,GAAc,EAG9CmV,GAAAA,IAAC,MAAA,CAAI,IAAK3C,GAAc,UAAAH,GAAsB,MAAAC,GAC3C,SAAA4C,IACCC,GAAAA,IAAC3J,GAAW,SAAX,CAAoB,MAAO0J,GAAW,SAAAjV,GAAS,EAEpD,CAEJ,CAAC,EC7eM,SAASoV,GACd3H,EACA,CACA,MAAM4H,EAAOC,EAAAA,KAAK,SAA8B3G,EAAU,CACxD,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBrV,EAAS0V,GAAA,EACT2C,EAAMnO,EAAAA,OAA6B,IAAI,EAEvCkV,EAAoBlV,EAAAA,OAAgC,EAAE,EAEtDmV,EAAWnV,EAAAA,OAAOsO,CAAK,EAC7B6G,EAAS,QAAU7G,EAMnB,MAAM8G,EAAYpV,EAAAA,OAA6B,IAAI,EAC7CqV,EAAerV,EAAAA,OAAwB,IAAI,GAAK,EAChDyL,EAAQtL,EAAAA,QAA4B,KAAO,CAC/C,KAAMiN,EAAO,iBAAmB,UAChC,UAAY9X,IACV+f,EAAa,QAAQ,IAAI/f,CAAE,EACpB,IAAM,CAAE+f,EAAa,QAAQ,OAAO/f,CAAE,CAAG,GAElD,UAAW,IAAM8f,EAAU,OAAA,GACzB,CAAA,CAAE,EACAE,EAAS,IAAMD,EAAa,QAAQ,QAAQ/f,GAAMA,GAAI,EAItD,CAACigB,EAAiBC,CAAkB,EAAI1V,EAAAA,SAAS,CAAC,EAIlD2V,EAAUtV,EAAAA,QACd,IAAMiN,EAAO,cACTvO,EAAgBuO,EAAO,cAAc,IAAI1Z,GAAM4a,EAAc5a,CAAC,CAAC,CAAC,EAChE,GAEJ0Z,EAAO,cAAgBA,EAAO,cAAc,OAAUkB,EAAc5a,CAAC,CAAC,EAAI,CAAA,CAAC,EAI7Egf,EAAAA,gBAAgB,IAAM,OACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OAKrB,KAAM,CAAE,SAAUiV,EAAW,GAAGC,CAAA,EAAaR,EAAS,QAEhDS,EAAwC,CAAA,EAC9C,SAAW,CAACliB,EAAGV,CAAC,IAAK,OAAO,QAAQ2iB,CAAQ,EACnB3iB,GAAM,OAAM4iB,EAAaliB,CAAC,EAAIV,GAEvD,MAAMuB,EAAS6Y,EAAO,QAAQ3M,EAAQmV,CAAiB,EACvD,GAAI,CAACrhB,EAAQ,OACb4Z,EAAI,QAAU5Z,EAGd6gB,EAAU,QAAU7gB,EACpB+gB,EAAA,EAIA,MAAMO,EAAqBzI,EAAO,wBAAyBtX,GAAA,YAAAA,EAAQ,QAAS,SACvEA,EAAO,OACR,KACEggB,EAAiB1I,EAAO,wBAAyBtX,GAAA,YAAAA,EAAQ,QAAS,SAaxE,GAZKsX,EAAO,YAEL7Y,EAAe,OAAS,WAC3B/H,EAAAiU,EAAO,aAAP,MAAAjU,EAAA,KAAAiU,EAAoBnM,EAAKC,GAChBuhB,EACLD,GAAmBpV,EAAO,eAAeoV,EAAmBthB,CAAM,EAC7DuB,GAAA,MAAAA,EAAQ,WAAYA,EAAO,WAAWvB,CAAM,EAClDkM,EAAO,WAAWnM,EAAKC,CAAM,GAKhC6Y,EAAO,YAAa,CAKtB,MAAM2I,EAAkB3I,EAAO,YAAY,UAAYwI,EAAaliB,CAAC,IAAM,MAAS,EACpFwhB,EAAkB,QAAUa,EAAgB,OAAS,EACjDtV,EAAO,uBAAuBlM,EAAQwhB,CAAe,EACrD,CAAA,EACJ,MAAMC,EAAoC,CAAA,EAC1C,UAAWtiB,KAAK0Z,EAAO,YAAa,CAClC,MAAMpa,EAAI4iB,EAAaliB,CAAC,EACDV,GAAM,OAAMgjB,EAAStiB,CAAC,EAAIV,EACnD,CACI,OAAO,KAAKgjB,CAAQ,EAAE,OAAS,GACjCvV,EAAO,kBAAkBlM,EAAQyhB,CAAQ,CAE7C,CAEIJ,EAAa,UAAY,IAC3BnV,EAAO,YAAYlM,CAAM,EAQ3B,IAAI0hB,EACAC,EACAC,EACJ,GAAK5hB,EAAe,OAAS,WAAY,CACvC,IAAI6hB,EAAU,GACd,MAAMC,EAAU,IAAM,CACpB,GAAI,CAAAD,IACJA,EAAU,GACN,EAAAjI,EAAI,UAAY5Z,GAAU,CAACD,IAC/B,GAAI,CACF,MAAMgiB,EAAYlJ,EAAO,QAAQ3M,EAAQmV,CAAiB,EAC1D,GAAI,CAACU,EAAW,OAMhB,GALA7V,EAAO,cAAcnM,EAAKC,CAAM,EAChCkM,EAAO,WAAWnM,EAAKgiB,CAAS,EAChCnI,EAAI,QAAUmI,EACdlB,EAAU,QAAUkB,EAEhBlJ,EAAO,YAAa,CACtB,MAAM4I,EAAoC,CAAA,EAC1C,UAAWtiB,MAAK0Z,EAAO,YAAa,CAClC,MAAMpa,GAAK4iB,EAAyCliB,EAAC,EAC9BV,IAAM,OAAMgjB,EAAStiB,EAAC,EAAIV,GACnD,CACI,OAAO,KAAKgjB,CAAQ,EAAE,OAAS,GACjCvV,EAAO,kBAAkB6V,EAAWN,CAAQ,CAEhD,CACIJ,EAAa,UAAY,IAC3BnV,EAAO,YAAY6V,CAAS,EAG9Bd,EAAmBxiB,GAAKA,EAAI,CAAC,CAC/B,MAAQ,CAAe,CACzB,EAIA,IAHiB,IAAM,CACrB,GAAI,CAAE,OAAOyN,EAAO,SAASnM,CAAG,CAAG,MAAQ,CAAE,MAAO,EAAO,CAC7D,GAAA,EAGE4hB,EAAW,sBAAsB,IAAM,CACrCA,EAAW,sBAAsBG,CAAO,CAC1C,CAAC,MACI,CAEL,GAAI,CAAEF,EAAa1V,EAAO,iBAAiBnM,EAAK,cAAe+hB,CAAO,CAAG,MAAQ,CAAe,CAChGJ,EAAa,WAAWI,EAAS,GAAG,CACtC,CACF,CACA,MAAO,IAAM,OACTJ,gBAAyBA,CAAU,EACnCC,wBAA+BA,CAAQ,EACvCC,GAAYA,EAAA,EAGhB,MAAM5V,EAAU4N,EAAI,SAAW5Z,EAE1B6Y,EAAO,aAEL7M,GAAA,YAAAA,EAAiB,QAAS,WAC7B/T,EAAAiU,EAAO,gBAAP,MAAAjU,EAAA,KAAAiU,EAAuBnM,EAAKiM,GACnBuV,EACLD,GAAmBpV,EAAO,kBAAkBoV,EAAmBtV,CAAO,EACjEzK,GAAA,MAAAA,EAAQ,cAAeA,EAAO,cAAcyK,CAAO,EACrDjM,GAAKmM,EAAO,cAAcnM,EAAKiM,CAAO,GAE/C4N,EAAI,QAAU,KACdiH,EAAU,QAAU,KACpBE,EAAA,CACF,CAEF,EAAG,CAAChhB,EAAKmM,EAAQ3K,EAAQ2f,CAAO,CAAC,EAGjC,MAAMc,EAASnJ,EAAO,aAAekB,EAAMlB,EAAO,YAAY,EAAI,OAC5DoJ,EAASrW,EAAAA,QAAQ,IAAMtB,EAAgB0X,CAAM,EAAG,CAACA,CAAM,CAAC,EAC9DlW,EAAAA,UAAU,IAAM,CACV8N,EAAI,SAAW1N,GAAU8V,GAAU,MACrC9V,EAAO,mBAAmB0N,EAAI,QAASoI,CAA0B,CAGrE,EAAG,CAAC9V,EAAQ+V,CAAM,CAAC,EAGnB,MAAMC,EAAUrJ,EAAO,SAAWkB,EAAMlB,EAAO,QAAQ,EAAI,OACrDsJ,EAAUvW,EAAAA,QAAQ,IAAMtB,EAAgB4X,CAAO,EAAG,CAACA,CAAO,CAAC,EACjEpW,EAAAA,UAAU,IAAM,CACV8N,EAAI,SAAW1N,GAAUgW,GAAW,MACtChW,EAAO,eAAe0N,EAAI,QAASsI,CAAkB,CAGzD,EAAG,CAAChW,EAAQiW,CAAO,CAAC,EAIpB,MAAMC,EAAcxW,EAAAA,QAClB,IAAMiN,EAAO,YACTA,EAAO,YAAY,OAAgC,CAACwJ,EAAK,KACnDtI,EAAM,CAAC,IAAM,WAAe,CAAC,EAAIA,EAAM,CAAC,GACrCsI,GACN,CAAA,CAAE,EACL,CAAA,EAEJxJ,EAAO,YAAcA,EAAO,YAAY,OAASkB,EAAM5a,CAAC,CAAC,EAAI,CAAA,CAAC,EAE1DmjB,EAAS1W,EAAAA,QAAQ,IAAMtB,EAAgB8X,CAAW,EAAG,CAACA,CAAW,CAAC,EAClEG,EAAoB9W,EAAAA,OAAiB,EAAE,EAC7CK,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8N,EAAI,SAAW,CAAC1N,GAAU,CAAC2M,EAAO,YAAa,OACpD,MAAM2J,EAAW,OAAO,KAAKJ,CAAW,EAKlCK,EAAUF,EAAkB,QAAQ,UAAY,CAACC,EAAS,SAASrjB,CAAC,CAAC,EAC3E,GAAIsjB,EAAQ,OAAS,EAAG,CACtB,MAAMC,EAAsC,CAAA,EACtCC,EAAyB,CAAA,EAC/B,UAAWxjB,KAAKsjB,EACVtjB,KAAKwhB,EAAkB,QAAS+B,EAAWvjB,CAAC,EAAIwhB,EAAkB,QAAQxhB,CAAC,EAC1EwjB,EAAa,KAAKxjB,CAAC,EAEtB,OAAO,KAAKujB,CAAU,EAAE,OAAS,GACnCC,EAAa,KAAK,GAAGzW,EAAO,sBAAsB0N,EAAI,QAAS8I,CAAU,CAAC,EAExEC,EAAa,OAAS,GACxB7qB,GACE,GAAG+gB,EAAO,aAAe,SAAS,MAAM8J,EAAa,KAAK,KAAK,CAAC,wEAAA,CAKtE,CACAJ,EAAkB,QAAUC,EACxBA,EAAS,OAAS,GACpBtW,EAAO,kBAAkB0N,EAAI,QAASwI,CAAW,CAGrD,EAAG,CAAClW,EAAQoW,CAAM,CAAC,EAGnB,MAAMM,EAAW7I,EAAc,QAC/BjO,EAAAA,UAAU,IAAM,CACV,CAAC8N,EAAI,SAAW,CAAC1N,IACjB0W,IAAY,GAAO1W,EAAO,YAAY0N,EAAI,OAAO,EAChD1N,EAAO,YAAY0N,EAAI,OAAO,EACrC,EAAG,CAAC1N,EAAQ0W,CAAO,CAAC,EAGpB,MAAM1C,EAAWtU,EAAAA,QACf,IAAMtB,GAAiBuO,EAAO,QAAU,CAAA,GAAI,IAAIrgB,GAAK,GAAGA,EAAE,GAAG,IAAI,OAAOuhB,EAAMvhB,EAAE,IAAI,CAAC,EAAE,CAAC,GAEvFqgB,EAAO,QAAU,CAAA,GAAI,OAAS,OAAOkB,EAAMvhB,EAAE,IAAI,CAAC,CAAA,EAE/CqqB,EAAcpX,EAAAA,OAAgC,EAAE,EAoBtD,OAnBCoN,EAAO,QAAU,CAAA,GAAI,QAAQrgB,GAAK,CAAEqqB,EAAY,QAAQrqB,EAAE,IAAI,EAAIuhB,EAAMvhB,EAAE,IAAI,CAAG,CAAC,EACnFsT,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8N,EAAI,SAAW,CAAC1N,GAAU,CAAC2M,EAAO,OAAQ,OAC/C,MAAMsG,EAA4B,CAAA,EAClC,SAAW,CAAE,IAAA/W,EAAK,KAAAuX,CAAA,IAAU9G,EAAO,OACjCsG,EAAO,KAAKjT,EAAO,iBAAiB0N,EAAI,QAASxR,EAAM7O,GAAiB,CACtE,MAAMT,EAAK+pB,EAAY,QAAQlD,CAAI,EACnC,GAAI,OAAO7mB,GAAO,WAAY,CAC5B,MAAMO,EAAIE,EACVT,GAAGO,GAAA,YAAAA,EAAG,SAASA,GAAA,YAAAA,EAAG,UAAUA,GAAA,YAAAA,EAAG,SAAUE,EAAKA,CAAG,CACnD,CACF,CAAC,CAAC,EAEJ,MAAO,IAAM4lB,EAAO,QAAQhe,GAAKA,GAAG,CAEtC,EAAG,CAAC+K,EAAQgU,EAAUgB,EAASF,CAAe,CAAC,EAG3C,CAACjH,EAAM,UACP,CAAClB,EAAO,iBAAyB,YAGlC/B,GAAqB,SAArB,CAA8B,MAAOI,EACnC,WAAM,SACT,CAEJ,CAAC,EACD,OAAAuJ,EAAK,YAAc5H,EAAO,aAAe,mBAClC4H,CACT,CAoBO,SAASqC,GACdjK,EACA,CACA,MAAM4H,EAAOC,EAAAA,KAAK,SAA8B3G,EAAU,CACxD,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBgD,EAAMnO,EAAAA,OAA6B,IAAI,EACvCmV,EAAWnV,EAAAA,OAAOsO,CAAK,EAC7B6G,EAAS,QAAU7G,EAEnB,MAAMmH,EAAUtV,EAAAA,QACd,IAAMiN,EAAO,cACTvO,EAAgBuO,EAAO,cAAc,IAAI1Z,GAAM4a,EAAc5a,CAAC,CAAC,CAAC,EAChE,GAEJ0Z,EAAO,cAAgBA,EAAO,cAAc,OAAUkB,EAAc5a,CAAC,CAAC,EAAI,CAAA,CAAC,EAEvE4jB,EAAmBnX,EAAAA,QACvB,IAAMiN,EAAO,YACTvO,EAAgBuO,EAAO,YAAY,IAAI1Z,GAAM4a,EAAc5a,CAAC,GAAK,IAAI,CAAC,EACtE,GAEJ0Z,EAAO,YAAcA,EAAO,YAAY,IAAI1Z,GAAM4a,EAAc5a,CAAC,GAAK,IAAI,EAAI,CAAA,CAAC,EAGjFgf,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,KAAM,CAAE,SAAU5Q,EAAI,QAAS8I,EAAI,GAAG4e,CAAA,EAAYpC,EAAS,QAErDqC,EAAqC,CAAA,EAC3C,SAAW,CAAC9jB,EAAGV,CAAC,IAAK,OAAO,QAAQukB,CAAO,EAA4BvkB,GAAM,OAAMwkB,EAAU9jB,CAAC,EAAIV,GAClG,MAAMuB,EAAS6Y,EAAO,QAAQ3M,EAAQ+W,CAAc,EACpD,GAAKjjB,EAIL,IAHA4Z,EAAI,QAAU5Z,EACdkM,EAAO,WAAWnM,EAAKC,CAAM,EAEzB6Y,EAAO,YAET,UAAW1Z,KAAK0Z,EAAO,YACXoK,EAAU9jB,CAAC,EAMzB,OAAKyhB,EAAS,QAAgB,UAAY,IAAO1U,EAAO,YAAYlM,CAAM,EAEnE,IAAM,CACXkM,EAAO,cAAcnM,EAAKC,CAAM,EAChC4Z,EAAI,QAAU,IAChB,EAEF,EAAG,CAAC7Z,EAAKmM,EAAQgV,EAAS6B,CAAgB,CAAC,EAE3C,MAAMX,EAAcxW,EAAAA,QAClB,IAAMiN,EAAO,YACTA,EAAO,YAAY,OAAgC,CAACwJ,EAAKljB,KAClD4a,EAAc5a,CAAC,IAAM,WAAeA,CAAC,EAAK4a,EAAc5a,CAAC,GACvDkjB,GACN,CAAA,CAAE,EACL,CAAA,EAEJxJ,EAAO,YAAcA,EAAO,YAAY,OAAUkB,EAAc5a,CAAC,CAAC,EAAI,CAAA,CAAC,EAEnEmjB,EAAS1W,EAAAA,QAAQ,IAAMtB,EAAgB8X,CAAW,EAAG,CAACA,CAAW,CAAC,EAClEc,EAAczX,EAAAA,OAAO,EAAI,EAC/BK,EAAAA,UAAU,IAAM,CACd,GAAI,GAAC8N,EAAI,SAAW,CAAC1N,GAAU,CAAC2M,EAAO,aAEvC,IAAIqK,EAAY,QAAS,CAAEA,EAAY,QAAU,GAAO,MAAQ,CAC5D,OAAO,KAAKd,CAAW,EAAE,OAAS,GAAGlW,EAAO,kBAAkB0N,EAAI,QAASwI,CAAW,EAE5F,EAAG,CAAClW,EAAQoW,CAAM,CAAC,EAEnB,MAAMM,EAAW7I,EAAc,QAC/BjO,EAAAA,UAAU,IAAM,CACV,CAAC8N,EAAI,SAAW,CAAC1N,IACjB0W,IAAY,GAAO1W,EAAO,YAAY0N,EAAI,OAAO,EAChD1N,EAAO,YAAY0N,EAAI,OAAO,EACrC,EAAG,CAAC1N,EAAQ0W,CAAO,CAAC,EAEpB,MAAM1C,EAAWtU,EAAAA,QACf,IAAMtB,GAAiBuO,EAAO,QAAU,CAAA,GAAI,IAAIrgB,GAAK,GAAGA,EAAE,GAAG,IAAI,OAAQuhB,EAAcvhB,EAAE,IAAI,CAAC,EAAE,CAAC,GAEhGqgB,EAAO,QAAU,CAAA,GAAI,OAAS,OAAQkB,EAAcvhB,EAAE,IAAI,CAAC,CAAA,EAExDqqB,EAAcpX,EAAAA,OAAgC,EAAE,EACtD,OAACoN,EAAO,QAAU,CAAA,GAAI,QAAQrgB,GAAK,CAAEqqB,EAAY,QAAQrqB,EAAE,IAAI,EAAKuhB,EAAcvhB,EAAE,IAAI,CAAG,CAAC,EAC5FsT,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8N,EAAI,SAAW,CAAC1N,GAAU,CAAC2M,EAAO,OAAQ,OAC/C,MAAMsG,EAA4B,CAAA,EAClC,SAAW,CAAE,IAAA/W,EAAK,KAAAuX,CAAA,IAAU9G,EAAO,OACjCsG,EAAO,KAAKjT,EAAO,iBAAiB0N,EAAI,QAASxR,EAAM7O,GAAiB,CACtE,MAAMT,EAAK+pB,EAAY,QAAQlD,CAAI,EAC/B,OAAO7mB,GAAO,YAAYA,EAAGS,CAAG,CACtC,CAAC,CAAC,EAEJ,MAAO,IAAM4lB,EAAO,QAAQgE,GAASA,GAAO,CAE9C,EAAG,CAACjX,EAAQgU,EAAUgB,CAAO,CAAC,EAEvB,IACT,CAAC,EACD,OAAAT,EAAK,YAAc5H,EAAO,aAAe,mBAClC4H,CACT,CAmBO,SAAS2C,GACdvK,EACA,CACA,MAAM4H,EAAOC,EAAAA,KAAK,SAA4B3G,EAAU,CACtD,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBgD,EAAMnO,EAAAA,OAA2B,IAAI,EACrC4X,EAAS5X,EAAAA,OAAuD,EAAE,EAGxE,GAAIoN,EAAO,OACT,UAAWyK,KAAMzK,EAAO,OACtBwK,EAAO,QAAQC,EAAG,IAAI,EAAKvJ,EAAcuJ,EAAG,IAAI,EAOpD,KAAM,CAAE,SAAUC,EAAc,GAAGC,GAAgBzJ,EAE7C0J,EAAWnZ,EAAgBkZ,CAAW,EAGtCE,EAAejY,EAAAA,OAAsB,IAAI,EAE/C0S,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,KAAM,CAAE,SAAUyX,EAAK,GAAGC,GAAa7J,EACjC8J,EAAsC,CAAA,EAC5C,SAAW,CAAC1kB,EAAGV,CAAC,IAAK,OAAO,QAAQmlB,CAAQ,EAA4BnlB,GAAM,OAAMolB,EAAW1kB,CAAC,EAAIV,GACpG,IAAIuB,EAAS6Y,EAAO,aAAe6K,EAAa,UAAYD,EAAW7J,EAAI,QAAU,KACrF,GAAI,CAAC5Z,EAAQ,CAEX,GADAA,EAAS6Y,EAAO,QAAQ3M,EAAQ2X,CAAe,EAC3C,CAAC7jB,EAAQ,OACb4Z,EAAI,QAAU5Z,EACd0jB,EAAa,QAAUD,CACzB,CACA,MAAMK,EAAMjL,EAAO,WAAa,WAC1BkL,EAASlL,EAAO,cAAgB,cACtC,IAAImL,EAAU,GACVC,EAAmD,KACvD,MAAMC,EAAa,IAAM,CACvBF,EAAU,GACT9X,EAAe4X,CAAG,EAAE/jB,EAAKC,CAAM,CAClC,EACI6Y,EAAO,WAAYoL,EAAa,WAAWC,EAAY,CAAC,EACvDA,EAAA,EAKL,MAAM/E,EAA4B,CAAA,EAClC,GAAItG,EAAO,QAAU7Y,EAAO,IAC1B,UAAWsjB,KAAMzK,EAAO,OACtBsG,EAAO,KAAKjT,EAAO,iBAAiBlM,EAAQsjB,EAAG,IAAM9qB,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQC,EAAG,QAAlB,YAAAroB,EAAA,KAAAhD,EAA0BO,GAAE,CAAC,EAIjG,MAAO,IAAM,CACX2mB,EAAO,QAAQhe,GAAKA,EAAA,CAAG,EACnB8iB,gBAAyBA,CAAU,EACnCD,GAAU9X,EAAe6X,CAAM,EAAEhkB,EAAKC,CAAM,EAC3C6Y,EAAO,cAAae,EAAI,QAAU,KACzC,CAEF,EAAG,CAAC7Z,EAAKmM,EAAQuX,CAAQ,CAAC,EAEnB,IACT,CAAC,EACD,OAAAhD,EAAK,YAAc5H,EAAO,aAAe,iBAClC4H,CACT,CCpiBO,MAAM0D,GAAazD,EAAAA,KAAK,SAAoB3G,EAAwB,CACzE,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBrV,EAAS0V,GAAA,EAET,CACJ,QAAA1P,EAAS,KAAA6c,EAAO,GAAM,SAAAC,EACtB,OAAAC,EAAQ,QAAAC,EAAS,aAAAC,EAAc,WAAAC,EAAY,UAAAC,EAAW,SAAAzH,EACtD,MAAA0H,EAAO,OAAAthB,EAAQ,SAAAuhB,EAAU,OAAA3hB,EAAQ,MAAA4hB,EACjC,cAAAC,EAAe,mBAAAC,EAAoB,cAAAC,EAAe,QAAAjtB,EAAS,WAAAktB,EAAY,eAAAC,EAAgB,iBAAAC,CAAA,EACrFpL,EAEEqL,EAAQ3Z,EAAAA,OAA6B,IAAI,EACzC,CAAC4Z,EAASC,CAAU,EAAI/Z,EAAAA,SAAS,EAAK,EAGtC8X,EAAS,CACb,KAAM5X,EAAAA,OAAO6Y,CAAM,EAAG,MAAO7Y,EAAAA,OAAO8Y,CAAO,EAAG,WAAY9Y,EAAAA,OAAO+Y,CAAY,EAC7E,SAAU/Y,EAAAA,OAAOgZ,CAAU,EAAG,QAAShZ,EAAAA,OAAOiZ,CAAS,EAAG,OAAQjZ,EAAAA,OAAOwR,CAAQ,CAAA,EAEnFoG,EAAO,KAAK,QAAUiB,EACtBjB,EAAO,MAAM,QAAUkB,EACvBlB,EAAO,WAAW,QAAUmB,EAC5BnB,EAAO,SAAS,QAAUoB,EAC1BpB,EAAO,QAAQ,QAAUqB,EACzBrB,EAAO,OAAO,QAAUpG,EAIxB,MAAMsI,EAAkBjb,EAAgB,CAAE,SAAAsa,EAAU,OAAA3hB,EAAQ,mBAAA8hB,EAAoB,cAAAC,EAAe,QAAAjtB,EAAS,iBAAAotB,EAAkB,EAG1HhH,OAAAA,EAAAA,gBAAgB,IAAM,OACpB,GAAI,CAACjS,EAAQ,OACb,MAAMvP,EAAgC,CAAA,EAChCpD,EAAM,CAAE,MAAAorB,EAAO,OAAAthB,EAAQ,SAAAuhB,EAAU,OAAA3hB,EAAQ,MAAA4hB,EAAO,cAAAC,EAAe,mBAAAC,EAAoB,cAAAC,EAAe,QAAAjtB,EAAS,WAAAktB,EAAY,eAAAC,EAAgB,iBAAAC,CAAA,EAC7I,SAAW,CAAChmB,EAAGV,CAAC,IAAK,OAAO,QAAQlF,CAAG,EACdkF,GAAM,OAAM9B,EAAKwC,CAAC,EAAIV,GAE/C,MAAMuC,EAAKkL,EAAO,iBAAiB3E,EAAS5K,CAAI,EAChD,GAAI,CAACqE,EAAI,OACTokB,EAAM,QAAUpkB,EAChBskB,EAAW,EAAI,EAGf,MAAME,EAASxkB,EAAW,IACpBykB,EAA0D,CAAA,EAChE,SAAW,CAAChH,EAAOiH,CAAM,GAAK,CAC5B,CAAC,OAAQ,MAAM,EAAG,CAAC,QAAS,OAAO,EAAG,CAAC,aAAc,YAAY,EACjE,CAAC,WAAY,UAAU,EAAG,CAAC,UAAW,SAAS,EAAG,CAAC,SAAU,QAAQ,CAAA,EAC3D,CACV,MAAM5sB,EAAMN,GAAA,UAAgB,OAAAyC,IAAAhD,EAAAorB,EAAeqC,CAAM,GAAE,UAAvB,YAAAzqB,GAAA,KAAAhD,EAAiCO,KAC7DP,EAAAutB,GAAA,YAAAA,EAAO,mBAAP,MAAAvtB,EAAA,KAAAutB,EAA0B/G,EAAO3lB,GACjC2sB,EAAS,KAAK,CAAE,MAAAhH,EAAO,GAAA3lB,CAAA,CAAI,CAC7B,CAEA,MAAO,IAAM,OACX,SAAW,CAAE,MAAA2lB,EAAO,GAAA3lB,CAAA,IAAQ2sB,GAC1BxtB,EAAAutB,GAAA,YAAAA,EAAO,sBAAP,MAAAvtB,EAAA,KAAAutB,EAA6B/G,EAAO3lB,GAEtC,MAAM6sB,GAAapkB,GAAA,YAAAA,EAAQ,SAAUxB,EACrC,GAAI4lB,EACF,GAAI,CAAEzZ,EAAO,gBAAgByZ,CAAiB,CAAG,MAAQ,CAAe,CAE1EP,EAAM,QAAU,KAChBE,EAAW,EAAK,CAClB,CAEF,EAAG,CAACpZ,EAAQqZ,CAAe,CAAC,EAG5BzZ,EAAAA,UAAU,IAAM,SACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAChCsB,GAAOgO,GAAW,QAAMtM,EAAA1B,EAAI,aAAJ,MAAA0B,EAAA,KAAA1B,EAAiBgO,GAC/C,EAAG,CAAC8d,EAAS9d,CAAO,CAAC,EAErBuE,EAAAA,UAAU,IAAM,SACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAChCsB,GAAOsrB,GAAS,QAAM5pB,EAAA1B,EAAI,WAAJ,MAAA0B,EAAA,KAAA1B,EAAesrB,GAC3C,EAAG,CAACQ,EAASR,CAAK,CAAC,EAEnB/Y,EAAAA,UAAU,IAAM,SACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAChCsB,GAAOorB,GAAS,QAAM1pB,EAAA1B,EAAI,WAAJ,MAAA0B,EAAA,KAAA1B,EAAeorB,GAC3C,EAAG,CAACU,EAASV,CAAK,CAAC,EAEnB7Y,EAAAA,UAAU,IAAM,SACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAChCsB,GAAO8J,GAAU,QAAMpI,EAAA1B,EAAI,YAAJ,MAAA0B,EAAA,KAAA1B,EAAgB8J,GAC7C,EAAG,CAACgiB,EAAShiB,CAAM,CAAC,EAEpByI,EAAAA,UAAU,IAAM,SACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAChCsB,GAAO0rB,GAAc,QAAMhqB,EAAA1B,EAAI,gBAAJ,MAAA0B,EAAA,KAAA1B,EAAoB0rB,GACrD,EAAG,CAACI,EAASJ,CAAU,CAAC,EAExBnZ,EAAAA,UAAU,IAAM,WACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAC/BsB,IACD2rB,IAAmB,IAAMjqB,EAAA1B,EAAI,iBAAJ,MAAA0B,EAAA,KAAA1B,GACpB2rB,IAAmB,MAAO5pB,EAAA/B,EAAI,kBAAJ,MAAA+B,EAAA,KAAA/B,IACrC,EAAG,CAAC8rB,EAASH,CAAc,CAAC,EAE5BpZ,EAAAA,UAAU,IAAM,WACd,MAAMvS,GAAOtB,EAAAmtB,EAAM,UAAN,YAAAntB,EAAuB,IAC/BsB,IACDurB,IAAkB,IAAM7pB,EAAA1B,EAAI,gBAAJ,MAAA0B,EAAA,KAAA1B,GACnBurB,IAAkB,MAAOxpB,EAAA/B,EAAI,iBAAJ,MAAA+B,EAAA,KAAA/B,IACpC,EAAG,CAAC8rB,EAASP,CAAa,CAAC,EAG3BhZ,EAAAA,UAAU,IAAM,WACd,GAAI,CAACI,GAAU,CAACnM,GAAO,CAACslB,GAAW,CAACD,EAAM,QAAS,OAEnD,MAAMO,GAAcpkB,GAAA,YAAAA,EAAQ,SAAUxB,EAChCiB,EAAKokB,EAAM,QAEjB,GAAIhB,EACF,GAAI,CACF,MAAMwB,GAAYD,GAAA,YAAAA,EAAY,MAAOA,EAC/BH,EAASxkB,EAAW,IAE1B,GAAIqjB,EAAU,CACZ,MAAMjoB,EAAM+L,GAAA,EACNc,EAAK,IAAI7M,EAAI,MAAMioB,EAAS,IAAKA,EAAS,GAAG,GACnDpsB,EAAA2tB,GAAA,YAAAA,EAAW,iBAAX,MAAA3tB,EAAA,KAAA2tB,EAA4BJ,EAAOvc,EACrC,MAAW,OAAO2c,GAAA,YAAAA,EAAW,iBAAmB,YAC9CA,EAAU,eAAeJ,CAAK,CAElC,OAAShtB,EAAG,CACV,QAAQ,KAAK,4BAA6BA,CAAC,CAC7C,KAEA,IAAI,CACF,MAAMotB,GAAYD,GAAA,YAAAA,EAAY,MAAOA,EACjC,OAAOC,GAAA,YAAAA,EAAW,kBAAoB,aAAsB,gBAAA,GAC1DtqB,GAAAL,EAAA8E,EAAY,MAAZ,YAAA9E,EAAiB,kBAAjB,MAAAK,EAAA,KAAAL,EACR,MAAQ,CAAe,CAG3B,EAAG,CAACiR,EAAQnM,EAAKwB,EAAQ8jB,EAASjB,EAAMC,GAAA,YAAAA,EAAU,IAAKA,GAAA,YAAAA,EAAU,IAAKkB,CAAe,CAAC,EAI/E,IACT,CAAC,EC7JKM,GAAyD,CAC7D,QAAS,WAAY,YACvB,EAEMC,GAA4D,CAChE,UAAW,UAAW,UAAW,UAAW,UAAW,YACvD,eAAgB,2BAA4B,oBAC5C,eAAgB,SAAU,iBAC5B,EAEMC,GAA0E,CAC9E,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,CAC3B,EAEA,SAASC,GACPjM,EACArT,EACyB,CACzB,MAAMlI,EAA+B,CAAA,EACrC,UAAWvB,KAAOyJ,EAAM,CACtB,MAAMjP,EAAQsiB,EAAM9c,CAAG,EACIxF,GAAU,OAAM+G,EAAIvB,CAAG,EAAIxF,EACxD,CACA,OAAO+G,CACT,CAEA,SAASynB,GAAalM,EAAoD,CACxE,KAAM,CACJ,SAAUoH,EACV,QAAS+E,EACT,QAASC,EACT,YAAaC,EACb,WAAYC,EACZ,GAAGC,CAAA,EACDvM,EAGEvb,EAA+B,CAAA,EACrC,SAAW,CAACvB,EAAKxF,CAAK,IAAK,OAAO,QAAQ6uB,CAAQ,EACrB7uB,GAAU,OAAM+G,EAAIvB,CAAG,EAAIxF,GAExD,OAAO+G,CACT,CAEO,MAAM+nB,GAAgB7F,EAAAA,KAAK,SAAuB3G,EAA2B,CAClF,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBrV,EAAS0V,GAAA,EACTuP,EAAa/a,EAAAA,OAA6B,IAAI,EAC9CmV,EAAWnV,EAAAA,OAAOsO,CAAK,EAC7B6G,EAAS,QAAU7G,EAEnB,MAAM4D,EAAelS,EAAAA,OAA8B,IAAI,EACnD,CAACkS,EAAa,SAAW,OAAO,SAAa,MAC/CA,EAAa,QAAU,SAAS,cAAc,KAAK,GAGrD,MAAMuD,EAAU5W,EAAgBwb,GAAgB,OAAS/L,EAAM5a,CAAC,CAAC,CAAC,EAElEgf,EAAAA,gBAAgB,IAAM,CACpB,MAAMriB,EAAY6hB,EAAa,QAC/B,GAAI,CAAC5d,GAAO,CAACmM,GAAU,CAACpQ,EAAW,OAEnC,MAAMwqB,EAAWL,GAAarF,EAAS,OAAO,EACxCjI,EAAUzM,EAAO,oBAAoB,IAAMpQ,EAAWwqB,CAAQ,EACpE,GAAI,CAAC3N,EAAS,OAEd6N,EAAW,QAAU7N,EACjBpX,GAAA,MAAAA,EAAQ,WAAYA,EAAO,WAAWoX,CAAO,EAC5CzM,EAAO,WAAWnM,EAAK4Y,CAAO,EAEnC,MAAM8I,EAAWuE,GAAYpF,EAAS,QAASiF,EAAY,EAC3D,OAAI,OAAO,KAAKpE,CAAQ,EAAE,OAAS,GACjCvV,EAAO,kBAAkByM,EAAS8I,CAAQ,EAExCb,EAAS,QAAQ,UAAY,IAC/B1U,EAAO,YAAYyM,CAAO,EAGrB,IAAM,CACPpX,GAAA,MAAAA,EAAQ,cAAeA,EAAO,cAAcoX,CAAO,EAClDzM,EAAO,cAAcnM,EAAK4Y,CAAO,EACtC6N,EAAW,QAAU,IACvB,CAEF,EAAG,CAACzmB,EAAKmM,EAAQ3K,EAAQ2f,CAAO,CAAC,EAEjC,MAAMuF,EAAiBT,GAAYjM,EAAO8L,EAAY,EAChDa,EAAYpc,EAAgBmc,CAAc,EAChD3a,EAAAA,UAAU,IAAM,CACV,CAAC0a,EAAW,SAAW,CAACta,GACxB,OAAO,KAAKua,CAAc,EAAE,OAAS,GACvCva,EAAO,kBAAkBsa,EAAW,QAASC,CAAc,CAG/D,EAAG,CAACva,EAAQwa,CAAS,CAAC,EAEtB,KAAM,CAAE,QAAA9D,GAAY7I,EACpBjO,EAAAA,UAAU,IAAM,CACV,CAAC0a,EAAW,SAAW,CAACta,IACxB0W,IAAY,GAAO1W,EAAO,YAAYsa,EAAW,OAAO,EACvDta,EAAO,YAAYsa,EAAW,OAAO,EAC5C,EAAG,CAACta,EAAQ0W,CAAO,CAAC,EAEpB,MAAM1C,EAAW5V,EAAgByb,GAAO,OAAS,GAAGvtB,EAAE,GAAG,IAAI,OAAOuhB,EAAMvhB,EAAE,IAAI,CAAC,EAAE,CAAC,EAC9EqqB,EAAcpX,EAAAA,OAAgC,EAAE,EACtD,SAAW,CAAE,KAAAkU,CAAA,IAAUoG,GACrBlD,EAAY,QAAQlD,CAAI,EAAI5F,EAAM4F,CAAI,EAGxC7T,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC0a,EAAW,SAAW,CAACta,EAAQ,OACpC,MAAMiT,EAA4B,CAAA,EAClC,SAAW,CAAE,IAAA/W,EAAK,KAAAuX,CAAA,IAAUoG,GAC1B5G,EAAO,KAAKjT,EAAO,iBAAiBsa,EAAW,QAASpe,EAAM7O,GAAiB,CAC7E,MAAMT,EAAK+pB,EAAY,QAAQlD,CAAI,EACnC,GAAI,OAAO7mB,GAAO,WAAY,CAC5B,MAAM2lB,EAAQllB,EACdT,GAAG2lB,GAAA,YAAAA,EAAO,SAASA,GAAA,YAAAA,EAAO,UAAUA,GAAA,YAAAA,EAAO,SAAUllB,EAAKA,CAAG,CAC/D,CACF,CAAC,CAAC,EAEJ,MAAO,IAAM4lB,EAAO,QAAQgE,GAASA,GAAO,CAE9C,EAAG,CAACjX,EAAQgU,EAAUgB,CAAO,CAAC,EAE9B,MAAMplB,EAAY6hB,EAAa,QAC/B,OAAO7hB,EAAY6qB,GAAAA,aAAa5M,EAAM,SAAUje,CAAS,EAAI,IAC/D,CAAC,ECjHY8qB,GAAUlG,EAAAA,KAAK,SAAiB3G,EAAqB,CAChE,KAAM,CAAE,OAAA1B,EAAQ,OAAArP,EAAQ,GAAGrM,GAASod,EAC9B,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBiQ,EAAYpb,EAAAA,OAAY,IAAI,EAE5Bqb,EAAYxc,EAAgB+N,CAAM,EAClC0O,EAAYzc,EAAgBtB,CAAM,EAClCge,EAAU1c,EAAgB3N,CAAI,EAEpCwhB,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAM9P,EAAMiM,GAAA,EACZ,GAAI,EAACjM,GAAA,MAAAA,EAAK,SAAS,OAGnB,IAAI6qB,EACJ,GAAIje,GAAUA,EAAO,OAAS,EAAG,CAC/B,MAAMzP,EAAMyP,EAAO,IAAK5P,GAAM,IAAIgD,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CAAC,EAEnD8tB,EAAQle,EAAO,CAAC,EAChBqO,EAAOrO,EAAOA,EAAO,OAAS,CAAC,GACjCke,EAAM,MAAQ7P,EAAK,KAAO6P,EAAM,MAAQ7P,EAAK,MAC/C9d,EAAI,KAAK,IAAI6C,EAAI,MAAM8qB,EAAM,IAAKA,EAAM,GAAG,CAAC,EAE9CD,EAAM1tB,CACR,SAAW8e,EAAQ,CACjB,MAAMra,EAAKqa,EAAO,GACZpa,EAAKoa,EAAO,GAClB4O,EAAM,CACJ,IAAI7qB,EAAI,MAAM4B,EAAG,IAAKA,EAAG,GAAG,EAC5B,IAAI5B,EAAI,MAAM6B,EAAG,IAAKD,EAAG,GAAG,EAC5B,IAAI5B,EAAI,MAAM6B,EAAG,IAAKA,EAAG,GAAG,EAC5B,IAAI7B,EAAI,MAAM4B,EAAG,IAAKC,EAAG,GAAG,EAC5B,IAAI7B,EAAI,MAAM4B,EAAG,IAAKA,EAAG,GAAG,CAAA,CAEhC,KAAO,CACLlG,GAAQ,uCAAuC,EAC/C,MACF,CAEA,MAAM0hB,EAAO,IAAIpd,EAAI,QAAQ6qB,EAAKtqB,CAAI,EACtC,OAAAkqB,EAAU,QAAUrN,EACpBtN,EAAO,WAAWnM,EAAK,CAAE,QAAS,gBAA0B,IAAKyZ,EAAM,KAAM,SAAU,EAEhF,IAAM,CACXtN,EAAO,cAAcnM,EAAK,CAAE,QAAS,gBAA0B,IAAKyZ,EAAM,KAAM,SAAU,EAC1FqN,EAAU,QAAU,IACtB,CAEF,EAAG,CAAC9mB,EAAKmM,EAAQ4a,EAAWC,EAAWC,CAAO,CAAC,EAExC,IACT,CAAC,EC/CYG,GAAmBzG,EAAAA,KAAK,SAA0B3G,EAA8B,CAC3F,KAAM,CAAE,SAAAsK,EAAU,QAAA9c,EAAS,KAAA6c,EAAO,GAAM,OAAAE,EAAQ,QAAAC,EAAS,SAAAtH,EAAU,GAAGtgB,CAAA,EAASod,EACzE,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBiQ,EAAYpb,EAAAA,OAAY,IAAI,EAG5B4X,EAAS5X,EAAAA,OAAO,CAAE,OAAA6Y,EAAQ,QAAAC,EAAS,SAAAtH,EAAU,EACnDoG,EAAO,QAAU,CAAE,OAAAiB,EAAQ,QAAAC,EAAS,SAAAtH,CAAA,EAEpC,MAAMmK,EAAa,OAAO7f,GAAY,SAAWA,EAAU,GACrDyf,EAAU1c,EAAgB3N,CAAI,EAGpCwhB,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAM9P,EAAMiM,GAAA,EACZ,GAAI,EAACjM,GAAA,MAAAA,EAAK,kBAAkB,OAG5ByqB,EAAU,QAAU,IAAIzqB,EAAI,iBAAiBmL,EAAS5K,CAAI,EAC1D,MAAM0qB,EAAMR,EAAU,QAEtB,OAAIlqB,EAAK,OAAS,OAAO0qB,EAAI,UAAa,YAAYA,EAAI,SAAS1qB,EAAK,KAAK,EACzE4K,GAAW,OAAO8f,EAAI,YAAe,YAAYA,EAAI,WAAW9f,CAAO,EACvE5K,EAAK,YAAc,OAAO0qB,EAAI,eAAkB,YAAYA,EAAI,cAAc1qB,EAAK,UAAU,EAG7F,OAAO0qB,EAAI,kBAAqB,aAClCA,EAAI,iBAAiB,OAAQ,IAAA,SAAM,OAAApsB,GAAAhD,EAAAorB,EAAO,SAAQ,SAAf,YAAApoB,EAAA,KAAAhD,GAAyB,EAC5DovB,EAAI,iBAAiB,QAAS,IAAA,SAAM,OAAApsB,GAAAhD,EAAAorB,EAAO,SAAQ,UAAf,YAAApoB,EAAA,KAAAhD,GAA0B,EAC9DovB,EAAI,iBAAiB,SAAU,IAAA,SAAM,OAAApsB,GAAAhD,EAAAorB,EAAO,SAAQ,WAAf,YAAApoB,EAAA,KAAAhD,GAA2B,GAG3D,IAAM,CACX,GAAI,CAAEiU,EAAO,sBAAsBnM,CAAG,CAAG,MAAQ,CAAe,CAChE8mB,EAAU,QAAU,IACtB,CAEF,EAAG,CAAC9mB,EAAKmM,EAAQkb,EAAYJ,CAAO,CAAC,EAGrClb,EAAAA,UAAU,IAAM,CACd,GAAI,GAAC/L,GAAO,CAACmM,GAAU,CAAC2a,EAAU,SAClC,GAAIzC,EACFlY,EAAO,qBAAqBnM,EAAK,CAAE,QAAS,gBAA0B,IAAK8mB,EAAU,QAAS,KAAM,YAAA,EAAgBxC,CAAQ,MAE5H,IAAI,CAAEnY,EAAO,sBAAsBnM,CAAG,CAAG,MAAQ,CAAe,CAGpE,EAAG,CAACA,EAAKmM,EAAQkY,EAAMC,EAAS,IAAKA,EAAS,IAAK+C,EAAYJ,CAAO,CAAC,EAEhE,IACT,CAAC,ECjCYM,GAAc5G,EAAAA,KAAK,SAAqB3G,EAAyB,CAC5E,KAAM,CAAE,OAAA7N,CAAA,EAAW0K,EAAA,EACbrV,EAAS0V,GAAA,EACT,CAAE,IAAAnW,EAAK,KAAAsjB,EAAO,GAAM,QAAA7lB,GAAYwb,EAEhCwN,EAAQ9b,EAAAA,OAA6B,IAAI,EAGzCub,EAAU,KAAK,UAAUzoB,GAAW,CAAA,CAAE,EAC5C4f,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACjS,EAAQ,OACb,MAAMpQ,EAAY,SAAS,cAAc,KAAK,EACxCiL,EAAKmF,EAAO,kBAAkB,CAAE,UAAApQ,EAAW,GAAGyC,EAAS,EAC7D,GAAI,CAACwI,GAAOA,EAAW,OAAQ,CACzB,OAAO,QAAY,KACrB,QAAQ,KAAK,8EAA8E,EAE7F,MACF,CACA,OAAAwgB,EAAM,QAAUxgB,EACT,IAAM,SACX,MAAMxN,GAAOtB,EAAAsvB,EAAM,UAAN,YAAAtvB,EAAuB,KACpCgD,EAAA1B,GAAA,YAAAA,EAAK,UAAL,MAAA0B,EAAA,KAAA1B,GACAguB,EAAM,QAAU,IAClB,CAEF,EAAG,CAACrb,EAAQ8a,CAAO,CAAC,EAGpBlb,EAAAA,UAAU,IAAM,OACd,GAAI,CAACI,GAAU,CAACqb,EAAM,QAAS,OAC/B,MAAMhuB,EAAOguB,EAAM,QAAgB,KACnCtvB,EAAAsB,GAAA,YAAAA,EAAK,UAAL,MAAAtB,EAAA,KAAAsB,EAAeuH,EACjB,EAAG,CAACoL,EAAQpL,EAAKkmB,CAAO,CAAC,EAGzB,MAAMQ,GAAejmB,GAAA,YAAAA,EAAQ,SAAU,KACvCuK,OAAAA,EAAAA,UAAU,IAAM,OACd,GAAI,CAACI,GAAU,CAACsb,GAAgB,CAACD,EAAM,QAAS,OAChD,GAAI,CAACnD,EAAM,CACTlY,EAAO,iBAAiBsb,CAAmB,EAC3C,MACF,CAEAtb,EAAO,gBAAgBsb,EAAqBD,EAAM,OAAO,EAEzD,MAAMhuB,EAAOiuB,GAAA,YAAAA,EAAsB,IACnC,IAAIC,EAAU,GACd,MAAMC,EAAQ,IAAM,OAClB,MAAMtsB,GAAMnD,EAAAsB,GAAA,YAAAA,EAAK,cAAL,YAAAtB,EAAA,KAAAsB,GACZ,GAAI,CAAC6B,EAAK,OACV,MAAM6B,EAAM,GAAG7B,EAAI,GAAG,IAAIA,EAAI,GAAG,GACjC,GAAI6B,IAAQwqB,EAAS,CACnBA,EAAUxqB,EACV,GAAI,CACFiP,EAAO,iBAAiBsb,CAAmB,EAC3Ctb,EAAO,gBAAgBsb,EAAqBD,EAAM,OAAQ,CAC5D,MAAQ,CAAe,CACzB,CACF,EAEMI,GAAU1vB,EAAAsB,GAAA,YAAAA,EAAK,cAAL,YAAAtB,EAAA,KAAAsB,GACZouB,IAASF,EAAU,GAAGE,EAAQ,GAAG,IAAIA,EAAQ,GAAG,IACpD,MAAM1mB,EAAK,YAAYymB,EAAO,GAAG,EACjC,MAAO,IAAM,CACX,cAAczmB,CAAE,EAChBiL,EAAO,iBAAiBsb,CAAmB,CAC7C,CAEF,EAAG,CAACtb,EAAQsb,EAAcpD,EAAMtjB,EAAKkmB,CAAO,CAAC,EAGtC,IACT,CAAC,EC3GYY,GAASpH,GAAoC,CACxD,YAAa,SACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,aAAazuB,EAAE,SAAUA,CAAC,EAC/C,aAAc,WACd,YAAa,CAAC,SAAU,OAAQ,kBAAmB,iBAAkB,WAAY,QAAS,SAAU,UAAW,QAAS,OAAQ,gBAAgB,EAEhJ,cAAe,CAAC,iBAAkB,cAAe,iBAAkB,SAAU,aAAc,uBAAwB,2BAA4B,oBAAqB,QAAQ,EAC5K,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,SAAU,KAAM,UAAA,CAAW,EAEpC,iBAAkB,GAElB,gBAAiB,QACnB,CAAC,EAGY0uB,GAAQtH,GAAmC,CACtD,YAAa,QACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,YAAYzuB,EAAE,QAASA,CAAC,EAC7C,aAAc,WACd,YAAa,CAAC,UAAW,SAAU,kBAAmB,SAAU,UAAW,QAAS,QAAQ,EAC5F,cAAe,CAAC,iBAAkB,QAAS,QAAQ,EAEnD,sBAAuB,GACvB,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,SAAU,KAAM,UAAA,CAAW,CAEtC,CAAC,EAGY2uB,GAAWvH,GAAsC,CAC5D,YAAa,WACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,eAAezuB,EAAE,KAAMA,CAAC,EAC7C,SAAU,OAEV,YAAa,CAAC,cAAe,eAAgB,gBAAiB,cAAe,gBAAiB,kBAAmB,QAAQ,EAEzH,cAAe,CAAC,iBAAkB,gBAAiB,iBAAkB,WAAY,YAAa,OAAQ,YAAa,QAAS,YAAa,gBAAiB,OAAQ,OAAO,EACzK,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,sBAAuB,KAAM,uBAAA,EACpC,CAAE,IAAK,qBAAsB,KAAM,sBAAA,EACnC,CAAE,IAAK,oBAAqB,KAAM,qBAAA,EAClC,CAAE,IAAK,gBAAiB,KAAM,iBAAA,CAAkB,CAEpD,CAAC,EAGY4uB,GAAUxH,GAAqC,CAC1D,YAAa,UACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,cAAczuB,EAAE,KAAMA,CAAC,EAC5C,SAAU,OACV,YAAa,CACX,cAAe,YAAa,eAC5B,gBAAiB,cAAe,cAChC,gBAAiB,kBAAmB,QAAA,EAEtC,cAAe,CACb,iBAAkB,gBAAiB,iBACnC,YAAa,YAAa,YAAa,OAAQ,OAAA,EAEjD,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,sBAAuB,KAAM,uBAAA,EACpC,CAAE,IAAK,qBAAsB,KAAM,sBAAA,EACnC,CAAE,IAAK,oBAAqB,KAAM,qBAAA,EAClC,CAAE,IAAK,gBAAiB,KAAM,iBAAA,CAAkB,CAEpD,CAAC,EAGY6uB,GAASzH,GAAoC,CACxD,YAAa,SACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,aAAazuB,EAAE,OAAQA,EAAE,OAAQA,CAAC,EACvD,aAAc,SACd,YAAa,CAAC,SAAU,cAAe,YAAa,eAAgB,gBAAiB,cAAe,cAAe,kBAAmB,QAAQ,EAG9I,cAAe,CAAC,gBAAiB,iBAAkB,YAAa,YAAa,OAAQ,OAAO,EAC5F,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,sBAAuB,KAAM,uBAAA,EACpC,CAAE,IAAK,qBAAsB,KAAM,sBAAA,EACnC,CAAE,IAAK,oBAAqB,KAAM,qBAAA,EAClC,CAAE,IAAK,gBAAiB,KAAM,iBAAA,CAAkB,CAEpD,CAAC,EAGY8uB,GAAY1H,GAAuC,CAC9D,YAAa,YACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,gBAAgBzuB,EAAE,OAAQA,CAAC,EAEhD,YAAa,CAAC,SAAU,cAAe,YAAa,eAAgB,gBAAiB,cAAe,cAAe,gBAAiB,kBAAmB,QAAQ,EAE/J,cAAe,CAAC,iBAAkB,YAAa,YAAa,YAAa,OAAQ,OAAO,EACxF,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,sBAAuB,KAAM,uBAAA,EACpC,CAAE,IAAK,qBAAsB,KAAM,sBAAA,EACnC,CAAE,IAAK,oBAAqB,KAAM,qBAAA,EAClC,CAAE,IAAK,gBAAiB,KAAM,iBAAA,CAAkB,CAEpD,CAAC,EAGY+uB,GAAc3H,GAAyC,CAClE,YAAa,cACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,EAAE,KAAMA,EAAE,cAAeA,CAAC,EACjE,SAAU,OAEV,YAAa,CAAC,gBAAiB,cAAe,eAAgB,gBAAiB,cAAe,kBAAmB,QAAQ,EAEzH,cAAe,CAAC,iBAAkB,gBAAiB,YAAa,OAAQ,OAAO,EAE/E,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,CAAe,CAE9C,CAAC,EAGYgvB,GAAQ5H,GAAmC,CACtD,YAAa,QACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,YAAYzuB,EAAE,KAAMA,EAAE,SAAUA,CAAC,EACtD,SAAU,OAEV,YAAa,CAAC,WAAY,eAAgB,iBAAkB,gBAAiB,kBAAmB,kBAAmB,QAAQ,EAE3H,cAAe,CAAC,gBAAgB,EAEhC,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,CAAe,CAE9C,CAAC,EAGYivB,GAAgB7H,GAA2C,CACtE,YAAa,gBACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,oBAAoBzuB,EAAE,OAAQA,CAAC,EAEpD,YAAa,CACX,SAAU,UAAW,MAAO,WAC5B,oBAAqB,oBACrB,kBAAmB,QAAA,EAIrB,cAAe,CAAC,iBAAkB,OAAQ,MAAO,WAAY,WAAY,SAAS,EAElF,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,CAAe,CAE9C,CAAC,EAGYkvB,GAAc9H,GAAyC,CAClE,YAAa,cACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,EAAE,MAAOA,CAAC,EACjD,aAAc,QACd,YAAa,CACX,MAAO,OAAQ,SAAU,QAAS,WAAY,SAC9C,UAAW,WAAY,oBAAqB,oBAC5C,kBAAmB,QAAA,EAIrB,cAAe,CAAC,QAAS,iBAAkB,OAAQ,MAAO,WAAY,UAAU,EAEhF,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,gBAAiB,KAAM,oBAAA,EAC9B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,EACxB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,SAAU,KAAM,UAAA,EACvB,CAAE,IAAK,aAAc,KAAM,cAAA,CAAe,CAE9C,CAAC,EAGYmvB,GAAkB/H,GAA6C,CAC1E,YAAa,kBACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,sBAAsBzuB,EAAE,OAAQA,CAAC,EACtD,SAAU,SACV,YAAa,CAAC,QAAS,QAAS,OAAQ,iBAAiB,EAEzD,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,CAAa,CAE1C,CAAC,EAQYovB,GAAShI,GAAoC,CACxD,YAAa,SACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,aAAazuB,EAAE,KAAMA,CAAC,EAC3C,YAAa,CAAC,OAAQ,SAAU,YAAa,cAAe,QAAS,WAAY,cAAe,gBAAiB,cAAc,EAC/H,UAAW,EACb,CAAC,EAKYqvB,GAAOjI,GAAkC,CACpD,YAAa,OACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,WAAWzuB,EAAE,IAAKA,EAAE,KAAMA,CAAC,EAChD,YAAa,CAAC,MAAO,OAAQ,SAAU,cAAe,YAAa,mBAAoB,gBAAiB,QAAQ,EAChH,UAAW,EACb,CAAC,EAKYsvB,GAAelI,GAA0C,CACpE,YAAa,eACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,mBAAmBzuB,EAAE,OAAeA,EAAE,OAAQA,EAAE,OAAQA,EAAE,aAAa,EAC5F,cAAe,CAAC,SAAU,SAAU,SAAU,eAAe,EAC7D,UAAW,EACb,CAAC,EAMYuvB,GAAUnI,GAAqC,CAC1D,YAAa,UACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,cAAczuB,EAAE,SAAUA,CAAC,EAChD,aAAc,WACd,YAAa,CAAC,OAAQ,UAAU,EAEhC,cAAe,CAAC,UAAW,UAAW,SAAS,CACjD,CAAC,EASYwvB,GAAWpI,GAAsC,CAC5D,YAAa,WACb,QAAS,CAACqH,EAAGzuB,IAAMyuB,EAAE,eAAezuB,EAAE,SAAUA,EAAE,OAAQA,CAAC,EAC3D,aAAc,WACd,YAAa,CAAC,SAAU,YAAa,aAAa,EAClD,cAAe,CAAC,QAAS,OAAQ,iBAAiB,EAClD,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,eAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,UAAW,KAAM,WAAA,CAAY,EAEtC,iBAAkB,EACpB,CAAC,EChWYyvB,GAAmBC,EAAM,KAAK,SAA0B/O,EAA8B,CACjG,KAAM,CAAE,IAAAjZ,EAAK,QAAAioB,EAAS,cAAAC,EAAe,SAAAC,EAAU,UAAAzL,EAAW,MAAAC,EAAO,SAAArS,GAAa2O,EACxE,CAAE,OAAA7N,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBkS,EAAelS,EAAAA,OAAuB,IAAI,EAGhDK,OAAAA,EAAAA,UAAU,IAAM,SACd,GAAI,CAACI,GAAU,CAACyR,EAAa,QAAS,OACtC,MAAMhhB,EAAgC,CAAE,UAAWghB,EAAa,OAAA,EAC5DoL,IAAY,SAAWpsB,EAAK,QAAUosB,GACtCC,IAAkB,SAAWrsB,EAAK,cAAgBqsB,GAEtD,MAAMhpB,EAASkM,EAAO,kBAAkBvP,CAAI,EAC5C,GAAI,CAAAqD,EAAO,OAIX,IAHAkpB,EAAO,QAAWlpB,EAAe,IAG7Bc,EACF,GAAI,EAAE7F,GAAAhD,EAAAixB,EAAO,SAAQ,SAAf,MAAAjuB,EAAA,KAAAhD,EAAwB6I,GAAMmoB,GAAA,MAAAA,GAAc,OAASzwB,EAAG,CAAEb,EAAU,0BAA2Ba,CAAC,CAAG,CAG3G,MAAO,IAAM,UAAEyC,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,UAAhB,MAAAgD,EAAA,KAAAhD,GAA6BixB,EAAO,QAAU,IAAM,EAErE,EAAG,CAAChd,EAAQ6c,EAASC,CAAa,CAAC,EAGnCld,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACpoB,GACxB,GAAI,EAAE7F,GAAAhD,EAAAixB,EAAO,SAAQ,SAAf,MAAAjuB,EAAA,KAAAhD,EAAwB6I,GAAMmoB,GAAA,MAAAA,GAAc,OAASzwB,EAAG,CAAEb,EAAU,0BAA2Ba,CAAC,CAAG,CAE3G,EAAG,CAACsI,CAAG,CAAC,SAGL,MAAA,CAAI,IAAK6c,EAAc,UAAAH,EAAsB,MAAAC,EAC3C,SAAArS,EACH,CAEJ,CAAC,ECsEY+d,GAAoBrG,GAA+C,CAC9E,YAAa,oBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,wBAAwBzuB,CAAC,EAC9C,YAAa,CAAC,SAAU,SAAU,MAAM,EACxC,cAAe,CAAC,eAAgB,mBAAmB,CACrD,CAAC,EAEYgwB,GAAsBtG,GAAiD,CAClF,YAAa,sBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,0BAA0BzuB,CAAC,EAChD,YAAa,CAAC,SAAU,QAAQ,CAClC,CAAC,EAEYiwB,GAAevG,GAA0C,CACpE,YAAa,eACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,mBAAmBzuB,CAAC,EACzC,YAAa,CAAC,SAAU,SAAU,MAAM,CAC1C,CAAC,EAEYkwB,GAAqBxG,GAAgD,CAChF,YAAa,qBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,yBAAyBzuB,CAAC,EAC/C,YAAa,CAAC,SAAU,SAAU,MAAM,EACxC,cAAe,CAAC,eAAgB,UAAW,QAAQ,EACnD,OAAQ,CACN,CAAE,IAAK,cAAe,KAAM,eAAA,EAC5B,CAAE,IAAK,eAAgB,KAAM,gBAAA,EAC7B,CAAE,IAAK,SAAU,KAAM,UAAA,CAAW,CAEtC,CAAC,EAEYmwB,GAAiBzG,GAA4C,CACxE,YAAa,iBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,qBAAqBzuB,CAAC,EAC3C,YAAa,CAAC,SAAU,SAAU,iBAAiB,EACnD,cAAe,CAAC,OAAQ,WAAY,cAAc,CACpD,CAAC,EAEYowB,GAAmB1G,GAA8C,CAC5E,YAAa,mBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,uBAAuBzuB,CAAC,EAC7C,YAAa,CAAC,SAAU,SAAU,YAAY,CAChD,CAAC,EAEYqwB,GAAqB3G,GAAgD,CAChF,YAAa,qBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,yBAAyBzuB,CAAC,EAC/C,YAAa,CACX,SAAU,SAAU,qBAAsB,eAC1C,gBAAiB,aAAc,WAAY,eAAgB,iBAAA,EAE7D,cAAe,CAAC,gBAAgB,EAChC,OAAQ,CACN,CAAE,IAAK,kBAAmB,KAAM,mBAAA,EAChC,CAAE,IAAK,gBAAiB,KAAM,iBAAA,CAAkB,CAEpD,CAAC,EAEYswB,GAAkB5G,GAA6C,CAC1E,YAAa,kBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,sBAAsBzuB,CAAC,EAC5C,YAAa,CAAC,SAAU,QAAQ,CAClC,CAAC,EAEYuwB,GAAc7G,GAAyC,CAClE,YAAa,cACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,CAAC,EACxC,YAAa,CAAC,SAAU,QAAQ,CAClC,CAAC,EAEYwwB,GAAkB9G,GAA6C,CAC1E,YAAa,kBACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,sBAAsBzuB,CAAC,EAC5C,YAAa,CAAC,SAAU,QAAQ,EAChC,cAAe,CAAC,SAAU,UAAW,iBAAkB,gBAAiB,kBAAmB,cAAc,EACzG,OAAQ,CACN,CAAE,IAAK,SAAU,KAAM,QAAA,EACvB,CAAE,IAAK,UAAW,KAAM,SAAA,CAAU,CAEtC,CAAC,EAEYywB,GAAkBJ,GAElBK,GAAchH,GAAyC,CAClE,YAAa,cACb,QAAS,CAAC+E,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,CAAC,EACxC,YAAa,CAAC,SAAU,QAAQ,CAClC,CAAC,ECnMK0sB,GAAmD,CAAC,SAAU,QAAQ,EAE5E,SAASiE,GAAgBhQ,EAAoD,CAC3E,MAAMvb,EAA+B,CAAA,EACrC,UAAWvB,KAAO6oB,GAAiB,CACjC,MAAMruB,EAAQsiB,EAAM9c,CAAG,EACIxF,GAAU,OAAM+G,EAAIvB,CAAG,EAAIxF,EACxD,CACA,OAAO+G,CACT,CAEO,MAAMwrB,GAAgBtJ,EAAAA,KAAK,SAAuB3G,EAA2B,CAClF,KAAM,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBqT,EAAaxe,EAAAA,OAA6B,IAAI,EAC9CmV,EAAWnV,EAAAA,OAAOsO,CAAK,EAC7B6G,EAAS,QAAU7G,EAEnB,MAAM4D,EAAelS,EAAAA,OAA8B,IAAI,EACnD,CAACkS,EAAa,SAAW,OAAO,SAAa,MAC/CA,EAAa,QAAU,SAAS,cAAc,KAAK,GAGrD,MAAMuD,EAAU5W,EAAgBwb,GAAgB,OAAS/L,EAAM5a,CAAC,CAAC,CAAC,EAElEgf,EAAAA,gBAAgB,IAAM,CACpB,MAAMriB,EAAY6hB,EAAa,QAC/B,GAAI,CAAC5d,GAAO,CAACmM,GAAU,CAACpQ,EAAW,OAEnC,MAAM6B,EAAWosB,GAAgBnJ,EAAS,OAAO,EAC3CjiB,EAAUuN,EAAO,oBAAoB,IAAMpQ,EAAW6B,CAAQ,EACpE,GAAKgB,EAEL,OAAAsrB,EAAW,QAAUtrB,EACrBuN,EAAO,WAAWnM,EAAKpB,CAAO,EAC1BiiB,EAAS,QAAQ,UAAY,IAAO1U,EAAO,YAAYvN,CAAO,EAE3D,IAAM,CACXuN,EAAO,cAAcnM,EAAKpB,CAAO,EACjCsrB,EAAW,QAAU,IACvB,CAEF,EAAG,CAAClqB,EAAKmM,EAAQgV,CAAO,CAAC,EAEzB,KAAM,CAAE,QAAA0B,GAAY7I,EACpBoE,EAAAA,gBAAgB,IAAM,CAChB,CAAC8L,EAAW,SAAW,CAAC/d,IACxB0W,IAAY,GAAO1W,EAAO,YAAY+d,EAAW,OAAO,EACvD/d,EAAO,YAAY+d,EAAW,OAAO,EAC5C,EAAG,CAAC/d,EAAQ0W,CAAO,CAAC,EAEpB,MAAM9mB,EAAY6hB,EAAa,QAC/B,OAAO7hB,EAAY6qB,GAAAA,aAAa5M,EAAM,SAAUje,CAAS,EAAI,IAC/D,CAAC,EC9CYouB,GAAexJ,EAAAA,KAAK,SAAsB3G,EAA0B,CAC/E,KAAM,CAAE,YAAAoQ,EAAa,gBAAAC,EAAiB,OAAAC,EAAQ,KAAAC,EAAM,YAAAC,GAAgBxQ,EAC9D,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAGzByV,EAAU,GAAGiJ,GAAe,EAAE,IAAIC,GAAmB,EAAE,IAAI,KAAK,UAAUG,GAAe,EAAE,CAAC,GAClGpM,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAClCwtB,IAAgB,SAAWxtB,EAAK,YAAcwtB,GAC9CC,IAAoB,SAAWztB,EAAK,gBAAkBytB,GACtDG,IAAgB,SAAW5tB,EAAK,YAAc4tB,GAClD,MAAMvqB,EAASkM,EAAO,mBAAmBvP,CAAI,EAC7C,GAAKqD,EACL,OAAAkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EACpB,IAAM,CACXkM,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,IACnB,CAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzB,MAAMsJ,EAAYH,GAAA,YAAAA,EAAQ,KAAK,KAC/Bve,OAAAA,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACmB,GACxB,GAAI,EAAEpvB,GAAAhD,EAAAixB,EAAO,SAAQ,YAAf,MAAAjuB,EAAA,KAAAhD,EAA2BoyB,EAAS,OAAS7xB,EAAG,CAAEb,EAAU,yBAA0Ba,CAAC,CAAG,CAElG,EAAG,CAACgyB,CAAS,CAAC,EAGd1e,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAWoB,IAAS,QAChC,GAAI,EAAErvB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyBqyB,EAAO,OAAS9xB,EAAG,CAAEb,EAAU,uBAAwBa,CAAC,CAAG,CAC5F,EAAG,CAAC8xB,CAAI,CAAC,EAEF,IACT,CAAC,EChCYG,GAAe/J,EAAAA,KAAK,SAAsB3G,EAA0B,CAC/E,KAAM,CAAE,MAAA2Q,EAAO,IAAAC,EAAK,cAAAC,EAAe,cAAAC,EAAe,KAAA9iB,EAAM,QAAA6a,EAAS,QAAAkI,EAAS,aAAAC,EAAc,WAAAC,EAAY,OAAAC,EAAQ,QAAA1P,EAAS,QAAAC,GAAYzB,EAC3H,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAGzByV,EAAU,GAAGwJ,GAAS,EAAE,IAAIC,GAAO,EAAE,IAAIC,GAAiB,EAAE,IAAIC,GAAiB,EAAE,IAAIjI,GAAW,EAAE,IAAIkI,GAAW,EAAE,IAAIC,GAAgB,EAAE,IAAIC,GAAc,EAAE,IAAIC,GAAU,EAAE,IAAI1P,GAAW,EAAE,IAAIC,GAAW,EAAE,GAEvN2C,EAAAA,gBAAgB,IAAM,SACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAClC+tB,IAAU,SAAW/tB,EAAK,MAAQ+tB,GAClCC,IAAQ,SAAWhuB,EAAK,IAAMguB,GAC9BC,IAAkB,SAAWjuB,EAAK,cAAgBiuB,GAClDC,IAAkB,SAAWluB,EAAK,cAAgBkuB,GAClDjI,IAAY,SAAWjmB,EAAK,QAAUimB,GACtCkI,IAAY,SAAWnuB,EAAK,QAAUmuB,GACtCC,IAAiB,SAAWpuB,EAAK,aAAeouB,GAChDC,IAAe,SAAWruB,EAAK,WAAaquB,GAC5CC,IAAW,SAAWtuB,EAAK,OAASsuB,GACpC1P,IAAY,SAAW5e,EAAK,QAAU4e,GACtCC,IAAY,SAAW7e,EAAK,QAAU6e,GAE1C,MAAMxb,EAASkM,EAAO,mBAAmBvP,CAAI,EAC7C,GAAKqD,EAKL,IAJAkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EAGvB+H,GAAQmhB,EAAO,QACjB,GAAI,EAAEjuB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,OAASvP,EAAG,CAAEb,EAAU,uBAAwBa,CAAC,CAAG,CAG5F,MAAO,IAAM,CACX0T,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,IACnB,EAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzB,MAAMgK,EAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAC9C+D,OAAAA,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,GACxB,GAAI,EAAE9M,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,MAAQ,CAAa,CAC7D,EAAG,CAACmjB,CAAO,CAAC,EAEL,IACT,CAAC,ECmBKC,GAAmE,CACvE,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,CAC5B,EAEaC,GAAY1K,EAAAA,KAAK,SAAmB3G,EAAuB,CACtE,KAAM,CACJ,OAAAsR,EAAQ,MAAA5N,EAAO,MAAAiN,EAAO,IAAAC,EAAK,OAAAW,EAAQ,SAAAC,EAAU,cAAAX,EAAe,cAAAC,EAC5D,aAAAE,EAAc,8BAAAS,EAA+B,WAAAR,EAAY,SAAAS,EAAU,UAAAC,EAAW,WAAAC,EAC9E,iBAAAC,EAAkB,YAAAC,EAAa,MAAAC,EAAO,UAAAC,EACtC,QAAAnJ,EAAS,QAAAkI,EAAS,QAAAvP,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,KAAAljB,EAAM,cAAAikB,CAAA,EAChDjS,EACE,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAEzBoX,EAAclJ,GAAU,CAAE,QAASI,EAAM,QAAS,WAAYA,EAAM,WAAY,aAAcA,EAAM,aAAc,YAAaA,EAAM,YAAa,EAClJ8D,EAAalE,GAAUI,EAAM,OAAO,EACpCkS,EAAmBtS,GAAUqS,CAAa,EAG1C9K,EAAU,CACdmK,EAAQX,EAAOC,EAAKW,EAAQC,EAAUX,EAAeC,EACrDE,EAAcS,EAA+BR,EAAYS,EAAUC,EAAWC,EAC9EC,EAAkBE,EAAOC,CAAA,EACzB,IAAIttB,GAAKA,GAAK,EAAE,EAAE,KAAK,GAAG,EAE5B0f,EAAAA,gBAAgB,IAAM,aACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAChCuvB,EAAM,CAAC/sB,GAAWV,IAAe,CAAMA,IAAM,SAAW9B,EAAKwC,EAAC,EAAIV,EAAG,EAC3EytB,EAAI,SAAUb,CAAM,EAAGa,EAAI,QAASzO,CAAK,EACzCyO,EAAI,QAASxB,CAAK,EAAGwB,EAAI,MAAOvB,CAAG,EAAGuB,EAAI,SAAUZ,CAAM,EAAGY,EAAI,WAAYX,CAAQ,EACrFW,EAAI,gBAAiBtB,CAAa,EAAGsB,EAAI,gBAAiBrB,CAAa,EACvEqB,EAAI,eAAgBnB,CAAY,EAAGmB,EAAI,gCAAiCV,CAA6B,EACrGU,EAAI,aAAclB,CAAU,EAAGkB,EAAI,WAAYT,CAAQ,EACvDS,EAAI,YAAaR,CAAS,EAAGQ,EAAI,aAAcP,CAAU,EACzDO,EAAI,mBAAoBN,CAAgB,EAAGM,EAAI,cAAeL,CAAW,EACzEK,EAAI,QAASJ,CAAK,EAAGI,EAAI,YAAaH,CAAS,EAE/CG,EAAI,UAAWtJ,CAAO,EAAGsJ,EAAI,UAAWpB,CAAO,EAC/CoB,EAAI,UAAW3Q,CAAO,EAAG2Q,EAAI,UAAW1Q,CAAO,EAAG0Q,EAAI,SAAUjB,CAAM,EAEtE,MAAMjrB,EAASkM,EAAO,gBAAgBvP,CAAI,EAC1C,GAAI,CAACqD,EAAQ,OACbkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EAG3B,MAAMzG,EAAM2vB,EAAO,QACbiD,EAAiE,CAAA,EACvE,GAAI5yB,GAAO,OAAOA,EAAI,kBAAqB,WACzC,SAAW,CAAE,IAAA6O,GAAK,KAAAuX,CAAA,IAAUwL,GAAc,CACxC,MAAMryB,EAAMN,IAAsB,CAChC,MAAMwB,GAAI6oB,EAAY,QAAQlD,CAAwC,EAClE,OAAO3lB,IAAM,YAAYA,GAAExB,EAAC,CAClC,EACA,GAAI,CAAEe,EAAI,iBAAiB6O,GAAKtP,CAAE,EAAGqzB,EAAM,KAAK,CAAE,IAAA/jB,GAAK,GAAAtP,CAAA,CAAI,CAAG,MAAQ,CAAe,CACvF,CAIF,GAAIiP,GAAQmhB,EAAO,QACjB,GAAI,EAAEjuB,IAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,GAAA,KAAAhD,EAAyB8P,EAAMkkB,EAAiB,QAAU,OAASzzB,GAAG,CAAEb,EAAU,oBAAqBa,EAAC,CAAG,CAInH,OAAA8C,GAAAuiB,EAAW,UAAX,MAAAviB,GAAA,KAAAuiB,EAAqBqL,EAAO,SAErB,IAAM,QACX,SAAW,CAAE,IAAA9gB,EAAK,GAAAtP,CAAA,IAAQqzB,EACxB,GAAI,EAAEl0B,GAAAsB,EAAI,sBAAJ,MAAAtB,GAAA,KAAAsB,EAA0B6O,EAAKtP,EAAK,MAAQ,CAAe,CAEnEoT,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,IACnB,CAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzB,MAAMgK,EAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAC9C+D,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,GACxB,GAAI,EAAE9M,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAMkkB,EAAiB,QAAU,MAAQ,CAAa,CAEvF,EAAG,CAACf,CAAO,CAAC,EAGZ,MAAMkB,EAAW3O,EAAQ,KAAK,UAAUA,CAAK,EAAI,GACjD3R,OAAAA,EAAAA,UAAU,IAAM,aACd,GAAI,GAACod,EAAO,SAAW,CAACzL,GACxB,GAAI,EACFxiB,GAAAhD,EAAAixB,EAAO,SAAQ,kBAAf,MAAAjuB,EAAA,KAAAhD,EAAiCwlB,IACjCliB,GAAAD,EAAA4tB,EAAO,SAAQ,aAAf,MAAA3tB,EAAA,KAAAD,EACF,MAAQ,CAAa,CAEvB,EAAG,CAAC8wB,CAAQ,CAAC,EAGbtgB,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAWtG,IAAY,OAAW,GAAI,EAAE3nB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B2qB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9I9W,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW4B,IAAY,OAAW,GAAI,EAAE7vB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B6yB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9Ihf,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW+B,IAAW,OAAW,GAAI,EAAEhwB,GAAAhD,EAAAixB,EAAO,SAAQ,YAAf,MAAAjuB,EAAA,KAAAhD,EAA2BgzB,EAAS,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAM,CAAC,EAC1Inf,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW3N,IAAY,OAAW,GAAI,EAAEtgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BsjB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9IzP,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW1N,IAAY,OAAW,GAAI,EAAEvgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BujB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAEvI,IACT,CAAC,ECvKY6Q,GAAW3L,EAAAA,KAAK,SAAkB3G,EAAsB,CACnE,KAAM,CAAE,UAAA5S,EAAW,QAAAoU,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,QAAAqB,EAAS,QAAAC,EAAS,QAAAC,EAAS,WAAAC,EAAY,kBAAAC,EAAmB,QAAA9J,EAAS,KAAA7a,CAAA,EAASgS,EAEnH4S,EAAW5S,EAAM,UAAY,GAC7B,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAKzBmhB,EAAejT,GAAUxS,CAAS,EAClC0lB,EAAqBphB,EAAAA,OAA0F,IAAI,EACpHohB,EAAmB,UACtBA,EAAmB,QAAU,CAACC,EAAYtsB,IAAUosB,EAAa,QAAQE,EAAYtsB,CAAK,GAE5F,MAAMusB,EAAkBF,EAAmB,QAIrCG,EAAoBvhB,EAAAA,OAAsB,IAAI,EAC9Cyf,EAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAGxCmZ,EAAU,GAAG3F,GAAW,EAAE,IAAIC,GAAW,EAAE,IAAIyP,GAAU,EAAE,IAAIqB,GAAW,EAAE,IAAIC,GAAW,EAAE,KAAIC,GAAA,YAAAA,EAAS,KAAK,OAAQ,EAAE,IAAIC,GAAc,EAAE,IAAIC,GAAqB,EAAE,IAAIC,CAAQ,IAAI/J,GAAW,EAAE,GAE3MzE,OAAAA,EAAAA,gBAAgB,IAAM,SACpB,GAAI,CAACpe,GAAO,CAACmM,GAAU,CAAC6gB,EAAiB,OAEzC,MAAMpwB,EAAgC,CAAE,SAAAgwB,CAAA,EACpCpR,IAAY,SAAW5e,EAAK,QAAU4e,GACtCC,IAAY,SAAW7e,EAAK,QAAU6e,GACtCyP,IAAW,SAAWtuB,EAAK,OAASsuB,GACpCqB,IAAY,SAAW3vB,EAAK,QAAU2vB,GACtCC,IAAY,SAAW5vB,EAAK,QAAU4vB,GACtCC,IAAY,SAAW7vB,EAAK,QAAU6vB,GACtCC,IAAe,SAAW9vB,EAAK,WAAa8vB,GAC5CC,IAAsB,SAAW/vB,EAAK,kBAAoB+vB,GAC1D9J,IAAY,SAAWjmB,EAAK,QAAUimB,GAE1C,MAAM5iB,EAASkM,EAAO,eAAe,CAAE,UAAW6gB,EAAiB,GAAGpwB,EAAM,EAC5E,GAAKqD,EAKL,IAJAkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EAGvB+H,GAAQmhB,EAAO,QACjB,GAAI,EACFjuB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,GACzBilB,EAAkB,QAAU9B,CAC9B,OAAS1yB,EAAG,CAAEb,EAAU,mBAAoBa,CAAC,CAAG,CAGlD,MAAO,IAAM,CACX0T,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,KACjB8D,EAAkB,QAAU,IAC9B,EAEF,EAAG,CAACjtB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzBpV,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,IACpBilB,EAAkB,UAAY9B,EAClC,GAAI,EACFjwB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,GACzBilB,EAAkB,QAAU9B,CAC9B,MAAQ,CAAa,CACvB,EAAG,CAACA,CAAO,CAAC,EAEL,IACT,CAAC,EC9CKC,GAAwE,CAC5E,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,CAC5B,EAEa8B,GAAiBvM,EAAAA,KAAK,SAAwB3G,EAA4B,CACrF,KAAM,CAAE,OAAAuR,EAAQ,QAAA4B,EAAS,MAAAzP,EAAO,MAAAiN,EAAO,IAAAC,EAAK,cAAAC,EAAe,cAAAC,EAAe,QAAAjI,EAAS,QAAAkI,EAAS,QAAAvP,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,aAAAF,EAAc,WAAAC,EAAY,SAAAS,EAAU,UAAAC,EAAW,WAAAC,EAAY,KAAA5jB,GAASgS,EACpL,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAGzBoX,EAAclJ,GAAU,CAAE,QAASI,EAAM,QAAS,WAAYA,EAAM,WAAY,aAAcA,EAAM,aAAc,YAAaA,EAAM,YAAa,EAGlJqS,EAAW3O,EAAQ,KAAK,UAAUA,CAAK,EAAI,GAC3CyD,EAAU,GAAGoK,GAAU,EAAE,IAAI4B,GAAW,EAAE,IAAIxC,GAAS,EAAE,IAAIC,GAAO,EAAE,IAAIC,GAAiB,EAAE,IAAIC,GAAiB,EAAE,IAAIjI,GAAW,EAAE,IAAIkI,GAAW,EAAE,IAAIvP,GAAW,EAAE,IAAIC,GAAW,EAAE,IAAIyP,GAAU,EAAE,IAAIF,GAAgB,EAAE,IAAIC,GAAc,EAAE,IAAIS,GAAY,EAAE,IAAIC,GAAa,EAAE,IAAIC,GAAc,EAAE,IAAIS,CAAQ,GAE7TjO,EAAAA,gBAAgB,IAAM,SACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAClC2uB,IAAW,SAAW3uB,EAAK,OAAS2uB,GACpC4B,IAAY,SAAWvwB,EAAK,QAAUuwB,GACtCzP,IAAU,SAAW9gB,EAAK,MAAQ8gB,GAClCiN,IAAU,SAAW/tB,EAAK,MAAQ+tB,GAClCC,IAAQ,SAAWhuB,EAAK,IAAMguB,GAC9BC,IAAkB,SAAWjuB,EAAK,cAAgBiuB,GAClDC,IAAkB,SAAWluB,EAAK,cAAgBkuB,GAClDjI,IAAY,SAAWjmB,EAAK,QAAUimB,GACtCkI,IAAY,SAAWnuB,EAAK,QAAUmuB,GACtCvP,IAAY,SAAW5e,EAAK,QAAU4e,GACtCC,IAAY,SAAW7e,EAAK,QAAU6e,GACtCyP,IAAW,SAAWtuB,EAAK,OAASsuB,GACpCF,IAAiB,SAAWpuB,EAAK,aAAeouB,GAChDC,IAAe,SAAWruB,EAAK,WAAaquB,GAC5CS,IAAa,SAAW9uB,EAAK,SAAW8uB,GACxCC,IAAc,SAAW/uB,EAAK,UAAY+uB,GAC1CC,IAAe,SAAWhvB,EAAK,WAAagvB,GAEhD,MAAM3rB,EAASkM,EAAO,qBAAqBvP,CAAI,EAC/C,GAAI,CAACqD,EAAQ,OACbkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EAG3B,MAAMzG,EAAM2vB,EAAO,QACbiD,EAAsE,CAAA,EAC5E,GAAI5yB,GAAO,OAAOA,EAAI,kBAAqB,WACzC,SAAW,CAAE,IAAA6O,EAAK,KAAAuX,CAAA,IAAUwL,GAAc,CACxC,MAAMryB,EAAMN,GAA2B,CACrC,MAAMwB,EAAI6oB,EAAY,QAAQlD,CAAwC,EAClE,OAAO3lB,GAAM,YAAYA,EAAExB,CAAC,CAClC,EACA,GAAI,CAAEe,EAAI,iBAAiB6O,EAAKtP,CAAE,EAAGqzB,EAAM,KAAK,CAAE,IAAA/jB,EAAK,GAAAtP,CAAA,CAAI,CAAG,MAAQ,CAAe,CACvF,CAGF,GAAIiP,GAAQmhB,EAAO,QACjB,GAAI,EAAEjuB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,OAASvP,EAAG,CAAEb,EAAU,yBAA0Ba,CAAC,CAAG,CAG9F,MAAO,IAAM,OACX,SAAW,CAAE,IAAA4P,EAAK,GAAAtP,CAAA,IAAQqzB,EACxB,GAAI,EAAEl0B,EAAAsB,EAAI,sBAAJ,MAAAtB,EAAA,KAAAsB,EAA0B6O,EAAKtP,EAAK,MAAQ,CAAe,CAEnEoT,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,IACnB,CAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzB,MAAMgK,EAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAC9C+D,OAAAA,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,GACxB,GAAI,EAAE9M,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,MAAQ,CAAa,CAC7D,EAAG,CAACmjB,CAAO,CAAC,EAEL,IACT,CAAC,ECxGYiC,GAAkBzM,EAAAA,KAAK,SAAyB3G,EAA6B,CACxF,KAAM,CAAE,OAAAuR,EAAQ,MAAA7N,EAAO,MAAAiN,EAAO,IAAAC,EAAK,cAAAC,EAAe,cAAAC,EAAe,QAAAjI,EAAS,QAAAkI,EAAS,QAAAvP,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,aAAAF,EAAc,WAAAC,EAAY,SAAAS,EAAU,UAAAC,EAAW,WAAAC,EAAY,KAAA5jB,GAASgS,EAC3K,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAEzB2gB,EAAW3O,EAAQ,KAAK,UAAUA,CAAK,EAAI,GAC3CyD,EAAU,GAAGoK,GAAU,EAAE,IAAIZ,GAAS,EAAE,IAAIC,GAAO,EAAE,IAAIC,GAAiB,EAAE,IAAIC,GAAiB,EAAE,IAAIjI,GAAW,EAAE,IAAIkI,GAAW,EAAE,IAAIvP,GAAW,EAAE,IAAIC,GAAW,EAAE,IAAIyP,GAAU,EAAE,IAAIF,GAAgB,EAAE,IAAIC,GAAc,EAAE,IAAIS,GAAY,EAAE,IAAIC,GAAa,EAAE,IAAIC,GAAc,EAAE,IAAIS,CAAQ,GAE5SjO,EAAAA,gBAAgB,IAAM,SACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAClC2uB,IAAW,SAAW3uB,EAAK,OAAS2uB,GACpC7N,IAAU,SAAW9gB,EAAK,MAAQ8gB,GAClCiN,IAAU,SAAW/tB,EAAK,MAAQ+tB,GAClCC,IAAQ,SAAWhuB,EAAK,IAAMguB,GAC9BC,IAAkB,SAAWjuB,EAAK,cAAgBiuB,GAClDC,IAAkB,SAAWluB,EAAK,cAAgBkuB,GAClDjI,IAAY,SAAWjmB,EAAK,QAAUimB,GACtCkI,IAAY,SAAWnuB,EAAK,QAAUmuB,GACtCvP,IAAY,SAAW5e,EAAK,QAAU4e,GACtCC,IAAY,SAAW7e,EAAK,QAAU6e,GACtCyP,IAAW,SAAWtuB,EAAK,OAASsuB,GACpCF,IAAiB,SAAWpuB,EAAK,aAAeouB,GAChDC,IAAe,SAAWruB,EAAK,WAAaquB,GAC5CS,IAAa,SAAW9uB,EAAK,SAAW8uB,GACxCC,IAAc,SAAW/uB,EAAK,UAAY+uB,GAC1CC,IAAe,SAAWhvB,EAAK,WAAagvB,GAEhD,MAAM3rB,EAASkM,EAAO,sBAAsBvP,CAAI,EAChD,GAAKqD,EAIL,IAHAkpB,EAAO,QAAWlpB,EAAe,IACjCkM,EAAO,SAASnM,EAAKC,CAAM,EAEvB+H,GAAQmhB,EAAO,QACjB,GAAI,EAAEjuB,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,OAASvP,EAAG,CAAEb,EAAU,0BAA2Ba,CAAC,CAAG,CAG/F,MAAO,IAAM,CACX0T,EAAO,YAAYnM,EAAKC,CAAM,EAC9BkpB,EAAO,QAAU,IACnB,EAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAEzB,MAAMgK,EAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAC9C+D,OAAAA,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,GACxB,GAAI,EAAE9M,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAO,MAAQ,CAAa,CAC7D,EAAG,CAACmjB,CAAO,CAAC,EAEL,IACT,CAAC,ECgBKC,GAAmE,CACvE,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,aAAc,KAAM,cAAA,EAC3B,CAAE,IAAK,YAAa,KAAM,aAAA,CAC5B,EAEaiC,GAAY1M,EAAAA,KAAK,SAAmB3G,EAAuB,CACtE,KAAM,CACJ,MAAA0D,EAAO,MAAAiN,EAAO,IAAAC,EAAK,OAAAW,EAAQ,SAAAC,EAAU,cAAAV,EAAe,cAAAD,EACpD,aAAAG,EAAc,8BAAAS,EAA+B,WAAAR,EAAY,SAAAS,EAAU,UAAAC,EAAW,WAAAC,EAC9E,iBAAAC,EAAkB,YAAAC,EAAa,MAAAC,EAAO,UAAAC,EACtC,SAAAsB,EAAU,cAAAC,EAAe,SAAAC,EAAU,SAAAC,EAAU,WAAAC,EAAY,SAAAC,EAAU,eAAAC,EAAgB,eAAAC,EAAgB,YAAAC,EAAa,SAAAC,EAChH,QAAAlL,EAAS,QAAAkI,EAAS,QAAAvP,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,KAAAljB,EAAM,cAAAikB,CAAA,EAChDjS,EACE,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBsS,EAASzd,EAAAA,OAAY,IAAI,EAEzBoX,EAAclJ,GAAU,CAAE,QAASI,EAAM,QAAS,WAAYA,EAAM,WAAY,aAAcA,EAAM,aAAc,YAAaA,EAAM,YAAa,EAClJ8D,EAAalE,GAAUI,EAAM,OAAO,EACpCkS,EAAmBtS,GAAUqS,CAAa,EAG1C9K,GAAU,CACdwJ,EAAOC,EAAKW,EAAQC,EAAUV,EAAeD,EAC7CG,EAAcS,EAA+BR,EAAYS,EAAUC,EAAWC,EAC9EC,EAAkBE,EAAOC,EACzBsB,EAAUC,EAAeC,EAAUC,EAAUC,EAAYC,EAAUC,EAAgBC,EAAgBC,EAAaC,CAAA,EAChH,IAAIrvB,GAAKA,GAAK,EAAE,EAAE,KAAK,GAAG,EAE5B0f,EAAAA,gBAAgB,IAAM,cACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMvP,EAAgC,CAAA,EAChCuvB,EAAM,CAAC/sB,GAAWV,KAAe,CAAMA,KAAM,SAAW9B,EAAKwC,EAAC,EAAIV,GAAG,EAC3EytB,EAAI,QAASzO,CAAK,EAClByO,EAAI,QAASxB,CAAK,EAAGwB,EAAI,MAAOvB,CAAG,EAAGuB,EAAI,SAAUZ,CAAM,EAAGY,EAAI,WAAYX,CAAQ,EACrFW,EAAI,gBAAiBrB,CAAa,EAAGqB,EAAI,gBAAiBtB,CAAa,EACvEsB,EAAI,eAAgBnB,CAAY,EAAGmB,EAAI,gCAAiCV,CAA6B,EACrGU,EAAI,aAAclB,CAAU,EAAGkB,EAAI,WAAYT,CAAQ,EACvDS,EAAI,YAAaR,CAAS,EAAGQ,EAAI,aAAcP,CAAU,EACzDO,EAAI,mBAAoBN,CAAgB,EAAGM,EAAI,cAAeL,CAAW,EACzEK,EAAI,QAASJ,CAAK,EAAGI,EAAI,YAAaH,CAAS,EAC/CG,EAAI,WAAYmB,CAAQ,EAAGnB,EAAI,gBAAiBoB,CAAa,EAC7DpB,EAAI,WAAYqB,CAAQ,EAAGrB,EAAI,WAAYsB,CAAQ,EAAGtB,EAAI,aAAcuB,CAAU,EAClFvB,EAAI,WAAYwB,CAAQ,EAAGxB,EAAI,iBAAkByB,CAAc,EAC/DzB,EAAI,iBAAkB0B,CAAc,EAAG1B,EAAI,cAAe2B,CAAW,EAAG3B,EAAI,WAAY4B,CAAQ,EAEhG5B,EAAI,UAAWtJ,CAAO,EAAGsJ,EAAI,UAAWpB,CAAO,EAC/CoB,EAAI,UAAW3Q,CAAO,EAAG2Q,EAAI,UAAW1Q,CAAO,EAAG0Q,EAAI,SAAUjB,CAAM,EAEtE,MAAMjrB,GAASkM,EAAO,gBAAgBvP,CAAI,EAC1C,GAAI,CAACqD,GAAQ,OACbkpB,EAAO,QAAWlpB,GAAe,IACjCkM,EAAO,SAASnM,EAAKC,EAAM,EAG3B,MAAMzG,GAAM2vB,EAAO,QACbiD,GAAiE,CAAA,EACvE,GAAI5yB,IAAO,OAAOA,GAAI,kBAAqB,WACzC,SAAW,CAAE,IAAA6O,GAAK,KAAAuX,EAAA,IAAUwL,GAAc,CACxC,MAAMryB,GAAMN,IAAsB,CAChC,MAAMwB,GAAI6oB,EAAY,QAAQlD,EAAwC,EAClE,OAAO3lB,IAAM,YAAYA,GAAExB,EAAC,CAClC,EACA,GAAI,CAAEe,GAAI,iBAAiB6O,GAAKtP,EAAE,EAAGqzB,GAAM,KAAK,CAAE,IAAA/jB,GAAK,GAAAtP,EAAA,CAAI,CAAG,MAAQ,CAAe,CACvF,CAGF,GAAIiP,GAAQmhB,EAAO,QACjB,GAAI,EAAEjuB,IAAAhD,GAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,GAAA,KAAAhD,GAAyB8P,EAAMkkB,EAAiB,QAAU,OAASzzB,GAAG,CAAEb,EAAU,oBAAqBa,EAAC,CAAG,CAInH,OAAA8C,GAAAuiB,EAAW,UAAX,MAAAviB,GAAA,KAAAuiB,EAAqBqL,EAAO,SAErB,IAAM,QACX,SAAW,CAAE,IAAA9gB,GAAK,GAAAtP,EAAA,IAAQqzB,GACxB,GAAI,EAAEl0B,GAAAsB,GAAI,sBAAJ,MAAAtB,GAAA,KAAAsB,GAA0B6O,GAAKtP,GAAK,MAAQ,CAAe,CAEnEoT,EAAO,YAAYnM,EAAKC,EAAM,EAC9BkpB,EAAO,QAAU,IACnB,CAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,EAAO,CAAC,EAGzB,MAAMgK,GAAUnjB,EAAO,KAAK,UAAUA,CAAI,EAAI,GAC9C+D,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW,CAACnhB,GACxB,GAAI,EAAE9M,GAAAhD,EAAAixB,EAAO,SAAQ,UAAf,MAAAjuB,EAAA,KAAAhD,EAAyB8P,EAAMkkB,EAAiB,QAAU,MAAQ,CAAa,CAEvF,EAAG,CAACf,EAAO,CAAC,EAGZ,MAAMkB,GAAW3O,EAAQ,KAAK,UAAUA,CAAK,EAAI,GACjD3R,OAAAA,EAAAA,UAAU,IAAM,eACd,GAAI,GAACod,EAAO,SAAW,CAACzL,GACxB,GAAI,EACFxiB,GAAAhD,EAAAixB,EAAO,SAAQ,kBAAf,MAAAjuB,EAAA,KAAAhD,EAAiCwlB,IACjCliB,IAAAD,GAAA4tB,EAAO,SAAQ,aAAf,MAAA3tB,GAAA,KAAAD,GACF,MAAQ,CAAa,CAEvB,EAAG,CAAC8wB,EAAQ,CAAC,EAGbtgB,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAWtG,IAAY,OAAW,GAAI,EAAE3nB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B2qB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9I9W,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW4B,IAAY,OAAW,GAAI,EAAE7vB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B6yB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9Ihf,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW+B,IAAW,OAAW,GAAI,EAAEhwB,GAAAhD,EAAAixB,EAAO,SAAQ,YAAf,MAAAjuB,EAAA,KAAAhD,EAA2BgzB,EAAS,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAM,CAAC,EAC1Inf,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW3N,IAAY,OAAW,GAAI,EAAEtgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BsjB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAC9IzP,EAAAA,UAAU,IAAM,SAAE,GAAIod,EAAO,SAAW1N,IAAY,OAAW,GAAI,EAAEvgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BujB,EAAU,MAAQ,CAAa,CAAE,EAAG,CAACA,CAAO,CAAC,EAEvI,IACT,CAAC,EC5ED,IAAIuS,GAAqB,GAEzB,SAASC,IAAyB,CAChC,GAAI,CAAAD,GACJ,CAAAA,GAAqB,GACrB,GAAI,CACF,GAAI,OAAO,QAAY,IAAa,OAEpC,QAAQ,KACN,wHAAA,CAGJ,MAAQ,CAER,EACF,CAGA,SAASE,GAAWztB,EAAuB,CACzC,MAAMpE,EAAMiM,GAAA,EACZ,OAAOjM,EAAM,IAAIA,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EAAI,MACrD,CAEA,MAAM0tB,GAAkBpU,EAAAA,WAA2C,SAAoBC,EAAOH,EAAK,CACjG,KAAM,CAAE,MAAAuU,EAAO,UAAAC,EAAW,QAAAxL,EAAS,QAAAkI,EAAS,QAAAvP,EAAS,QAAAC,EAAS,OAAAyP,EAAQ,YAAAY,CAAA,EAAgB9R,EAChF,CAAE,IAAAha,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAElBsS,EAASzd,EAAAA,OAAY,IAAI,EACzB4iB,EAAS1U,GAAU5Z,CAAG,EACtBuuB,EAAmB7iB,EAAAA,OAAO,EAAK,EAE/B8iB,EAAY5U,GAAUI,EAAM,MAAM,EAClCyU,EAAc7U,GAAUI,EAAM,QAAQ,EACtC0U,EAAe9U,GAAUI,EAAM,SAAS,EACxC2U,EAAiB/U,GAAUI,EAAM,WAAW,EAC5C4U,EAAehV,GAAUI,EAAM,SAAS,EACxC6U,EAAYjV,GAAUI,EAAM,MAAM,EAClC8U,EAAYlV,GAAUI,EAAM,MAAM,EAGlC/Z,EAAS4L,EAAAA,QAAuB,KAAO,CAC3C,IAAI,KAAM,CAAE,OAAOsd,EAAO,SAAW,IAAM,EAC3C,IAAI,OAAQ,OAAE,QAAOjxB,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,QAAS,IAAM,EACpD,IAAI,QAAS,OAAE,QAAOA,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,SAAU,IAAM,EACtD,IAAI,UAAW,OAAE,QAAOA,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,WAAY,IAAM,EAC1D,IAAI62B,EAAQ,QAAE72B,EAAAixB,EAAO,UAAP,MAAAjxB,EAAgB,IAAI62B,EAAS,EAC3C,OAAOA,EAAQ,QAAE72B,EAAAixB,EAAO,UAAP,MAAAjxB,EAAgB,OAAO62B,EAAS,EACjD,gBAAiB,QAAE72B,EAAAixB,EAAO,UAAP,MAAAjxB,EAAgB,gBAAkB,EACrD,aAAc,QAAEA,EAAAixB,EAAO,UAAP,MAAAjxB,EAAgB,aAAe,EAC/C,YAAa,QAAEA,EAAAixB,EAAO,UAAP,MAAAjxB,EAAgB,YAAc,EAC7C,KAAK0I,EAAGC,EAAG,OAAE,QAAO3I,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,KAAK0I,EAAGC,KAAM,IAAM,EACxD,QAAQJ,EAAO,SAEb,MAAMvG,IAAShC,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,QAAQgD,EAAAozB,EAAO,UAAP,YAAApzB,EAAwB,KAC/D,GAAI,EAAChB,GAAA,MAAAA,EAAQ,gBAAgB,OAAO,KACpC,GAAI,CACF,KAAM,CAAC80B,CAAI,EAAI90B,EAAO,eAAe,CAAC,CAACuG,EAAM,IAAKA,EAAM,GAAG,CAAC,CAAC,EAC7D,MAAO,CAACuuB,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAC1B,OAASv2B,EAAG,CACV,OAAAb,EAAU,qBAAsBa,CAAC,EAC1B,IACT,CACF,CAAA,GAEE,CAAA,CAAE,EAENw2B,EAAAA,oBAAoBpV,EAAK,IAAM5Z,EAAQ,CAACA,CAAM,CAAC,EAK/C,MAAMivB,EAAc,CAAC,CAAClV,EAAM,SAGtBmH,EAAU,GAAGiN,GAAS,EAAE,IAAIC,GAAa,EAAE,IAAIa,CAAW,GAChE9Q,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OAErB,GAAI,CAAE,WAAmB,MAAO,CAC9B8hB,GAAA,EACA,MACF,CAEA,MAAMrxB,EAAgC,CAAA,EAClCwxB,IAAU,SAAWxxB,EAAK,MAAQwxB,GAClCC,IAAc,SAAWzxB,EAAK,UAAYyxB,GAE1CxL,IAAY,SAAWjmB,EAAK,QAAUimB,GACtCrH,IAAY,SAAW5e,EAAK,QAAU4e,GACtCC,IAAY,SAAW7e,EAAK,QAAU6e,GACtCyP,IAAW,SAAWtuB,EAAK,OAASsuB,GACpCH,IAAY,SAAWnuB,EAAK,QAAUmuB,GACtCe,IAAgB,SAAWlvB,EAAK,YAAcsxB,GAAWpC,CAAW,GAGxE,MAAMqD,EAAQvoB,GACZ,SAAoCwoB,EAAuBC,EAAoBC,EAAqB,QAClGp3B,EAAA0O,EAAA,IAAA,MAAA1O,EAAO,KAAK,KAAMk3B,EAAUC,EAAOC,EAAQrvB,EAC7C,EACFrD,EAAK,OAASuyB,EAAK,IAAMX,EAAU,OAAO,EAC1C5xB,EAAK,UAAYuyB,EAAK,IAAMT,EAAa,OAAO,EAChD9xB,EAAK,YAAcuyB,EAAK,IAAMR,EAAe,OAAO,EACpD/xB,EAAK,UAAYuyB,EAAK,IAAMP,EAAa,OAAO,EAChDhyB,EAAK,OAASuyB,EAAK,IAAMN,EAAU,OAAO,EAC1CjyB,EAAK,OAASuyB,EAAK,IAAML,EAAU,OAAO,EACtCI,IACFtyB,EAAK,SAAW,SAAoCwyB,EAAuBC,EAAoBC,EAAqB,CAClH,MAAMv2B,EAAK01B,EAAY,QAEnB11B,EAAIA,EAAG,KAAK,KAAMq2B,EAAUC,EAAOC,EAAQrvB,CAAM,EAChDmvB,EAAS,OAAOC,EAAOC,CAAM,CACpC,GAGF,MAAM11B,EAAcuS,EAAO,iBAAiBvP,CAAI,EAChD,GAAKhD,EAEL,OAAAuvB,EAAO,QAAWvvB,EAAoB,IACtCuS,EAAO,SAASnM,EAAKpG,CAAW,EAEzB,IAAM,CACXuS,EAAO,YAAYnM,EAAKpG,CAAW,EACnCuvB,EAAO,QAAU,IACnB,CAEF,EAAG,CAACnpB,EAAKmM,EAAQgV,CAAO,CAAC,EAGzBpV,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAWtG,IAAY,QACnC,GAAI,EAAE3nB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B2qB,EAAU,OAASpqB,EAAG,CAAEb,EAAU,wBAAyBa,CAAC,CAAG,CACnG,EAAG,CAACoqB,CAAO,CAAC,EAGZ9W,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW3N,IAAY,QACnC,GAAI,EAAEtgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BsjB,EAAU,OAAS/iB,EAAG,CAAEb,EAAU,wBAAyBa,CAAC,CAAG,CACnG,EAAG,CAAC+iB,CAAO,CAAC,EAEZzP,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW1N,IAAY,QACnC,GAAI,EAAEvgB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4BujB,EAAU,OAAShjB,EAAG,CAAEb,EAAU,wBAAyBa,CAAC,CAAG,CACnG,EAAG,CAACgjB,CAAO,CAAC,EAGZ1P,EAAAA,UAAU,IAAM,SACd,GAAI,GAACod,EAAO,SAAW+B,IAAW,QAClC,GAAI,EAAEhwB,GAAAhD,EAAAixB,EAAO,SAAQ,YAAf,MAAAjuB,EAAA,KAAAhD,EAA2BgzB,EAAS,OAASzyB,EAAG,CAAEb,EAAU,uBAAwBa,CAAC,CAAG,CAChG,EAAG,CAACyyB,CAAM,CAAC,EAGXnf,EAAAA,UAAU,IAAM,SACd,GAAI,CAACod,EAAO,SAAW2C,IAAgB,OAAW,OAClD,MAAM5iB,EAAKglB,GAAWpC,CAAW,EACjC,GAAK5iB,EACL,GAAI,EAAEhO,GAAAhD,EAAAixB,EAAO,SAAQ,eAAf,MAAAjuB,EAAA,KAAAhD,EAA8BgR,EAAK,OAASzQ,EAAG,CAAEb,EAAU,0BAA2Ba,CAAC,CAAG,CAElG,EAAG,CAACqzB,GAAA,YAAAA,EAAa,IAAKA,GAAA,YAAAA,EAAa,GAAG,CAAC,EAGvC/f,EAAAA,UAAU,IAAM,SACd,GAAIgf,IAAY,SAEXwD,EAAiB,UACpBA,EAAiB,QAAU,GAC3Bx2B,GAAQ,gIAAgI,GAEtI,EAACoxB,EAAO,SACZ,GAAI,EAAEjuB,GAAAhD,EAAAixB,EAAO,SAAQ,aAAf,MAAAjuB,EAAA,KAAAhD,EAA4B6yB,EAAU,OAAStyB,EAAG,CAAEb,EAAU,wBAAyBa,CAAC,CAAG,CACnG,EAAG,CAACsyB,CAAO,CAAC,EAEL,IACT,CAAC,EAEYwE,GAAa5O,EAAAA,KAAKwN,EAAe,ECjSjCqB,GAAYnM,GAAqC,CAAE,YAAa,YAAa,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,gBAAgBzuB,CAAC,EAAG,EACtHo2B,GAAcpM,GAAuC,CAAE,YAAa,cAAe,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,CAAC,EAAG,EAC9Hq2B,GAAerM,GAAwC,CAAE,YAAa,eAAgB,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,mBAAmBzuB,CAAC,EAAG,EAClIs2B,GAAgBtM,GAAyC,CAAE,YAAa,gBAAiB,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,oBAAoBzuB,CAAC,EAAG,YAAa,GAAM,WAAY,GAAM,EAI3Ku2B,GAAcvM,GAAuC,CAAE,YAAa,cAAe,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,CAAC,EAAG,EAC9Hw2B,GAAcxM,GAAuC,CAAE,YAAa,cAAe,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,kBAAkBzuB,CAAC,EAAG,EA4I9Hy2B,GAAkBzM,GAA2C,CAAE,YAAa,kBAAmB,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,sBAAsBzuB,CAAC,EAAG,EAC9I02B,GAAW1M,GAAoC,CAAE,YAAa,WAAY,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,eAAezuB,CAAC,EAAG,EAClH22B,GAAY3M,GAAqC,CAAE,YAAa,YAAa,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,gBAAgBzuB,CAAC,EAAG,EACtH42B,GAAW5M,GAAoC,CAAE,YAAa,WAAY,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,eAAezuB,CAAC,EAAG,EAClH62B,GAAW7M,GAAoC,CAC1D,YAAa,WACb,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,eAAezuB,CAAC,EACrC,OAAQ,CACN,CAAE,IAAK,QAAS,KAAM,SAAA,EACtB,CAAE,IAAK,WAAY,KAAM,YAAA,EACzB,CAAE,IAAK,YAAa,KAAM,aAAA,EAC1B,CAAE,IAAK,WAAY,KAAM,YAAA,CAAa,CAE1C,CAAC,EAgBY82B,GAAwB9M,GAAiD,CAAE,YAAa,wBAAyB,QAAUyE,GAAMA,EAAE,4BAA4B,CAAA,CAAE,EAAG,EAmBpKsI,GAAa/M,GAAsC,CAAE,YAAa,aAAc,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,iBAAiBzuB,CAAC,EAAG,EAW1Hg3B,GAAahN,GAAsC,CAAE,YAAa,aAAc,QAAS,CAACyE,EAAGzuB,IAAMyuB,EAAE,iBAAiBzuB,CAAC,EAAG,ECpOjIi3B,GAAqB95B,EAAAA,cAAoC,IAAI,EAMtD+5B,GAAc5P,EAAAA,KAAK,SAAqB,CAAE,SAAAtV,GAA8B,CACnF,KAAM,CAAE,IAAArL,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBrV,EAAS0V,GAAA,EAGTuQ,GAAgBjmB,GAAA,YAAAA,EAAQ,SAAUxB,EAElCwwB,EAAU9kB,EAAAA,OAA6B,IAAI,EAG3C+kB,EAAc/kB,EAAAA,OAA0E,IAAI,EAC5F,CAACglB,EAAYC,CAAa,EAAInlB,EAAAA,SAA+B,IAAI,EAyCvE,OApCA4S,EAAAA,gBAAgB,IAAM,SACpB,GAAI,CAACjS,GAAU,CAACsb,EAAc,OAG9B,GAAI,CAAC+I,EAAQ,QAAS,CACpB,MAAM/uB,EAAO0K,EAAO,kBAAkB,EAAE,EACxC,GAAI,CAAC1K,EAAM,OACX+uB,EAAQ,QAAU/uB,EAClBkvB,EAAclvB,CAAI,CACpB,CACA,MAAMA,EAAO+uB,EAAQ,UAGjBt4B,EAAAu4B,EAAY,UAAZ,YAAAv4B,EAAqB,UAAWuvB,KAAgBvsB,EAAAu1B,EAAY,UAAZ,YAAAv1B,EAAqB,QAASuG,IAK9EgvB,EAAY,SACdtkB,EAAO,kBAAkBskB,EAAY,QAAQ,OAAQA,EAAY,QAAQ,IAAI,EAE/EtkB,EAAO,eAAesb,EAAchmB,CAAI,EACxCgvB,EAAY,QAAU,CAAE,OAAQhJ,EAAc,KAAAhmB,CAAA,EAChD,EAAG,CAAC0K,EAAQsb,CAAY,CAAC,EAGzB1b,EAAAA,UAAU,IACD,IAAM,CACPI,GAAUskB,EAAY,SAAWD,EAAQ,UAC3CrkB,EAAO,kBAAkBskB,EAAY,QAAQ,OAAQA,EAAY,QAAQ,IAAI,EAC7EA,EAAY,QAAU,KACtBD,EAAQ,QAAU,KAEtB,EACC,CAACrkB,CAAM,CAAC,EAENd,SACGilB,GAAmB,SAAnB,CAA4B,MAAOI,EAAa,SAAArlB,EAAS,EAD3C,IAExB,CAAC,EASYulB,GAAWjQ,EAAAA,KAAK,SAAkB,CAAE,KAAArZ,EAAM,SAAA0Q,EAAU,UAAA6Y,GAA4B,CAC3F,KAAM,CAAE,OAAA1kB,CAAA,EAAW0K,EAAA,EACbpV,EAAO/K,EAAAA,WAAW45B,EAAkB,EACpCQ,EAAQplB,EAAAA,OAAOsM,CAAQ,EAC7B,OAAA8Y,EAAM,QAAU9Y,EAEhBoG,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACjS,GAAU,CAAC1K,EAAM,OACtB,MAAM3C,EAAOqN,EAAO,eAAe7E,EAAO7G,UAAyC,OAAAvI,EAAA44B,EAAM,UAAN,YAAA54B,EAAA,KAAA44B,EAAgBrwB,IAAQ,CAAE,UAAAowB,CAAA,CAAW,EACxH,GAAK/xB,EACL,OAAAqN,EAAO,YAAY1K,EAAM3C,CAAI,EACtB,IAAM,CAAEqN,EAAO,eAAe1K,EAAM3C,CAAI,CAAG,CAEpD,EAAG,CAACqN,EAAQ1K,EAAM6F,EAAMupB,CAAS,CAAC,EAE3B,IACT,CAAC,EC5CM,MAAME,EAAuC,CAClD,YAAoBvoB,EAAW,CAAX,KAAA,KAAAA,CAAY,CAEhC,IAAI,KAAe,CAAE,OAAO,KAAK,IAAM,CAEvC,aAA4B,SAC1B,GAAI,CACF,MAAMnP,GAAI6B,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,cAAX,YAAAgD,EAAA,KAAAhD,GACV,OAAOmB,GAAK,OAAOA,EAAE,KAAQ,SAAW,CAAE,IAAKA,EAAE,IAAK,IAAKA,EAAE,GAAA,EAAQ,IACvE,OAASZ,EAAG,CAAE,OAAAb,EAAU,0BAA2Ba,CAAC,EAAU,IAAM,CACtE,CACA,QAA6B,SAC3B,GAAI,CACF,MAAMiG,GAAIxD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,SAAX,YAAAgD,EAAA,KAAAhD,GACV,OAAOwG,GAAK,OAAOA,EAAE,SAAY,SAAW,CAAE,QAASA,EAAE,QAAS,MAAOA,EAAE,KAAA,EAAU,IACvF,OAASjG,EAAG,CAAE,OAAAb,EAAU,qBAAsBa,CAAC,EAAU,IAAM,CACjE,CACA,SAAyB,SACvB,GAAI,CAAE,MAAM6H,GAAIpF,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,UAAX,YAAAgD,EAAA,KAAAhD,GAAwB,OAAO,OAAOoI,GAAM,SAAWA,EAAI,IAAM,OAC1E7H,EAAG,CAAE,OAAAb,EAAU,sBAAuBa,CAAC,EAAU,IAAM,CAChE,CACA,OAAuB,SACrB,GAAI,CAAE,QAAOyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,QAAX,YAAAgD,EAAA,KAAAhD,KAAwB,IAAM,OACpCO,EAAG,CAAE,OAAAb,EAAU,oBAAqBa,CAAC,EAAU,IAAM,CAC9D,CACA,UAAsB,SACpB,GAAI,CAAE,QAAOyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,WAAX,YAAAgD,EAAA,KAAAhD,KAA2B,CAAA,CAAI,OACrCO,EAAG,CAAE,OAAAb,EAAU,uBAAwBa,CAAC,EAAU,CAAA,CAAI,CAC/D,CACA,YAAsB,SACpB,GAAI,CAAE,QAAOyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,aAAX,YAAAgD,EAAA,KAAAhD,KAA6B,EAAO,OAC1CO,EAAG,CAAE,OAAAb,EAAU,yBAA0Ba,CAAC,EAAU,EAAO,CACpE,CACA,cAAyC,SACvC,GAAI,CAAE,QAAOyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,eAAX,YAAAgD,EAAA,KAAAhD,KAA+B,IAAM,OAC3CO,EAAG,CAAE,OAAAb,EAAU,2BAA4Ba,CAAC,EAAU,IAAM,CACrE,CACA,YAAYgI,EAAoB,SAC9B,GAAI,CACF,MAAMpE,EAAMiM,GAAA,EACRjM,GAAA,MAAAA,EAAK,SAAOnB,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,cAAX,MAAAgD,EAAA,KAAAhD,EAAyB,IAAImE,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,GAC7E,OAAShI,EAAG,CAAEb,EAAU,0BAA2Ba,CAAC,CAAG,CACzD,CACA,MAAMyI,EAAY1C,EAAyB,SACzC,GAAI,EAAEtD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,QAAX,MAAAgD,EAAA,KAAAhD,EAAmBgJ,EAAI1C,EAAU,OAAS/F,EAAG,CAAEb,EAAU,oBAAqBa,CAAC,CAAG,CAC1F,CACA,OAAOu4B,EAAkBxyB,EAAyB,SAChD,GAAI,EAAEtD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,SAAX,MAAAgD,EAAA,KAAAhD,EAAoB,CAAE,QAAS84B,EAAI,QAAS,MAAOA,EAAI,KAAA,EAASxyB,EAAU,OACzE/F,EAAG,CAAEb,EAAU,qBAAsBa,CAAC,CAAG,CAClD,CACA,QAAQif,EAAclZ,EAAyB,SAC7C,GAAI,EAAEtD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,UAAX,MAAAgD,EAAA,KAAAhD,EAAqBwf,EAAMlZ,EAAU,OAAS/F,EAAG,CAAEb,EAAU,sBAAuBa,CAAC,CAAG,CAChG,CACA,WAAW+F,EAAgC,SACzC,GAAI,EAAEtD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,aAAX,MAAAgD,EAAA,KAAAhD,EAAwBsG,EAAU,OAAS/F,EAAG,CAAEb,EAAU,yBAA0Ba,CAAC,CAAG,CAChG,CACA,mBAAmBw4B,EAAgC,SACjD,GAAI,EAAE/1B,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,qBAAX,MAAAgD,EAAA,KAAAhD,EAAgC+4B,EAAU,OAASx4B,EAAG,CAAEb,EAAU,iCAAkCa,CAAC,CAAG,CAChH,CACA,MAAa,SAAE,GAAI,EAAEyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,OAAX,MAAAgD,EAAA,KAAAhD,EAAqB,OAASO,EAAG,CAAEb,EAAU,mBAAoBa,CAAC,CAAG,CAAE,CAC5F,MAAa,SAAE,GAAI,EAAEyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,OAAX,MAAAgD,EAAA,KAAAhD,EAAqB,OAASO,EAAG,CAAEb,EAAU,mBAAoBa,CAAC,CAAG,CAAE,CAC5F,uBAA8B,SAAE,GAAI,EAAEyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,wBAAX,MAAAgD,EAAA,KAAAhD,EAAsC,OAASO,EAAG,CAAEb,EAAU,oCAAqCa,CAAC,CAAG,CAAE,CAC/I,wBAA+B,SAAE,GAAI,EAAEyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,yBAAX,MAAAgD,EAAA,KAAAhD,EAAuC,OAASO,EAAG,CAAEb,EAAU,qCAAsCa,CAAC,CAAG,CAAE,CAClJ,QAAQ+F,EAAmE,SACzE,GAAI,CAAE,OAAOtD,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,UAAX,YAAAgD,EAAA,KAAAhD,EAAqBsG,EAAU,OAAS/F,EAAG,CAAEb,EAAU,sBAAuBa,CAAC,EAAG,MAAkB,CACnH,CACA,eAAsB,SAAE,GAAI,EAAEyC,GAAAhD,EAAA,KAAK,OAAL,YAAAA,EAAW,gBAAX,MAAAgD,EAAA,KAAAhD,EAA8B,OAASO,EAAG,CAAEb,EAAU,4BAA6Ba,CAAC,CAAG,CAAE,CACzH,CCtGA,MAAMy4B,GAAkB16B,EAAAA,cAAgC,IAAI,EA6C/C26B,GAAWxQ,EAAAA,KAAK5G,EAAAA,WAAuC,SAAkBC,EAAOH,EAAK,CAChG,KAAM,CAAE,MAAApZ,EAAO,GAAAS,EAAI,IAAA8vB,EAAK,KAAAtZ,EAAM,QAAAlZ,EAAS,QAAAqkB,EAAS,sBAAAlI,EAAuB,QAAAsW,EAAS,MAAAvT,EAAO,UAAAD,EAAW,SAAApS,CAAA,EAAa2O,EACzG,CAAE,OAAA7N,EAAQ,OAAAwR,CAAA,EAAWlnB,GAAA,EACrBmnB,EAAelS,EAAAA,OAAuB,IAAI,EAC1C,CAAClD,EAAM4oB,CAAO,EAAI5lB,EAAAA,SAA2B,IAAI,EAEjD8X,EAAS5X,EAAAA,OAAOsO,CAAK,EAC3BsJ,EAAO,QAAUtJ,EAGjBoE,EAAAA,gBAAgB,IAAM,CACpB,GAAIT,IAAW,SAAW,CAACxR,GAAU,CAACyR,EAAa,QAAS,OAC5D,MAAM3d,EAASkM,EAAO,eAAeyR,EAAa,QAAS0F,EAAO,QAAQ,SAAW,EAAE,EACvF,GAAI,CAACrjB,EAAQ,OACbmxB,EAAQnxB,CAAM,EAEd,MAAMzG,EAAOyG,EAAe,IAC5B,OAAIzG,GAAO,OAAOA,EAAI,kBAAqB,aACzCA,EAAI,iBAAiB,mBAAqBf,GAAW,mBACnD,MAAMyQ,GAAKzQ,GAAA,YAAAA,EAAG,SAASA,GAAA,YAAAA,EAAG,UAAUA,GAAA,YAAAA,EAAG,WAAUP,EAAAO,GAAA,YAAAA,EAAG,OAAH,YAAAP,EAAS,UAASgD,EAAAzC,GAAA,YAAAA,EAAG,OAAH,YAAAyC,EAAS,WAAUK,EAAA9C,GAAA,YAAAA,EAAG,OAAH,YAAA8C,EAAS,QAC/F,GAAI2N,GAAM,OAAOA,EAAG,KAAQ,UAC1BjN,GAAAT,EAAA8nB,EAAO,SAAQ,mBAAf,MAAArnB,EAAA,KAAAT,EAAkC,CAAE,IAAK0N,EAAG,IAAK,IAAKA,EAAG,cAChD,OAAO1P,EAAI,aAAgB,WACpC,GAAI,CACF,MAAM6B,EAAM7B,EAAI,YAAA,EACZ6B,GAAO,OAAOA,EAAI,KAAQ,YAC5Bc,GAAAH,EAAAsnB,EAAO,SAAQ,mBAAf,MAAAnnB,EAAA,KAAAH,EAAkC,CAAE,IAAKX,EAAI,IAAK,IAAKA,EAAI,MAE/D,MAAQ,CAAe,CAE3B,CAAC,EACD7B,EAAI,iBAAiB,cAAe,IAAA,SAAM,OAAA0B,GAAAhD,EAAAorB,EAAO,SAAQ,cAAf,YAAApoB,EAAA,KAAAhD,GAA8B,EACxEsB,EAAI,iBAAiB,gBAAiB,IAAA,SAAM,OAAA0B,GAAAhD,EAAAorB,EAAO,SAAQ,gBAAf,YAAApoB,EAAA,KAAAhD,GAAgC,EAC5EsB,EAAI,iBAAiB,eAAgB,IAAM,WACzC,IAAI8G,EACJ,GAAI,CAAEA,GAAIpI,EAAAsB,EAAI,UAAJ,YAAAtB,EAAA,KAAAsB,EAAiB,MAAQ,CAAe,EAClD+B,GAAAL,EAAAooB,EAAO,SAAQ,eAAf,MAAA/nB,EAAA,KAAAL,EAA8BoF,EAChC,CAAC,EACD9G,EAAI,iBAAiB,QAAUf,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQ,UAAf,YAAApoB,EAAA,KAAAhD,EAAyBO,GAAE,EACrEe,EAAI,iBAAiB,WAAaf,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQ,aAAf,YAAApoB,EAAA,KAAAhD,EAA4BO,GAAE,EAC3Ee,EAAI,iBAAiB,aAAef,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQ,cAAf,YAAApoB,EAAA,KAAAhD,EAA6BO,GAAE,EAC9Ee,EAAI,iBAAiB,aAAef,GAAW,WAC7C,IAAI44B,EAA4B,OAAO54B,GAAM,SAAWA,EAAI,OAC5D,GAAI44B,IAAU,OAAa,GAAI,CAAEA,GAAQn5B,EAAAsB,EAAI,QAAJ,YAAAtB,EAAA,KAAAsB,EAAe,MAAQ,CAAe,EAC/E+B,GAAAL,EAAAooB,EAAO,SAAQ,aAAf,MAAA/nB,EAAA,KAAAL,EAA4Bm2B,EAC9B,CAAC,EACD73B,EAAI,iBAAiB,qBAAsB,IAAA,SAAM,OAAA0B,GAAAhD,EAAAorB,EAAO,SAAQ,oBAAf,YAAApoB,EAAA,KAAAhD,GAAoC,EACrFsB,EAAI,iBAAiB,aAAef,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQ,UAAf,YAAApoB,EAAA,KAAAhD,EAAyBO,GAAE,EAC1Ee,EAAI,iBAAiB,WAAaf,GAAA,SAAW,OAAAyC,GAAAhD,EAAAorB,EAAO,SAAQ,aAAf,YAAApoB,EAAA,KAAAhD,EAA4BO,GAAE,GAGtE,IAAM,CACX0T,EAAO,gBAAgBlM,CAAM,EAC7BmxB,EAAQ,IAAI,CACd,CAEF,EAAG,CAACjlB,EAAQwR,CAAM,CAAC,EAGnB5R,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8N,EAAK,OACV,MAAMrgB,EAAMgP,EAAQA,EAAa,IAAM,KACjCQ,EAAWxP,EAAM,IAAIu3B,GAAgBv3B,CAAG,EAAI,KAC9C,OAAOqgB,GAAQ,WAAYA,EAAI7Q,CAAQ,EACrC6Q,EAAmD,QAAU7Q,CACrE,EAAG,CAACR,EAAMqR,CAAG,CAAC,EAGd9N,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQ,CAAC/H,EAAO,OACrB,MAAMjH,EAAOgP,EAAa,IACpBnM,EAAMiM,GAAA,EACZ,GAAI9O,IAAO6C,GAAA,MAAAA,EAAK,OACd,GAAI,EAAEnE,EAAAsB,EAAI,cAAJ,MAAAtB,EAAA,KAAAsB,EAAkB,IAAI6C,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EAAI,OACvDhI,EAAG,CAAEb,EAAU,uBAAwBa,CAAC,CAAG,CAEtD,EAAG,CAAC+P,EAAM/H,GAAA,YAAAA,EAAO,IAAKA,GAAA,YAAAA,EAAO,GAAG,CAAC,EAGjCsL,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQ,CAACtH,EAAI,OAClB,MAAM1H,EAAOgP,EAAa,IAC1B,GAAI,EAAEtQ,EAAAsB,GAAA,YAAAA,EAAK,QAAL,MAAAtB,EAAA,KAAAsB,EAAa0H,EAAK,OACjBzI,EAAG,CAAEb,EAAU,iBAAkBa,CAAC,CAAG,CAC9C,EAAG,CAAC+P,EAAMtH,CAAE,CAAC,EAGb6K,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQ,CAACwoB,EAAK,OACnB,MAAMx3B,EAAOgP,EAAa,IAC1B,GAAI,EAAEtQ,EAAAsB,GAAA,YAAAA,EAAK,SAAL,MAAAtB,EAAA,KAAAsB,EAAc,CAAE,QAASw3B,EAAI,QAAS,MAAOA,EAAI,OAAU,OAC1Dv4B,EAAG,CAAEb,EAAU,kBAAmBa,CAAC,CAAG,CAC/C,EAAG,CAAC+P,EAAMwoB,GAAA,YAAAA,EAAK,QAASA,GAAA,YAAAA,EAAK,KAAK,CAAC,EAGnCjlB,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQkP,GAAQ,KAAM,OAC3B,MAAMle,EAAOgP,EAAa,IAC1B,GAAI,EAAEtQ,EAAAsB,GAAA,YAAAA,EAAK,UAAL,MAAAtB,EAAA,KAAAsB,EAAeke,EAAO,OACrBjf,EAAG,CAAEb,EAAU,mBAAoBa,CAAC,CAAG,CAChD,EAAG,CAAC+P,EAAMkP,CAAI,CAAC,EAGf,MAAM4Z,EAAazlB,EAAAA,QAAQ,IAAOrN,EAAU,KAAK,UAAUA,CAAO,EAAI,GAAK,CAACA,CAAO,CAAC,EACpFuN,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQ,CAAChK,EAAS,OACvB,MAAMhF,EAAOgP,EAAa,IAG1B,IAAI+oB,EAA2B/yB,EAC/B,GAAIA,EAAQ,gBAAkB,IAASA,EAAQ,uBAAyB,OAAW,CACjF,KAAM,CAAE,qBAAsBgzB,EAAO,GAAGC,GAASjzB,EAEjD+yB,EAAUE,CACZ,CACA,GAAI,EAAEv5B,EAAAsB,GAAA,YAAAA,EAAK,aAAL,MAAAtB,EAAA,KAAAsB,EAAkB+3B,EAAU,OAC3B94B,EAAG,CAAEb,EAAU,sBAAuBa,CAAC,CAAG,CAEnD,EAAG,CAAC+P,EAAM8oB,CAAU,CAAC,EAGrBvlB,EAAAA,UAAU,IAAM,SACd,GAAI,CAACvD,GAAQqa,IAAY,OAAW,OACpC,MAAMrpB,EAAOgP,EAAa,IAC1B,GAAI,CAAMqa,sBAAc,2CAAoB,sBAAU,OAC/CpqB,EAAG,CAAEb,EAAU,mBAAoBa,CAAC,CAAG,CAChD,EAAG,CAAC+P,EAAMqa,CAAO,CAAC,EAGlB9W,EAAAA,UAAU,IAAM,SACd,GAAI,CAACvD,GAAQmS,IAA0B,OAAW,OAClD,MAAMnhB,EAAOgP,EAAa,IAC1B,GAAI,CAAMmS,sBAA4B,4DAAqC,wCAA4B,OAChGliB,EAAG,CAAEb,EAAU,iCAAkCa,CAAC,CAAG,CAC9D,EAAG,CAAC+P,EAAMmS,CAAqB,CAAC,EAGhC5O,EAAAA,UAAU,IAAM,OACd,GAAI,CAACvD,GAAQ,CAACyoB,EAAS,OACvB,MAAMz3B,EAAOgP,EAAa,IAC1B,GAAI,EAAEtQ,EAAAsB,GAAA,YAAAA,EAAK,qBAAL,MAAAtB,EAAA,KAAAsB,EAA0By3B,EAAU,OACnCx4B,EAAG,CAAEb,EAAU,8BAA+Ba,CAAC,CAAG,CAC3D,EAAG,CAAC+P,EAAMyoB,CAAO,CAAC,EAElB,MAAMS,EAAS7lB,EAAAA,QAAQ,IAAMrD,EAAM,CAACA,CAAI,CAAC,EAEzC,OACE+X,GAAAA,IAAC,MAAA,CAAI,IAAK3C,EAAc,UAAAH,EAAsB,MAAAC,EAC3C,SAAAgU,GAAUnR,GAAAA,IAAC2Q,GAAgB,SAAhB,CAAyB,MAAOQ,EAAS,SAAArmB,EAAS,EAChE,CAEJ,CAAC,CAAC,EAeWsmB,GAAgBhR,EAAAA,KAAK,SAAuB3G,EAA2B,CAClF,KAAM,CAAE,OAAA7N,CAAA,EAAW1V,GAAA,EACb+R,EAAO9R,EAAAA,WAAWw6B,EAAe,EACjCU,EAAWlmB,EAAAA,OAAgB,IAAI,EAC/BmmB,EAAanmB,EAAAA,OAAOsO,EAAM,OAAO,EACvC6X,EAAW,QAAU7X,EAAM,QAE3B,MAAM8X,EAAWjmB,EAAAA,QACf,IAAM,KAAK,UAAU,CAACmO,EAAM,SAAUA,EAAM,SAAUA,EAAM,QAASA,EAAM,gBAAiBA,EAAM,WAAW,CAAC,EAC9G,CAACA,EAAM,SAAUA,EAAM,SAAUA,EAAM,QAASA,EAAM,gBAAiBA,EAAM,WAAW,CAAA,EAG1FoE,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACjS,GAAU,CAAC3D,EAAM,OAEtB,MAAM5G,EAAQuK,EAAO,oBAAoB6N,CAAK,EAC9C,GAAI,CAACpY,EAAO,OACZgwB,EAAS,QAAUhwB,EACnB,MAAMmwB,EAAYnwB,EAAc,IAC1BowB,EAAWxpB,EAAa,IAC1BwpB,GAAW,OAAOA,EAAQ,YAAe,YAC3CA,EAAQ,WAAWD,CAAQ,EAG7B,MAAME,EAAgBx5B,GAAA,OAAe,OAAAP,EAAA25B,EAAW,UAAX,YAAA35B,EAAA,KAAA25B,EAAqBp5B,IAC1D,OAAIs5B,GAAY,OAAOA,EAAS,kBAAqB,YACnDA,EAAS,iBAAiB,QAASE,CAAY,EAE1C,IAAM,CACPF,GAAY,OAAOA,EAAS,qBAAwB,YACtDA,EAAS,oBAAoB,QAASE,CAAY,EAEhDD,GAAW,OAAOA,EAAQ,eAAkB,YAC9CA,EAAQ,cAAcD,CAAQ,CAElC,CAEF,EAAG,CAAC5lB,EAAQ3D,EAAMspB,CAAQ,CAAC,EAEpB,IACT,CAAC,ECpQM,SAASI,IAA2B,CACzC,OAAOrb,IAAgB,GACzB,CCYO,SAASsb,GAAYvW,EAAyC,CACnE,KAAM,CAAE,IAAA5b,CAAA,EAAQ6W,EAAA,EACViH,EAAalE,GAAUgC,CAAO,EACpC7P,EAAAA,UAAU,IAAM,CACV/L,GAAK8d,EAAW,QAAQ9d,CAAG,CACjC,EAAG,CAACA,EAAK8d,CAAU,CAAC,CACtB,CC9BO,SAASsU,IAA+B,CAC7C,OAAO37B,KAAiB,MAC1B,CCAO,SAAS47B,IAA2B,CACzC,KAAM,CAAE,IAAAryB,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EACxB,OAAOhL,UAAQ,IAAO7L,GAAOmM,EAAS,IAAIoL,GAAWvX,EAAKmM,CAAM,EAAI,KAAO,CAACnM,EAAKmM,CAAM,CAAC,CAC1F,CCLO,SAASmmB,IAA2C,CACzD,KAAM,CAAE,OAAAnmB,CAAA,EAAW1V,GAAA,EACnB,OAAO0V,GAAA,YAAAA,EAAQ,eAAgB,IAAI,GACrC,CCGO,SAASomB,GACd74B,EACAwO,EACM,CACN,KAAM,CAAE,IAAAlI,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClB2b,EAAa5Y,GAAU1R,CAAO,EAEpC6D,EAAAA,UAAU,IAAM,CACd,GAAI,GAAC/L,GAAO,CAACmM,GACb,OAAOA,EAAO,iBAAiBnM,EAAKtG,EAAOF,GAAQg5B,EAAW,QAAQh5B,CAAG,CAAC,CAC5E,EAAG,CAACwG,EAAKmM,EAAQzS,EAAM84B,CAAU,CAAC,CACpC,CCMO,SAASC,IAAmC,CACjD,KAAM,CAAE,IAAAzyB,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClB6b,EAAYhnB,EAAAA,OAA2B,IAAI,EAC3CinB,EAAejnB,EAAAA,OAAe,EAAE,EAEtC,OAAO0L,EAAAA,qBACJY,GAAa,CACZ,GAAI,CAAChY,GAAO,CAACmM,QAAe,IAAM,CAAC,EAEnC,MAAMiT,EADS,CAAC,UAAW,UAAW,SAAU,gBAAiB,aAAc,SAAU,aAAa,EAChF,IAAKiB,GAAQlU,EAAO,iBAAiBnM,EAAKqgB,EAAKrI,CAAQ,CAAC,EAC9E,MAAO,IAAMoH,EAAO,QAAShe,GAAMA,GAAG,CACxC,EACA,IAAM,CACJ,GAAI,CAACpB,GAAO,CAACmM,EAAQ,OAAO,KAC5B,MAAMymB,EAAOC,GAAa7yB,EAAKmM,CAAM,EAC/BjP,EAAM41B,GAAYF,CAAI,EAC5B,OAAI11B,IAAQy1B,EAAa,QAAgBD,EAAU,SACnDC,EAAa,QAAUz1B,EACvBw1B,EAAU,QAAUE,EACbA,EACT,EACA,IAAM,IAAA,CAEV,CAGA,SAASE,GAAYp3B,EAA+B,CAClD,GAAI,CAACA,EAAG,MAAO,GACf,MAAM0E,EAAI1E,EAAE,OACNxC,EAAIwC,EAAE,OACNgB,EAAKhB,EAAE,KACPq3B,EAAOC,GAAsBA,GAAK,MAAQ,OAAO,MAAMA,CAAC,EAAI,OAASA,EAAE,QAAQ,CAAC,EACtF,MAAO,CACL5yB,GAAK,CAAC,OAAO,MAAMA,EAAE,GAAG,EAAI,GAAGA,EAAE,IAAI,QAAQ,CAAC,CAAC,IAAIA,EAAE,IAAI,QAAQ,CAAC,CAAC,GAAK,GACxE2yB,EAAIr3B,EAAE,IAAI,EACVq3B,EAAIr3B,EAAE,OAAO,EACbq3B,EAAIr3B,EAAE,IAAI,EACVxC,GAAK,CAAC,OAAO,MAAMA,EAAE,GAAG,GAAG,EAAI,GAAGA,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,IAAIA,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,IAAIA,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,IAAIA,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,GAAK,GAC/HwD,EAAK,GAAGA,EAAG,MAAM,QAAQ,CAAC,CAAC,IAAIA,EAAG,OAAO,QAAQ,CAAC,CAAC,GAAK,EAAA,EACxD,KAAK,GAAG,CACZ,CAEA,SAASm2B,GAAa7yB,EAA2DmM,EAA8E,CAC7J,MAAO,CACL,OAAQ8mB,GAAU,IAAM9mB,EAAO,UAAUnM,CAAG,CAAC,EAC7C,KAAMkzB,GAAQ,IAAM/mB,EAAO,QAAQnM,CAAG,CAAC,EACvC,OAAQmzB,GAAW,IAAMhnB,EAAO,UAAUnM,CAAG,CAAC,EAC9C,KAAMozB,GAAS,IAAMjnB,EAAO,QAAQnM,CAAG,CAAC,EACxC,QAASkzB,GAAQ,IAAM/mB,EAAO,WAAWnM,CAAG,CAAC,EAC7C,KAAMkzB,GAAQ,IAAM/mB,EAAO,QAAQnM,CAAG,CAAC,CAAA,CAE3C,CAEA,SAASizB,GAAUl6B,EAA+B,CAChD,GAAI,CACF,MAAMM,EAAIN,EAAA,EACV,MAAI,CAACM,GAAK,OAAO,MAAMA,EAAE,GAAG,GAAK,OAAO,MAAMA,EAAE,GAAG,EAAU,KACtDA,CACT,MAAQ,CAAE,OAAO,IAAM,CACzB,CAEA,SAAS65B,GAAQn6B,EAAiC,CAChD,GAAI,CACF,MAAM,EAAIA,EAAA,EACV,OAAO,OAAO,GAAM,UAAY,CAAC,OAAO,MAAM,CAAC,EAAI,EAAI,IACzD,MAAQ,CAAE,OAAO,IAAM,CACzB,CAEA,SAASo6B,GAAWp6B,EAAiC,CACnD,GAAI,CACF,MAAMG,EAAIH,EAAA,EACV,MAAI,CAACG,GAAK,OAAO,MAAMA,EAAE,GAAG,GAAG,GAAK,OAAO,MAAMA,EAAE,GAAG,GAAG,EAAU,KAC5DA,CACT,MAAQ,CAAE,OAAO,IAAM,CACzB,CAEA,SAASk6B,GAASr6B,EAA6B,CAC7C,GAAI,CACF,MAAM2C,EAAI3C,EAAA,EACV,OAAK2C,GAAU,IAEjB,MAAQ,CAAE,OAAO,IAAM,CACzB,CCjFO,SAAS23B,GACdC,EACAC,EAAuB,CAAA,EACvBC,EACqB,CACrB,KAAM,CAAE,IAAAxzB,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAClBrV,EAAS0V,GAAA,EAGTuc,EAAY/nB,EAAAA,OAAO4nB,CAAM,EAC/BG,EAAU,QAAUH,EACpB,MAAMI,EAAchoB,EAAAA,OAAO8nB,CAAQ,EACnCE,EAAY,QAAUF,EACtB,MAAMG,EAAcjoB,EAAAA,OAAiB,IAAI,EAEzC0S,OAAAA,EAAAA,gBAAgB,IAAM,OACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMnD,EAAWyqB,EAAU,QAAA,EAC3BE,EAAY,QAAU3qB,EAEtB,MAAM/I,EAAwB,CAAE,QAAS,gBAAiB,IAAK+I,EAAU,KAAM,KAAA,EAE/E,OAAIxH,GAAA,MAAAA,EAAQ,WAAYA,EAAO,WAAWvB,CAAM,EAC3CkM,EAAO,WAAWnM,EAAKC,CAAM,GAClC/H,EAAAw7B,EAAY,UAAZ,MAAAx7B,EAAA,KAAAw7B,EAAsB1qB,GAEf,IAAM,CACPxH,GAAA,MAAAA,EAAQ,cAAeA,EAAO,cAAcvB,CAAM,EACjDkM,EAAO,cAAcnM,EAAKC,CAAM,EACrC0zB,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC3zB,EAAKmM,EAAQ3K,EAAQ,GAAG+xB,CAAI,CAAC,EAE1BI,CACT,CCzCO,SAASC,GACdN,EACAC,EAAuB,CAAA,EACvBC,EACqB,CACrB,KAAM,CAAE,IAAAxzB,EAAK,OAAAmM,CAAA,EAAW0K,EAAA,EAGlB4c,EAAY/nB,EAAAA,OAAO4nB,CAAM,EAC/BG,EAAU,QAAUH,EACpB,MAAMI,EAAchoB,EAAAA,OAAO8nB,CAAQ,EACnCE,EAAY,QAAUF,EACtB,MAAMG,EAAcjoB,EAAAA,OAAiB,IAAI,EAEzC0S,OAAAA,EAAAA,gBAAgB,IAAM,OACpB,GAAI,CAACpe,GAAO,CAACmM,EAAQ,OACrB,MAAMnD,EAAWyqB,EAAU,QAAA,EAC3BE,EAAY,QAAU3qB,EAEtB,MAAM/I,EAAwB,CAAE,QAAS,gBAAiB,IAAK+I,EAAU,KAAM,KAAA,EAC/E,OAAAmD,EAAO,WAAWnM,EAAKC,CAAM,GAC7B/H,EAAAw7B,EAAY,UAAZ,MAAAx7B,EAAA,KAAAw7B,EAAsB1qB,GAEf,IAAM,CACXmD,EAAO,cAAcnM,EAAKC,CAAM,EAChC0zB,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC3zB,EAAKmM,EAAQ,GAAGonB,CAAI,CAAC,EAElBI,CACT,CC1BA,SAASE,GAA4B,CAAE,OAAAP,EAAQ,KAAAC,EAAO,CAAA,EAAI,QAAA3X,GAAqC,CAC7F,OAAAyX,GAAcC,EAAQC,EAAM3X,CAAO,EAC5B,IACT,CAEO,MAAMkY,GAAanT,EAAAA,KAAKkT,EAAc,ECL7C,SAASE,GAA4B,CAAE,OAAAT,EAAQ,KAAAC,EAAO,CAAA,EAAI,QAAA3X,GAAqC,CAC7F,OAAAgY,GAAcN,EAAQC,EAAM3X,CAAO,EAC5B,IACT,CAEO,MAAMoY,GAAarT,EAAAA,KAAKoT,EAAc,ECTtC,SAASE,GAAUja,EAA0C,CAClE,KAAM,CAAE,OAAA7N,CAAA,EAAW0K,EAAA,EACbgD,EAAMnO,EAAAA,OAA6B,IAAI,EACvC,CAACzL,EAAQi0B,CAAS,EAAI1oB,EAAAA,SAA+B,IAAI,EAGzD4W,EAAU7X,EAAgByP,EAAM,IAAI,EAE1CoE,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACjS,EAAQ,OACb,MAAMlS,EAAIkS,EAAO,aAAa6N,EAAM,KAAMA,CAAK,EAC/C,OAAAH,EAAI,QAAU5f,EACdi6B,EAAUj6B,CAAC,EACJ,IAAM,CACX4f,EAAI,QAAU,KACdqa,EAAU,IAAI,CAChB,CAEF,EAAG,CAAC/nB,EAAQiW,CAAO,CAAC,EAGpB,MAAMG,EAAShY,EAAgB,CAC7B,UAAWyP,EAAM,UACjB,YAAaA,EAAM,YACnB,MAAOA,EAAM,MACb,SAAUA,EAAM,SAChB,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,aAAcA,EAAM,aACpB,OAAQA,EAAM,MAAA,CACf,EACDjO,OAAAA,EAAAA,UAAU,IAAM,CACV,CAACI,GAAU,CAAC0N,EAAI,SACpB1N,EAAO,kBAAkB0N,EAAI,QAAS,CACpC,UAAWG,EAAM,UACjB,YAAaA,EAAM,YACnB,MAAOA,EAAM,MACb,SAAUA,EAAM,SAChB,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,aAAcA,EAAM,aACpB,OAAQA,EAAM,MAAA,CACf,CAEH,EAAG,CAAC7N,EAAQoW,CAAM,CAAC,EAEZtiB,CACT,CC/CO,SAASk0B,GAAQna,EAAwC,CAC9D,KAAM,CAAE,OAAA7N,CAAA,EAAW0K,EAAA,EACbgD,EAAMnO,EAAAA,OAA6B,IAAI,EACvC,CAACzL,EAAQi0B,CAAS,EAAI1oB,EAAAA,SAA+B,IAAI,EAGzD4oB,EAASpa,EAAM,IAErBoE,EAAAA,gBAAgB,IAAM,CACpB,GAAI,CAACjS,EAAQ,OACb,MAAMlS,EAAIkS,EAAO,WAAW6N,EAAM,IAAKA,EAAM,KAAMA,CAAK,EACxD,OAAAH,EAAI,QAAU5f,EACdi6B,EAAUj6B,CAAC,EACJ,IAAM,CACX4f,EAAI,QAAU,KACdqa,EAAU,IAAI,CAChB,CAEF,EAAG,CAAC/nB,EAAQioB,CAAM,CAAC,EAGnB,MAAM7R,EAAShY,EAAgB,CAC7B,KAAMyP,EAAM,KACZ,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,UAAWA,EAAM,UACjB,iBAAkBA,EAAM,iBACxB,cAAeA,EAAM,cACrB,OAAQA,EAAM,MAAA,CACf,EACDjO,OAAAA,EAAAA,UAAU,IAAM,CACV,CAACI,GAAU,CAAC0N,EAAI,SACpB1N,EAAO,kBAAkB0N,EAAI,QAAS,CACpC,KAAMG,EAAM,KACZ,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,UAAWA,EAAM,UACjB,iBAAkBA,EAAM,iBACxB,cAAeA,EAAM,cACrB,OAAQA,EAAM,MAAA,CACf,CAEH,EAAG,CAAC7N,EAAQoW,CAAM,CAAC,EAEZtiB,CACT,CCjDO,SAASo0B,GAAaC,EAA2C,CACtE,MAAMxd,EAAMpgB,EAAAA,WAAWkgB,EAAU,EAC3B2d,EAASD,IAAYxd,GAAA,YAAAA,EAAK,MAAO,OACvC,OAAOrf,GAAS88B,CAAM,EAAKA,EAAuB,MACpD,CCVO,MAAMC,GAAqB,IAG3B,SAASC,IAA6B,CAC3C,OAAO,IAAI,MACT,uDAAA,CAEJ,CASO,SAASC,IAA2C,CACzD,MAAMC,EAAWjpB,EAAAA,OAA6C,IAAI,EAE5DkpB,EAAQC,EAAAA,YAAY,IAAM,CAC1BF,EAAS,UACX,aAAaA,EAAS,OAAO,EAC7BA,EAAS,QAAU,KAEvB,EAAG,CAAA,CAAE,EAGL5oB,OAAAA,EAAAA,UAAU,IAAM6oB,EAAO,CAACA,CAAK,CAAC,EAUvB,CAAE,IARGC,EAAAA,YAAY,CAACC,EAAuBC,EAAaP,KAAuB,CAClFI,EAAA,EACAD,EAAS,QAAU,WAAW,IAAM,CAClCA,EAAS,QAAU,KACnBG,EAAA,CACF,EAAGC,CAAE,CACP,EAAG,CAACH,CAAK,CAAC,EAEI,MAAAA,CAAA,CAChB,CC+DO,SAASI,GAA4Bp4B,EAA2B,GAA8B,OACnG,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDg9B,EAASxpB,EAAAA,OAA6B,IAAI,EAC1Cyd,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,EAAAA,SAEvB,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAG9D6pB,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EAGvB,MAAM04B,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,GAAI3N,EAAK,aAAc,GAAIA,EAAK,QAAS,GAAIA,EAAK,cAAe,GAAIA,EAAK,WAAY,EAGvHmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OAGb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GAEnD,MAAMQ,EAAsC,CAAA,EACxC74B,EAAK,eAAiB,SAAW64B,EAAW,aAAe74B,EAAK,cAChEA,EAAK,UAAY,SAAW64B,EAAW,QAAU74B,EAAK,SACtD,OAAO,KAAK44B,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAI3D,IAAI9tB,EAAe,GACnB,GAAI9K,EAAK,WAAa,OACpB8K,EAAM/P,GAAaiF,EAAK,QAAQ,UACvBq4B,EACT,GAAIM,EACF,GAAI,CACF,MAAMn1B,EAAI+L,EAAO,UAAU8oB,CAAS,EAC9B54B,EAAM+L,GAAA,EACZV,EAAOtH,IAAK/D,GAAA,MAAAA,EAAK,OAAS,IAAIA,EAAI,MAAM+D,EAAE,IAAKA,EAAE,GAAG,EAAI,EAC1D,MAAQ,CAAEsH,EAAM,EAAI,MAEpBA,EAAM/P,GAAas9B,CAAS,EAIhC,MAAMh1B,EAASkM,EAAO,kBAAkBzE,EAAK,OAAO,KAAK+tB,CAAU,EAAE,OAAS,EAAIA,EAAa,MAAS,EAIxG,GAHAP,EAAO,QAAUj1B,EACjBkpB,EAAO,QAAUlpB,EAAO,IAEpBA,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,cAAegU,EAAO,OAAO,EAAG,UAAW,GAAO,EACpI,MACF,CAGA,MAAM3S,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,UAClDx6B,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,MAAAn6B,EAAA,KAAAhD,EAAwCw9B,EAC1C,CAAC,EAEC,OAAOl8B,EAAI,uBAA0B,YAAc67B,EAAa,QAAQ,cAC1E77B,EAAI,sBAAuBm8B,GAAoB,UAC7Cz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,MAAAn6B,EAAA,KAAAhD,EAAoCy9B,EACtC,CAAC,EAEC,OAAOn8B,EAAI,wBAA2B,YAAc67B,EAAa,QAAQ,eAC3E77B,EAAI,uBAAuB,CAACo8B,EAAcC,IAAsB,UAC9D36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,MAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,EAC5C,CAAC,EAEC,OAAOr8B,EAAI,2BAA8B,YAAc67B,EAAa,QAAQ,kBAC9E77B,EAAI,0BAA2BuC,GAA2B,UACxDb,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,MAAAn6B,EAAA,KAAAhD,EAAwC6D,EAC1C,CAAC,EAEC,OAAOvC,EAAI,yBAA4B,YAAc67B,EAAa,QAAQ,gBAC5E77B,EAAI,wBAAyBs8B,GAAyB,UACpD56B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,MAAAn6B,EAAA,KAAAhD,EAAsC49B,EACxC,CAAC,EAGHvqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAE/C,IAAM,CACXw5B,EAAO,QAAU,KACjB/L,EAAO,QAAU,IACnB,CAEF,EAAG,CAAChd,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAGtC,MAAMc,EAAWlB,cAAamB,GAAuB,CACnD,GAAI,CAAC7M,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EAED,MAAMj7B,EAAM2vB,EAAO,QACf3vB,GAAO,OAAOA,EAAI,2BAA8B,YAClDA,EAAI,0BAA2Bk8B,GAAqB,SAC9CO,IAAcd,EAAa,UAC/BP,EAAA,GACA15B,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,MAAAn6B,EAAA,KAAAhD,EAAwCw9B,GACxCnqB,EAAS,CAAE,KAAMmqB,EAAc,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAC/E,CAAC,EAEH,GAAI,CACFM,EAAA,CACF,OAASv9B,EAAG,CACVm8B,EAAA,EACIqB,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAE/D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAETsB,EAASrB,EAAAA,YAAY,CAACsB,EAA4BC,IAAsC,CACvFjN,EAAO,SACZ4M,EAAS,IAAM,cACTK,GAAA,YAAAA,EAAQ,cAAe,QACzBl7B,GAAAhD,EAAAixB,EAAO,SAAQ,SAAf,MAAAjuB,EAAA,KAAAhD,EAAwBi+B,EAASC,IAEjC56B,GAAAD,EAAA4tB,EAAO,SAAQ,SAAf,MAAA3tB,EAAA,KAAAD,EAAwB46B,EAE5B,CAAC,CACH,EAAG,CAACJ,CAAQ,CAAC,EAEPM,EAAexB,EAAAA,YAAY,CAACsB,EAA4B5d,EAAwB+d,IAAmB,CAClGnN,EAAO,SACZ4M,EAAS,IAAM,SACb,IAAI31B,EAAamY,EACjB,GAAI9gB,GAAS2I,CAAC,EACZA,EAAIA,EAAE,YACGA,GAAK,OAAOA,GAAM,UAAY,QAASA,EAAG,CAEnD,MAAM/G,EAAI+G,EACJ/D,EAAM+L,GAAA,EACZhI,EAAI,IAAI/D,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CAChC,EACA6B,GAAAhD,EAAAixB,EAAO,SAAQ,eAAf,MAAAjuB,EAAA,KAAAhD,EAA8Bi+B,EAAS/1B,EAAGk2B,EAC5C,CAAC,CACH,EAAG,CAACP,CAAQ,CAAC,EAEPQ,EAAiB1B,EAAAA,YAAY,CAACsB,EAA4B7d,IAAmB,CAC5E6Q,EAAO,SACZ4M,EAAS,IAAM,SACb,IAAI78B,EAAaof,EACjB,GAAI7gB,GAASyB,CAAC,EACZA,EAAIA,EAAE,YACGA,GAAK,OAAOA,GAAM,UAAY,OAAQA,EAAG,CAElD,MAAMs9B,EAAKt9B,EACLmD,EAAM+L,GAAA,EACZlP,EAAI,IAAImD,EAAI,OAAO,IAAIA,EAAI,MAAMm6B,EAAG,GAAG,IAAKA,EAAG,GAAG,GAAG,EAAG,IAAIn6B,EAAI,MAAMm6B,EAAG,GAAG,IAAKA,EAAG,GAAG,GAAG,CAAC,CAC7F,EACAt7B,GAAAhD,EAAAixB,EAAO,SAAQ,iBAAf,MAAAjuB,EAAA,KAAAhD,EAAgCi+B,EAASj9B,EAC3C,CAAC,CACH,EAAG,CAAC68B,CAAQ,CAAC,EAEPU,EAAW5B,cAAa6B,GAAiB,SAC7C,GAAI,CAACvN,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD,GAAI,EACFR,GAAAhD,EAAAixB,EAAO,SAAQ,WAAf,MAAAjuB,EAAA,KAAAhD,EAA0Bw+B,EAC5B,OAASj+B,EAAG,CACNw9B,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAE/D,CACA,MAAMe,EAAM2vB,EAAO,QACf3vB,GAAO,OAAOA,EAAI,2BAA8B,YAClDA,EAAI,0BAA2Bk8B,GAAqB,SAC9CO,IAAcd,EAAa,WAC/Bj6B,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,MAAAn6B,EAAA,KAAAhD,EAAwCw9B,GACxCnqB,EAAS,CAAE,KAAMmqB,EAAc,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAC/E,CAAC,CAEL,EAAG,CAAA,CAAE,EAECiB,EAAe9B,EAAAA,YAAY,IAAM,SACrC,GAAK1L,EAAO,QACZ,IAAI,EAAEjuB,GAAAhD,EAAAixB,EAAO,SAAQ,eAAf,MAAAjuB,EAAA,KAAAhD,EAAiC,MAAQ,CAAa,CAC5DqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,EAC3D,EAAG,CAAA,CAAE,EAECk7B,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEJiC,EAAShC,cAAaiC,GAAkB,SAC5C,GAAI,EAAE57B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,SAAhB,MAAAgD,EAAA,KAAAhD,EAAyB4+B,EAAQ,MAAQ,CAAa,CAC9D,EAAG,CAAA,CAAE,EAECC,EAAgBlC,EAAAA,YAAY,IAAM,SACtC,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,gBAAhB,MAAAgD,EAAA,KAAAhD,EAAmC,MAAQ,CAAa,CAChE,EAAG,CAAA,CAAE,EAEC8+B,EAAcnC,cAAaoC,GAAiE,SAChG,GAAI,CAAC9N,EAAO,QAAS,OACrB,IAAI9uB,EAAa48B,EACjB,GAAIx/B,GAAS4C,CAAC,EACZA,EAAIA,EAAE,YACGA,GAAK,OAAOA,GAAM,UAAY,QAASA,EAAG,CACnD,MAAMhB,EAAIgB,EACJgC,EAAM+L,GAAA,EACZ/N,EAAI,IAAIgC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CAChC,EACA6B,GAAAhD,EAAAixB,EAAO,SAAQ,cAAf,MAAAjuB,EAAA,KAAAhD,EAA6BmC,EAC/B,EAAG,CAAA,CAAE,EAEC68B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxFk/B,EAA6BvC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,6BAAhB,MAAAgD,EAAA,KAAAhD,EAAgD,EAAG,CAAA,CAAE,EACtGm/B,EAA8BxC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,8BAAhB,MAAAgD,EAAA,KAAAhD,EAAiD,EAAG,CAAA,CAAE,EACxGo/B,EAAkBzC,cAAa7B,GAAc,UAAE93B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,kBAAhB,MAAAgD,EAAA,KAAAhD,EAAkC86B,EAAI,EAAG,CAAA,CAAE,EAC1FuE,EAAY1C,EAAAA,YAAY,IAAA,SAA0B,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAEzF,MAAO,CACL,GAAGoT,EACH,OAAA4qB,EAAQ,aAAAG,EAAc,eAAAE,EAAgB,SAAAE,EAAU,aAAAE,EAChD,OAAAE,EAAQ,cAAAE,EAAe,YAAAC,EACvB,mBAAAE,EAAoB,oBAAAC,EACpB,2BAAAC,EAA4B,4BAAAC,EAC5B,gBAAAC,EAAiB,UAAAC,EAAW,OAAAX,CAAA,CAEhC,CC5TO,SAASY,IAAkC,CAChD,KAAM,CAAE,OAAArrB,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,WAAkH,CAC1I,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMlM,EAASkM,EAAO,eAAA,EACtB,GAAIlM,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,WAAYgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACjI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACxBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CACxC,EAAG,CAAChd,CAAM,CAAC,EAEX,MAAMsrB,EAAW5C,cAAa97B,GAA2B,CACvD,GAAI,CAACowB,EAAO,QAAS,OACrB,MAAMuO,EAAcvC,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EAEpD05B,EAAI,IAAM,CACJsC,IAAgBvC,EAAa,SACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,GAAI,CACF17B,EAAGowB,EAAO,OAAO,CACnB,OAAS1wB,EAAG,CACVm8B,EAAA,EACArpB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAC7D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+C,EAAW9C,EAAAA,YAAY,CAAC+C,EAAiBnvB,IAAkB,CAC/D,MAAMivB,EAAc,EAAEvC,EAAa,QACnCsC,EAAUj+B,GAAQ,SAChB,MAAMwH,EAAM62B,GAAgB,CACtBH,IAAgBvC,EAAa,UACjCP,EAAA,EACArpB,EAAS,CAAE,KAAMssB,EAAQ,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACzE,EACIpvB,IAAS,QAAWvQ,EAAAsB,EAAI,WAAJ,MAAAtB,EAAA,KAAAsB,EAAeo+B,EAAS52B,EAAIyH,IAC/CvN,EAAA1B,EAAI,WAAJ,MAAA0B,EAAA,KAAA1B,EAAeo+B,EAAS52B,EAC/B,CAAC,CACH,EAAG,CAACy2B,EAAU7C,CAAK,CAAC,EAEdkD,EAAcjD,EAAAA,YAAY,CAACp0B,EAAcjC,IAAsB,CACnE,MAAMk5B,EAAc,EAAEvC,EAAa,QACnCsC,EAAUj+B,GAAQ,SAChB,MAAM6C,EAAM+L,GAAA,EACNc,EAAK,IAAI7M,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EACvCO,EAAM62B,GAAgB,CACtBH,IAAgBvC,EAAa,UACjCP,EAAA,EACArpB,EAAS,CAAE,KAAMssB,EAAQ,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACzE,EACIr5B,IAAY,QAAWtG,EAAAsB,EAAI,cAAJ,MAAAtB,EAAA,KAAAsB,EAAkB0P,EAAIlI,EAAIxC,IAChDtD,EAAA1B,EAAI,cAAJ,MAAA0B,EAAA,KAAA1B,EAAkB0P,EAAIlI,EAC7B,CAAC,CACH,EAAG,CAACy2B,EAAU7C,CAAK,CAAC,EAEdgC,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEJmD,EAAalD,cAAar2B,GAAqC,UACnEtD,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,aAAhB,MAAAgD,EAAA,KAAAhD,EAA6BsG,EAC/B,EAAG,CAAA,CAAE,EAICw5B,EAAYnD,EAAAA,YAAY,CAACoD,EAAqBxvB,IAC3C,QAAQ,IAAIwvB,EAAU,OAAe,IAAI,QAAuBC,GAAY,SACjF,MAAM1+B,EAAM2vB,EAAO,QACnB,GAAI,CAAC3vB,EAAK,OAAO0+B,EAAQ,IAAI,EAC7B,IAAIC,EAAO,GACX,MAAMC,EAAQ,WAAW,IAAM,CAAOD,IAAQA,EAAO,GAAMD,EAAQ,IAAI,EAAK,EAAG1D,EAAkB,EAC3FxzB,EAAM62B,GAAyB,CAC/BM,IACJA,EAAO,GACP,aAAaC,CAAK,EAClBF,EAAQL,GAAU,IAAI,EACxB,EACIpvB,IAAS,QAAWvQ,EAAAsB,EAAI,WAAJ,MAAAtB,EAAA,KAAAsB,EAAeo+B,EAAS52B,EAAIyH,IAC/CvN,EAAA1B,EAAI,WAAJ,MAAA0B,EAAA,KAAA1B,EAAeo+B,EAAS52B,EAC/B,CAAC,CAAC,CAAC,EACF,CAAA,CAAE,EAECq3B,EAAexD,EAAAA,YAAY,CAAC5rB,EAAiBzK,IAC1C,QAAQ,IAAIyK,EAAO,OAAa,IAAI,QAAgCivB,GAAY,SACrF,MAAM1+B,EAAM2vB,EAAO,QACnB,GAAI,CAAC3vB,EAAK,OAAO0+B,EAAQ,IAAI,EAC7B,MAAM77B,EAAM+L,GAAA,EACNc,EAAK,IAAI7M,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EAC7C,IAAI03B,EAAO,GACX,MAAMC,EAAQ,WAAW,IAAM,CAAOD,IAAQA,EAAO,GAAMD,EAAQ,IAAI,EAAK,EAAG1D,EAAkB,EAC3FxzB,EAAM62B,GAAkC,CACxCM,IACJA,EAAO,GACP,aAAaC,CAAK,EAClBF,EAAQL,GAAU,IAAI,EACxB,EACIr5B,IAAY,QAAWtG,EAAAsB,EAAI,cAAJ,MAAAtB,EAAA,KAAAsB,EAAkB0P,EAAIlI,EAAIxC,IAChDtD,EAAA1B,EAAI,cAAJ,MAAA0B,EAAA,KAAA1B,EAAkB0P,EAAIlI,EAC7B,CAAC,CAAC,CAAC,EACF,CAAA,CAAE,EAEL,MAAO,CAAE,GAAGsK,EAAO,SAAAqsB,EAAU,YAAAG,EAAa,UAAAE,EAAW,aAAAK,EAAc,WAAAN,EAAY,OAAAnB,CAAA,CACjF,CCrIO,SAAS0B,IAAkC,CAChD,KAAM,CAAE,OAAAnsB,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,WAA0G,CAClI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMlM,EAASkM,EAAO,eAAA,EACtB,GAAIlM,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,WAAYgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACjI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACxBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CACxC,EAAG,CAAChd,CAAM,CAAC,EAEX,MAAMvF,EAAMiuB,cAAaplB,GAAiB,SACxC,GAAI,CAAC0Z,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,GAAI,EACFv5B,GAAAhD,EAAAixB,EAAO,SAAQ,MAAf,MAAAjuB,EAAA,KAAAhD,EAAqBuX,EAAOooB,GAAgB,CACtC5B,IAAcd,EAAa,UAC/BP,EAAA,EACArpB,EAAS,CAAE,KAAMssB,EAAQ,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACzE,EACF,OAASp/B,EAAG,CACVm8B,EAAA,EACIqB,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAE/D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET2D,EAAa1D,cAAa2D,GAAA,SAAiC,OAAAt9B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,aAAhB,YAAAgD,EAAA,KAAAhD,EAA6BsgC,IAAc,EAAE,EAExG5B,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEV,MAAO,CAAE,GAAGtpB,EAAO,IAAA1E,EAAK,WAAA2xB,EAAY,OAAA3B,CAAA,CACtC,CCrDO,SAAS6B,GAAe77B,EAA+D,CAC5F,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBnS,EAAS,KAAK,UAAU3lB,GAAQ,CAAA,CAAE,EAElC,CAAC0O,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,SACd,GAAI,CAACI,EAAQ,OACb,MAAMvO,EAAoC,CAAA,EACtChB,GAAA,MAAAA,EAAM,oBAAmBgB,EAAS,YAAc,IACpD,MAAMqC,EAASkM,EAAO,kBAAkB,OAAO,KAAKvO,CAAQ,EAAE,OAAS,EAAIA,EAAW,MAAS,EAC/F,GAAIqC,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,cAAegU,EAAO,OAAO,EAAG,UAAW,GAAO,EACpI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACpBrD,GAAA,MAAAA,EAAM,qBAAmB1B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,oBAAhB,MAAAgD,EAAA,KAAAhD,IAC7BqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CAExC,EAAG,CAAChd,EAAQoW,CAAM,CAAC,EAEnB,MAAMmW,EAAqB7D,cAAar2B,GAAsB,aAC5D,GAAI,CAAC2qB,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,GAAI,CACF,MAAMzzB,EAAM62B,GAAgB,CACtB5B,IAAcd,EAAa,UAC/BP,EAAA,EACArpB,EAAS,CAAE,KAAMssB,EAAQ,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACzE,EACIr5B,IAAY,QAAWtD,GAAAhD,EAAAixB,EAAO,SAAQ,qBAAf,MAAAjuB,EAAA,KAAAhD,EAAoC8I,EAAIxC,IAC9DhD,GAAAD,EAAA4tB,EAAO,SAAQ,qBAAf,MAAA3tB,EAAA,KAAAD,EAAoCyF,EAC3C,OAASvI,EAAG,CACVm8B,EAAA,EACIqB,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAE/D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET2C,EAAY1C,EAAAA,YAAY,IAAM,SAClC,OAAO35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,EACT,EAAG,CAAA,CAAE,EAECygC,EAAoB9D,EAAAA,YAAY,IAAM,UAC1C35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,oBAAhB,MAAAgD,EAAA,KAAAhD,EACF,EAAG,CAAA,CAAE,EAEC0gC,EAAqB/D,EAAAA,YAAY,IAAM,UAC3C35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EACF,EAAG,CAAA,CAAE,EAEC0+B,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEV,MAAO,CAAE,GAAGtpB,EAAO,mBAAAotB,EAAoB,UAAAnB,EAAW,kBAAAoB,EAAmB,mBAAAC,EAAoB,OAAAhC,CAAA,CAC3F,CCxEO,SAASiC,IAAoC,CAClD,KAAM,CAAE,OAAA1sB,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,WAA2G,CACnI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMlM,EAASkM,EAAO,gBAAA,EACtB,GAAIlM,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,YAAagU,EAAO,OAAO,EAAG,UAAW,GAAO,EAClI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACxBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CACxC,EAAG,CAAChd,CAAM,CAAC,EAEX,MAAMvF,EAAMiuB,EAAAA,YAAY,IAAM,SAC5B,GAAI,CAAC1L,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,GAAI,EACFv5B,GAAAhD,EAAAixB,EAAO,SAAQ,MAAf,MAAAjuB,EAAA,KAAAhD,EAAsB2/B,GAAgB,CAChC5B,IAAcd,EAAa,UAC/BP,EAAA,EACArpB,EAAS,CAAE,KAAMssB,EAAQ,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACzE,EACF,OAASp/B,EAAG,CACVm8B,EAAA,EACIqB,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAE/D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAETgC,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEV,MAAO,CAAE,GAAGtpB,EAAO,IAAA1E,EAAK,OAAAgwB,CAAA,CAC1B,CClDA,MAAMkC,GAAuB,IAWtB,SAASC,IAAoC,CAClD,KAAM,CAAE,OAAA5sB,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,WAA4G,CACpI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMlM,EAASkM,EAAO,gBAAA,EACtB,GAAIlM,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,YAAagU,EAAO,OAAO,EAAG,UAAW,GAAO,EAClI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACxBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CACxC,EAAG,CAAChd,CAAM,CAAC,EAEX,MAAM6sB,EAAYnE,EAAAA,YAAY,CAAC5rB,EAAiBgwB,EAAeC,IAAgB,CAC7E,GAAI,CAAC/P,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD,GAAI,CACF,MAAMW,EAAM+L,GAAA,EAEN+wB,EAAoB,CAAA,EAC1B,QAASx9B,EAAI,EAAGA,EAAIsN,EAAO,OAAQtN,GAAKm9B,GACtCK,EAAO,KAAKlwB,EAAO,MAAMtN,EAAGA,EAAIm9B,EAAoB,CAAC,EAEvD,GAAIK,EAAO,SAAW,EAAG,CACvBvE,EAAA,EACArpB,EAAS,CAAE,KAAM,CAAE,OAAQ,EAAG,OAAQ,CAAA,CAAC,EAAK,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAC1F,MACF,CAEA6pB,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EAGD,MAAMiB,EAAiB,IAAI,MAAMyD,EAAO,MAAM,EAC9C,IAAIC,EAAYD,EAAO,OACvBA,EAAO,QAAQ,CAACE,EAAO9xB,IAAQ,SAC7B,MAAM2f,EAAMmS,EAAM,IAAIhgC,GAAK,IAAIgD,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CAAC,EAChD2H,EAAM62B,GAAgB,CAG1B,GAFI5B,IAAcd,EAAa,UAC/BO,EAAQnuB,CAAG,EAAIswB,EACX,EAAEuB,EAAY,GAAG,OAErB,GADAxE,EAAA,EACIuE,EAAO,SAAW,EAAG,CAEvB5tB,EAAS,CAAE,KAAMmqB,EAAQ,CAAC,EAAG,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAC3E,MACF,CAEA,MAAM4D,EAAwB,CAAA,EAC9B,IAAIC,EACJ,UAAWjgC,KAAKo8B,EACVp8B,GAAKA,EAAE,SAAW,GAAKA,EAAE,SAAW,WAAuBA,EAAE,QAC7DA,GAAA,MAAAA,EAAG,QAAQggC,EAAa,KAAK,GAAGhgC,EAAE,MAAM,EAE9CiS,EAAS,CAAE,KAAM,CAAE,OAAQguB,GAAa,EAAG,OAAQD,CAAA,EAAgB,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,CACnH,GACAp+B,GAAAhD,EAAAixB,EAAO,SAAQ,YAAf,MAAAjuB,EAAA,KAAAhD,EAA2BgvB,EAAK+R,EAAMC,EAAIl4B,EAC5C,CAAC,CACH,OAAS,EAAG,CACV4zB,EAAA,EACIqB,IAAcd,EAAa,SAC7B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO,GAAa,CAE/D,CACF,EAAG,CAAC05B,EAAKR,CAAK,CAAC,EAETgC,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEV,MAAO,CAAE,GAAGtpB,EAAO,UAAA0tB,EAAW,OAAApC,CAAA,CAChC,CC5FO,SAAS4C,IAAgD,CAC9D,KAAM,CAAE,OAAArtB,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EAEjB,CAACppB,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMlM,EAASkM,EAAO,sBAAA,EACtB,GAAIlM,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,kBAAmBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACxI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IACxBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,IAAM,CACxC,EAAG,CAAChd,CAAM,CAAC,EAEX,MAAMsrB,EAAW5C,cAAa97B,GAA2B,CACvD,GAAI,CAACowB,EAAO,QAAS,OACrB,MAAMuO,EAAcvC,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJsC,IAAgBvC,EAAa,SACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,GAAI,CACF17B,EAAGowB,EAAO,OAAO,CACnB,OAAS1wB,EAAG,CACVm8B,EAAA,EACArpB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAC7D,CACF,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET6E,EAAkB5E,cAAa3zB,GAAe,CAClD,MAAMw2B,EAAc,EAAEvC,EAAa,QACnCsC,EAAUj+B,GAAQ,QAChBtB,EAAAsB,EAAI,kBAAJ,MAAAtB,EAAA,KAAAsB,EAAsB0H,EAAK8G,GAAc,CACnC0vB,IAAgBvC,EAAa,UACjCP,EAAA,EACArpB,EAAS,CAAE,KAAAvD,EAAM,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACjE,EACF,CAAC,CACH,EAAG,CAACyvB,EAAU7C,CAAK,CAAC,EAEd8E,EAAwB7E,EAAAA,YAAY,CAACp0B,EAAc61B,IAAoB,CAC3E,MAAMoB,EAAc,EAAEvC,EAAa,QACnCsC,EAAUj+B,GAAQ,SAChB,MAAM6C,EAAM+L,GAAA,EACNc,EAAK,IAAI7M,EAAI,MAAMoE,EAAM,IAAKA,EAAM,GAAG,EACvCO,EAAMgH,GAAc,CACpB0vB,IAAgBvC,EAAa,UACjCP,EAAA,EACArpB,EAAS,CAAE,KAAAvD,EAAM,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACjE,EAEI,OAAOsuB,GAAW,cAAc,uCAAwBptB,EAAIotB,EAAQt1B,IACnE9F,EAAA1B,EAAI,wBAAJ,MAAA0B,EAAA,KAAA1B,EAA4B0P,EAAIlI,EACvC,CAAC,CACH,EAAG,CAACy2B,EAAU7C,CAAK,CAAC,EAEd+E,EAAqB9E,cAAa+E,GAAkB,CACxD,MAAMlC,EAAc,EAAEvC,EAAa,QACnCsC,EAAUj+B,GAAQ,CAChB,GAAI,OAAOA,EAAI,oBAAuB,WAAY,CAChDo7B,EAAA,EACArpB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO,IAAI,MAAM,iDAAiD,CAAA,EAAI,EAC7G,MACF,CACAlC,EAAI,mBAAmBogC,EAAQ5xB,GAAc,CACvC0vB,IAAgBvC,EAAa,UACjCP,EAAA,EACArpB,EAAS,CAAE,KAAAvD,EAAM,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EACjE,CAAC,CACH,CAAC,CACH,EAAG,CAACyvB,EAAU7C,CAAK,CAAC,EAEdgC,EAAS/B,EAAAA,YAAY,IAAM,CAC/BM,EAAa,UACbP,EAAA,EACArpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAC1C,EAAG,CAACk5B,CAAK,CAAC,EAEV,MAAO,CAAE,GAAGtpB,EAAO,gBAAAmuB,EAAiB,sBAAAC,EAAuB,mBAAAC,EAAoB,OAAA/C,CAAA,CACjF,CC7FO,SAASiD,GACd1tB,EACA8oB,EACAM,EACS,CACT,GAAI,CAACN,EAAW,MAAO,GACvB,GAAI,CAACM,EAAU,OAAO59B,GAAas9B,CAAS,EAC5C,GAAI,CACF,MAAM70B,EAAI+L,EAAO,UAAU8oB,CAAkB,EACvC54B,EAAM+L,GAAA,EACZ,OAAQhI,IAAM/D,GAAA,MAAAA,EAA6B,OAAS,IAAKA,EAA6D,MAAM+D,EAAE,IAAKA,EAAE,GAAG,EAAI,EAC9I,MAAQ,CACN,MAAO,EACT,CACF,CCqDO,SAAS05B,GAAgBl9B,EAA4B,GAA4B,OACtF,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMm9B,EAAcruB,EAAAA,OAA4C,IAAI,EAM9DsuB,EAAgBtuB,EAAAA,OAAO,EAAK,EAC5BuuB,EAAYvuB,EAAAA,OAAO,EAAK,EAExB,CAACJ,EAAOC,CAAQ,EAAIC,WAA8G,CACtI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,OAAQ3N,EAAK,OAAQ,aAAcA,EAAK,aAAc,GAAIA,EAAK,WAAY,GAAIA,EAAK,cAAe,EAEpImP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GAEnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI9K,EAAK,SAAW,SAAW64B,EAAW,OAAS74B,EAAK,QACpDA,EAAK,eAAiB,SAAW64B,EAAW,aAAe74B,EAAK,cAChE,OAAO,KAAK44B,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAC3DC,EAAW,iBAAoBC,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,EAClFL,EAAa,QAAQ,eAAcI,EAAW,aAAgBE,YAAoB,OAAAz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,YAAAn6B,EAAA,KAAAhD,EAAoCy9B,KACtHN,EAAa,QAAQ,gBAAeI,EAAW,cAAgB,CAACG,EAAcC,IAAA,SAAsB,OAAA36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,YAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,KAC9IR,EAAa,QAAQ,iBAAgBI,EAAW,eAAkByE,YAAmB,OAAAh/B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,YAAAn6B,EAAA,KAAAhD,EAAsCgiC,KAC3H7E,EAAa,QAAQ,mBAAkBI,EAAW,iBAAoBr1B,YAAmB,OAAAlF,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,YAAAn6B,EAAA,KAAAhD,EAAwCkI,KAErI,MAAMH,EAASkM,EAAO,mBAAmBspB,CAAU,EACnD,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,eAAgBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACrI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IAExB+5B,EAAc,QAAUxE,EAAG,KAAO,KAClCyE,EAAU,QAAU,GAEpB,MAAMzgC,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,CAAC,EAEzFnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,SAGX,GAAI,EAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAC7DixB,EAAO,QAAU,KACjB4Q,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC5tB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,EAAAA,YAAY,CAAC/c,EAAgBC,EAAcvZ,IAAwC,OAChG,GAAI,CAAC2qB,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,IAAA,EAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QAGb9sB,EAAM+L,GAAA,EACN+xB,EAAWz7B,GAAwB,CACvC,GAAI,CAACA,EAAG,OAAOA,EACf,GAAIjH,GAASiH,CAAC,EAAG,OAAOA,EAAE,IAC1B,GAAI,OAAOA,GAAM,UAAY,QAASA,EAAG,CACvC,MAAMrF,EAAIqF,EACV,OAAO,IAAIrC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CACA,OAAOqF,CACT,EACMhD,EAAIy+B,EAAQriB,CAAK,EACjBrf,EAAI0hC,EAAQpiB,CAAG,EACfnb,EAAO4B,GAAA,MAAAA,EAAS,UAAY,CAAE,UAAWA,EAAQ,UAAU,IAAI27B,CAAO,CAAA,EAAM,OAE5En5B,EAAM00B,GAAqB,cAC/B,GAAIO,IAAcd,EAAa,QAAS,OACxCP,EAAA,EACA,IAAIwF,EAAS1E,EACb,GAAI,CAAC0E,GAAW,OAAOA,GAAW,UAAY,OAAO,KAAKA,CAAgB,EAAE,SAAW,EACrF,GAAI,CAAEA,GAASliC,EAAAsB,EAAI,aAAJ,YAAAtB,EAAA,KAAAsB,EAAoB,MAAQ,CAAa,CAK1D,IAHA+B,GAAAL,EAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,EAAA,KAAAL,EAAwCk/B,GACxC7uB,EAAS,CAAE,KAAO6uB,GAAU1E,EAAgC,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAEtGsE,EAAc,SAAW,CAACC,EAAU,QAAS,CAC/CA,EAAU,QAAU,GACpB,GAAI,EAAEz+B,GAAAhC,EAAI,SAAJ,MAAAgC,GAAA,KAAAhC,EAAakC,EAAGjD,EAAGmE,EAAO,MAAQ,CAAa,CACvD,CACF,EACAm9B,EAAY,QAAU/4B,EAEtB,GAAI,EAAE9I,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAakC,EAAGjD,EAAGmE,EAAO,OACzBnE,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SACrC,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAyD,CACzGqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAC3D,EAAG,CAAA,CAAE,EAECw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxFmiC,EAAYxF,cAAayF,GAAmB,UAAEp/B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,MAAAgD,EAAA,KAAAhD,EAA4BoiC,EAAS,EAAG,CAAA,CAAE,EACxFtD,EAAcnC,cAAaoC,GAAsB,UACrD/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EACrD,EAAG,CAAA,CAAE,EACCsD,EAAmB1F,cAAanX,GAAmC,UAAExiB,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,mBAAhB,MAAAgD,EAAA,KAAAhD,EAAmCwlB,EAAQ,EAAG,CAAA,CAAE,EACrH6Z,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/D0+B,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EAEzH,MAAO,CAAE,GAAGtpB,EAAO,OAAA4qB,EAAQ,aAAAS,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,UAAAkD,EAAW,YAAArD,EAAa,iBAAAuD,EAAkB,UAAAhD,EAAW,OAAAX,CAAA,CACzI,CCzMO,SAAS4D,GAA6B59B,EAA4B,GAA4B,OACnG,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMm9B,EAAcruB,EAAAA,OAA4C,IAAI,EAC9DsuB,EAAgBtuB,EAAAA,OAAO,EAAK,EAC5BuuB,EAAYvuB,EAAAA,OAAO,EAAK,EAExB,CAACJ,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,GAAI3N,EAAK,WAAY,GAAIA,EAAK,cAAe,EAE9EmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GACnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI,OAAO,KAAK8tB,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAC3DC,EAAW,iBAAoBC,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,EAClFL,EAAa,QAAQ,eAAcI,EAAW,aAAgBE,YAAoB,OAAAz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,YAAAn6B,EAAA,KAAAhD,EAAoCy9B,KACtHN,EAAa,QAAQ,gBAAeI,EAAW,cAAgB,CAACG,EAAcC,IAAA,SAAsB,OAAA36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,YAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,KAC9IR,EAAa,QAAQ,iBAAgBI,EAAW,eAAkByE,YAAmB,OAAAh/B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,YAAAn6B,EAAA,KAAAhD,EAAsCgiC,KAC3H7E,EAAa,QAAQ,mBAAkBI,EAAW,iBAAoBr1B,YAAmB,OAAAlF,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,YAAAn6B,EAAA,KAAAhD,EAAwCkI,KAErI,MAAMH,EAASkM,EAAO,mBAAmB,OAAO,KAAKspB,CAAU,EAAE,OAAS,EAAIA,EAAa,MAAS,EACpG,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,eAAgBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACrI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IACxB+5B,EAAc,QAAUxE,EAAG,KAAO,KAClCyE,EAAU,QAAU,GACpB,MAAMzgC,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,CAAC,EAEzFnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,SAEX,GAAI,EAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAC7DixB,EAAO,QAAU,KACjB4Q,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC5tB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,EAAAA,YAAY,CAAC/c,EAAgBC,EAAc0iB,IAAyC,OACjG,GAAI,CAACtR,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,IAAA,EAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACb9sB,EAAM+L,GAAA,EACN+xB,EAAWz7B,GAAe,CAC9B,GAAI,CAACA,EAAG,OAAOA,EACf,GAAIjH,GAASiH,CAAC,EAAG,OAAOA,EAAE,IAC1B,GAAI,OAAOA,GAAM,UAAY,QAASA,EAAG,CACvC,MAAMrF,EAAIqF,EACV,OAAO,IAAIrC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CACA,OAAOqF,CACT,EACMhD,EAAIy+B,EAAQriB,CAAK,EACjBrf,EAAI0hC,EAAQpiB,CAAG,EACf/W,EAAM00B,GAAqB,aAC/B,GAAIO,IAAcd,EAAa,QAAS,OACxCP,EAAA,EACA,IAAIwF,EAAS1E,EACb,GAAI,CAAC0E,GAAW,OAAOA,GAAW,UAAY,OAAO,KAAKA,CAAgB,EAAE,SAAW,EACrF,GAAI,CAAEA,GAASliC,EAAAsB,EAAI,aAAJ,YAAAtB,EAAA,KAAAsB,EAAoB,MAAQ,CAAa,CAK1D,IAHA+B,GAAAL,EAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,EAAA,KAAAL,EAAwCk/B,GACxC7uB,EAAS,CAAE,KAAM6uB,GAAU1E,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAE9EsE,EAAc,SAAW,CAACC,EAAU,QAAS,CAC/CA,EAAU,QAAU,GACpB,GAAI,EAAEz+B,EAAAhC,EAAI,SAAJ,MAAAgC,EAAA,KAAAhC,EAAakC,EAAGjD,EAAI,MAAQ,CAAa,CACjD,CACF,EACAshC,EAAY,QAAU/4B,EAClB,OAAOxH,EAAI,2BAA8B,YAAYA,EAAI,0BAA0BwH,CAAE,EACzF,GAAI,EAAE9I,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAakC,EAAGjD,EAAI,OACnBA,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SAAE,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAAEqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EACnKw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxF8+B,EAAcnC,cAAaoC,GAAsB,UACrD/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EACrD,EAAG,CAAA,CAAE,EACCsD,EAAmB1F,cAAanX,GAAmC,UAAExiB,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,mBAAhB,MAAAgD,EAAA,KAAAhD,EAAmCwlB,EAAQ,EAAG,CAAA,CAAE,EACrH6Z,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/D0+B,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EAGnHyF,EAAYxF,cAAa9wB,GAAe,CAAC,EAAG,CAAA,CAAE,EACpD,MAAO,CAAE,GAAGuH,EAAO,OAAA4qB,EAAQ,aAAAS,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,UAAAkD,EAAW,YAAArD,EAAa,iBAAAuD,EAAkB,UAAAhD,EAAW,OAAAX,CAAA,CACzI,CCtHO,SAAS8D,GAA4B99B,EAA2B,GAA2B,OAChG,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMm9B,EAAcruB,EAAAA,OAA4C,IAAI,EAC9DsuB,EAAgBtuB,EAAAA,OAAO,EAAK,EAC5BuuB,EAAYvuB,EAAAA,OAAO,EAAK,EAExB,CAACJ,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,GAAI3N,EAAK,WAAY,GAAIA,EAAK,cAAe,EAE9EmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GACnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI,OAAO,KAAK8tB,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAC3DC,EAAW,iBAAoBC,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,EAClFL,EAAa,QAAQ,eAAcI,EAAW,aAAgBE,YAAoB,OAAAz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,YAAAn6B,EAAA,KAAAhD,EAAoCy9B,KACtHN,EAAa,QAAQ,gBAAeI,EAAW,cAAgB,CAACG,EAAcC,IAAA,SAAsB,OAAA36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,YAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,KAC9IR,EAAa,QAAQ,iBAAgBI,EAAW,eAAkByE,YAAmB,OAAAh/B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,YAAAn6B,EAAA,KAAAhD,EAAsCgiC,KAC3H7E,EAAa,QAAQ,mBAAkBI,EAAW,iBAAoBr1B,YAAmB,OAAAlF,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,YAAAn6B,EAAA,KAAAhD,EAAwCkI,KAErI,MAAMH,EAASkM,EAAO,kBAAkB,OAAO,KAAKspB,CAAU,EAAE,OAAS,EAAIA,EAAa,MAAS,EACnG,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,cAAegU,EAAO,OAAO,EAAG,UAAW,GAAO,EACpI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IACxB+5B,EAAc,QAAUxE,EAAG,KAAO,KAClCyE,EAAU,QAAU,GACpB,MAAMzgC,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,CAAC,EAEzFnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,SAEX,GAAI,EAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAC7DixB,EAAO,QAAU,KACjB4Q,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC5tB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,EAAAA,YAAY,CAAC/c,EAAgBC,EAAc0iB,IAAyC,OACjG,GAAI,CAACtR,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,IAAA,EAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACb9sB,EAAM+L,GAAA,EACN+xB,EAAWz7B,GAAe,CAC9B,GAAI,CAACA,EAAG,OAAOA,EACf,GAAIjH,GAASiH,CAAC,EAAG,OAAOA,EAAE,IAC1B,GAAI,OAAOA,GAAM,UAAY,QAASA,EAAG,CACvC,MAAMrF,EAAIqF,EACV,OAAO,IAAIrC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CACA,OAAOqF,CACT,EACMhD,EAAIy+B,EAAQriB,CAAK,EACjBrf,EAAI0hC,EAAQpiB,CAAG,EACf/W,EAAM00B,GAAqB,aAC/B,GAAIO,IAAcd,EAAa,QAAS,OACxCP,EAAA,EACA,IAAIwF,EAAS1E,EACb,GAAI,CAAC0E,GAAW,OAAOA,GAAW,UAAY,OAAO,KAAKA,CAAgB,EAAE,SAAW,EACrF,GAAI,CAAEA,GAASliC,EAAAsB,EAAI,aAAJ,YAAAtB,EAAA,KAAAsB,EAAoB,MAAQ,CAAa,CAK1D,IAHA+B,GAAAL,EAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,EAAA,KAAAL,EAAwCk/B,GACxC7uB,EAAS,CAAE,KAAM6uB,GAAU1E,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAE9EsE,EAAc,SAAW,CAACC,EAAU,QAAS,CAC/CA,EAAU,QAAU,GACpB,GAAI,EAAEz+B,EAAAhC,EAAI,SAAJ,MAAAgC,EAAA,KAAAhC,EAAakC,EAAGjD,EAAI,MAAQ,CAAa,CACjD,CACF,EACAshC,EAAY,QAAU/4B,EAClB,OAAOxH,EAAI,2BAA8B,YAAYA,EAAI,0BAA0BwH,CAAE,EACzF,GAAI,EAAE9I,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAakC,EAAGjD,EAAI,OACnBA,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SAAE,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAAEqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EACnKw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxF8+B,EAAcnC,cAAaoC,GAAsB,UACrD/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EACrD,EAAG,CAAA,CAAE,EACCM,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/DqiC,EAAmB1F,cAAanX,GAAmC,UAAExiB,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,mBAAhB,MAAAgD,EAAA,KAAAhD,EAAmCwlB,EAAQ,EAAG,CAAA,CAAE,EACrHkZ,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EACnHyF,EAAYxF,cAAa9wB,GAAe,CAAC,EAAG,CAAA,CAAE,EACpD,MAAO,CAAE,GAAGuH,EAAO,OAAA4qB,EAAQ,aAAAS,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,UAAAkD,EAAW,YAAArD,EAAa,iBAAAuD,EAAkB,UAAAhD,EAAW,OAAAX,CAAA,CACzI,CCzGO,SAAS+D,GAA6B/9B,EAA4B,GAA4B,OACnG,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMm9B,EAAcruB,EAAAA,OAA4C,IAAI,EAC9DsuB,EAAgBtuB,EAAAA,OAAO,EAAK,EAC5BuuB,EAAYvuB,EAAAA,OAAO,EAAK,EAExB,CAACJ,EAAOC,CAAQ,EAAIC,WAA8G,CACtI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,OAAQ3N,EAAK,OAAQ,gBAAiBA,EAAK,gBAAiB,kBAAmBA,EAAK,kBAAmB,GAAIA,EAAK,WAAY,GAAIA,EAAK,cAAe,EAErLmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GACnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI9K,EAAK,SAAW,SAAW64B,EAAW,OAAS74B,EAAK,QACpDA,EAAK,kBAAoB,SAAW64B,EAAW,gBAAkB74B,EAAK,iBACtEA,EAAK,oBAAsB,SAAW64B,EAAW,kBAAoB74B,EAAK,mBAC1E,OAAO,KAAK44B,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAC3DC,EAAW,iBAAoBC,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,EAClFL,EAAa,QAAQ,eAAcI,EAAW,aAAgBE,YAAoB,OAAAz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,YAAAn6B,EAAA,KAAAhD,EAAoCy9B,KACtHN,EAAa,QAAQ,gBAAeI,EAAW,cAAgB,CAACG,EAAcC,IAAA,SAAsB,OAAA36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,YAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,KAC9IR,EAAa,QAAQ,iBAAgBI,EAAW,eAAkByE,YAAmB,OAAAh/B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,YAAAn6B,EAAA,KAAAhD,EAAsCgiC,KAC3H7E,EAAa,QAAQ,mBAAkBI,EAAW,iBAAoBr1B,YAAmB,OAAAlF,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,YAAAn6B,EAAA,KAAAhD,EAAwCkI,KAErI,MAAMH,EAASkM,EAAO,mBAAmB,OAAO,KAAKspB,CAAU,EAAE,OAAS,EAAIA,EAAa,MAAS,EACpG,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,eAAgBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACrI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IACxB+5B,EAAc,QAAUxE,EAAG,KAAO,KAClCyE,EAAU,QAAU,GACpB,MAAMzgC,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,CAAC,EAEzFnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,SAEX,GAAI,EAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAC7DixB,EAAO,QAAU,KACjB4Q,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC5tB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,EAAAA,YAAY,CAAC/c,EAAgBC,EAAc0iB,IAAyC,OACjG,GAAI,CAACtR,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,IAAA,EAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACb9sB,EAAM+L,GAAA,EACN+xB,EAAWz7B,GAAe,CAC9B,GAAI,CAACA,EAAG,OAAOA,EACf,GAAIjH,GAASiH,CAAC,EAAG,OAAOA,EAAE,IAC1B,GAAI,OAAOA,GAAM,UAAY,QAASA,EAAG,CACvC,MAAMrF,EAAIqF,EACV,OAAO,IAAIrC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CACA,OAAOqF,CACT,EACMhD,EAAIy+B,EAAQriB,CAAK,EACjBrf,EAAI0hC,EAAQpiB,CAAG,EACf/W,EAAM00B,GAAqB,gBAC/B,GAAIO,IAAcd,EAAa,QAAS,OACxCP,EAAA,EACA,IAAIwF,EAAS1E,EACb,GAAI,CAAC0E,GAAW,OAAOA,GAAW,UAAY,OAAO,KAAKA,CAAgB,EAAE,SAAW,EACrF,GAAI,CAAEA,GAASliC,EAAAsB,EAAI,aAAJ,YAAAtB,EAAA,KAAAsB,EAAoB,MAAQ,CAAa,CAK1D,IAHA+B,IAAAL,GAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,GAAA,KAAAL,GAAwCk/B,GACxC7uB,EAAS,CAAE,KAAO6uB,GAAU1E,EAAgC,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAEtGsE,EAAc,SAAW,CAACC,EAAU,QAAS,CAC/CA,EAAU,QAAU,GACpB,GAAI,EAAEz+B,GAAAhC,EAAI,SAAJ,MAAAgC,GAAA,KAAAhC,EAAakC,EAAGjD,EAAI,MAAQ,CAAa,CACjD,CACF,EACAshC,EAAY,QAAU/4B,EAClB,OAAOxH,EAAI,2BAA8B,YAAYA,EAAI,0BAA0BwH,CAAE,EACzF,GAAI,EAAE9I,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAakC,EAAGjD,EAAI,OACnBA,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SAAE,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAAEqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EACnKw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxFmiC,EAAYxF,cAAax7B,GAAc,UAAE6B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,MAAAgD,EAAA,KAAAhD,EAA4BmB,EAAI,EAAG,CAAA,CAAE,EAC9Ei+B,EAAkBzC,cAAa7B,GAAc,UAAE93B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,kBAAhB,MAAAgD,EAAA,KAAAhD,EAAkC86B,EAAI,EAAG,CAAA,CAAE,EAC1F4H,EAAqB/F,cAAax7B,GAAc,UAAE6B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAqCmB,EAAI,EAAG,CAAA,CAAE,EAChGwhC,EAAuBhG,cAAax7B,GAAc,UAAE6B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,uBAAhB,MAAAgD,EAAA,KAAAhD,EAAuCmB,EAAI,EAAG,CAAA,CAAE,EACpG29B,EAAcnC,cAAaoC,GAAsB,UACrD/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EACrD,EAAG,CAAA,CAAE,EACCM,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/DqiC,EAAmB1F,cAAanX,GAAmC,UAAExiB,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,mBAAhB,MAAAgD,EAAA,KAAAhD,EAAmCwlB,EAAQ,EAAG,CAAA,CAAE,EACrHkZ,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EAEzH,MAAO,CAAE,GAAGtpB,EAAO,OAAA4qB,EAAQ,aAAAS,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,UAAAkD,EAAW,gBAAA/C,EAAiB,mBAAAsD,EAAoB,qBAAAC,EAAsB,YAAA7D,EAAa,iBAAAuD,EAAkB,UAAAhD,EAAW,OAAAX,CAAA,CACpM,CC9GO,SAASkE,GAAiBl+B,EAA6B,GAA6B,OACzF,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMk0B,EAAQplB,EAAAA,OAA4C,IAAI,EAExD,CAACJ,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,GAAI3N,EAAK,WAAY,GAAIA,EAAK,cAAe,EAE9EmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GACnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI,OAAO,KAAK8tB,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAE3DC,EAAW,qBAAwBC,GAAqB,YAAEx9B,EAAA44B,EAAM,UAAN,MAAA54B,EAAA,KAAA44B,EAAgB4E,IAAUn6B,GAAAL,EAAAm6B,EAAa,SAAQ,uBAArB,MAAA95B,EAAA,KAAAL,EAA4Cw6B,EAAU,EAC1ID,EAAW,qBAAwBC,GAAqB,YAAEx9B,EAAA44B,EAAM,UAAN,MAAA54B,EAAA,KAAA44B,EAAgB4E,IAAUn6B,GAAAL,EAAAm6B,EAAa,SAAQ,uBAArB,MAAA95B,EAAA,KAAAL,EAA4Cw6B,EAAU,EAE1I,MAAMz1B,EAASkM,EAAO,oBAAoB,OAAO,KAAKspB,CAAU,EAAE,OAAS,EAAIA,EAAa,MAAS,EACrG,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,gBAAiBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACtI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IACxB,MAAMzG,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,+BAAkC,YAC/CA,EAAI,8BAA+Bk8B,GAAqB,YAAEx9B,EAAA44B,EAAM,UAAN,MAAA54B,EAAA,KAAA44B,EAAgB4E,IAAUn6B,GAAAL,EAAAm6B,EAAa,SAAQ,uBAArB,MAAA95B,EAAA,KAAAL,EAA4Cw6B,EAAU,CAAC,EAEzI,OAAOl8B,EAAI,+BAAkC,YAC/CA,EAAI,8BAA+Bk8B,GAAqB,YAAEx9B,EAAA44B,EAAM,UAAN,MAAA54B,EAAA,KAAA44B,EAAgB4E,IAAUn6B,GAAAL,EAAAm6B,EAAa,SAAQ,uBAArB,MAAA95B,EAAA,KAAAL,EAA4Cw6B,EAAU,CAAC,EAE7InqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,KAAM2H,EAAM,QAAU,IAAM,CAE9D,EAAG,CAAC3kB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAM8F,EAAalG,cAAasB,GAAoB,OAClD,GAAI,CAAChN,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACnB2H,EAAM,QAAW4E,GAAqB,CAChCO,IAAcd,EAAa,UAC/BP,EAAA,EACArpB,EAAS,CAAE,KAAMmqB,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAC1E,EACA,GAAI,EAAEx9B,EAAAsB,EAAI,aAAJ,MAAAtB,EAAA,KAAAsB,EAAiB28B,EAAU,OAC1B19B,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,CAAA,EAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAEToG,EAAanG,cAAa/1B,GAAkB,OAChD,GAAI,CAACqqB,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACnB2H,EAAM,QAAW4E,GAAqB,CAChCO,IAAcd,EAAa,UAC/BP,EAAA,EACArpB,EAAS,CAAE,KAAMmqB,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,EAC1E,EACA,GAAI,EAAEx9B,EAAAsB,EAAI,aAAJ,MAAAtB,EAAA,KAAAsB,EAAiBsF,EAAO,OACvBrG,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,CAAA,EAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SAAE,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAAEqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EACnKw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxF8+B,EAAcnC,cAAaoC,GAAsB,UAAE/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EAAI,EAAG,CAAA,CAAE,EAC/GM,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/D0+B,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EAEzH,MAAO,CAAE,GAAGtpB,EAAO,WAAAyvB,EAAY,WAAAC,EAAY,aAAArE,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,YAAAH,EAAa,UAAAO,EAAW,OAAAX,CAAA,CAC5H,CCnGO,SAASqE,GAAgBr+B,EAA4B,GAA4B,OACtF,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB2pB,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMk0B,EAAQplB,EAAAA,OAA4C,IAAI,EAExD,CAACJ,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,MAAO3N,EAAK,MAAO,GAAIA,EAAK,cAAe,MAAOA,EAAK,KAAA,CAAO,EAE/FmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMspB,EAAsC,CAAA,EAS5C,GAPI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,EACvCq4B,IACTQ,EAAW,SAAW99B,GAAas9B,CAAS,GAE1Cr4B,EAAK,QAAU,SAAW64B,EAAW,MAAQ74B,EAAK,OAClDA,EAAK,QAAU,SAAW64B,EAAW,MAAQ74B,EAAK,OAClDA,EAAK,eAAiBq4B,EAAW,CACnC,MAAMO,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxDq4B,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GAC9CQ,EAAW,cAAgBD,CAC7B,CACAC,EAAW,iBAAoBC,GAAqB,YAAEx9B,EAAA44B,EAAM,UAAN,MAAA54B,EAAA,KAAA44B,EAAgB4E,IAAUn6B,GAAAL,EAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,EAAA,KAAAL,EAAwCw6B,EAAU,EAGlID,EAAW,UAAah9B,GAAe,WAIrC,MAAM8qB,EAAM9qB,GAAK,OAAOA,GAAM,SAAWA,EAAI,CAAA,EACvCf,IAASQ,EAAAqrB,EAAG,OAAH,YAAArrB,EAA6C,QAASqrB,EAAG,OAAS9qB,GACjF8C,GAAAL,EAAAm6B,EAAa,SAAQ,YAArB,MAAA95B,EAAA,KAAAL,EAAiC,CAAE,GAAGqoB,EAAI,MAAA7rB,EAAO,KAAM6rB,EAAG,MAAQ,CAAE,MAAA7rB,CAAA,CAAM,EAC5E,EACA+9B,EAAW,YAAc,CAACxpB,EAAkBivB,IAAA,SAAuB,OAAAhgC,GAAAhD,EAAAm9B,EAAa,SAAQ,cAArB,YAAAn6B,EAAA,KAAAhD,EAAmC+T,EAASivB,IAE/G,MAAMj7B,EAASkM,EAAO,mBAAmBspB,CAAU,EACnD,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,eAAgBgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACrI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IAExB6wB,EAAM,QAAW4E,GAAqB,CACpCnqB,EAAS,CAAE,KAAMmqB,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,CAC1E,EACAnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,CAAEytB,EAAO,QAAU,KAAM2H,EAAM,QAAU,IAAM,CAE9D,EAAG,CAAC3kB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,cAAasG,GAAqB,OAC/C,GAAI,CAAChS,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD,MAAMlC,EAAM2vB,EAAO,QACnB2H,EAAM,QAAW4E,GAAqB,CAChCO,IAAcd,EAAa,SAC/B5pB,EAAS,CAAE,KAAMmqB,EAAS,QAAS,GAAO,MAAO,KAAM,UAAW,GAAM,CAC1E,EACI,OAAOl8B,EAAI,2BAA8B,YAAYA,EAAI,0BAA0Bs3B,EAAM,OAAO,EACpG,GAAI,EAAE54B,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAa2hC,EAAW,OACvB1iC,EAAG,CAAMw9B,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,CAAA,EAAa,CAAG,CACpH,EAAG,CAAA,CAAE,EAEC4gB,EAAOwb,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,OAAhB,MAAAgD,EAAA,KAAAhD,EAA0B,EAAG,CAAA,CAAE,EAC1DkjC,EAAOvG,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,OAAhB,MAAAgD,EAAA,KAAAhD,EAA0B,EAAG,CAAA,CAAE,EAC1DmjC,EAAaxG,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,aAAhB,YAAAgD,EAAA,KAAAhD,IAAgC,EAAE,EACjEojC,EAAgBzG,cAAan9B,GAAkB,UAAEwD,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,gBAAhB,MAAAgD,EAAA,KAAAhD,EAAgCR,EAAQ,EAAG,CAAA,CAAE,EAC9F6jC,EAAW1G,cAAa2G,GAAoB,UAAEtgC,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,WAAhB,MAAAgD,EAAA,KAAAhD,EAA2BsjC,EAAQ,EAAG,CAAA,CAAE,EACtFxE,EAAcnC,cAAaoC,GAAsB,UAAE/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EAAI,EAAG,CAAA,CAAE,EAC/GM,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/D0+B,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAW5pB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EAE3G,MAAO,CAAE,GAAG4P,EAAO,OAAA4qB,EAAQ,KAAA7c,EAAM,KAAA+hB,EAAM,WAAAC,EAAY,cAAAC,EAAe,SAAAC,EAAU,YAAAvE,EAAa,UAAAO,EAAW,OAAAX,CAAA,CACtG,CCtGO,SAAS6E,GAAe7+B,EAA2B,GAA2B,CACnF,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACb0yB,EAASzd,EAAAA,OAAY,IAAI,EAEzB,CAACJ,EAAOC,CAAQ,EAAIC,WAAuF,CAC/G,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK+W,EAAShY,EAAgB,CAAE,QAAS3N,EAAK,QAAS,GAAIA,EAAK,cAAe,UAAWA,EAAK,SAAA,CAAW,EAE3GmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OAGb,MAAMspB,EAAsC,CAAE,UAF5B74B,EAAK,WAAa,SAAS,cAAc,KAAK,CAElB,EAC1CA,EAAK,UAAY,SAAW64B,EAAW,QAAU74B,EAAK,SACtDA,EAAK,gBAAkB,SAAW64B,EAAW,cAAgB74B,EAAK,eAEtE,MAAMqD,EAASkM,EAAO,kBAAkBspB,CAAU,EAClD,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,cAAegU,EAAO,OAAO,EAAG,UAAW,GAAO,EACpI,MACF,CACA,OAAAgd,EAAO,QAAUlpB,EAAO,IAExBsL,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,UAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,UAAhB,MAAAgD,EAAA,KAAAhD,GAA6BixB,EAAO,QAAU,IAAM,CAErE,EAAG,CAAChd,EAAQoW,CAAM,CAAC,EAEnB,MAAMmZ,EAAS7G,cAAa9zB,GAAgB,SAC1C,GAAKooB,EAAO,QACZ,CAAA5d,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,MAAO,EACpD,GAAI,CACF,MAAMK,EAAYa,EAAK,UACnBb,MAAqB,UAAY,KAErCb,GAAAhD,EAAAixB,EAAO,SAAQ,SAAf,MAAAjuB,EAAA,KAAAhD,EAAwB6I,GAExB,WAAW,IAAMwK,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,CAAE,IAAAqF,CAAA,EAAO,QAAS,EAAA,EAAQ,EAAG,GAAG,CAChF,OAAStI,EAAG,CACV8S,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAC7D,EACF,EAAG,CAACmE,EAAK,SAAS,CAAC,EAEb++B,EAAW9G,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,WAAhB,MAAAgD,EAAA,KAAAhD,EAA8B,EAAG,CAAA,CAAE,EAClE0jC,EAAU/G,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,UAAhB,MAAAgD,EAAA,KAAAhD,GAA6BqT,MAAe,CAAE,GAAG7P,EAAG,KAAM,QAAY,CAAG,EAAG,CAAA,CAAE,EAElH,MAAO,CAAE,GAAG4P,EAAO,OAAAowB,EAAQ,SAAAC,EAAU,QAAAC,CAAA,CACvC,CCxDO,SAASC,GAA2Bj/B,EAA0B,GAA0B,OAC7F,KAAM,CAAE,OAAAuP,CAAA,EAAW1V,GAAA,EACbw+B,EAAYZ,IAAan8B,EAAA0E,EAAK,gBAAL,YAAA1E,EAAoB,GAAG,EAChDixB,EAASzd,EAAAA,OAAY,IAAI,EACzBypB,EAAezpB,EAAAA,OAAO,CAAC,EACvB,CAAE,IAAA0pB,EAAK,MAAAR,CAAA,EAAUF,GAAA,EACjBW,EAAe3pB,EAAAA,OAAO9O,CAAI,EAChCy4B,EAAa,QAAUz4B,EACvB,MAAMm9B,EAAcruB,EAAAA,OAA4C,IAAI,EAC9DsuB,EAAgBtuB,EAAAA,OAAO,EAAK,EAC5BuuB,EAAYvuB,EAAAA,OAAO,EAAK,EAExB,CAACJ,EAAOC,CAAQ,EAAIC,WAA8G,CACtI,KAAM,OAAW,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAC1D,EAEK8pB,EAAS/qB,EAAgB3N,EAAK,QAAQ,EACtC2lB,EAAShY,EAAgB,CAAE,OAAQ3N,EAAK,OAAQ,GAAIA,EAAK,WAAY,GAAIA,EAAK,aAAA,CAAe,EAEnGmP,EAAAA,UAAU,IAAM,CACd,GAAI,CAACI,EAAQ,OACb,MAAMopB,EAAW34B,EAAK,aAAe,GAC/B44B,EAA8B,CAAA,EAChC54B,EAAK,eAAe,OAAO,OAAO44B,EAAI54B,EAAK,aAAa,EACxD24B,SAAiBC,EAAG,IACfP,IAAWO,EAAG,IAAM79B,GAAas9B,CAAS,GACnD,MAAMQ,EAAsC,CAAA,EAE5C,GAAI74B,EAAK,WAAa,OACpB64B,EAAW,SAAW99B,GAAaiF,EAAK,QAAQ,MAC3C,CACL,MAAM8K,EAAMmyB,GAAiB1tB,EAAQ8oB,EAAWM,CAAQ,EACpD7tB,IAAQ,KAAI+tB,EAAW,SAAW/tB,EACxC,CACI9K,EAAK,SAAW,SAAW64B,EAAW,OAAS74B,EAAK,QACpD,OAAO,KAAK44B,CAAE,EAAE,OAAS,MAAc,cAAgBA,GAC3DC,EAAW,iBAAoBC,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,EAClFL,EAAa,QAAQ,eAAcI,EAAW,aAAgBE,YAAoB,OAAAz6B,GAAAhD,EAAAm9B,EAAa,SAAQ,eAArB,YAAAn6B,EAAA,KAAAhD,EAAoCy9B,KACtHN,EAAa,QAAQ,gBAAeI,EAAW,cAAgB,CAACG,EAAcC,IAAA,SAAsB,OAAA36B,GAAAhD,EAAAm9B,EAAa,SAAQ,gBAArB,YAAAn6B,EAAA,KAAAhD,EAAqC09B,EAAKC,KAC9IR,EAAa,QAAQ,iBAAgBI,EAAW,eAAkByE,YAAmB,OAAAh/B,GAAAhD,EAAAm9B,EAAa,SAAQ,iBAArB,YAAAn6B,EAAA,KAAAhD,EAAsCgiC,KAC3H7E,EAAa,QAAQ,mBAAkBI,EAAW,iBAAoBr1B,YAAmB,OAAAlF,GAAAhD,EAAAm9B,EAAa,SAAQ,mBAArB,YAAAn6B,EAAA,KAAAhD,EAAwCkI,KAErI,MAAMH,EAASkM,EAAO,iBAAiBspB,CAAU,EACjD,GAAIx1B,EAAO,OAAQ,CACjBsL,EAAS,CAAE,KAAM,OAAW,QAAS,GAAO,MAAO,IAAIpT,GAA2B,aAAcgU,EAAO,OAAO,EAAG,UAAW,GAAO,EACnI,MACF,CACAgd,EAAO,QAAUlpB,EAAO,IACxB+5B,EAAc,QAAUxE,EAAG,KAAO,KAClCyE,EAAU,QAAU,GACpB,MAAMzgC,EAAM2vB,EAAO,QACnB,OAAI,OAAO3vB,EAAI,2BAA8B,YAC3CA,EAAI,0BAA2Bk8B,GAAqB,QAAEx9B,EAAA6hC,EAAY,UAAZ,MAAA7hC,EAAA,KAAA6hC,EAAsBrE,EAAU,CAAC,EAEzFnqB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,UAAW,GAAM,MAAO,MAAO,EAC/C,IAAM,SAIX,GAAI,EAAER,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAC7DixB,EAAO,QAAU,KACjB4Q,EAAY,QAAU,IACxB,CAEF,EAAG,CAAC5tB,EAAQmpB,EAAQ/S,EAAQ0S,CAAS,CAAC,EAEtC,MAAMiB,EAASrB,EAAAA,YAAY,CAAC/c,EAAgBC,EAAcvZ,IAAwC,OAChG,GAAI,CAAC2qB,EAAO,QAAS,OACrB,MAAM8M,EAAY,EAAEd,EAAa,QACjC5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAM,MAAO,IAAA,EAAO,EACpD05B,EAAI,IAAM,CACJa,IAAcd,EAAa,SAC/B5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAO+4B,GAAA,CAAoB,EAAI,CACxE,CAAC,EACD,MAAMj7B,EAAM2vB,EAAO,QACb9sB,EAAM+L,GAAA,EACN+xB,EAAWz7B,GAAe,CAC9B,GAAI,CAACA,EAAG,OAAOA,EACf,GAAIjH,GAASiH,CAAC,EAAG,OAAOA,EAAE,IAC1B,GAAI,OAAOA,GAAM,UAAY,QAASA,EAAG,CACvC,MAAMrF,EAAIqF,EACV,OAAO,IAAIrC,EAAI,MAAMhD,EAAE,IAAKA,EAAE,GAAG,CACnC,CACA,OAAOqF,CACT,EACMhD,EAAIy+B,EAAQriB,CAAK,EACjBrf,EAAI0hC,EAAQpiB,CAAG,EACf+jB,EAAKt9B,GAAA,MAAAA,EAAS,UAAY,CAAE,UAAWA,EAAQ,UAAU,IAAI27B,CAAO,CAAA,EAAM,OAC1En5B,EAAM00B,GAAqB,eAC/B,GAAIO,IAAcd,EAAa,QAAS,OACxCP,EAAA,EACA,IAAIwF,EAAS1E,EACb,GAAI,CAAC0E,GAAW,OAAOA,GAAW,UAAY,OAAO,KAAKA,CAAgB,EAAE,SAAW,EACrF,GAAI,CAAEA,GAASliC,EAAAsB,EAAI,aAAJ,YAAAtB,EAAA,KAAAsB,EAAoB,MAAQ,CAAa,CAK1D,IAHA+B,IAAAL,EAAAm6B,EAAa,SAAQ,mBAArB,MAAA95B,GAAA,KAAAL,EAAwCk/B,GACxC7uB,EAAS,CAAE,KAAO6uB,GAAU1E,EAAgC,QAAS,GAAO,MAAO,KAAM,UAAW,EAAA,CAAM,EAEtGsE,EAAc,SAAW,CAACC,EAAU,QAAS,CAC/CA,EAAU,QAAU,GACpB,GAAI,EAAEz+B,GAAAhC,EAAI,SAAJ,MAAAgC,GAAA,KAAAhC,EAAakC,EAAGjD,EAAGqjC,EAAK,MAAQ,CAAa,CACrD,CACF,EACA/B,EAAY,QAAU/4B,EAClB,OAAOxH,EAAI,2BAA8B,YAAYA,EAAI,0BAA0BwH,CAAE,EACzF,GAAI,EAAE9I,EAAAsB,EAAI,SAAJ,MAAAtB,EAAA,KAAAsB,EAAakC,EAAGjD,EAAGqjC,EAAK,OACvBrjC,EAAG,CAAEm8B,EAAA,EAAaqB,IAAcd,EAAa,SAAS5pB,EAAS7P,IAAM,CAAE,GAAGA,EAAG,QAAS,GAAO,MAAOjD,GAAa,CAAG,CAC7H,EAAG,CAAC28B,EAAKR,CAAK,CAAC,EAET+B,EAAe9B,EAAAA,YAAY,IAAM,SAAE,GAAI,EAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,eAAhB,MAAAgD,EAAA,KAAAhD,EAAkC,MAAQ,CAAa,CAAEqT,EAAS7P,IAAM,CAAE,GAAGA,EAAG,KAAM,OAAW,QAAS,IAAQ,CAAG,EAAG,CAAA,CAAE,EACnKw7B,EAAqBrC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,qBAAhB,MAAAgD,EAAA,KAAAhD,EAAwC,EAAG,CAAA,CAAE,EACtFi/B,EAAsBtC,EAAAA,YAAY,IAAM,UAAE35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,sBAAhB,MAAAgD,EAAA,KAAAhD,EAAyC,EAAG,CAAA,CAAE,EACxFmiC,EAAYxF,cAAax7B,GAAc,UAAE6B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,MAAAgD,EAAA,KAAAhD,EAA4BmB,EAAI,EAAG,CAAA,CAAE,EAC9Ei+B,EAAkBzC,cAAa7B,GAAc,UAAE93B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,kBAAhB,MAAAgD,EAAA,KAAAhD,EAAkC86B,EAAI,EAAG,CAAA,CAAE,EAC1FgE,EAAcnC,cAAaoC,GAAsB,UACrD/7B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,cAAhB,MAAAgD,EAAA,KAAAhD,EAA8BP,GAAas/B,CAAQ,EACrD,EAAG,CAAA,CAAE,EACCM,EAAY1C,EAAAA,YAAY,IAAA,SAAM,OAAA35B,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,YAAhB,YAAAgD,EAAA,KAAAhD,IAA+B,EAAE,EAC/DqiC,EAAmB1F,cAAanX,GAAmC,UAAExiB,GAAAhD,EAAAixB,EAAO,UAAP,YAAAjxB,EAAgB,mBAAhB,MAAAgD,EAAA,KAAAhD,EAAmCwlB,EAAQ,EAAG,CAAA,CAAE,EACrHkZ,EAAS/B,EAAAA,YAAY,IAAM,CAAEM,EAAa,UAAWP,EAAA,EAASrpB,MAAe,CAAE,GAAG7P,EAAG,QAAS,IAAQ,CAAG,EAAG,CAACk5B,CAAK,CAAC,EAEzH,MAAO,CAAE,GAAGtpB,EAAO,OAAA4qB,EAAQ,aAAAS,EAAc,mBAAAO,EAAoB,oBAAAC,EAAqB,UAAAkD,EAAW,gBAAA/C,EAAiB,YAAAN,EAAa,iBAAAuD,EAAkB,UAAAhD,EAAW,OAAAX,CAAA,CAC1J,CC9HO,MAAMmF,WAA0BC,EAAAA,SAAyC,CAAzE,kCACLlhC,GAAA,aAAe,CAAE,SAAU,GAAO,MAAO,IAAA,GAEzC,OAAO,yBAAyBnC,EAAqB,CACnD,MAAO,CAAE,SAAU,GAAM,MAAAA,CAAA,CAC3B,CAEA,kBAAkBA,EAAcsjC,EAAuB,UACrD/gC,GAAAhD,EAAA,KAAK,OAAM,UAAX,MAAAgD,EAAA,KAAAhD,EAAqBS,EAAOsjC,EAC9B,CAEA,QAAoB,CAClB,OAAI,KAAK,MAAM,SACN,KAAK,MAAM,UAAY,KAEzB,KAAK,MAAM,QACpB,CACF"}