@chrtco/sdk 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/atlas/browser.cjs +3186 -0
- package/dist/atlas/browser.cjs.map +1 -0
- package/dist/atlas/browser.d.cts +33 -0
- package/dist/atlas/browser.d.ts +33 -0
- package/dist/atlas/browser.js +3156 -0
- package/dist/atlas/browser.js.map +1 -0
- package/dist/index.cjs +7006 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +567 -1
- package/dist/index.d.ts +567 -1
- package/dist/index.js +6942 -2
- package/dist/index.js.map +1 -1
- package/dist/s52-colors-CdVzqt2K.d.cts +17 -0
- package/dist/s52-colors-CdVzqt2K.d.ts +17 -0
- package/package.json +18 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/endpoints/tiles.ts","../src/endpoints/cells.ts","../src/endpoints/coverage.ts","../src/endpoints/features.ts","../src/endpoints/query.ts","../src/endpoints/offline-errors.ts","../src/endpoints/offline-token-manager.ts","../src/endpoints/offline-style.ts","../src/endpoints/offline-manifest.ts","../src/endpoints/offline.ts","../src/pagination.ts","../src/webhooks.ts"],"sourcesContent":["import { HttpClient, ChrtError } from \"./client.js\";\nimport { TilesEndpoint } from \"./endpoints/tiles.js\";\nimport { CellsEndpoint } from \"./endpoints/cells.js\";\nimport { CoverageEndpoint } from \"./endpoints/coverage.js\";\nimport { FeaturesEndpoint } from \"./endpoints/features.js\";\nimport { QueryEndpoint } from \"./endpoints/query.js\";\nimport { OfflineEndpoint } from \"./endpoints/offline.js\";\nimport { paginate } from \"./pagination.js\";\nimport type {\n ChrtConfig,\n FeaturesOptions,\n QueryOptions,\n CellsOptions,\n CoverageOptions,\n FeatureCollection,\n GeoJsonFeature,\n CellsResponse,\n CellDetail,\n CoverageResponse,\n TransformRequest,\n} from \"./types.js\";\n\nexport class Chrt {\n /** Tile endpoints — styleUrl, tileUrl, groups */\n readonly tiles: TilesEndpoint;\n /** Cell catalogue endpoints — list, get */\n readonly cells: CellsEndpoint;\n /** Coverage data — list available chart sources */\n readonly coverage: CoverageEndpoint;\n /**\n * CHRToffline — download MBTiles bundles for offline use.\n * Requires `deviceId` in config. Manifest-based budget enforcement\n * requires `manifestPath`.\n */\n readonly offline: OfflineEndpoint;\n\n private featuresEp: FeaturesEndpoint;\n private queryEp: QueryEndpoint;\n private http: HttpClient;\n\n constructor(apiKeyOrConfig: string | ChrtConfig) {\n const config =\n typeof apiKeyOrConfig === \"string\"\n ? { apiKey: apiKeyOrConfig }\n : apiKeyOrConfig;\n\n this.http = new HttpClient(config.apiKey, config.baseUrl, config.retries);\n this.tiles = new TilesEndpoint(this.http);\n this.cells = new CellsEndpoint(this.http);\n this.coverage = new CoverageEndpoint(this.http);\n this.featuresEp = new FeaturesEndpoint(this.http);\n this.queryEp = new QueryEndpoint(this.http);\n this.offline = new OfflineEndpoint(this.http, config.deviceId, config.manifestPath);\n }\n\n /* ── Convenience shortcuts ───────────────────────── */\n\n /** Query GeoJSON features by bounding box */\n async features(options: FeaturesOptions): Promise<FeatureCollection> {\n return this.featuresEp.list(options);\n }\n\n /** Spatial proximity query around a point */\n async query(options: QueryOptions): Promise<FeatureCollection> {\n return this.queryEp.nearby(options);\n }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route is live ──\n //\n // /** Discover ENC cells along a route */\n // async routeQuery(options: RouteQueryOptions): Promise<RouteQueryResponse> {\n // return this.queryEp.alongRoute(options);\n // }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route/features is live ──\n //\n // /** Find individual features along a route */\n // async routeFeatures(options: RouteFeatureQueryOptions): Promise<RouteFeatureQueryResponse> {\n // return this.queryEp.featuresAlongRoute(options);\n // }\n //\n // /** Iterate all features along a route, auto-paginating */\n // routeFeaturesIter(\n // options: Omit<RouteFeatureQueryOptions, \"offset\">,\n // ): AsyncIterable<GeoJsonFeature> {\n // const pageSize = options.limit ?? 100;\n // return paginate<RouteFeatureQueryResponse, GeoJsonFeature>(\n // (offset, signal) =>\n // this.routeFeatures({ ...options, limit: pageSize, offset, signal }),\n // (r) => r.features,\n // (r) => r.total_count ?? 0,\n // { pageSize, signal: options.signal },\n // );\n // }\n\n /* ── Auto-pagination iterators ───────────────────── */\n\n /**\n * Iterate all features matching a bounding-box query, auto-paginating.\n *\n * @example\n * ```ts\n * for await (const feature of chrt.featuresIter({ bbox: [-74, 40, -73, 41] })) {\n * console.log(feature.properties);\n * }\n * ```\n */\n featuresIter(\n options: Omit<FeaturesOptions, \"offset\">,\n ): AsyncIterable<GeoJsonFeature> {\n const pageSize = options.limit ?? 100;\n return paginate<FeatureCollection, GeoJsonFeature>(\n (offset, signal) =>\n this.features({ ...options, limit: pageSize, offset, signal }),\n (r) => r.features,\n (r) => r.total_count ?? 0,\n { pageSize, signal: options.signal },\n );\n }\n\n /**\n * Iterate all cells matching a query, auto-paginating.\n *\n * @example\n * ```ts\n * for await (const cell of chrt.cellsIter({ source: \"NOAA\" })) {\n * console.log(cell.cell_id, cell.title);\n * }\n * ```\n */\n cellsIter(\n options?: Omit<CellsOptions, \"offset\">,\n ): AsyncIterable<CellDetail> {\n const pageSize = options?.limit ?? 100;\n return paginate<CellsResponse, CellDetail>(\n (offset, signal) =>\n this.cells.list({ ...options, limit: pageSize, offset, signal }),\n (r) => r.cells,\n (r) => r.total_count,\n { pageSize, signal: options?.signal },\n );\n }\n\n /* ── Map integration helpers ─────────────────────── */\n\n /** Returns a style.json URL ready for Mapbox GL / MapLibre */\n styleUrl(): string {\n return this.tiles.styleUrl();\n }\n\n /**\n * Returns a `transformRequest` function for Mapbox GL JS / MapLibre GL JS.\n * Injects the API key header for requests to api.chrt.co.\n *\n * @example\n * const map = new mapboxgl.Map({\n * style: chrt.styleUrl(),\n * transformRequest: chrt.transformRequest(),\n * });\n */\n transformRequest(): (url: string) => TransformRequest | undefined {\n const apiKey = this.http.getApiKey();\n return (url: string) => {\n if (url.includes(\"api.chrt.co\")) {\n return { url, headers: { \"x-api-key\": apiKey } };\n }\n return undefined;\n };\n }\n}\n\n/* ── Re-exports ────────────────────────────────────── */\n\nexport { ChrtError } from \"./client.js\";\nexport { paginate } from \"./pagination.js\";\nexport { parseWebhook } from \"./webhooks.js\";\nexport { OfflineError } from \"./endpoints/offline-errors.js\";\nexport type { OfflineErrorCode } from \"./endpoints/offline-errors.js\";\nexport type { FileSystemAdapter } from \"./fs-adapter.js\";\n\n/* ── Offline style helper (Phase 8c) ───────────────── */\nexport {\n buildOfflineStyle,\n OfflineStyleError,\n} from \"./endpoints/offline-style.js\";\nexport type {\n MapLibreStyle,\n BuildOfflineStyleOptions,\n OfflineStylePlatform,\n} from \"./endpoints/offline-style.js\";\n\nexport type {\n ChrtConfig,\n FeaturesOptions,\n QueryOptions,\n CellsOptions,\n CoverageOptions,\n FeatureCollection,\n GeoJsonFeature,\n GeoJsonGeometry,\n CellsResponse,\n CellDetail,\n CoverageSource,\n CoverageResponse,\n TileGroup,\n TileGroupsResponse,\n TransformRequest,\n RouteQueryOptions,\n RouteQueryResponse,\n RouteFeatureQueryOptions,\n RouteFeatureQueryResponse,\n OfflineRegionSummary,\n OfflineBundleResponse,\n OfflineDownloadOptions,\n OfflineDownloadResult,\n OfflineDownloadProgress,\n OfflineRemoveOptions,\n OfflineHeartbeatOptions,\n OfflineFetchStyleOptions,\n OfflineStyleResponse,\n} from \"./types.js\";\nexport type {\n WebhookPayload,\n WebhookEvent,\n WebhookEventType,\n CellUpdatedEvent,\n CellNewEvent,\n CellDeletedEvent,\n CellEventData,\n CellUpdatedData,\n} from \"./webhooks.js\";\n","import type { ChrtErrorBody } from \"./types.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.chrt.co/v1\";\n\nexport class ChrtError extends Error {\n status: number;\n code?: string;\n body?: ChrtErrorBody;\n\n constructor(status: number, body?: ChrtErrorBody) {\n super(body?.message ?? body?.error ?? `CHRT API error ${status}`);\n this.name = \"ChrtError\";\n this.status = status;\n this.code = body?.code;\n this.body = body;\n }\n}\n\nexport class HttpClient {\n private apiKey: string;\n private baseUrl: string;\n private retries: number;\n\n constructor(apiKey: string, baseUrl?: string, retries = 2) {\n this.apiKey = apiKey;\n this.baseUrl = (baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this.retries = retries;\n }\n\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n getApiKey(): string {\n return this.apiKey;\n }\n\n async request<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n signal?: AbortSignal,\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.retries; attempt++) {\n if (signal?.aborted) {\n throw signal.reason ?? new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n\n try {\n const res = await fetch(url.toString(), {\n headers: { \"x-api-key\": this.apiKey },\n signal,\n });\n\n if (!res.ok) {\n let body: ChrtErrorBody | undefined;\n try {\n body = await res.json() as ChrtErrorBody;\n } catch {\n /* empty */\n }\n const err = new ChrtError(res.status, body);\n\n // Only retry on 5xx\n if (res.status >= 500 && attempt < this.retries) {\n lastError = err;\n await sleep(100 * 2 ** attempt);\n continue;\n }\n throw err;\n }\n\n return (await res.json()) as T;\n } catch (e) {\n if (e instanceof ChrtError) throw e;\n // Don't retry aborted requests\n if (signal?.aborted) throw e;\n lastError = e as Error;\n if (attempt < this.retries) {\n await sleep(100 * 2 ** attempt);\n continue;\n }\n }\n }\n\n throw lastError ?? new Error(\"CHRT API request failed\");\n }\n\n /**\n * Typed wrapper for non-GET JSON requests. Returns the parsed body and HTTP\n * status together so callers (e.g. offline endpoints) can map error bodies\n * to typed errors without throwing at the HTTP layer. Auth defaults to\n * `x-api-key` header; pass `bearerToken` to swap to `Authorization: Bearer`.\n * No retry — the offline flow owns its own retry logic.\n */\n async postJson<T>(\n path: string,\n body: unknown,\n opts?: { bearerToken?: string; signal?: AbortSignal },\n ): Promise<{ ok: boolean; status: number; body: T | null }> {\n const url = new URL(`${this.baseUrl}${path}`);\n const headers: Record<string, string> = { \"content-type\": \"application/json\" };\n if (opts?.bearerToken) {\n headers[\"authorization\"] = `Bearer ${opts.bearerToken}`;\n } else {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const res = await fetch(url.toString(), {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: opts?.signal,\n });\n\n let parsed: T | null = null;\n try {\n parsed = (await res.json()) as T;\n } catch {\n parsed = null;\n }\n return { ok: res.ok, status: res.status, body: parsed };\n }\n\n /** GET with Bearer auth (for offline-worker endpoints that require a JWT). */\n async getJsonWithBearer<T>(\n path: string,\n bearerToken: string,\n signal?: AbortSignal,\n ): Promise<{ ok: boolean; status: number; body: T | null }> {\n const url = new URL(`${this.baseUrl}${path}`);\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: { authorization: `Bearer ${bearerToken}` },\n signal,\n });\n let parsed: T | null = null;\n try {\n parsed = (await res.json()) as T;\n } catch {\n parsed = null;\n }\n return { ok: res.ok, status: res.status, body: parsed };\n }\n}\n\nfunction sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { TileGroupsResponse } from \"../types.js\";\n\nexport class TilesEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Full style.json URL with API key as query param */\n styleUrl(): string {\n return `${this.http.getBaseUrl()}/tiles/style.json?key=${this.http.getApiKey()}`;\n }\n\n /** Individual tile URL template */\n tileUrl(z: number, x: number, y: number, format: \"pbf\" | \"mvt\" = \"mvt\"): string {\n return `${this.http.getBaseUrl()}/tiles/${z}/${x}/${y}.${format}?key=${this.http.getApiKey()}`;\n }\n\n /** List available tileset groups */\n async groups(): Promise<TileGroupsResponse> {\n return this.http.request<TileGroupsResponse>(\"/tiles/groups\");\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { CellsOptions, CellsResponse, CellDetail } from \"../types.js\";\n\nexport class CellsEndpoint {\n constructor(private http: HttpClient) {}\n\n /** List ENC cells with optional filters */\n async list(options?: CellsOptions): Promise<CellsResponse> {\n const { signal, ...params } = options ?? {};\n return this.http.request<CellsResponse>(\n \"/cells\",\n params as Record<string, string | number | undefined>,\n signal,\n );\n }\n\n /** Get a single cell by ID */\n async get(cellId: string, signal?: AbortSignal): Promise<CellDetail> {\n return this.http.request<CellDetail>(\n `/cells/${encodeURIComponent(cellId)}`,\n undefined,\n signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { CoverageOptions, CoverageResponse } from \"../types.js\";\n\nexport class CoverageEndpoint {\n constructor(private http: HttpClient) {}\n\n /** List available chart sources with cell counts */\n async list(options?: CoverageOptions): Promise<CoverageResponse> {\n const { signal, ...params } = options ?? {};\n return this.http.request<CoverageResponse>(\n \"/coverage\",\n params as Record<string, string | number | undefined>,\n signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { FeaturesOptions, FeatureCollection } from \"../types.js\";\n\nexport class FeaturesEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Query features within a bounding box */\n async list(options: FeaturesOptions): Promise<FeatureCollection> {\n return this.http.request<FeatureCollection>(\n \"/features\",\n {\n bbox: options.bbox.join(\",\"),\n layer: options.layer,\n limit: options.limit,\n offset: options.offset,\n },\n options.signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { QueryOptions, FeatureCollection } from \"../types.js\";\n// import type { RouteQueryOptions, RouteQueryResponse } from \"../types.js\";\n\nexport class QueryEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Spatial proximity search around a point */\n async nearby(options: QueryOptions): Promise<FeatureCollection> {\n return this.http.request<FeatureCollection>(\n \"/query\",\n {\n point: options.point.join(\",\"),\n radius: options.radius,\n layer: options.layer,\n limit: options.limit,\n },\n options.signal,\n );\n }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route is live ──\n //\n // /** Discover ENC cells along a route LineString */\n // async alongRoute(options: RouteQueryOptions): Promise<RouteQueryResponse> {\n // const route = {\n // type: \"LineString\" as const,\n // coordinates: options.route,\n // };\n // return this.http.request<RouteQueryResponse>(\n // \"/query/route\",\n // {\n // route: JSON.stringify(route),\n // buffer: options.buffer,\n // source: options.source,\n // scale_band: options.scaleBand,\n // limit: options.limit,\n // },\n // options.signal,\n // );\n // }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route/features is live ──\n //\n // /** Find individual features along a route LineString */\n // async featuresAlongRoute(options: RouteFeatureQueryOptions): Promise<RouteFeatureQueryResponse> {\n // const route = {\n // type: \"LineString\" as const,\n // coordinates: options.route,\n // };\n // return this.http.request<RouteFeatureQueryResponse>(\n // \"/query/route/features\",\n // {\n // route: JSON.stringify(route),\n // buffer: options.buffer,\n // layer: options.layer,\n // limit: options.limit,\n // offset: options.offset,\n // },\n // options.signal,\n // );\n // }\n}\n","/**\n * Typed errors surfaced by `chrt.offline.*`.\n *\n * Callers switch on `.code` — never parse `.message`. `.status` is set only\n * when the error originated from an HTTP response. `.detail` carries\n * machine-readable context for programmatic handling (byte math for budget\n * violations, `resumable: true` for interrupts, etc.).\n */\n\nexport type OfflineErrorCode =\n | \"budget_exceeded\"\n | \"coverage_denied\"\n | \"quota_exceeded\"\n | \"download_corrupt\"\n | \"network_interrupted\"\n | \"partial_file_invalid\"\n | \"invalid_api_key\"\n | \"region_not_available\"\n | \"offline_not_enabled\"\n | \"missing_device_id\"\n | \"missing_manifest_path\"\n | \"sha_missing\"\n | \"unexpected_response\";\n\nexport class OfflineError extends Error {\n readonly code: OfflineErrorCode;\n readonly status?: number;\n readonly detail?: Record<string, unknown>;\n\n constructor(\n code: OfflineErrorCode,\n message: string,\n status?: number,\n detail?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"OfflineError\";\n this.code = code;\n this.status = status;\n this.detail = detail;\n }\n}\n\n/**\n * Map a server-side error body (mint-offline-token, offline-worker) to an\n * OfflineErrorCode. The server uses both `code` and `error` keys depending on\n * route; we try both.\n */\nexport function mapServerError(\n body: unknown,\n status: number,\n): { code: OfflineErrorCode; detail?: Record<string, unknown> } {\n const b = (body ?? {}) as Record<string, unknown>;\n const raw = typeof b.code === \"string\" ? b.code : typeof b.error === \"string\" ? b.error : \"\";\n\n // Server-side strings that have a direct typed analogue.\n switch (raw) {\n case \"offline_budget_exceeded\":\n return {\n code: \"budget_exceeded\",\n detail: {\n budget_bytes: b.budget_bytes,\n required_bytes: b.required_bytes,\n over_by_bytes: b.over_by_bytes,\n remaining_bytes: b.remaining_bytes,\n },\n };\n case \"offline_not_enabled\":\n return { code: \"offline_not_enabled\" };\n case \"region_not_licensed\":\n return {\n code: \"coverage_denied\",\n detail: { requested: b.requested, allowed: b.allowed },\n };\n case \"no_offline_builds\":\n case \"no_offline_build\":\n return { code: \"region_not_available\", detail: { detail: b.detail, region: b.region } };\n case \"invalid_api_key\":\n case \"missing_auth\":\n return { code: \"invalid_api_key\" };\n case \"tile_quota_exceeded\":\n return { code: \"quota_exceeded\" };\n case \"rate_limited\":\n return {\n code: \"quota_exceeded\",\n detail: { limit: b.limit, period_seconds: b.period_seconds },\n };\n case \"revoked\":\n return { code: \"invalid_api_key\", detail: { reason: \"revoked\" } };\n }\n\n // Status-based fallbacks for error strings we don't recognize.\n if (status === 401) return { code: \"invalid_api_key\" };\n if (status === 403) return { code: \"coverage_denied\" };\n if (status === 429) return { code: \"quota_exceeded\" };\n if (status === 503) return { code: \"region_not_available\" };\n\n return { code: \"unexpected_response\", detail: { raw_error: raw } };\n}\n","import type { HttpClient } from \"../client.js\";\nimport { OfflineError, mapServerError } from \"./offline-errors.js\";\n\n/**\n * Fresh-token shape from POST `/v1/mint/offline-token` (proxied to Supabase\n * `mint-offline-token`). Mirrors docs/api/tile-jwt-claims.md §4.\n */\nexport interface MintedOfflineToken {\n token: string;\n expiresAt: number;\n kid: string;\n offlineUntil: number;\n /** Per-region build_tag map returned by the mint function. */\n buildTags: Record<string, string>;\n gracePeriodDays: number;\n}\n\ninterface MintResponseBody {\n token?: unknown;\n expires_at?: unknown;\n kid?: unknown;\n offline_until?: unknown;\n regions?: unknown;\n grace_period_days?: unknown;\n}\n\n/** Refresh this many seconds before `exp`. */\nconst REFRESH_MARGIN_SECONDS = 30;\n\nfunction now(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Cache + single-flight mint for offline JWTs.\n *\n * - Keyed by `(deviceId, sorted-regions)` so a token scoped to one region\n * doesn't accidentally get reused for a broader request.\n * - Refreshes 30s before `exp`.\n * - While a mint is in flight, concurrent callers share the same promise.\n */\nexport class OfflineTokenManager {\n private readonly cache = new Map<string, MintedOfflineToken>();\n private readonly pending = new Map<string, Promise<MintedOfflineToken>>();\n\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get a fresh-enough token for the caller's device + requested regions.\n * If `regions` is omitted, the mint function defaults to the key's full\n * `allowed_sources`.\n */\n async getToken(deviceId: string, regions?: string[]): Promise<MintedOfflineToken> {\n if (!deviceId) {\n throw new OfflineError(\"missing_device_id\", \"deviceId is required for offline operations\");\n }\n const key = this.cacheKey(deviceId, regions);\n\n const cached = this.cache.get(key);\n if (cached && cached.expiresAt - now() > REFRESH_MARGIN_SECONDS) {\n return cached;\n }\n\n const inflight = this.pending.get(key);\n if (inflight) return inflight;\n\n const promise = this.mintFresh(deviceId, regions).finally(() => {\n this.pending.delete(key);\n });\n this.pending.set(key, promise);\n const token = await promise;\n this.cache.set(key, token);\n return token;\n }\n\n /** Force-evict the cached token for a (deviceId, regions) pair. Used after a 401. */\n invalidate(deviceId: string, regions?: string[]): void {\n this.cache.delete(this.cacheKey(deviceId, regions));\n }\n\n private cacheKey(deviceId: string, regions?: string[]): string {\n const tail = regions && regions.length > 0 ? [...regions].sort().join(\",\") : \"*\";\n return `${deviceId}::${tail}`;\n }\n\n private async mintFresh(deviceId: string, regions?: string[]): Promise<MintedOfflineToken> {\n const body: { device_id: string; regions?: string[] } = { device_id: deviceId };\n if (regions && regions.length > 0) body.regions = regions;\n\n const res = await this.http.postJson<MintResponseBody>(\"/mint/offline-token\", body);\n\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `mint-offline-token failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n\n const body2 = res.body ?? {};\n const regionsArr = Array.isArray(body2.regions) ? (body2.regions as unknown[]) : [];\n const buildTags: Record<string, string> = {};\n for (const r of regionsArr) {\n if (r && typeof r === \"object\") {\n const row = r as { region?: unknown; build_tag?: unknown };\n if (typeof row.region === \"string\" && typeof row.build_tag === \"string\") {\n buildTags[row.region] = row.build_tag;\n }\n }\n }\n\n if (\n typeof body2.token !== \"string\" ||\n typeof body2.expires_at !== \"number\" ||\n typeof body2.kid !== \"string\" ||\n typeof body2.offline_until !== \"number\" ||\n typeof body2.grace_period_days !== \"number\"\n ) {\n throw new OfflineError(\n \"unexpected_response\",\n \"mint-offline-token returned malformed body\",\n res.status,\n );\n }\n\n return {\n token: body2.token,\n expiresAt: body2.expires_at,\n kid: body2.kid,\n offlineUntil: body2.offline_until,\n buildTags,\n gracePeriodDays: body2.grace_period_days,\n };\n }\n}\n","/**\n * Pure helper: take an online MapLibre style and rewrite the named region's\n * vector source to point at a local MBTiles file. Layers, paint, layout,\n * glyphs, and sprite are untouched.\n *\n * This is the JS counterpart of the offline-worker's server-side rewriter\n * (see `cloudflare/offline-worker/src/common.ts:rewriteStyleSources`).\n * Customers can either:\n *\n * 1. Fetch a pre-baked offline style from the worker via\n * `chrt.offline.fetchStyle(region, opts)` — recommended for native\n * MapLibre clients (iOS/Android/desktop) that don't have the JS atlas\n * available.\n *\n * 2. Generate the online style themselves (e.g. via the React app's\n * `src/lib/atlas/style-generator.ts`) and call `buildOfflineStyle()`\n * locally — recommended for JS/web SDK consumers who already use the\n * atlas at runtime.\n *\n * Both paths produce equivalent output.\n */\n\n/**\n * MapLibre style specification (subset). Matches the JSON shape MapLibre GL\n * JS, MapLibre Native iOS/Android, and the MapLibre style spec all consume.\n * Customers who want full TypeScript style typing should reference\n * `@maplibre/maplibre-gl-style-spec.StyleSpecification` directly.\n */\nexport interface MapLibreStyle {\n version: number;\n name?: string;\n metadata?: Record<string, unknown>;\n sources: Record<string, MapLibreSource | unknown>;\n sprite?: string;\n glyphs?: string;\n layers: unknown[];\n}\n\ninterface MapLibreSource {\n type: string;\n tiles?: string[];\n url?: string;\n minzoom?: number;\n maxzoom?: number;\n [key: string]: unknown;\n}\n\n/** Target platform — drives the URL scheme used in the rewritten source. */\nexport type OfflineStylePlatform = \"ios\" | \"android\" | \"desktop\";\n\nexport interface BuildOfflineStyleOptions {\n /**\n * Target platform. iOS + Android use the `mbtiles://` scheme MapLibre Native\n * understands; desktop uses `file://`. Default: `\"ios\"`.\n */\n platform?: OfflineStylePlatform;\n /**\n * Name of the source to rewrite. If omitted, defaults to the only vector\n * source in the input style. Throws `OfflineStyleError` if there are zero\n * or more than one vector sources and `sourceName` isn't provided.\n */\n sourceName?: string;\n}\n\n/**\n * Thrown when `buildOfflineStyle` can't determine which source to swap or\n * the named source isn't present in the input style.\n */\nexport class OfflineStyleError extends Error {\n readonly code: string;\n constructor(message: string, code: string) {\n super(message);\n this.name = \"OfflineStyleError\";\n this.code = code;\n }\n}\n\n/**\n * Returns a deep-copy of `onlineStyle` with the named (or auto-detected)\n * vector source rewritten to point at `mbtilesPath`. Other sources, layers,\n * paint, layout, glyphs, and sprite pass through unmodified.\n *\n * URL scheme:\n *\n * platform=\"ios\" → `mbtiles://<mbtilesPath>` MLN Native iOS\n * platform=\"android\" → `mbtiles://<mbtilesPath>` MLN Native Android\n * platform=\"desktop\" → `file://<mbtilesPath>` MLN GL native (Win/Mac/Linux)\n *\n * The `mbtilesPath` is intentionally treated as opaque text. Most native MLN\n * bindings accept the bare scheme + filename and resolve against an\n * app-defined root (typically the app's Documents directory). Pass an\n * absolute path on desktop, or a relative filename on iOS/Android.\n *\n * @param onlineStyle The base MapLibre style. Not mutated.\n * @param mbtilesPath Local-file path component (e.g. `\"NOAA_ENC.mbtiles\"`).\n * @param opts Platform + optional explicit `sourceName`.\n *\n * @example\n * import { buildOfflineStyle } from \"@chrtco/sdk\";\n *\n * // Online style obtained however you like — generated client-side or\n * // fetched from a server.\n * const onlineStyle = generateStyle(\"DAY\", { region: \"NOAA_ENC\" });\n *\n * const offlineStyle = buildOfflineStyle(\n * onlineStyle,\n * \"NOAA_ENC.mbtiles\",\n * { platform: \"ios\" },\n * );\n * // → hand `offlineStyle` to MapLibre.\n */\nexport function buildOfflineStyle(\n onlineStyle: MapLibreStyle,\n mbtilesPath: string,\n opts: BuildOfflineStyleOptions = {},\n): MapLibreStyle {\n if (!onlineStyle || typeof onlineStyle !== \"object\") {\n throw new OfflineStyleError(\"onlineStyle is required\", \"invalid_style\");\n }\n if (!onlineStyle.sources || typeof onlineStyle.sources !== \"object\") {\n throw new OfflineStyleError(\"style has no sources\", \"no_sources\");\n }\n if (!mbtilesPath || typeof mbtilesPath !== \"string\") {\n throw new OfflineStyleError(\"mbtilesPath is required\", \"invalid_path\");\n }\n\n const platform = opts.platform ?? \"ios\";\n const scheme = platform === \"desktop\" ? \"file\" : \"mbtiles\";\n const url = `${scheme}://${mbtilesPath}`;\n\n let sourceName: string;\n if (opts.sourceName) {\n if (!(opts.sourceName in onlineStyle.sources)) {\n throw new OfflineStyleError(\n `source \"${opts.sourceName}\" not found in style`,\n \"source_not_found\",\n );\n }\n sourceName = opts.sourceName;\n } else {\n const vectorSources = Object.entries(onlineStyle.sources).filter(\n ([, src]) =>\n src &&\n typeof src === \"object\" &&\n (src as MapLibreSource).type === \"vector\",\n );\n if (vectorSources.length === 0) {\n throw new OfflineStyleError(\n \"no vector sources in style — pass `opts.sourceName` to override\",\n \"no_vector_source\",\n );\n }\n if (vectorSources.length > 1) {\n throw new OfflineStyleError(\n `${vectorSources.length} vector sources in style — pass \\`opts.sourceName\\``,\n \"ambiguous_source\",\n );\n }\n sourceName = vectorSources[0][0];\n }\n\n // Deep-clone via JSON round-trip — style is plain JSON-shaped, no cycles.\n const cloned = JSON.parse(JSON.stringify(onlineStyle)) as MapLibreStyle;\n const src = cloned.sources[sourceName] as MapLibreSource;\n src.tiles = [url];\n // Collapse legacy `mapbox://...` shape if present so MLN doesn't see both.\n delete src.url;\n return cloned;\n}\n","import type { FileSystemAdapter } from \"../fs-adapter.js\";\nimport { OfflineError } from \"./offline-errors.js\";\n\n/**\n * On-disk shape. Bump `version` if we ever change it; old readers refuse.\n */\nexport interface OfflineManifest {\n version: 1;\n budget_bytes: number | null;\n regions: Record<string, ManifestRegionEntry>;\n}\n\nexport interface ManifestRegionEntry {\n path: string;\n bytes: number;\n sha256: string;\n build_id: string;\n build_tag: string;\n downloaded_at: number;\n last_accessed_at: number;\n}\n\nconst CURRENT_VERSION = 1;\n\nfunction emptyManifest(): OfflineManifest {\n return { version: CURRENT_VERSION, budget_bytes: null, regions: {} };\n}\n\nexport async function readManifest(\n manifestPath: string | undefined,\n fs: FileSystemAdapter,\n): Promise<OfflineManifest> {\n if (!manifestPath) return emptyManifest();\n if (!(await fs.exists(manifestPath))) return emptyManifest();\n\n const raw = await fs.readFile(manifestPath);\n const text = new TextDecoder().decode(raw);\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new OfflineError(\n \"unexpected_response\",\n `offline manifest at ${manifestPath} is not valid JSON`,\n );\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new OfflineError(\"unexpected_response\", `offline manifest shape invalid`);\n }\n const m = parsed as Partial<OfflineManifest>;\n if (m.version !== CURRENT_VERSION) {\n throw new OfflineError(\n \"unexpected_response\",\n `offline manifest version mismatch: got ${String(m.version)}, expected ${CURRENT_VERSION}`,\n );\n }\n return {\n version: CURRENT_VERSION,\n budget_bytes: typeof m.budget_bytes === \"number\" ? m.budget_bytes : null,\n regions: m.regions && typeof m.regions === \"object\" ? m.regions : {},\n };\n}\n\nexport async function writeManifest(\n manifestPath: string,\n fs: FileSystemAdapter,\n manifest: OfflineManifest,\n): Promise<void> {\n const text = JSON.stringify(manifest, null, 2);\n const bytes = new TextEncoder().encode(text);\n await fs.writeFile(manifestPath, bytes);\n}\n\nexport function usedBytes(manifest: OfflineManifest, excludeRegion?: string): number {\n let total = 0;\n for (const [region, entry] of Object.entries(manifest.regions)) {\n if (region === excludeRegion) continue;\n total += entry.bytes;\n }\n return total;\n}\n\nexport function requireManifestPath(manifestPath: string | undefined): string {\n if (!manifestPath) {\n throw new OfflineError(\n \"missing_manifest_path\",\n \"ChrtConfig.manifestPath is required for this operation\",\n );\n }\n return manifestPath;\n}\n","import type { HttpClient } from \"../client.js\";\nimport type {\n OfflineBundleResponse,\n OfflineDownloadOptions,\n OfflineDownloadResult,\n OfflineDownloadProgress,\n OfflineFetchStyleOptions,\n OfflineHeartbeatOptions,\n OfflineRegionSummary,\n OfflineRemoveOptions,\n OfflineStyleResponse,\n} from \"../types.js\";\nimport { OfflineError, mapServerError } from \"./offline-errors.js\";\nimport { OfflineTokenManager } from \"./offline-token-manager.js\";\nimport {\n buildOfflineStyle,\n type BuildOfflineStyleOptions,\n type MapLibreStyle,\n} from \"./offline-style.js\";\nimport {\n readManifest,\n requireManifestPath,\n usedBytes,\n writeManifest,\n type OfflineManifest,\n} from \"./offline-manifest.js\";\n\n/** Progress is throttled to whichever of these two thresholds is larger. */\nconst PROGRESS_MIN_BYTES = 1024 * 1024; // 1 MB\nconst PROGRESS_MIN_FRACTION = 0.01; // 1%\n\ninterface RegionsListResponse {\n regions?: unknown;\n unavailable?: unknown;\n}\n\nexport class OfflineEndpoint {\n readonly tokenManager: OfflineTokenManager;\n\n constructor(\n private readonly http: HttpClient,\n private readonly deviceId: string | undefined,\n private readonly manifestPath: string | undefined,\n ) {\n this.tokenManager = new OfflineTokenManager(http);\n }\n\n /** List regions downloadable under the caller's API key. */\n async list(): Promise<OfflineRegionSummary[]> {\n const token = await this.requireToken();\n const res = await this.http.getJsonWithBearer<RegionsListResponse>(\n \"/offline/regions\",\n token.token,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.list failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n const arr = Array.isArray(res.body?.regions) ? (res.body.regions as unknown[]) : [];\n const out: OfflineRegionSummary[] = [];\n for (const r of arr) {\n if (!r || typeof r !== \"object\") continue;\n const row = r as {\n region?: unknown;\n build_id?: unknown;\n build_tag?: unknown;\n total_bytes?: unknown;\n issued_at?: unknown;\n };\n if (\n typeof row.region === \"string\" &&\n typeof row.build_id === \"string\" &&\n typeof row.build_tag === \"string\" &&\n typeof row.total_bytes === \"number\"\n ) {\n out.push({\n region: row.region,\n build_id: row.build_id,\n build_tag: row.build_tag,\n total_bytes: row.total_bytes,\n issued_at: typeof row.issued_at === \"number\" ? row.issued_at : null,\n });\n }\n }\n return out;\n }\n\n /**\n * Download an MBTiles bundle for `region` to `opts.path`. Resumable via a\n * `<path>.partial` sidecar on interrupt. SHA-256 verified before rename.\n */\n async download(region: string, opts: OfflineDownloadOptions): Promise<OfflineDownloadResult> {\n return this.downloadInternal(region, opts, 0);\n }\n\n /** Delete local file and, if manifest is configured, drop its row + heartbeat. */\n async remove(region: string, opts: OfflineRemoveOptions): Promise<void> {\n if (await opts.fs.exists(opts.path)) {\n await opts.fs.unlink(opts.path);\n }\n const partial = `${opts.path}.partial`;\n if (await opts.fs.exists(partial)) {\n await opts.fs.unlink(partial);\n }\n\n if (this.manifestPath) {\n const manifest = await readManifest(this.manifestPath, opts.fs);\n if (manifest.regions[region]) {\n delete manifest.regions[region];\n await writeManifest(this.manifestPath, opts.fs, manifest);\n }\n // Best-effort heartbeat with the new totals; failure doesn't block removal.\n const regions = Object.keys(manifest.regions);\n const total = usedBytes(manifest);\n try {\n await this.heartbeat({ regions, total_bytes: total, fs: opts.fs });\n } catch {\n // swallow — the file is already gone locally.\n }\n }\n }\n\n /**\n * Pure helper — rewrites the named (or auto-detected) vector source in\n * `onlineStyle` to point at a local MBTiles file. Layers/paint/glyphs\n * untouched. Use when you already have an online style (e.g. generated\n * client-side via the React app's atlas) and want the offline variant.\n *\n * Equivalent to importing `buildOfflineStyle` directly — exposed on the\n * endpoint for discoverability.\n */\n style(\n onlineStyle: MapLibreStyle,\n mbtilesPath: string,\n opts?: BuildOfflineStyleOptions,\n ): MapLibreStyle {\n return buildOfflineStyle(onlineStyle, mbtilesPath, opts);\n }\n\n /**\n * Fetch a pre-baked offline style for `region` from\n * `GET /v1/offline/styles/{region}`. The worker's response already has the\n * source rewritten to `mbtiles://` (default) or `file://`, so the returned\n * `style` is ready to hand directly to MapLibre.\n *\n * Recommended for native MLN clients (iOS/Android/desktop) that don't have\n * the JS atlas available. JS/web SDK consumers can equivalently generate\n * the online style themselves and call `chrt.offline.style(...)`.\n */\n async fetchStyle(\n region: string,\n opts: OfflineFetchStyleOptions = {},\n ): Promise<OfflineStyleResponse> {\n const token = await this.requireToken([region]);\n const palette = opts.palette ?? \"DAY\";\n const protocol = opts.protocol ?? \"mbtiles\";\n const path = `/offline/styles/${encodeURIComponent(region)}?palette=${palette}&protocol=${protocol}`;\n const res = await this.http.getJsonWithBearer<OfflineStyleResponse>(\n path,\n token.token,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.fetchStyle failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n if (!res.body || typeof res.body !== \"object\" || !res.body.style) {\n throw new OfflineError(\n \"unexpected_response\",\n \"offline.fetchStyle: malformed response (missing `style`)\",\n res.status,\n );\n }\n return res.body;\n }\n\n /**\n * Set the local storage budget in bytes. Requires `manifestPath`. Enforced\n * at the start of each `download()`. A budget smaller than current usage\n * does not auto-prune; it only refuses new downloads until the customer\n * calls `remove()`.\n */\n async setStorageBudget(bytes: number, fs: import(\"../fs-adapter.js\").FileSystemAdapter): Promise<void> {\n if (!Number.isFinite(bytes) || bytes < 0) {\n throw new OfflineError(\"unexpected_response\", `invalid budget: ${bytes}`);\n }\n const path = requireManifestPath(this.manifestPath);\n const manifest = await readManifest(path, fs);\n manifest.budget_bytes = bytes;\n await writeManifest(path, fs, manifest);\n }\n\n /**\n * Send a heartbeat. If `opts.regions` / `opts.total_bytes` are omitted and\n * a manifest is configured, values are derived from it. v1 is manual-call\n * only; auto-scheduling is a follow-up phase.\n */\n async heartbeat(opts?: OfflineHeartbeatOptions): Promise<void> {\n const deviceId = this.requireDeviceId();\n\n let regions = opts?.regions;\n let totalBytes = opts?.total_bytes;\n\n // Auto-derive from manifest when caller omitted values AND gave us an fs.\n if ((regions === undefined || totalBytes === undefined) && this.manifestPath && opts?.fs) {\n const manifest = await readManifest(this.manifestPath, opts.fs);\n if (regions === undefined) regions = Object.keys(manifest.regions);\n if (totalBytes === undefined) totalBytes = usedBytes(manifest);\n }\n if (regions === undefined) regions = [];\n if (totalBytes === undefined) totalBytes = 0;\n\n const token = await this.tokenManager.getToken(deviceId);\n const body = {\n device_id: deviceId,\n regions,\n total_bytes: totalBytes,\n ...(opts?.sdk_version ? { sdk_version: opts.sdk_version } : {}),\n ...(opts?.platform ? { platform: opts.platform } : {}),\n };\n const res = await this.http.postJson<unknown>(\"/offline/heartbeat\", body, {\n bearerToken: token.token,\n });\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.heartbeat failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private requireDeviceId(): string {\n if (!this.deviceId) {\n throw new OfflineError(\n \"missing_device_id\",\n \"ChrtConfig.deviceId is required for offline operations\",\n );\n }\n return this.deviceId;\n }\n\n private async requireToken(regions?: string[]) {\n const deviceId = this.requireDeviceId();\n return this.tokenManager.getToken(deviceId, regions);\n }\n\n private async fetchBundle(region: string, bearerToken: string): Promise<OfflineBundleResponse> {\n const res = await this.http.getJsonWithBearer<Record<string, unknown>>(\n `/offline/bundles/${encodeURIComponent(region)}`,\n bearerToken,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.download bundle fetch failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n const b = res.body ?? {};\n const missingFields: string[] = [];\n const field = <K extends string>(k: K): unknown => (b as Record<string, unknown>)[k];\n\n for (const k of [\"signed_url\", \"bytes\", \"build_id\", \"build_tag\", \"expires_at\"] as const) {\n if (field(k) === undefined) missingFields.push(k);\n }\n if (missingFields.length > 0) {\n throw new OfflineError(\n \"unexpected_response\",\n `bundle response missing fields: ${missingFields.join(\",\")}`,\n res.status,\n );\n }\n if (typeof field(\"sha256\") !== \"string\" || (field(\"sha256\") as string).length === 0) {\n throw new OfflineError(\n \"sha_missing\",\n \"bundle response did not include sha256; cannot verify integrity\",\n res.status,\n );\n }\n return {\n region: typeof field(\"region\") === \"string\" ? (field(\"region\") as string) : region,\n build_id: field(\"build_id\") as string,\n build_tag: field(\"build_tag\") as string,\n signed_url: field(\"signed_url\") as string,\n expires_at: field(\"expires_at\") as number,\n bytes: field(\"bytes\") as number,\n sha256: (field(\"sha256\") as string).toLowerCase(),\n offline_until: typeof field(\"offline_until\") === \"number\" ? (field(\"offline_until\") as number) : 0,\n heartbeat_after:\n typeof field(\"heartbeat_after\") === \"number\" ? (field(\"heartbeat_after\") as number) : 0,\n server_time: typeof field(\"server_time\") === \"number\" ? (field(\"server_time\") as number) : 0,\n };\n }\n\n private async downloadInternal(\n region: string,\n opts: OfflineDownloadOptions,\n retryDepth: number,\n ): Promise<OfflineDownloadResult> {\n const { path, fs, onProgress, signal } = opts;\n const partialPath = `${path}.partial`;\n\n const token = await this.requireToken([region]);\n const bundle = await this.fetchBundle(region, token.token);\n\n // Budget check against manifest (if present).\n if (this.manifestPath) {\n const manifest = await readManifest(this.manifestPath, fs);\n if (manifest.budget_bytes !== null) {\n const currentUsed = usedBytes(manifest, region);\n const projected = currentUsed + bundle.bytes;\n if (projected > manifest.budget_bytes) {\n throw new OfflineError(\n \"budget_exceeded\",\n `offline storage budget would be exceeded`,\n undefined,\n {\n budget_bytes: manifest.budget_bytes,\n used_bytes: currentUsed,\n required_bytes: bundle.bytes,\n over_by_bytes: projected - manifest.budget_bytes,\n },\n );\n }\n }\n }\n\n // Examine existing partial.\n let startByte = 0;\n let resumed = false;\n if (await fs.exists(partialPath)) {\n const partialStat = await fs.stat(partialPath);\n if (partialStat.size > bundle.bytes) {\n await fs.unlink(partialPath);\n } else if (partialStat.size === bundle.bytes) {\n const computed = await fs.sha256(partialPath);\n if (computed.toLowerCase() === bundle.sha256) {\n await fs.rename(partialPath, path);\n await this.persistManifestEntry(region, bundle, path, fs);\n return {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n resumed: true,\n };\n }\n // Complete but corrupt — drop and restart.\n await fs.unlink(partialPath);\n } else {\n startByte = partialStat.size;\n resumed = true;\n }\n }\n\n // Fetch (with Range if resuming).\n const fetchInit: RequestInit = { method: \"GET\", signal };\n if (startByte > 0) {\n fetchInit.headers = { Range: `bytes=${startByte}-` };\n }\n\n let response: Response;\n try {\n response = await fetch(bundle.signed_url, fetchInit);\n } catch (err) {\n if (signal?.aborted) {\n throw new OfflineError(\n \"network_interrupted\",\n \"download aborted before response\",\n undefined,\n { resumable: startByte > 0, bytes_written: startByte },\n );\n }\n throw new OfflineError(\n \"network_interrupted\",\n err instanceof Error ? err.message : \"fetch failed\",\n undefined,\n { resumable: startByte > 0, bytes_written: startByte },\n );\n }\n\n // Expired signed URL or build flipped mid-resume → re-mint once.\n if (startByte > 0 && (response.status === 403 || response.status === 404)) {\n await fs.unlink(partialPath);\n if (retryDepth > 0) {\n throw new OfflineError(\n \"unexpected_response\",\n `signed URL still rejected after re-mint (HTTP ${response.status})`,\n response.status,\n );\n }\n this.tokenManager.invalidate(this.requireDeviceId(), [region]);\n return this.downloadInternal(region, opts, retryDepth + 1);\n }\n\n if (startByte > 0 && response.status !== 206) {\n throw new OfflineError(\n \"unexpected_response\",\n `expected 206 Partial Content on Range request, got ${response.status}`,\n response.status,\n );\n }\n if (startByte === 0 && response.status !== 200) {\n throw new OfflineError(\n \"unexpected_response\",\n `expected 200 on initial GET, got ${response.status}`,\n response.status,\n );\n }\n if (!response.body) {\n throw new OfflineError(\n \"unexpected_response\",\n \"response had no body\",\n response.status,\n );\n }\n\n // Stream with progress + abort + persist-on-interrupt.\n await fs.mkdir(dirname(path), { recursive: true });\n const writer = (await fs.writeStream(partialPath, { append: startByte > 0 })).getWriter();\n let bytesDownloaded = startByte;\n let lastProgressBytes = startByte;\n const progressThreshold = Math.max(\n PROGRESS_MIN_BYTES,\n Math.floor(bundle.bytes * PROGRESS_MIN_FRACTION),\n );\n\n const emit = (final: boolean): void => {\n if (!onProgress) return;\n if (!final && bytesDownloaded - lastProgressBytes < progressThreshold) return;\n const progress: OfflineDownloadProgress = {\n bytesDownloaded,\n bytesTotal: bundle.bytes,\n fraction: bundle.bytes === 0 ? 1 : bytesDownloaded / bundle.bytes,\n };\n try {\n onProgress(progress);\n } catch {\n // customer callback failures must not break download\n }\n lastProgressBytes = bytesDownloaded;\n };\n\n emit(true); // always fire at start\n\n try {\n const reader = response.body.getReader();\n while (true) {\n if (signal?.aborted) {\n throw new OfflineError(\n \"network_interrupted\",\n \"download aborted by caller\",\n undefined,\n { resumable: true, bytes_written: bytesDownloaded },\n );\n }\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n await writer.write(value);\n bytesDownloaded += value.byteLength;\n emit(false);\n }\n }\n await writer.close();\n } catch (err) {\n try {\n await writer.abort();\n } catch {\n // best-effort\n }\n if (err instanceof OfflineError) throw err;\n throw new OfflineError(\n \"network_interrupted\",\n err instanceof Error ? err.message : \"stream error\",\n undefined,\n { resumable: true, bytes_written: bytesDownloaded },\n );\n }\n\n emit(true); // always fire at completion\n\n // Verify SHA.\n const computedSha = await fs.sha256(partialPath);\n if (computedSha.toLowerCase() !== bundle.sha256) {\n await fs.unlink(partialPath);\n throw new OfflineError(\n \"download_corrupt\",\n `SHA-256 mismatch for ${region}: expected ${bundle.sha256}, got ${computedSha}`,\n undefined,\n { expected: bundle.sha256, actual: computedSha },\n );\n }\n\n await fs.rename(partialPath, path);\n await this.persistManifestEntry(region, bundle, path, fs);\n\n return {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n resumed,\n };\n }\n\n private async persistManifestEntry(\n region: string,\n bundle: OfflineBundleResponse,\n path: string,\n fs: import(\"../fs-adapter.js\").FileSystemAdapter,\n ): Promise<void> {\n if (!this.manifestPath) return;\n const manifest: OfflineManifest = await readManifest(this.manifestPath, fs);\n const nowSec = Math.floor(Date.now() / 1000);\n manifest.regions[region] = {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n downloaded_at: nowSec,\n last_accessed_at: nowSec,\n };\n await writeManifest(this.manifestPath, fs, manifest);\n }\n}\n\n/** Tiny helper so we don't import `node:path`. */\nfunction dirname(p: string): string {\n const i = p.lastIndexOf(\"/\");\n const j = p.lastIndexOf(\"\\\\\");\n const k = Math.max(i, j);\n if (k <= 0) return \".\";\n return p.slice(0, k);\n}\n","/**\n * Generic async auto-pagination generator.\n *\n * Fetches pages from a callback that returns `{ items, total_count }` and\n * yields individual items until all pages are consumed or the signal is aborted.\n *\n * @example\n * ```ts\n * for await (const feature of paginate(\n * (offset, signal) => chrt.features({ bbox, limit: 100, offset, signal }),\n * f => f.features,\n * f => f.total_count ?? 0,\n * )) {\n * console.log(feature);\n * }\n * ```\n */\nexport async function* paginate<TResponse, TItem>(\n fetchPage: (offset: number, signal?: AbortSignal) => Promise<TResponse>,\n getItems: (response: TResponse) => TItem[],\n getTotalCount: (response: TResponse) => number,\n options?: { pageSize?: number; signal?: AbortSignal },\n): AsyncGenerator<TItem, void, undefined> {\n const pageSize = options?.pageSize ?? 100;\n const signal = options?.signal;\n let offset = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (signal?.aborted) return;\n\n const response = await fetchPage(offset, signal);\n const items = getItems(response);\n\n for (const item of items) {\n yield item;\n }\n\n if (items.length === 0) return;\n\n offset += items.length;\n const total = getTotalCount(response);\n if (total > 0 && offset >= total) return;\n }\n}\n","/* ── Webhook event types ───────────────────────────── */\n\n/** Base envelope for all webhook payloads */\nexport interface WebhookPayload<T extends string, D> {\n /** Unique event ID */\n id: string;\n /** ISO 8601 timestamp */\n timestamp: string;\n /** Event type discriminator */\n type: T;\n /** Event-specific data */\n data: D;\n}\n\n/* ── Event data shapes ─────────────────────────────── */\n\nexport interface CellEventData {\n cell_id: string;\n chart_source: string;\n title: string | null;\n edition: number | null;\n update_number: number | null;\n scale_band: string | null;\n}\n\nexport interface CellUpdatedData extends CellEventData {\n previous_edition: number | null;\n previous_update_number: number | null;\n}\n\n/* ── Concrete event types ──────────────────────────── */\n\nexport type CellUpdatedEvent = WebhookPayload<\"cell.updated\", CellUpdatedData>;\nexport type CellNewEvent = WebhookPayload<\"cell.new\", CellEventData>;\nexport type CellDeletedEvent = WebhookPayload<\"cell.deleted\", CellEventData>;\n\n/** Discriminated union of all webhook events */\nexport type WebhookEvent = CellUpdatedEvent | CellNewEvent | CellDeletedEvent;\n\n/** All recognised webhook event type strings */\nexport type WebhookEventType = WebhookEvent[\"type\"];\n\n/* ── Runtime parser ────────────────────────────────── */\n\nconst VALID_TYPES = new Set<string>([\"cell.updated\", \"cell.new\", \"cell.deleted\"]);\n\n/**\n * Parse and validate a raw webhook payload.\n *\n * @param body - The raw request body (parsed JSON object)\n * @returns A typed `WebhookEvent`\n * @throws Error if the payload is malformed or has an unknown event type\n *\n * @example\n * ```ts\n * import { parseWebhook } from \"@chrtco/sdk\";\n *\n * app.post(\"/webhooks/chrt\", (req, res) => {\n * const event = parseWebhook(req.body);\n * switch (event.type) {\n * case \"cell.updated\":\n * console.log(\"Cell updated:\", event.data.cell_id);\n * break;\n * case \"cell.new\":\n * console.log(\"New cell:\", event.data.cell_id);\n * break;\n * }\n * res.sendStatus(200);\n * });\n * ```\n */\nexport function parseWebhook(body: unknown): WebhookEvent {\n if (typeof body !== \"object\" || body === null) {\n throw new Error(\"Invalid webhook payload: expected an object\");\n }\n\n const obj = body as Record<string, unknown>;\n\n if (typeof obj.id !== \"string\") {\n throw new Error(\"Invalid webhook payload: missing 'id'\");\n }\n if (typeof obj.timestamp !== \"string\") {\n throw new Error(\"Invalid webhook payload: missing 'timestamp'\");\n }\n if (typeof obj.type !== \"string\" || !VALID_TYPES.has(obj.type)) {\n throw new Error(`Invalid webhook payload: unknown type '${String(obj.type)}'`);\n }\n if (typeof obj.data !== \"object\" || obj.data === null) {\n throw new Error(\"Invalid webhook payload: missing 'data'\");\n }\n\n return obj as unknown as WebhookEvent;\n}\n"],"mappings":"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","names":["src"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/endpoints/tiles.ts","../src/endpoints/cells.ts","../src/endpoints/coverage.ts","../src/endpoints/features.ts","../src/endpoints/query.ts","../src/endpoints/offline-errors.ts","../src/endpoints/offline-token-manager.ts","../src/endpoints/offline-style.ts","../src/endpoints/offline-manifest.ts","../src/endpoints/offline.ts","../src/pagination.ts","../src/webhooks.ts","../src/atlas/s52-colors.ts","../src/atlas/s52-lookup.ts","../src/atlas/draw-order.ts","../src/atlas/s52-conditional.ts","../src/atlas/symbols.ts","../src/atlas/style-resolver.ts","../src/atlas/labels.ts","../src/atlas/feature-decimation.ts","../src/atlas/s101-catalogue.ts","../src/atlas/s101-symbols.ts","../src/atlas/s52-svgs-generated.ts","../src/atlas/s52-svg-loader.ts","../src/atlas/tile-zoom.ts","../src/atlas/source-registry.ts","../src/atlas/layer-builder.ts","../src/atlas/style-generator.ts"],"sourcesContent":["import { HttpClient, ChrtError } from \"./client.js\";\nimport { TilesEndpoint } from \"./endpoints/tiles.js\";\nimport { CellsEndpoint } from \"./endpoints/cells.js\";\nimport { CoverageEndpoint } from \"./endpoints/coverage.js\";\nimport { FeaturesEndpoint } from \"./endpoints/features.js\";\nimport { QueryEndpoint } from \"./endpoints/query.js\";\nimport { OfflineEndpoint } from \"./endpoints/offline.js\";\nimport { paginate } from \"./pagination.js\";\nimport type {\n ChrtConfig,\n FeaturesOptions,\n QueryOptions,\n CellsOptions,\n CoverageOptions,\n FeatureCollection,\n GeoJsonFeature,\n CellsResponse,\n CellDetail,\n CoverageResponse,\n TransformRequest,\n} from \"./types.js\";\n\nexport class Chrt {\n /** Tile endpoints — styleUrl, tileUrl, groups */\n readonly tiles: TilesEndpoint;\n /** Cell catalogue endpoints — list, get */\n readonly cells: CellsEndpoint;\n /** Coverage data — list available chart sources */\n readonly coverage: CoverageEndpoint;\n /**\n * CHRToffline — download MBTiles bundles for offline use.\n * Requires `deviceId` in config. Manifest-based budget enforcement\n * requires `manifestPath`.\n */\n readonly offline: OfflineEndpoint;\n\n private featuresEp: FeaturesEndpoint;\n private queryEp: QueryEndpoint;\n private http: HttpClient;\n\n constructor(apiKeyOrConfig: string | ChrtConfig) {\n const config =\n typeof apiKeyOrConfig === \"string\"\n ? { apiKey: apiKeyOrConfig }\n : apiKeyOrConfig;\n\n this.http = new HttpClient(config.apiKey, config.baseUrl, config.retries);\n this.tiles = new TilesEndpoint(this.http);\n this.cells = new CellsEndpoint(this.http);\n this.coverage = new CoverageEndpoint(this.http);\n this.featuresEp = new FeaturesEndpoint(this.http);\n this.queryEp = new QueryEndpoint(this.http);\n this.offline = new OfflineEndpoint(this.http, config.deviceId, config.manifestPath);\n }\n\n /* ── Convenience shortcuts ───────────────────────── */\n\n /** Query GeoJSON features by bounding box */\n async features(options: FeaturesOptions): Promise<FeatureCollection> {\n return this.featuresEp.list(options);\n }\n\n /** Spatial proximity query around a point */\n async query(options: QueryOptions): Promise<FeatureCollection> {\n return this.queryEp.nearby(options);\n }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route is live ──\n //\n // /** Discover ENC cells along a route */\n // async routeQuery(options: RouteQueryOptions): Promise<RouteQueryResponse> {\n // return this.queryEp.alongRoute(options);\n // }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route/features is live ──\n //\n // /** Find individual features along a route */\n // async routeFeatures(options: RouteFeatureQueryOptions): Promise<RouteFeatureQueryResponse> {\n // return this.queryEp.featuresAlongRoute(options);\n // }\n //\n // /** Iterate all features along a route, auto-paginating */\n // routeFeaturesIter(\n // options: Omit<RouteFeatureQueryOptions, \"offset\">,\n // ): AsyncIterable<GeoJsonFeature> {\n // const pageSize = options.limit ?? 100;\n // return paginate<RouteFeatureQueryResponse, GeoJsonFeature>(\n // (offset, signal) =>\n // this.routeFeatures({ ...options, limit: pageSize, offset, signal }),\n // (r) => r.features,\n // (r) => r.total_count ?? 0,\n // { pageSize, signal: options.signal },\n // );\n // }\n\n /* ── Auto-pagination iterators ───────────────────── */\n\n /**\n * Iterate all features matching a bounding-box query, auto-paginating.\n *\n * @example\n * ```ts\n * for await (const feature of chrt.featuresIter({ bbox: [-74, 40, -73, 41] })) {\n * console.log(feature.properties);\n * }\n * ```\n */\n featuresIter(\n options: Omit<FeaturesOptions, \"offset\">,\n ): AsyncIterable<GeoJsonFeature> {\n const pageSize = options.limit ?? 100;\n return paginate<FeatureCollection, GeoJsonFeature>(\n (offset, signal) =>\n this.features({ ...options, limit: pageSize, offset, signal }),\n (r) => r.features,\n (r) => r.total_count ?? 0,\n { pageSize, signal: options.signal },\n );\n }\n\n /**\n * Iterate all cells matching a query, auto-paginating.\n *\n * @example\n * ```ts\n * for await (const cell of chrt.cellsIter({ source: \"NOAA\" })) {\n * console.log(cell.cell_id, cell.title);\n * }\n * ```\n */\n cellsIter(\n options?: Omit<CellsOptions, \"offset\">,\n ): AsyncIterable<CellDetail> {\n const pageSize = options?.limit ?? 100;\n return paginate<CellsResponse, CellDetail>(\n (offset, signal) =>\n this.cells.list({ ...options, limit: pageSize, offset, signal }),\n (r) => r.cells,\n (r) => r.total_count,\n { pageSize, signal: options?.signal },\n );\n }\n\n /* ── Map integration helpers ─────────────────────── */\n\n /** Returns a style.json URL ready for Mapbox GL / MapLibre */\n styleUrl(): string {\n return this.tiles.styleUrl();\n }\n\n /**\n * Returns a `transformRequest` function for Mapbox GL JS / MapLibre GL JS.\n * Injects the API key header for requests to api.chrt.co.\n *\n * @example\n * const map = new mapboxgl.Map({\n * style: chrt.styleUrl(),\n * transformRequest: chrt.transformRequest(),\n * });\n */\n transformRequest(): (url: string) => TransformRequest | undefined {\n const apiKey = this.http.getApiKey();\n return (url: string) => {\n if (url.includes(\"api.chrt.co\")) {\n return { url, headers: { \"x-api-key\": apiKey } };\n }\n return undefined;\n };\n }\n}\n\n/* ── Re-exports ────────────────────────────────────── */\n\nexport { ChrtError } from \"./client.js\";\nexport { paginate } from \"./pagination.js\";\nexport { parseWebhook } from \"./webhooks.js\";\nexport { OfflineError } from \"./endpoints/offline-errors.js\";\nexport type { OfflineErrorCode } from \"./endpoints/offline-errors.js\";\nexport type { FileSystemAdapter } from \"./fs-adapter.js\";\n\n/* ── Offline style helper (Phase 8c) ───────────────── */\nexport {\n buildOfflineStyle,\n OfflineStyleError,\n} from \"./endpoints/offline-style.js\";\nexport type {\n MapLibreStyle,\n BuildOfflineStyleOptions,\n OfflineStylePlatform,\n} from \"./endpoints/offline-style.js\";\n\n/* ── S-52 portrayal / Atlas (DOM-free; browser image loaders at\n * `@chrtco/sdk/atlas/browser`) ─────────────────────── */\nexport * from \"./atlas/index.js\";\n\nexport type {\n ChrtConfig,\n FeaturesOptions,\n QueryOptions,\n CellsOptions,\n CoverageOptions,\n FeatureCollection,\n GeoJsonFeature,\n GeoJsonGeometry,\n CellsResponse,\n CellDetail,\n CoverageSource,\n CoverageResponse,\n TileGroup,\n TileGroupsResponse,\n TransformRequest,\n RouteQueryOptions,\n RouteQueryResponse,\n RouteFeatureQueryOptions,\n RouteFeatureQueryResponse,\n OfflineRegionSummary,\n OfflineBundleResponse,\n OfflineDownloadOptions,\n OfflineDownloadResult,\n OfflineDownloadProgress,\n OfflineRemoveOptions,\n OfflineHeartbeatOptions,\n OfflineFetchStyleOptions,\n OfflineStyleResponse,\n} from \"./types.js\";\nexport type {\n WebhookPayload,\n WebhookEvent,\n WebhookEventType,\n CellUpdatedEvent,\n CellNewEvent,\n CellDeletedEvent,\n CellEventData,\n CellUpdatedData,\n} from \"./webhooks.js\";\n","import type { ChrtErrorBody } from \"./types.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.chrt.co/v1\";\n\nexport class ChrtError extends Error {\n status: number;\n code?: string;\n body?: ChrtErrorBody;\n\n constructor(status: number, body?: ChrtErrorBody) {\n super(body?.message ?? body?.error ?? `CHRT API error ${status}`);\n this.name = \"ChrtError\";\n this.status = status;\n this.code = body?.code;\n this.body = body;\n }\n}\n\nexport class HttpClient {\n private apiKey: string;\n private baseUrl: string;\n private retries: number;\n\n constructor(apiKey: string, baseUrl?: string, retries = 2) {\n this.apiKey = apiKey;\n this.baseUrl = (baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this.retries = retries;\n }\n\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n getApiKey(): string {\n return this.apiKey;\n }\n\n async request<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n signal?: AbortSignal,\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= this.retries; attempt++) {\n if (signal?.aborted) {\n throw signal.reason ?? new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n\n try {\n const res = await fetch(url.toString(), {\n headers: { \"x-api-key\": this.apiKey },\n signal,\n });\n\n if (!res.ok) {\n let body: ChrtErrorBody | undefined;\n try {\n body = await res.json() as ChrtErrorBody;\n } catch {\n /* empty */\n }\n const err = new ChrtError(res.status, body);\n\n // Only retry on 5xx\n if (res.status >= 500 && attempt < this.retries) {\n lastError = err;\n await sleep(100 * 2 ** attempt);\n continue;\n }\n throw err;\n }\n\n return (await res.json()) as T;\n } catch (e) {\n if (e instanceof ChrtError) throw e;\n // Don't retry aborted requests\n if (signal?.aborted) throw e;\n lastError = e as Error;\n if (attempt < this.retries) {\n await sleep(100 * 2 ** attempt);\n continue;\n }\n }\n }\n\n throw lastError ?? new Error(\"CHRT API request failed\");\n }\n\n /**\n * Typed wrapper for non-GET JSON requests. Returns the parsed body and HTTP\n * status together so callers (e.g. offline endpoints) can map error bodies\n * to typed errors without throwing at the HTTP layer. Auth defaults to\n * `x-api-key` header; pass `bearerToken` to swap to `Authorization: Bearer`.\n * No retry — the offline flow owns its own retry logic.\n */\n async postJson<T>(\n path: string,\n body: unknown,\n opts?: { bearerToken?: string; signal?: AbortSignal },\n ): Promise<{ ok: boolean; status: number; body: T | null }> {\n const url = new URL(`${this.baseUrl}${path}`);\n const headers: Record<string, string> = { \"content-type\": \"application/json\" };\n if (opts?.bearerToken) {\n headers[\"authorization\"] = `Bearer ${opts.bearerToken}`;\n } else {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const res = await fetch(url.toString(), {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: opts?.signal,\n });\n\n let parsed: T | null = null;\n try {\n parsed = (await res.json()) as T;\n } catch {\n parsed = null;\n }\n return { ok: res.ok, status: res.status, body: parsed };\n }\n\n /** GET with Bearer auth (for offline-worker endpoints that require a JWT). */\n async getJsonWithBearer<T>(\n path: string,\n bearerToken: string,\n signal?: AbortSignal,\n ): Promise<{ ok: boolean; status: number; body: T | null }> {\n const url = new URL(`${this.baseUrl}${path}`);\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: { authorization: `Bearer ${bearerToken}` },\n signal,\n });\n let parsed: T | null = null;\n try {\n parsed = (await res.json()) as T;\n } catch {\n parsed = null;\n }\n return { ok: res.ok, status: res.status, body: parsed };\n }\n}\n\nfunction sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { TileGroupsResponse } from \"../types.js\";\n\nexport class TilesEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Full style.json URL with API key as query param */\n styleUrl(): string {\n return `${this.http.getBaseUrl()}/tiles/style.json?key=${this.http.getApiKey()}`;\n }\n\n /** Individual tile URL template */\n tileUrl(z: number, x: number, y: number, format: \"pbf\" | \"mvt\" = \"mvt\"): string {\n return `${this.http.getBaseUrl()}/tiles/${z}/${x}/${y}.${format}?key=${this.http.getApiKey()}`;\n }\n\n /** List available tileset groups */\n async groups(): Promise<TileGroupsResponse> {\n return this.http.request<TileGroupsResponse>(\"/tiles/groups\");\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { CellsOptions, CellsResponse, CellDetail } from \"../types.js\";\n\nexport class CellsEndpoint {\n constructor(private http: HttpClient) {}\n\n /** List ENC cells with optional filters */\n async list(options?: CellsOptions): Promise<CellsResponse> {\n const { signal, ...params } = options ?? {};\n return this.http.request<CellsResponse>(\n \"/cells\",\n params as Record<string, string | number | undefined>,\n signal,\n );\n }\n\n /** Get a single cell by ID */\n async get(cellId: string, signal?: AbortSignal): Promise<CellDetail> {\n return this.http.request<CellDetail>(\n `/cells/${encodeURIComponent(cellId)}`,\n undefined,\n signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { CoverageOptions, CoverageResponse } from \"../types.js\";\n\nexport class CoverageEndpoint {\n constructor(private http: HttpClient) {}\n\n /** List available chart sources with cell counts */\n async list(options?: CoverageOptions): Promise<CoverageResponse> {\n const { signal, ...params } = options ?? {};\n return this.http.request<CoverageResponse>(\n \"/coverage\",\n params as Record<string, string | number | undefined>,\n signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { FeaturesOptions, FeatureCollection } from \"../types.js\";\n\nexport class FeaturesEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Query features within a bounding box */\n async list(options: FeaturesOptions): Promise<FeatureCollection> {\n return this.http.request<FeatureCollection>(\n \"/features\",\n {\n bbox: options.bbox.join(\",\"),\n layer: options.layer,\n limit: options.limit,\n offset: options.offset,\n },\n options.signal,\n );\n }\n}\n","import type { HttpClient } from \"../client.js\";\nimport type { QueryOptions, FeatureCollection } from \"../types.js\";\n// import type { RouteQueryOptions, RouteQueryResponse } from \"../types.js\";\n\nexport class QueryEndpoint {\n constructor(private http: HttpClient) {}\n\n /** Spatial proximity search around a point */\n async nearby(options: QueryOptions): Promise<FeatureCollection> {\n return this.http.request<FeatureCollection>(\n \"/query\",\n {\n point: options.point.join(\",\"),\n radius: options.radius,\n layer: options.layer,\n limit: options.limit,\n },\n options.signal,\n );\n }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route is live ──\n //\n // /** Discover ENC cells along a route LineString */\n // async alongRoute(options: RouteQueryOptions): Promise<RouteQueryResponse> {\n // const route = {\n // type: \"LineString\" as const,\n // coordinates: options.route,\n // };\n // return this.http.request<RouteQueryResponse>(\n // \"/query/route\",\n // {\n // route: JSON.stringify(route),\n // buffer: options.buffer,\n // source: options.source,\n // scale_band: options.scaleBand,\n // limit: options.limit,\n // },\n // options.signal,\n // );\n // }\n\n // ── [CHRTquery] Staged — uncomment when serve-query/route/features is live ──\n //\n // /** Find individual features along a route LineString */\n // async featuresAlongRoute(options: RouteFeatureQueryOptions): Promise<RouteFeatureQueryResponse> {\n // const route = {\n // type: \"LineString\" as const,\n // coordinates: options.route,\n // };\n // return this.http.request<RouteFeatureQueryResponse>(\n // \"/query/route/features\",\n // {\n // route: JSON.stringify(route),\n // buffer: options.buffer,\n // layer: options.layer,\n // limit: options.limit,\n // offset: options.offset,\n // },\n // options.signal,\n // );\n // }\n}\n","/**\n * Typed errors surfaced by `chrt.offline.*`.\n *\n * Callers switch on `.code` — never parse `.message`. `.status` is set only\n * when the error originated from an HTTP response. `.detail` carries\n * machine-readable context for programmatic handling (byte math for budget\n * violations, `resumable: true` for interrupts, etc.).\n */\n\nexport type OfflineErrorCode =\n | \"budget_exceeded\"\n | \"coverage_denied\"\n | \"quota_exceeded\"\n | \"download_corrupt\"\n | \"network_interrupted\"\n | \"partial_file_invalid\"\n | \"invalid_api_key\"\n | \"region_not_available\"\n | \"offline_not_enabled\"\n | \"missing_device_id\"\n | \"missing_manifest_path\"\n | \"sha_missing\"\n | \"unexpected_response\";\n\nexport class OfflineError extends Error {\n readonly code: OfflineErrorCode;\n readonly status?: number;\n readonly detail?: Record<string, unknown>;\n\n constructor(\n code: OfflineErrorCode,\n message: string,\n status?: number,\n detail?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"OfflineError\";\n this.code = code;\n this.status = status;\n this.detail = detail;\n }\n}\n\n/**\n * Map a server-side error body (mint-offline-token, offline-worker) to an\n * OfflineErrorCode. The server uses both `code` and `error` keys depending on\n * route; we try both.\n */\nexport function mapServerError(\n body: unknown,\n status: number,\n): { code: OfflineErrorCode; detail?: Record<string, unknown> } {\n const b = (body ?? {}) as Record<string, unknown>;\n const raw = typeof b.code === \"string\" ? b.code : typeof b.error === \"string\" ? b.error : \"\";\n\n // Server-side strings that have a direct typed analogue.\n switch (raw) {\n case \"offline_budget_exceeded\":\n return {\n code: \"budget_exceeded\",\n detail: {\n // Phase 8d: `level` is \"team\" | \"key\" — surfaced by mint-offline-token\n // when MIN(team, key) enforcement rejects. Bundle-route refusals from\n // offline-worker omit it. Application code should branch on this to\n // show the right message (\"upgrade your team plan\" vs \"raise this\n // key's storage cap\"). `team_used_bytes` is included on team-level\n // refusals so the dashboard can show \"X of Y GB used\".\n level: typeof b.level === \"string\" ? b.level : undefined,\n budget_bytes: b.budget_bytes,\n required_bytes: b.required_bytes,\n over_by_bytes: b.over_by_bytes,\n remaining_bytes: b.remaining_bytes,\n team_used_bytes: b.team_used_bytes,\n },\n };\n case \"offline_not_enabled\":\n return { code: \"offline_not_enabled\" };\n case \"region_not_licensed\":\n return {\n code: \"coverage_denied\",\n detail: { requested: b.requested, allowed: b.allowed },\n };\n case \"no_offline_builds\":\n case \"no_offline_build\":\n return { code: \"region_not_available\", detail: { detail: b.detail, region: b.region } };\n case \"invalid_api_key\":\n case \"missing_auth\":\n return { code: \"invalid_api_key\" };\n case \"tile_quota_exceeded\":\n return { code: \"quota_exceeded\" };\n case \"rate_limited\":\n return {\n code: \"quota_exceeded\",\n detail: { limit: b.limit, period_seconds: b.period_seconds },\n };\n case \"revoked\":\n return { code: \"invalid_api_key\", detail: { reason: \"revoked\" } };\n }\n\n // Status-based fallbacks for error strings we don't recognize.\n if (status === 401) return { code: \"invalid_api_key\" };\n if (status === 403) return { code: \"coverage_denied\" };\n if (status === 429) return { code: \"quota_exceeded\" };\n if (status === 503) return { code: \"region_not_available\" };\n\n return { code: \"unexpected_response\", detail: { raw_error: raw } };\n}\n","import type { HttpClient } from \"../client.js\";\nimport { OfflineError, mapServerError } from \"./offline-errors.js\";\n\n/**\n * Fresh-token shape from POST `/v1/mint/offline-token` (proxied to Supabase\n * `mint-offline-token`). Mirrors docs/api/tile-jwt-claims.md §4.\n */\nexport interface MintedOfflineToken {\n token: string;\n expiresAt: number;\n kid: string;\n offlineUntil: number;\n /** Per-region build_tag map returned by the mint function. */\n buildTags: Record<string, string>;\n gracePeriodDays: number;\n}\n\ninterface MintResponseBody {\n token?: unknown;\n expires_at?: unknown;\n kid?: unknown;\n offline_until?: unknown;\n regions?: unknown;\n grace_period_days?: unknown;\n}\n\n/** Refresh this many seconds before `exp`. */\nconst REFRESH_MARGIN_SECONDS = 30;\n\nfunction now(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Cache + single-flight mint for offline JWTs.\n *\n * - Keyed by `(deviceId, sorted-regions)` so a token scoped to one region\n * doesn't accidentally get reused for a broader request.\n * - Refreshes 30s before `exp`.\n * - While a mint is in flight, concurrent callers share the same promise.\n */\nexport class OfflineTokenManager {\n private readonly cache = new Map<string, MintedOfflineToken>();\n private readonly pending = new Map<string, Promise<MintedOfflineToken>>();\n\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Get a fresh-enough token for the caller's device + requested regions.\n * If `regions` is omitted, the mint function defaults to the key's full\n * `allowed_sources`.\n */\n async getToken(deviceId: string, regions?: string[]): Promise<MintedOfflineToken> {\n if (!deviceId) {\n throw new OfflineError(\"missing_device_id\", \"deviceId is required for offline operations\");\n }\n const key = this.cacheKey(deviceId, regions);\n\n const cached = this.cache.get(key);\n if (cached && cached.expiresAt - now() > REFRESH_MARGIN_SECONDS) {\n return cached;\n }\n\n const inflight = this.pending.get(key);\n if (inflight) return inflight;\n\n const promise = this.mintFresh(deviceId, regions).finally(() => {\n this.pending.delete(key);\n });\n this.pending.set(key, promise);\n const token = await promise;\n this.cache.set(key, token);\n return token;\n }\n\n /** Force-evict the cached token for a (deviceId, regions) pair. Used after a 401. */\n invalidate(deviceId: string, regions?: string[]): void {\n this.cache.delete(this.cacheKey(deviceId, regions));\n }\n\n private cacheKey(deviceId: string, regions?: string[]): string {\n const tail = regions && regions.length > 0 ? [...regions].sort().join(\",\") : \"*\";\n return `${deviceId}::${tail}`;\n }\n\n private async mintFresh(deviceId: string, regions?: string[]): Promise<MintedOfflineToken> {\n const body: { device_id: string; regions?: string[] } = { device_id: deviceId };\n if (regions && regions.length > 0) body.regions = regions;\n\n const res = await this.http.postJson<MintResponseBody>(\"/mint/offline-token\", body);\n\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `mint-offline-token failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n\n const body2 = res.body ?? {};\n const regionsArr = Array.isArray(body2.regions) ? (body2.regions as unknown[]) : [];\n const buildTags: Record<string, string> = {};\n for (const r of regionsArr) {\n if (r && typeof r === \"object\") {\n const row = r as { region?: unknown; build_tag?: unknown };\n if (typeof row.region === \"string\" && typeof row.build_tag === \"string\") {\n buildTags[row.region] = row.build_tag;\n }\n }\n }\n\n if (\n typeof body2.token !== \"string\" ||\n typeof body2.expires_at !== \"number\" ||\n typeof body2.kid !== \"string\" ||\n typeof body2.offline_until !== \"number\" ||\n typeof body2.grace_period_days !== \"number\"\n ) {\n throw new OfflineError(\n \"unexpected_response\",\n \"mint-offline-token returned malformed body\",\n res.status,\n );\n }\n\n return {\n token: body2.token,\n expiresAt: body2.expires_at,\n kid: body2.kid,\n offlineUntil: body2.offline_until,\n buildTags,\n gracePeriodDays: body2.grace_period_days,\n };\n }\n}\n","/**\n * Pure helper: take an online MapLibre style and rewrite the named region's\n * vector source to point at a local MBTiles file. Layers, paint, layout,\n * glyphs, and sprite are untouched.\n *\n * This is the JS counterpart of the offline-worker's server-side rewriter\n * (see `cloudflare/offline-worker/src/common.ts:rewriteStyleSources`).\n * Customers can either:\n *\n * 1. Fetch a pre-baked offline style from the worker via\n * `chrt.offline.fetchStyle(region, opts)` — recommended for native\n * MapLibre clients (iOS/Android/desktop) that don't have the JS atlas\n * available.\n *\n * 2. Generate the online style themselves (e.g. via the React app's\n * `src/lib/atlas/style-generator.ts`) and call `buildOfflineStyle()`\n * locally — recommended for JS/web SDK consumers who already use the\n * atlas at runtime.\n *\n * Both paths produce equivalent output.\n */\n\n/**\n * MapLibre style specification (subset). Matches the JSON shape MapLibre GL\n * JS, MapLibre Native iOS/Android, and the MapLibre style spec all consume.\n * Customers who want full TypeScript style typing should reference\n * `@maplibre/maplibre-gl-style-spec.StyleSpecification` directly.\n */\nexport interface MapLibreStyle {\n version: number;\n name?: string;\n metadata?: Record<string, unknown>;\n sources: Record<string, MapLibreSource | unknown>;\n sprite?: string;\n glyphs?: string;\n layers: unknown[];\n}\n\ninterface MapLibreSource {\n type: string;\n tiles?: string[];\n url?: string;\n minzoom?: number;\n maxzoom?: number;\n [key: string]: unknown;\n}\n\n/** Target platform — drives the URL scheme used in the rewritten source. */\nexport type OfflineStylePlatform = \"ios\" | \"android\" | \"desktop\";\n\nexport interface BuildOfflineStyleOptions {\n /**\n * Target platform. iOS + Android use the `mbtiles://` scheme MapLibre Native\n * understands; desktop uses `file://`. Default: `\"ios\"`.\n */\n platform?: OfflineStylePlatform;\n /**\n * Name of the source to rewrite. If omitted, defaults to the only vector\n * source in the input style. Throws `OfflineStyleError` if there are zero\n * or more than one vector sources and `sourceName` isn't provided.\n */\n sourceName?: string;\n}\n\n/**\n * Thrown when `buildOfflineStyle` can't determine which source to swap or\n * the named source isn't present in the input style.\n */\nexport class OfflineStyleError extends Error {\n readonly code: string;\n constructor(message: string, code: string) {\n super(message);\n this.name = \"OfflineStyleError\";\n this.code = code;\n }\n}\n\n/**\n * Returns a deep-copy of `onlineStyle` with the named (or auto-detected)\n * vector source rewritten to point at `mbtilesPath`. Other sources, layers,\n * paint, layout, glyphs, and sprite pass through unmodified.\n *\n * URL scheme:\n *\n * platform=\"ios\" → `mbtiles://<mbtilesPath>` MLN Native iOS\n * platform=\"android\" → `mbtiles://<mbtilesPath>` MLN Native Android\n * platform=\"desktop\" → `file://<mbtilesPath>` MLN GL native (Win/Mac/Linux)\n *\n * The `mbtilesPath` is intentionally treated as opaque text. Most native MLN\n * bindings accept the bare scheme + filename and resolve against an\n * app-defined root (typically the app's Documents directory). Pass an\n * absolute path on desktop, or a relative filename on iOS/Android.\n *\n * @param onlineStyle The base MapLibre style. Not mutated.\n * @param mbtilesPath Local-file path component (e.g. `\"NOAA_ENC.mbtiles\"`).\n * @param opts Platform + optional explicit `sourceName`.\n *\n * @example\n * import { buildOfflineStyle } from \"@chrtco/sdk\";\n *\n * // Online style obtained however you like — generated client-side or\n * // fetched from a server.\n * const onlineStyle = generateStyle(\"DAY\", { region: \"NOAA_ENC\" });\n *\n * const offlineStyle = buildOfflineStyle(\n * onlineStyle,\n * \"NOAA_ENC.mbtiles\",\n * { platform: \"ios\" },\n * );\n * // → hand `offlineStyle` to MapLibre.\n */\nexport function buildOfflineStyle(\n onlineStyle: MapLibreStyle,\n mbtilesPath: string,\n opts: BuildOfflineStyleOptions = {},\n): MapLibreStyle {\n if (!onlineStyle || typeof onlineStyle !== \"object\") {\n throw new OfflineStyleError(\"onlineStyle is required\", \"invalid_style\");\n }\n if (!onlineStyle.sources || typeof onlineStyle.sources !== \"object\") {\n throw new OfflineStyleError(\"style has no sources\", \"no_sources\");\n }\n if (!mbtilesPath || typeof mbtilesPath !== \"string\") {\n throw new OfflineStyleError(\"mbtilesPath is required\", \"invalid_path\");\n }\n\n const platform = opts.platform ?? \"ios\";\n const scheme = platform === \"desktop\" ? \"file\" : \"mbtiles\";\n const url = `${scheme}://${mbtilesPath}`;\n\n let sourceName: string;\n if (opts.sourceName) {\n if (!(opts.sourceName in onlineStyle.sources)) {\n throw new OfflineStyleError(\n `source \"${opts.sourceName}\" not found in style`,\n \"source_not_found\",\n );\n }\n sourceName = opts.sourceName;\n } else {\n const vectorSources = Object.entries(onlineStyle.sources).filter(\n ([, src]) =>\n src &&\n typeof src === \"object\" &&\n (src as MapLibreSource).type === \"vector\",\n );\n if (vectorSources.length === 0) {\n throw new OfflineStyleError(\n \"no vector sources in style — pass `opts.sourceName` to override\",\n \"no_vector_source\",\n );\n }\n if (vectorSources.length > 1) {\n throw new OfflineStyleError(\n `${vectorSources.length} vector sources in style — pass \\`opts.sourceName\\``,\n \"ambiguous_source\",\n );\n }\n sourceName = vectorSources[0][0];\n }\n\n // Deep-clone via JSON round-trip — style is plain JSON-shaped, no cycles.\n const cloned = JSON.parse(JSON.stringify(onlineStyle)) as MapLibreStyle;\n const src = cloned.sources[sourceName] as MapLibreSource;\n src.tiles = [url];\n // Collapse legacy `mapbox://...` shape if present so MLN doesn't see both.\n delete src.url;\n return cloned;\n}\n","import type { FileSystemAdapter } from \"../fs-adapter.js\";\nimport { OfflineError } from \"./offline-errors.js\";\n\n/**\n * On-disk shape. Bump `version` if we ever change it; old readers refuse.\n */\nexport interface OfflineManifest {\n version: 1;\n budget_bytes: number | null;\n regions: Record<string, ManifestRegionEntry>;\n}\n\nexport interface ManifestRegionEntry {\n path: string;\n bytes: number;\n sha256: string;\n build_id: string;\n build_tag: string;\n downloaded_at: number;\n last_accessed_at: number;\n}\n\nconst CURRENT_VERSION = 1;\n\nfunction emptyManifest(): OfflineManifest {\n return { version: CURRENT_VERSION, budget_bytes: null, regions: {} };\n}\n\nexport async function readManifest(\n manifestPath: string | undefined,\n fs: FileSystemAdapter,\n): Promise<OfflineManifest> {\n if (!manifestPath) return emptyManifest();\n if (!(await fs.exists(manifestPath))) return emptyManifest();\n\n const raw = await fs.readFile(manifestPath);\n const text = new TextDecoder().decode(raw);\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new OfflineError(\n \"unexpected_response\",\n `offline manifest at ${manifestPath} is not valid JSON`,\n );\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new OfflineError(\"unexpected_response\", `offline manifest shape invalid`);\n }\n const m = parsed as Partial<OfflineManifest>;\n if (m.version !== CURRENT_VERSION) {\n throw new OfflineError(\n \"unexpected_response\",\n `offline manifest version mismatch: got ${String(m.version)}, expected ${CURRENT_VERSION}`,\n );\n }\n return {\n version: CURRENT_VERSION,\n budget_bytes: typeof m.budget_bytes === \"number\" ? m.budget_bytes : null,\n regions: m.regions && typeof m.regions === \"object\" ? m.regions : {},\n };\n}\n\nexport async function writeManifest(\n manifestPath: string,\n fs: FileSystemAdapter,\n manifest: OfflineManifest,\n): Promise<void> {\n const text = JSON.stringify(manifest, null, 2);\n const bytes = new TextEncoder().encode(text);\n await fs.writeFile(manifestPath, bytes);\n}\n\nexport function usedBytes(manifest: OfflineManifest, excludeRegion?: string): number {\n let total = 0;\n for (const [region, entry] of Object.entries(manifest.regions)) {\n if (region === excludeRegion) continue;\n total += entry.bytes;\n }\n return total;\n}\n\nexport function requireManifestPath(manifestPath: string | undefined): string {\n if (!manifestPath) {\n throw new OfflineError(\n \"missing_manifest_path\",\n \"ChrtConfig.manifestPath is required for this operation\",\n );\n }\n return manifestPath;\n}\n","import type { HttpClient } from \"../client.js\";\nimport type {\n OfflineBundleResponse,\n OfflineDownloadOptions,\n OfflineDownloadResult,\n OfflineDownloadProgress,\n OfflineFetchStyleOptions,\n OfflineHeartbeatOptions,\n OfflineRegionSummary,\n OfflineRemoveOptions,\n OfflineStyleResponse,\n} from \"../types.js\";\nimport { OfflineError, mapServerError } from \"./offline-errors.js\";\nimport { OfflineTokenManager } from \"./offline-token-manager.js\";\nimport {\n buildOfflineStyle,\n type BuildOfflineStyleOptions,\n type MapLibreStyle,\n} from \"./offline-style.js\";\nimport {\n readManifest,\n requireManifestPath,\n usedBytes,\n writeManifest,\n type OfflineManifest,\n} from \"./offline-manifest.js\";\n\n/** Progress is throttled to whichever of these two thresholds is larger. */\nconst PROGRESS_MIN_BYTES = 1024 * 1024; // 1 MB\nconst PROGRESS_MIN_FRACTION = 0.01; // 1%\n\ninterface RegionsListResponse {\n regions?: unknown;\n unavailable?: unknown;\n}\n\nexport class OfflineEndpoint {\n readonly tokenManager: OfflineTokenManager;\n\n constructor(\n private readonly http: HttpClient,\n private readonly deviceId: string | undefined,\n private readonly manifestPath: string | undefined,\n ) {\n this.tokenManager = new OfflineTokenManager(http);\n }\n\n /** List regions downloadable under the caller's API key. */\n async list(): Promise<OfflineRegionSummary[]> {\n const token = await this.requireToken();\n const res = await this.http.getJsonWithBearer<RegionsListResponse>(\n \"/offline/regions\",\n token.token,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.list failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n const arr = Array.isArray(res.body?.regions) ? (res.body.regions as unknown[]) : [];\n const out: OfflineRegionSummary[] = [];\n for (const r of arr) {\n if (!r || typeof r !== \"object\") continue;\n const row = r as {\n region?: unknown;\n build_id?: unknown;\n build_tag?: unknown;\n total_bytes?: unknown;\n issued_at?: unknown;\n };\n if (\n typeof row.region === \"string\" &&\n typeof row.build_id === \"string\" &&\n typeof row.build_tag === \"string\" &&\n typeof row.total_bytes === \"number\"\n ) {\n out.push({\n region: row.region,\n build_id: row.build_id,\n build_tag: row.build_tag,\n total_bytes: row.total_bytes,\n issued_at: typeof row.issued_at === \"number\" ? row.issued_at : null,\n });\n }\n }\n return out;\n }\n\n /**\n * Download an MBTiles bundle for `region` to `opts.path`. Resumable via a\n * `<path>.partial` sidecar on interrupt. SHA-256 verified before rename.\n */\n async download(region: string, opts: OfflineDownloadOptions): Promise<OfflineDownloadResult> {\n return this.downloadInternal(region, opts, 0);\n }\n\n /** Delete local file and, if manifest is configured, drop its row + heartbeat. */\n async remove(region: string, opts: OfflineRemoveOptions): Promise<void> {\n if (await opts.fs.exists(opts.path)) {\n await opts.fs.unlink(opts.path);\n }\n const partial = `${opts.path}.partial`;\n if (await opts.fs.exists(partial)) {\n await opts.fs.unlink(partial);\n }\n\n if (this.manifestPath) {\n const manifest = await readManifest(this.manifestPath, opts.fs);\n if (manifest.regions[region]) {\n delete manifest.regions[region];\n await writeManifest(this.manifestPath, opts.fs, manifest);\n }\n // Best-effort heartbeat with the new totals; failure doesn't block removal.\n const regions = Object.keys(manifest.regions);\n const total = usedBytes(manifest);\n try {\n await this.heartbeat({ regions, total_bytes: total, fs: opts.fs });\n } catch {\n // swallow — the file is already gone locally.\n }\n }\n }\n\n /**\n * Pure helper — rewrites the named (or auto-detected) vector source in\n * `onlineStyle` to point at a local MBTiles file. Layers/paint/glyphs\n * untouched. Use when you already have an online style (e.g. generated\n * client-side via the React app's atlas) and want the offline variant.\n *\n * Equivalent to importing `buildOfflineStyle` directly — exposed on the\n * endpoint for discoverability.\n */\n style(\n onlineStyle: MapLibreStyle,\n mbtilesPath: string,\n opts?: BuildOfflineStyleOptions,\n ): MapLibreStyle {\n return buildOfflineStyle(onlineStyle, mbtilesPath, opts);\n }\n\n /**\n * Fetch a pre-baked offline style for `region` from\n * `GET /v1/offline/styles/{region}`. The worker's response already has the\n * source rewritten to `mbtiles://` (default) or `file://`, so the returned\n * `style` is ready to hand directly to MapLibre.\n *\n * Recommended for native MLN clients (iOS/Android/desktop) that don't have\n * the JS atlas available. JS/web SDK consumers can equivalently generate\n * the online style themselves and call `chrt.offline.style(...)`.\n */\n async fetchStyle(\n region: string,\n opts: OfflineFetchStyleOptions = {},\n ): Promise<OfflineStyleResponse> {\n const token = await this.requireToken([region]);\n const palette = opts.palette ?? \"DAY\";\n const protocol = opts.protocol ?? \"mbtiles\";\n const path = `/offline/styles/${encodeURIComponent(region)}?palette=${palette}&protocol=${protocol}`;\n const res = await this.http.getJsonWithBearer<OfflineStyleResponse>(\n path,\n token.token,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.fetchStyle failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n if (!res.body || typeof res.body !== \"object\" || !res.body.style) {\n throw new OfflineError(\n \"unexpected_response\",\n \"offline.fetchStyle: malformed response (missing `style`)\",\n res.status,\n );\n }\n return res.body;\n }\n\n /**\n * Set the local storage budget in bytes. Requires `manifestPath`. Enforced\n * at the start of each `download()`. A budget smaller than current usage\n * does not auto-prune; it only refuses new downloads until the customer\n * calls `remove()`.\n */\n async setStorageBudget(bytes: number, fs: import(\"../fs-adapter.js\").FileSystemAdapter): Promise<void> {\n if (!Number.isFinite(bytes) || bytes < 0) {\n throw new OfflineError(\"unexpected_response\", `invalid budget: ${bytes}`);\n }\n const path = requireManifestPath(this.manifestPath);\n const manifest = await readManifest(path, fs);\n manifest.budget_bytes = bytes;\n await writeManifest(path, fs, manifest);\n }\n\n /**\n * Send a heartbeat. If `opts.regions` / `opts.total_bytes` are omitted and\n * a manifest is configured, values are derived from it. v1 is manual-call\n * only; auto-scheduling is a follow-up phase.\n */\n async heartbeat(opts?: OfflineHeartbeatOptions): Promise<void> {\n const deviceId = this.requireDeviceId();\n\n let regions = opts?.regions;\n let totalBytes = opts?.total_bytes;\n\n // Auto-derive from manifest when caller omitted values AND gave us an fs.\n if ((regions === undefined || totalBytes === undefined) && this.manifestPath && opts?.fs) {\n const manifest = await readManifest(this.manifestPath, opts.fs);\n if (regions === undefined) regions = Object.keys(manifest.regions);\n if (totalBytes === undefined) totalBytes = usedBytes(manifest);\n }\n if (regions === undefined) regions = [];\n if (totalBytes === undefined) totalBytes = 0;\n\n const token = await this.tokenManager.getToken(deviceId);\n const body = {\n device_id: deviceId,\n regions,\n total_bytes: totalBytes,\n ...(opts?.sdk_version ? { sdk_version: opts.sdk_version } : {}),\n ...(opts?.platform ? { platform: opts.platform } : {}),\n };\n const res = await this.http.postJson<unknown>(\"/offline/heartbeat\", body, {\n bearerToken: token.token,\n });\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.heartbeat failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private requireDeviceId(): string {\n if (!this.deviceId) {\n throw new OfflineError(\n \"missing_device_id\",\n \"ChrtConfig.deviceId is required for offline operations\",\n );\n }\n return this.deviceId;\n }\n\n private async requireToken(regions?: string[]) {\n const deviceId = this.requireDeviceId();\n return this.tokenManager.getToken(deviceId, regions);\n }\n\n private async fetchBundle(region: string, bearerToken: string): Promise<OfflineBundleResponse> {\n const res = await this.http.getJsonWithBearer<Record<string, unknown>>(\n `/offline/bundles/${encodeURIComponent(region)}`,\n bearerToken,\n );\n if (!res.ok) {\n const mapped = mapServerError(res.body, res.status);\n throw new OfflineError(\n mapped.code,\n `offline.download bundle fetch failed: HTTP ${res.status}`,\n res.status,\n mapped.detail,\n );\n }\n const b = res.body ?? {};\n const missingFields: string[] = [];\n const field = <K extends string>(k: K): unknown => (b as Record<string, unknown>)[k];\n\n for (const k of [\"signed_url\", \"bytes\", \"build_id\", \"build_tag\", \"expires_at\"] as const) {\n if (field(k) === undefined) missingFields.push(k);\n }\n if (missingFields.length > 0) {\n throw new OfflineError(\n \"unexpected_response\",\n `bundle response missing fields: ${missingFields.join(\",\")}`,\n res.status,\n );\n }\n if (typeof field(\"sha256\") !== \"string\" || (field(\"sha256\") as string).length === 0) {\n throw new OfflineError(\n \"sha_missing\",\n \"bundle response did not include sha256; cannot verify integrity\",\n res.status,\n );\n }\n return {\n region: typeof field(\"region\") === \"string\" ? (field(\"region\") as string) : region,\n build_id: field(\"build_id\") as string,\n build_tag: field(\"build_tag\") as string,\n signed_url: field(\"signed_url\") as string,\n expires_at: field(\"expires_at\") as number,\n bytes: field(\"bytes\") as number,\n sha256: (field(\"sha256\") as string).toLowerCase(),\n offline_until: typeof field(\"offline_until\") === \"number\" ? (field(\"offline_until\") as number) : 0,\n heartbeat_after:\n typeof field(\"heartbeat_after\") === \"number\" ? (field(\"heartbeat_after\") as number) : 0,\n server_time: typeof field(\"server_time\") === \"number\" ? (field(\"server_time\") as number) : 0,\n };\n }\n\n private async downloadInternal(\n region: string,\n opts: OfflineDownloadOptions,\n retryDepth: number,\n ): Promise<OfflineDownloadResult> {\n const { path, fs, onProgress, signal } = opts;\n const partialPath = `${path}.partial`;\n\n const token = await this.requireToken([region]);\n const bundle = await this.fetchBundle(region, token.token);\n\n // Budget check against manifest (if present).\n if (this.manifestPath) {\n const manifest = await readManifest(this.manifestPath, fs);\n if (manifest.budget_bytes !== null) {\n const currentUsed = usedBytes(manifest, region);\n const projected = currentUsed + bundle.bytes;\n if (projected > manifest.budget_bytes) {\n throw new OfflineError(\n \"budget_exceeded\",\n `offline storage budget would be exceeded`,\n undefined,\n {\n budget_bytes: manifest.budget_bytes,\n used_bytes: currentUsed,\n required_bytes: bundle.bytes,\n over_by_bytes: projected - manifest.budget_bytes,\n },\n );\n }\n }\n }\n\n // Examine existing partial.\n let startByte = 0;\n let resumed = false;\n if (await fs.exists(partialPath)) {\n const partialStat = await fs.stat(partialPath);\n if (partialStat.size > bundle.bytes) {\n await fs.unlink(partialPath);\n } else if (partialStat.size === bundle.bytes) {\n const computed = await fs.sha256(partialPath);\n if (computed.toLowerCase() === bundle.sha256) {\n await fs.rename(partialPath, path);\n await this.persistManifestEntry(region, bundle, path, fs);\n return {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n resumed: true,\n };\n }\n // Complete but corrupt — drop and restart.\n await fs.unlink(partialPath);\n } else {\n startByte = partialStat.size;\n resumed = true;\n }\n }\n\n // Fetch (with Range if resuming).\n const fetchInit: RequestInit = { method: \"GET\", signal };\n if (startByte > 0) {\n fetchInit.headers = { Range: `bytes=${startByte}-` };\n }\n\n let response: Response;\n try {\n response = await fetch(bundle.signed_url, fetchInit);\n } catch (err) {\n if (signal?.aborted) {\n throw new OfflineError(\n \"network_interrupted\",\n \"download aborted before response\",\n undefined,\n { resumable: startByte > 0, bytes_written: startByte },\n );\n }\n throw new OfflineError(\n \"network_interrupted\",\n err instanceof Error ? err.message : \"fetch failed\",\n undefined,\n { resumable: startByte > 0, bytes_written: startByte },\n );\n }\n\n // Expired signed URL or build flipped mid-resume → re-mint once.\n if (startByte > 0 && (response.status === 403 || response.status === 404)) {\n await fs.unlink(partialPath);\n if (retryDepth > 0) {\n throw new OfflineError(\n \"unexpected_response\",\n `signed URL still rejected after re-mint (HTTP ${response.status})`,\n response.status,\n );\n }\n this.tokenManager.invalidate(this.requireDeviceId(), [region]);\n return this.downloadInternal(region, opts, retryDepth + 1);\n }\n\n if (startByte > 0 && response.status !== 206) {\n throw new OfflineError(\n \"unexpected_response\",\n `expected 206 Partial Content on Range request, got ${response.status}`,\n response.status,\n );\n }\n if (startByte === 0 && response.status !== 200) {\n throw new OfflineError(\n \"unexpected_response\",\n `expected 200 on initial GET, got ${response.status}`,\n response.status,\n );\n }\n if (!response.body) {\n throw new OfflineError(\n \"unexpected_response\",\n \"response had no body\",\n response.status,\n );\n }\n\n // Stream with progress + abort + persist-on-interrupt.\n await fs.mkdir(dirname(path), { recursive: true });\n const writer = (await fs.writeStream(partialPath, { append: startByte > 0 })).getWriter();\n let bytesDownloaded = startByte;\n let lastProgressBytes = startByte;\n const progressThreshold = Math.max(\n PROGRESS_MIN_BYTES,\n Math.floor(bundle.bytes * PROGRESS_MIN_FRACTION),\n );\n\n const emit = (final: boolean): void => {\n if (!onProgress) return;\n if (!final && bytesDownloaded - lastProgressBytes < progressThreshold) return;\n const progress: OfflineDownloadProgress = {\n bytesDownloaded,\n bytesTotal: bundle.bytes,\n fraction: bundle.bytes === 0 ? 1 : bytesDownloaded / bundle.bytes,\n };\n try {\n onProgress(progress);\n } catch {\n // customer callback failures must not break download\n }\n lastProgressBytes = bytesDownloaded;\n };\n\n emit(true); // always fire at start\n\n try {\n const reader = response.body.getReader();\n while (true) {\n if (signal?.aborted) {\n throw new OfflineError(\n \"network_interrupted\",\n \"download aborted by caller\",\n undefined,\n { resumable: true, bytes_written: bytesDownloaded },\n );\n }\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n await writer.write(value);\n bytesDownloaded += value.byteLength;\n emit(false);\n }\n }\n await writer.close();\n } catch (err) {\n try {\n await writer.abort();\n } catch {\n // best-effort\n }\n if (err instanceof OfflineError) throw err;\n throw new OfflineError(\n \"network_interrupted\",\n err instanceof Error ? err.message : \"stream error\",\n undefined,\n { resumable: true, bytes_written: bytesDownloaded },\n );\n }\n\n emit(true); // always fire at completion\n\n // Verify SHA.\n const computedSha = await fs.sha256(partialPath);\n if (computedSha.toLowerCase() !== bundle.sha256) {\n await fs.unlink(partialPath);\n throw new OfflineError(\n \"download_corrupt\",\n `SHA-256 mismatch for ${region}: expected ${bundle.sha256}, got ${computedSha}`,\n undefined,\n { expected: bundle.sha256, actual: computedSha },\n );\n }\n\n await fs.rename(partialPath, path);\n await this.persistManifestEntry(region, bundle, path, fs);\n\n return {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n resumed,\n };\n }\n\n private async persistManifestEntry(\n region: string,\n bundle: OfflineBundleResponse,\n path: string,\n fs: import(\"../fs-adapter.js\").FileSystemAdapter,\n ): Promise<void> {\n if (!this.manifestPath) return;\n const manifest: OfflineManifest = await readManifest(this.manifestPath, fs);\n const nowSec = Math.floor(Date.now() / 1000);\n manifest.regions[region] = {\n path,\n bytes: bundle.bytes,\n sha256: bundle.sha256,\n build_id: bundle.build_id,\n build_tag: bundle.build_tag,\n downloaded_at: nowSec,\n last_accessed_at: nowSec,\n };\n await writeManifest(this.manifestPath, fs, manifest);\n }\n}\n\n/** Tiny helper so we don't import `node:path`. */\nfunction dirname(p: string): string {\n const i = p.lastIndexOf(\"/\");\n const j = p.lastIndexOf(\"\\\\\");\n const k = Math.max(i, j);\n if (k <= 0) return \".\";\n return p.slice(0, k);\n}\n","/**\n * Generic async auto-pagination generator.\n *\n * Fetches pages from a callback that returns `{ items, total_count }` and\n * yields individual items until all pages are consumed or the signal is aborted.\n *\n * @example\n * ```ts\n * for await (const feature of paginate(\n * (offset, signal) => chrt.features({ bbox, limit: 100, offset, signal }),\n * f => f.features,\n * f => f.total_count ?? 0,\n * )) {\n * console.log(feature);\n * }\n * ```\n */\nexport async function* paginate<TResponse, TItem>(\n fetchPage: (offset: number, signal?: AbortSignal) => Promise<TResponse>,\n getItems: (response: TResponse) => TItem[],\n getTotalCount: (response: TResponse) => number,\n options?: { pageSize?: number; signal?: AbortSignal },\n): AsyncGenerator<TItem, void, undefined> {\n const pageSize = options?.pageSize ?? 100;\n const signal = options?.signal;\n let offset = 0;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (signal?.aborted) return;\n\n const response = await fetchPage(offset, signal);\n const items = getItems(response);\n\n for (const item of items) {\n yield item;\n }\n\n if (items.length === 0) return;\n\n offset += items.length;\n const total = getTotalCount(response);\n if (total > 0 && offset >= total) return;\n }\n}\n","/* ── Webhook event types ───────────────────────────── */\n\n/** Base envelope for all webhook payloads */\nexport interface WebhookPayload<T extends string, D> {\n /** Unique event ID */\n id: string;\n /** ISO 8601 timestamp */\n timestamp: string;\n /** Event type discriminator */\n type: T;\n /** Event-specific data */\n data: D;\n}\n\n/* ── Event data shapes ─────────────────────────────── */\n\nexport interface CellEventData {\n cell_id: string;\n chart_source: string;\n title: string | null;\n edition: number | null;\n update_number: number | null;\n scale_band: string | null;\n}\n\nexport interface CellUpdatedData extends CellEventData {\n previous_edition: number | null;\n previous_update_number: number | null;\n}\n\n/* ── Concrete event types ──────────────────────────── */\n\nexport type CellUpdatedEvent = WebhookPayload<\"cell.updated\", CellUpdatedData>;\nexport type CellNewEvent = WebhookPayload<\"cell.new\", CellEventData>;\nexport type CellDeletedEvent = WebhookPayload<\"cell.deleted\", CellEventData>;\n\n/** Discriminated union of all webhook events */\nexport type WebhookEvent = CellUpdatedEvent | CellNewEvent | CellDeletedEvent;\n\n/** All recognised webhook event type strings */\nexport type WebhookEventType = WebhookEvent[\"type\"];\n\n/* ── Runtime parser ────────────────────────────────── */\n\nconst VALID_TYPES = new Set<string>([\"cell.updated\", \"cell.new\", \"cell.deleted\"]);\n\n/**\n * Parse and validate a raw webhook payload.\n *\n * @param body - The raw request body (parsed JSON object)\n * @returns A typed `WebhookEvent`\n * @throws Error if the payload is malformed or has an unknown event type\n *\n * @example\n * ```ts\n * import { parseWebhook } from \"@chrtco/sdk\";\n *\n * app.post(\"/webhooks/chrt\", (req, res) => {\n * const event = parseWebhook(req.body);\n * switch (event.type) {\n * case \"cell.updated\":\n * console.log(\"Cell updated:\", event.data.cell_id);\n * break;\n * case \"cell.new\":\n * console.log(\"New cell:\", event.data.cell_id);\n * break;\n * }\n * res.sendStatus(200);\n * });\n * ```\n */\nexport function parseWebhook(body: unknown): WebhookEvent {\n if (typeof body !== \"object\" || body === null) {\n throw new Error(\"Invalid webhook payload: expected an object\");\n }\n\n const obj = body as Record<string, unknown>;\n\n if (typeof obj.id !== \"string\") {\n throw new Error(\"Invalid webhook payload: missing 'id'\");\n }\n if (typeof obj.timestamp !== \"string\") {\n throw new Error(\"Invalid webhook payload: missing 'timestamp'\");\n }\n if (typeof obj.type !== \"string\" || !VALID_TYPES.has(obj.type)) {\n throw new Error(`Invalid webhook payload: unknown type '${String(obj.type)}'`);\n }\n if (typeof obj.data !== \"object\" || obj.data === null) {\n throw new Error(\"Invalid webhook payload: missing 'data'\");\n }\n\n return obj as unknown as WebhookEvent;\n}\n","/**\n * IHO S-52 Colour Tables: DAY_BRIGHT, DUSK, and NIGHT.\n * Each token maps to a hex colour string.\n * Source: IHO S-52 Presentation Library, Edition 4.0 – Annex A\n */\n\nexport type ColorTableName = \"DAY\" | \"DUSK\" | \"NIGHT\";\n\n// ── DAY_BRIGHT ────────────────────────────────────────────\nexport const S52_DAY: Record<string, string> = {\n // Depth\n NODTA: \"#a4a4a4\",\n DEPIT: \"#009678\",\n DEPVS: \"#99d6ea\",\n DEPMS: \"#b8e2f1\",\n DEPMD: \"#c4eaf8\",\n DEPDW: \"#dbf3fc\",\n\n // Land / topography\n LANDA: \"#e6d1a1\",\n LANDF: \"#c8b078\",\n CHBRN: \"#ab7948\",\n CHGRF: \"#878787\",\n CHGRD: \"#555555\",\n\n // Chart symbology\n CHBLK: \"#000000\",\n CSTLN: \"#000000\",\n OUTLW: \"#000000\",\n BKAJ1: \"#4d4d4d\",\n\n // Navigation / traffic\n TRFCD: \"#d200d2\",\n TRFCF: \"#e680e6\",\n RESBL: \"#0064b4\",\n APTS1: \"#d200d2\",\n\n // Danger / hazard\n DNGHL: \"#ff0000\",\n ISHDG: \"#cc0000\",\n\n // Lights\n LITRD: \"#ee0000\",\n LITGN: \"#00c800\",\n LITYW: \"#fddc00\",\n LITWT: \"#ffffff\",\n LITBL: \"#0064ff\",\n LITOR: \"#ff8c00\",\n\n // Buoys / marks\n RADHI: \"#68e456\",\n RADLO: \"#3f8a34\",\n PLRTE: \"#dc4025\",\n ARPAT: \"#3fa56f\",\n ISDNG: \"#c545c3\",\n\n // Chart colours\n CHRED: \"#f15469\",\n CHGRN: \"#68e456\",\n CHYLW: \"#f4da48\",\n CHMGD: \"#c545c3\",\n CHMGF: \"#d3a6e9\",\n CHWHT: \"#d4eaee\",\n CHCOR: \"#eb7d36\",\n\n // Soundings\n SNDG1: \"#7d898c\",\n SNDG2: \"#070707\",\n DEPSC: \"#525a5c\",\n DEPCN: \"#7d898c\",\n\n // Utility / infrastructure\n UINFD: \"#070707\",\n UINFF: \"#7d898c\",\n UINFR: \"#f15469\",\n UINFG: \"#68e456\",\n UINFO: \"#eb7d36\",\n UINFB: \"#3a78f0\",\n UINFM: \"#c545c3\",\n UIBCK: \"#d4eaee\",\n UIBDR: \"#7d898c\",\n UIAFD: \"#73b6ef\",\n UIAFF: \"#c9b97a\",\n PIPLN: \"#55aa00\",\n\n // Outlines\n OUTLL: \"#c9b97a\",\n\n // Miscellaneous\n SCLBR: \"#eb7d36\",\n NINFO: \"#eb7d36\",\n ADINF: \"#b29f34\",\n RESGR: \"#7d898c\",\n SHIPS: \"#070707\",\n PSTRK: \"#070707\",\n SYTRK: \"#7d898c\",\n APLRT: \"#eb7d36\",\n CURSR: \"#eb7d36\",\n BKAJ2: \"#232728\",\n RES01: \"#a3b4b7\",\n RES02: \"#a3b4b7\",\n RES03: \"#a3b4b7\",\n};\n\n// ── DUSK ──────────────────────────────────────────────────\n// Reduced brightness (~40-50%) per IHO S-52 Annex A principles.\nexport const S52_DUSK: Record<string, string> = {\n NODTA: \"#6b6b6b\",\n DEPIT: \"#006650\",\n DEPVS: \"#5a8fa0\",\n DEPMS: \"#6a9aad\",\n DEPMD: \"#7ab0c0\",\n DEPDW: \"#7fb5cc\",\n\n LANDA: \"#8a7d5e\",\n LANDF: \"#7a6a48\",\n CHBRN: \"#6e4e30\",\n CHGRF: \"#585858\",\n CHGRD: \"#3a3a3a\",\n\n CHBLK: \"#b0b0b0\",\n CSTLN: \"#b0b0b0\",\n OUTLW: \"#b0b0b0\",\n BKAJ1: \"#707070\",\n\n TRFCD: \"#a000a0\",\n TRFCF: \"#b060b0\",\n RESBL: \"#004a88\",\n APTS1: \"#a000a0\",\n\n DNGHL: \"#cc0000\",\n ISHDG: \"#990000\",\n\n LITRD: \"#bb0000\",\n LITGN: \"#009900\",\n LITYW: \"#c8b000\",\n LITWT: \"#d0d0d0\",\n LITBL: \"#004abb\",\n LITOR: \"#cc7000\",\n\n RADHI: \"#009940\",\n RADLO: \"#2d6330\",\n PLRTE: \"#a03020\",\n ARPAT: \"#306040\",\n ISDNG: \"#903090\",\n\n CHRED: \"#b05060\",\n CHGRN: \"#509040\",\n CHYLW: \"#b0a030\",\n CHMGD: \"#903090\",\n CHMGF: \"#905090\",\n CHWHT: \"#90a0a0\",\n CHCOR: \"#a06030\",\n\n SNDG1: \"#606060\",\n SNDG2: \"#b0b0b0\",\n DEPSC: \"#606060\",\n DEPCN: \"#606060\",\n\n UINFD: \"#b0b0b0\",\n UINFF: \"#606060\",\n UINFR: \"#b05060\",\n UINFG: \"#509040\",\n UINFO: \"#a06030\",\n UINFB: \"#304090\",\n UINFM: \"#903090\",\n UIBCK: \"#1a1a1a\",\n UIBDR: \"#606060\",\n UIAFD: \"#405060\",\n UIAFF: \"#605840\",\n PIPLN: \"#3d7a00\",\n\n OUTLL: \"#605840\",\n\n SCLBR: \"#a06030\",\n NINFO: \"#a06030\",\n ADINF: \"#807020\",\n RESGR: \"#606060\",\n SHIPS: \"#b0b0b0\",\n PSTRK: \"#b0b0b0\",\n SYTRK: \"#606060\",\n APLRT: \"#a06030\",\n CURSR: \"#cc0000\",\n BKAJ2: \"#252525\",\n RES01: \"#606060\",\n RES02: \"#606060\",\n RES03: \"#606060\",\n};\n\n// ── NIGHT ─────────────────────────────────────────────────\n// Dark-adapted palette: dark background, amber/red text,\n// heavily muted fills to preserve scotopic (night) vision.\nexport const S52_NIGHT: Record<string, string> = {\n NODTA: \"#3a3a32\",\n DEPIT: \"#003828\",\n DEPVS: \"#1a3a45\",\n DEPMS: \"#1e4050\",\n DEPMD: \"#1a3848\",\n DEPDW: \"#1a3545\",\n\n LANDA: \"#3a3020\",\n LANDF: \"#302818\",\n CHBRN: \"#382410\",\n CHGRF: \"#2a2a22\",\n CHGRD: \"#1e1e18\",\n\n CHBLK: \"#c8aa78\",\n CSTLN: \"#c8aa78\",\n OUTLW: \"#c8aa78\",\n BKAJ1: \"#504830\",\n\n TRFCD: \"#6e006e\",\n TRFCF: \"#803880\",\n RESBL: \"#002a50\",\n APTS1: \"#6e006e\",\n\n DNGHL: \"#a00000\",\n ISHDG: \"#700000\",\n\n LITRD: \"#880000\",\n LITGN: \"#006600\",\n LITYW: \"#887800\",\n LITWT: \"#a09878\",\n LITBL: \"#003088\",\n LITOR: \"#884800\",\n\n RADHI: \"#005528\",\n RADLO: \"#1a3a20\",\n PLRTE: \"#6e2018\",\n ARPAT: \"#1a3028\",\n ISDNG: \"#481848\",\n\n CHRED: \"#682030\",\n CHGRN: \"#285020\",\n CHYLW: \"#685828\",\n CHMGD: \"#481848\",\n CHMGF: \"#482848\",\n CHWHT: \"#484840\",\n CHCOR: \"#683818\",\n\n SNDG1: \"#383028\",\n SNDG2: \"#c8aa78\",\n DEPSC: \"#383028\",\n DEPCN: \"#383028\",\n\n UINFD: \"#c8aa78\",\n UINFF: \"#383028\",\n UINFR: \"#682030\",\n UINFG: \"#285020\",\n UINFO: \"#683818\",\n UINFB: \"#182848\",\n UINFM: \"#481848\",\n UIBCK: \"#0a0a08\",\n UIBDR: \"#383028\",\n UIAFD: \"#182838\",\n UIAFF: \"#302818\",\n PIPLN: \"#284800\",\n\n OUTLL: \"#302818\",\n\n SCLBR: \"#683818\",\n NINFO: \"#683818\",\n ADINF: \"#483818\",\n RESGR: \"#383028\",\n SHIPS: \"#c8aa78\",\n PSTRK: \"#c8aa78\",\n SYTRK: \"#484030\",\n APLRT: \"#683818\",\n CURSR: \"#a00000\",\n BKAJ2: \"#0a0a08\",\n RES01: \"#383028\",\n RES02: \"#383028\",\n RES03: \"#383028\",\n};\n\n/** Backward-compatible alias – the DAY_BRIGHT table */\nexport const S52_COLORS = S52_DAY;\n\nconst COLOR_TABLES: Record<ColorTableName, Record<string, string>> = {\n DAY: S52_DAY,\n DUSK: S52_DUSK,\n NIGHT: S52_NIGHT,\n};\n\n/** Get a full colour table by name */\nexport function getColorTable(name: ColorTableName): Record<string, string> {\n return COLOR_TABLES[name];\n}\n\n/** Resolve an S-52 colour token to a hex string. Falls back to black/amber. */\nexport function resolveColor(token: string, table: ColorTableName = \"DAY\"): string {\n const t = COLOR_TABLES[table];\n return t[token] ?? (table === \"NIGHT\" ? \"#c8aa78\" : \"#000000\");\n}\n","import type { LookupEntry } from \"./types\";\n\n/**\n * S-52 lookup table covering all S-57 object classes found in NOAA ENCs.\n * Colours reference S-52 tokens (resolved at render time).\n * INT1 references per NOAA Chart No. 1 (Ed 13).\n */\nexport const S52_LOOKUP: Record<string, LookupEntry> = {\n // ── Depths (INT1 Section I) ─────────────────────────────\n DEPARE: {\n objectClass: \"DEPARE\", name: \"Depth Area\", category: \"Depths\",\n displayCategory: \"BASE\", int1Ref: \"I12\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMD\", \"fill-opacity\": 0.7 } },\n hasConditional: true, conditionalAttributes: [\"DRVAL1\", \"DRVAL2\"],\n viewingGroup: 13010, scamin: 0,\n },\n DEPCNT: {\n objectClass: \"DEPCNT\", name: \"Depth Contour\", category: \"Depths\",\n displayCategory: \"STANDARD\", int1Ref: \"I30\",\n style: { type: \"line\", paint: { \"line-color\": \"CHGRD\", \"line-width\": 0.5 } },\n viewingGroup: 13030, scamin: 45000,\n },\n SOUNDG: {\n objectClass: \"SOUNDG\", name: \"Sounding\", category: \"Depths\",\n displayCategory: \"BASE\", int1Ref: \"I10\",\n style: { type: \"circle\", paint: { \"circle-color\": \"CHBLK\", \"circle-radius\": 0, \"circle-opacity\": 0, \"circle-stroke-width\": 0 } },\n viewingGroup: 13010, scamin: 0,\n },\n DRGARE: {\n objectClass: \"DRGARE\", name: \"Dredged Area\", category: \"Depths\",\n displayCategory: \"STANDARD\", int1Ref: \"I20\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMD\", \"fill-opacity\": 0.5 } },\n viewingGroup: 13030, scamin: 45000,\n },\n SWPARE: {\n objectClass: \"SWPARE\", name: \"Swept Area\", category: \"Depths\",\n displayCategory: \"OTHER\", int1Ref: \"I24\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMS\", \"fill-opacity\": 0.35 } },\n viewingGroup: 13050, scamin: 45000,\n },\n\n // ── Land & Shoreline (INT1 Section C) ───────────────────\n LNDARE: {\n objectClass: \"LNDARE\", name: \"Land Area\", category: \"Land\",\n displayCategory: \"BASE\", int1Ref: \"C1\",\n style: { type: \"fill\", paint: { \"fill-color\": \"LANDA\", \"fill-opacity\": 0.9 } },\n viewingGroup: 12010, scamin: 0,\n },\n COALNE: {\n objectClass: \"COALNE\", name: \"Coastline\", category: \"Land\",\n displayCategory: \"BASE\", int1Ref: \"C1\",\n style: { type: \"line\", paint: { \"line-color\": \"CSTLN\", \"line-width\": 0.8 } },\n viewingGroup: 12010, scamin: 0,\n },\n SLCONS: {\n objectClass: \"SLCONS\", name: \"Shoreline Construction\", category: \"Land\",\n displayCategory: \"STANDARD\", int1Ref: \"F1\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 1 } },\n hasConditional: true, conditionalAttributes: [\"WATLEV\"],\n viewingGroup: 12410, scamin: 22000,\n },\n LNDRGN: {\n objectClass: \"LNDRGN\", name: \"Land Region\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"C20\",\n style: { type: \"circle\", paint: { \"circle-color\": \"CHBRN\", \"circle-radius\": 0, \"circle-opacity\": 0 } },\n viewingGroup: 12070, scamin: 45000,\n },\n BUAARE: {\n objectClass: \"BUAARE\", name: \"Built-up Area\", category: \"Land\",\n displayCategory: \"STANDARD\", int1Ref: \"D1\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.25 } },\n viewingGroup: 12210, scamin: 45000,\n },\n BUISGL: {\n objectClass: \"BUISGL\", name: \"Building\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"D5\",\n style: { type: \"circle\", paint: { \"circle-color\": \"CHBLK\", \"circle-radius\": 3, \"circle-stroke-width\": 0 } },\n viewingGroup: 12210, scamin: 22000,\n },\n LAKARE: {\n objectClass: \"LAKARE\", name: \"Lake\", category: \"Land\",\n displayCategory: \"STANDARD\", int1Ref: \"C22\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMD\", \"fill-opacity\": 0.6 } },\n viewingGroup: 12050, scamin: 90000,\n },\n RIVERS: {\n objectClass: \"RIVERS\", name: \"River\", category: \"Land\",\n displayCategory: \"STANDARD\", int1Ref: \"C20\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMD\", \"fill-opacity\": 0.5 } },\n viewingGroup: 12050, scamin: 90000,\n },\n ROADWY: {\n objectClass: \"ROADWY\", name: \"Road\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"D10\",\n style: { type: \"line\", paint: { \"line-color\": \"CHGRF\", \"line-width\": 1 } },\n viewingGroup: 12250, scamin: 22000,\n },\n RAILWY: {\n objectClass: \"RAILWY\", name: \"Railway\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"D13\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 0.8, \"line-dasharray\": [4, 2] } },\n viewingGroup: 12250, scamin: 22000,\n },\n CANALS: {\n objectClass: \"CANALS\", name: \"Canal\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"C21\",\n style: { type: \"line\", paint: { \"line-color\": \"DEPMS\", \"line-width\": 1 } },\n viewingGroup: 12050, scamin: 45000,\n },\n TUNNEL: {\n objectClass: \"TUNNEL\", name: \"Tunnel\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"D15\",\n style: { type: \"line\", paint: { \"line-color\": \"CHGRD\", \"line-width\": 1, \"line-dasharray\": [2, 2] } },\n viewingGroup: 12250, scamin: 22000,\n },\n\n // ── Navigation Aids — Buoys (INT1 Section Q) ────────────\n BOYLAT: {\n objectClass: \"BOYLAT\", name: \"Buoy, Lateral (Can/Nun)\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q130.1\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYCAN01\" },\n hasConditional: true, conditionalAttributes: [\"CATLAM\", \"COLOUR\"],\n viewingGroup: 27010, scamin: 22000,\n },\n BOYSPP: {\n objectClass: \"BOYSPP\", name: \"Buoy, Special Purpose\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q130.6\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYSPP11\" },\n viewingGroup: 27010, scamin: 22000,\n },\n BOYCAR: {\n objectClass: \"BOYCAR\", name: \"Buoy, Cardinal\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q130.3\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYCAR01\" },\n hasConditional: true, conditionalAttributes: [\"CATCAM\"],\n viewingGroup: 27010, scamin: 22000,\n },\n BOYISD: {\n objectClass: \"BOYISD\", name: \"Buoy, Isolated Danger\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q130.4\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYISD12\" },\n viewingGroup: 27010, scamin: 22000,\n },\n BOYSAW: {\n objectClass: \"BOYSAW\", name: \"Buoy, Safe Water\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q130.5\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYSAW12\" },\n viewingGroup: 27010, scamin: 22000,\n },\n BOYINB: {\n objectClass: \"BOYINB\", name: \"Buoy, Installation\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"Q130.6\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"BOYSPP11\" },\n viewingGroup: 27010, scamin: 22000,\n },\n\n // ── Navigation Aids — Beacons (INT1 Section Q) ──────────\n BCNLAT: {\n objectClass: \"BCNLAT\", name: \"Beacon, Lateral\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q100\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNLAT15\" },\n hasConditional: true, conditionalAttributes: [\"CATLAM\", \"COLOUR\"],\n viewingGroup: 27010, scamin: 22000,\n },\n BCNSPP: {\n objectClass: \"BCNSPP\", name: \"Beacon, Special Purpose\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q110\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNSPP13\" },\n viewingGroup: 27010, scamin: 22000,\n },\n BCNCAR: {\n objectClass: \"BCNCAR\", name: \"Beacon, Cardinal\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q110\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNCAR01\" },\n hasConditional: true, conditionalAttributes: [\"CATCAM\"],\n viewingGroup: 27010, scamin: 22000,\n },\n BCNISD: {\n objectClass: \"BCNISD\", name: \"Beacon, Isolated Danger\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q110\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNISD21\" },\n viewingGroup: 27010, scamin: 22000,\n },\n BCNSAW: {\n objectClass: \"BCNSAW\", name: \"Beacon, Safe Water\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"Q110\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNSAW13\" },\n viewingGroup: 27010, scamin: 22000,\n },\n\n // ── Navigation Aids — Lights (INT1 Section P) ───────────\n LIGHTS: {\n objectClass: \"LIGHTS\", name: \"Light\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"P1\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"LIGHTS11\" },\n hasConditional: true, conditionalAttributes: [\"COLOUR\"],\n viewingGroup: 27070, scamin: 22000,\n },\n\n // ── Navigation Aids — Other (INT1 Sections Q, R, S) ─────\n DAYMAR: {\n objectClass: \"DAYMAR\", name: \"Daymark\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"Q100\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"DAYTRI01\" },\n hasConditional: true, conditionalAttributes: [\"TOPSHP\", \"COLOUR\"],\n viewingGroup: 27010, scamin: 22000,\n },\n FOGSIG: {\n objectClass: \"FOGSIG\", name: \"Fog Signal\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"R1\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"FOGSIG01\" },\n viewingGroup: 27080, scamin: 22000,\n },\n PILPNT: {\n objectClass: \"PILPNT\", name: \"Pile / Post\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"Q80\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.5, \"icon-allow-overlap\": true }, iconImage: \"PILPNT02\" },\n viewingGroup: 27010, scamin: 22000,\n },\n RTPBCN: {\n objectClass: \"RTPBCN\", name: \"Radar Transponder Beacon\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"S1\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"RTPBCN02\" },\n viewingGroup: 27080, scamin: 22000,\n },\n NAVLNE: {\n objectClass: \"NAVLNE\", name: \"Navigation Line\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"M1\",\n style: { type: \"line\", paint: { \"line-color\": \"TRFCD\", \"line-width\": 1, \"line-dasharray\": [6, 3] } },\n viewingGroup: 25020, scamin: 90000,\n },\n LNDELV: {\n objectClass: \"LNDELV\", name: \"Land Elevation\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"C10\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBRN\", \"line-width\": 0.5 } },\n viewingGroup: 12070, scamin: 22000,\n },\n\n // ── Hazards (INT1 Section K) ────────────────────────────\n OBSTRN: {\n objectClass: \"OBSTRN\", name: \"Obstruction\", category: \"Hazards\",\n displayCategory: \"STANDARD\", int1Ref: \"K40\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"OBSTRN01\" },\n hasConditional: true, conditionalAttributes: [\"WATLEV\", \"VALSOU\"],\n viewingGroup: 24020, scamin: 0,\n },\n UWTROC: {\n objectClass: \"UWTROC\", name: \"Underwater Rock\", category: \"Hazards\",\n displayCategory: \"STANDARD\", int1Ref: \"K12\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"UWTROC03\" },\n hasConditional: true, conditionalAttributes: [\"WATLEV\", \"VALSOU\"],\n viewingGroup: 24020, scamin: 0,\n },\n WRECKS: {\n objectClass: \"WRECKS\", name: \"Wreck\", category: \"Hazards\",\n displayCategory: \"STANDARD\", int1Ref: \"K24\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"WRECKS04\" },\n hasConditional: true, conditionalAttributes: [\"CATWRK\", \"WATLEV\", \"VALSOU\"],\n viewingGroup: 24020, scamin: 0,\n },\n SBDARE: {\n objectClass: \"SBDARE\", name: \"Seabed Area\", category: \"Depths\",\n displayCategory: \"OTHER\", int1Ref: \"J1\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.15 } },\n viewingGroup: 14010, scamin: 22000,\n },\n\n // ── Regulated Areas (INT1 Section N) ────────────────────\n ACHARE: {\n objectClass: \"ACHARE\", name: \"Anchorage Area\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"N12\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.1 } },\n viewingGroup: 26010, scamin: 90000,\n },\n RESARE: {\n objectClass: \"RESARE\", name: \"Restricted Area\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"N2\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.12 } },\n viewingGroup: 26040, scamin: 90000,\n },\n CTNARE: {\n objectClass: \"CTNARE\", name: \"Caution Area\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"N30\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.08 } },\n viewingGroup: 26050, scamin: 90000,\n },\n FAIRWY: {\n objectClass: \"FAIRWY\", name: \"Fairway\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M18\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.06 } },\n viewingGroup: 25020, scamin: 90000,\n },\n DMPGRD: {\n objectClass: \"DMPGRD\", name: \"Dumping Ground\", category: \"Regulated Areas\",\n displayCategory: \"OTHER\", int1Ref: \"N23\",\n style: { type: \"fill\", paint: { \"fill-color\": \"LITYW\", \"fill-opacity\": 0.15 } },\n viewingGroup: 26230, scamin: 22000,\n },\n TSSLPT: {\n objectClass: \"TSSLPT\", name: \"TSS Lane Part\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M25\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.08 } },\n viewingGroup: 25010, scamin: 90000,\n },\n TSSRON: {\n objectClass: \"TSSRON\", name: \"TSS Roundabout\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M26\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.08 } },\n viewingGroup: 25010, scamin: 90000,\n },\n TSSBND: {\n objectClass: \"TSSBND\", name: \"TSS Boundary\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M25\",\n style: { type: \"line\", paint: { \"line-color\": \"TRFCD\", \"line-width\": 1, \"line-dasharray\": [8, 4] } },\n viewingGroup: 25010, scamin: 90000,\n },\n TESARE: {\n objectClass: \"TESARE\", name: \"Territorial Sea Area\", category: \"Regulated Areas\",\n displayCategory: \"OTHER\", int1Ref: \"N40\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.04 } },\n viewingGroup: 26050, scamin: 90000,\n },\n MIPARE: {\n objectClass: \"MIPARE\", name: \"Military Practice Area\", category: \"Regulated Areas\",\n displayCategory: \"OTHER\", int1Ref: \"N30\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.1 } },\n viewingGroup: 26050, scamin: 90000,\n },\n\n // ── Infrastructure (INT1 Sections D, F, L) ──────────────\n BRIDGE: {\n objectClass: \"BRIDGE\", name: \"Bridge\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"D20\",\n style: { type: \"line\", paint: { \"line-color\": \"CHGRD\", \"line-width\": 2 } },\n viewingGroup: 12210, scamin: 22000,\n hasConditional: true, conditionalAttributes: [\"CATBRG\", \"VERCLR\"],\n },\n CBLSUB: {\n objectClass: \"CBLSUB\", name: \"Submarine Cable\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"L30\",\n style: { type: \"line\", paint: { \"line-color\": \"TRFCD\", \"line-width\": 1, \"line-dasharray\": [5, 3] } },\n viewingGroup: 24010, scamin: 22000,\n },\n CBLARE: {\n objectClass: \"CBLARE\", name: \"Cable Area\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"L31\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.08 } },\n viewingGroup: 24010, scamin: 22000,\n },\n PIPSOL: {\n objectClass: \"PIPSOL\", name: \"Pipeline, Submarine\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"L40\",\n style: { type: \"line\", paint: { \"line-color\": \"PIPLN\", \"line-width\": 1, \"line-dasharray\": [6, 3] } },\n viewingGroup: 24010, scamin: 22000,\n },\n PIPARE: {\n objectClass: \"PIPARE\", name: \"Pipeline Area\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"L41\",\n style: { type: \"fill\", paint: { \"fill-color\": \"PIPLN\", \"fill-opacity\": 0.08 } },\n viewingGroup: 24010, scamin: 22000,\n },\n MORFAC: {\n objectClass: \"MORFAC\", name: \"Mooring Facility\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"Q40\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"MORFAC04\" },\n viewingGroup: 12410, scamin: 22000,\n },\n PONTON: {\n objectClass: \"PONTON\", name: \"Pontoon\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"F16\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.5 } },\n viewingGroup: 12410, scamin: 22000,\n },\n HRBFAC: {\n objectClass: \"HRBFAC\", name: \"Harbour Facility\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F10\",\n style: { type: \"circle\", paint: { \"circle-color\": \"TRFCD\", \"circle-radius\": 4, \"circle-stroke-color\": \"CHBLK\", \"circle-stroke-width\": 0.5 } },\n viewingGroup: 12410, scamin: 22000,\n },\n OFSPLF: {\n objectClass: \"OFSPLF\", name: \"Offshore Platform\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"L10\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"OFSPLF01\" },\n viewingGroup: 12410, scamin: 22000,\n },\n HULKES: {\n objectClass: \"HULKES\", name: \"Hulk\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F34\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRD\", \"fill-opacity\": 0.4 } },\n viewingGroup: 12410, scamin: 22000,\n },\n DRYDOC: {\n objectClass: \"DRYDOC\", name: \"Dry Dock\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F25\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.4 } },\n viewingGroup: 12410, scamin: 22000,\n },\n FLODOC: {\n objectClass: \"FLODOC\", name: \"Floating Dock\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F26\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.35 } },\n viewingGroup: 12410, scamin: 22000,\n },\n GATCON: {\n objectClass: \"GATCON\", name: \"Gate\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F44\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 1.5 } },\n viewingGroup: 12410, scamin: 22000,\n },\n SILTNK: {\n objectClass: \"SILTNK\", name: \"Silo / Tank\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"E33\",\n style: { type: \"circle\", paint: { \"circle-color\": \"CHBLK\", \"circle-radius\": 3, \"circle-stroke-width\": 0 } },\n viewingGroup: 12210, scamin: 22000,\n },\n LNDMRK: {\n objectClass: \"LNDMRK\", name: \"Landmark\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"E20\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"BCNTOW01\" },\n hasConditional: true, conditionalAttributes: [\"CATLMK\"],\n viewingGroup: 12210, scamin: 22000,\n },\n\n // ── Topmarks (INT1 Section Q) ───────────────────────────\n TOPMAR: {\n objectClass: \"TOPMAR\", name: \"Topmark\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"Q130\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.5, \"icon-allow-overlap\": true }, iconImage: \"TOPMAR02\" },\n hasConditional: true, conditionalAttributes: [\"TOPSHP\"],\n viewingGroup: 27010, scamin: 22000,\n },\n\n // ── Light Vessels and Floats ────────────────────────────\n LITVES: {\n objectClass: \"LITVES\", name: \"Light Vessel\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"P6\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"LIGHTS82\" },\n viewingGroup: 27070, scamin: 22000,\n },\n LITFLT: {\n objectClass: \"LITFLT\", name: \"Light Float\", category: \"Navigation Aids\",\n displayCategory: \"STANDARD\", int1Ref: \"P5\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.7, \"icon-allow-overlap\": true }, iconImage: \"LIGHTS82\" },\n viewingGroup: 27070, scamin: 22000,\n },\n\n // ── Services (INT1 Section T) ───────────────────────────\n SISTAT: {\n objectClass: \"SISTAT\", name: \"Signal Station\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"T20\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"SISTAT02\" },\n viewingGroup: 27080, scamin: 22000,\n },\n PILBOP: {\n objectClass: \"PILBOP\", name: \"Pilot Boarding Place\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"T1.1\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"PILBOP02\" },\n viewingGroup: 27080, scamin: 22000,\n },\n CRANES: {\n objectClass: \"CRANES\", name: \"Crane\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F53\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"CRANES01\" },\n viewingGroup: 12410, scamin: 22000,\n },\n RDOSTA: {\n objectClass: \"RDOSTA\", name: \"Radio Station\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"S10\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.6, \"icon-allow-overlap\": true }, iconImage: \"RTPBCN02\" },\n viewingGroup: 27080, scamin: 22000,\n },\n DISMAR: {\n objectClass: \"DISMAR\", name: \"Distance Mark\", category: \"Navigation Aids\",\n displayCategory: \"OTHER\", int1Ref: \"B25\",\n style: { type: \"circle\", paint: { \"circle-color\": \"CHBLK\", \"circle-radius\": 3, \"circle-stroke-width\": 0 } },\n viewingGroup: 27010, scamin: 22000,\n },\n SMCFAC: {\n objectClass: \"SMCFAC\", name: \"Small Craft Facility\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"U1\",\n style: { type: \"circle\", paint: { \"circle-color\": \"TRFCD\", \"circle-radius\": 4, \"circle-stroke-color\": \"CHBLK\", \"circle-stroke-width\": 0.5 } },\n viewingGroup: 12410, scamin: 22000,\n },\n\n // ── Overhead & Underground (INT1 Section L) ─────────────\n CBLOHD: {\n objectClass: \"CBLOHD\", name: \"Cable, Overhead\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"D26\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 1, \"line-dasharray\": [4, 2] } },\n viewingGroup: 24010, scamin: 22000,\n },\n\n // ── Routes (INT1 Section M) ─────────────────────────────\n FERYRT: {\n objectClass: \"FERYRT\", name: \"Ferry Route\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M50\",\n style: { type: \"line\", paint: { \"line-color\": \"TRFCD\", \"line-width\": 1, \"line-dasharray\": [6, 3] } },\n viewingGroup: 25020, scamin: 90000,\n },\n RECTRC: {\n objectClass: \"RECTRC\", name: \"Recommended Track\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M5\",\n style: { type: \"line\", paint: { \"line-color\": \"TRFCD\", \"line-width\": 1.5, \"line-dasharray\": [8, 4] } },\n viewingGroup: 25020, scamin: 90000,\n },\n\n // ── Natural Features ────────────────────────────────────\n VEGATN: {\n objectClass: \"VEGATN\", name: \"Vegetation\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"C31\",\n style: { type: \"fill\", paint: { \"fill-color\": \"LANDF\", \"fill-opacity\": 0.2 } },\n viewingGroup: 12050, scamin: 22000,\n },\n SEAARE: {\n objectClass: \"SEAARE\", name: \"Sea Area\", category: \"Depths\",\n displayCategory: \"OTHER\", int1Ref: \"O1\",\n style: { type: \"fill\", paint: { \"fill-color\": \"DEPMD\", \"fill-opacity\": 0 } },\n viewingGroup: 12070, scamin: 90000,\n },\n MARCUL: {\n objectClass: \"MARCUL\", name: \"Marine Farm/Culture\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"K48\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHBRN\", \"fill-opacity\": 0.15 } },\n viewingGroup: 26230, scamin: 22000,\n },\n ACHBRT: {\n objectClass: \"ACHBRT\", name: \"Anchor Berth\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"N11\",\n style: { type: \"symbol\", paint: {}, layout: { \"icon-size\": 0.5, \"icon-allow-overlap\": true }, iconImage: \"ACHARE02\" },\n viewingGroup: 26010, scamin: 90000,\n },\n BERTHS: {\n objectClass: \"BERTHS\", name: \"Berth\", category: \"Infrastructure\",\n displayCategory: \"OTHER\", int1Ref: \"F19\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 1.5 } },\n viewingGroup: 12410, scamin: 22000,\n },\n FNCLNE: {\n objectClass: \"FNCLNE\", name: \"Fence/Wall\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"D20\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 0.5 } },\n viewingGroup: 12210, scamin: 22000,\n },\n ISTZNE: {\n objectClass: \"ISTZNE\", name: \"Inshore Traffic Zone\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M25.2\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.06 } },\n viewingGroup: 25010, scamin: 90000,\n },\n PRCARE: {\n objectClass: \"PRCARE\", name: \"Precautionary Area\", category: \"Regulated Areas\",\n displayCategory: \"STANDARD\", int1Ref: \"M14\",\n style: { type: \"fill\", paint: { \"fill-color\": \"TRFCD\", \"fill-opacity\": 0.08 } },\n viewingGroup: 25010, scamin: 90000,\n },\n OSPARE: {\n objectClass: \"OSPARE\", name: \"Offshore Production Area\", category: \"Regulated Areas\",\n displayCategory: \"OTHER\", int1Ref: \"L1.2\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHBRN\", \"fill-opacity\": 0.1 } },\n viewingGroup: 26230, scamin: 22000,\n },\n LOGPON: {\n objectClass: \"LOGPON\", name: \"Log Pond\", category: \"Regulated Areas\",\n displayCategory: \"OTHER\", int1Ref: \"N65\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHBRN\", \"fill-opacity\": 0.12 } },\n viewingGroup: 26230, scamin: 22000,\n },\n AIRARE: {\n objectClass: \"AIRARE\", name: \"Airport\", category: \"Land\",\n displayCategory: \"OTHER\", int1Ref: \"D17\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0.15 } },\n viewingGroup: 12210, scamin: 22000,\n },\n DAMCON: {\n objectClass: \"DAMCON\", name: \"Dam\", category: \"Infrastructure\",\n displayCategory: \"STANDARD\", int1Ref: \"F44\",\n style: { type: \"line\", paint: { \"line-color\": \"CHBLK\", \"line-width\": 2 } },\n viewingGroup: 12410, scamin: 22000,\n },\n\n // ── Meta (hidden by default) ────────────────────────────\n M_COVR: {\n objectClass: \"M_COVR\", name: \"Coverage\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"line\", paint: { \"line-color\": \"CHGRF\", \"line-width\": 0.5, \"line-opacity\": 0.3 } },\n },\n M_NPUB: {\n objectClass: \"M_NPUB\", name: \"Nautical Publication\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0 } },\n },\n M_NSYS: {\n objectClass: \"M_NSYS\", name: \"Nav System of Marks\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0 } },\n },\n M_QUAL: {\n objectClass: \"M_QUAL\", name: \"Quality of Data\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0 } },\n },\n M_SREL: {\n objectClass: \"M_SREL\", name: \"Survey Reliability\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0 } },\n },\n DSID: {\n objectClass: \"DSID\", name: \"Dataset ID\", category: \"Meta\",\n displayCategory: \"META\",\n style: { type: \"fill\", paint: { \"fill-color\": \"CHGRF\", \"fill-opacity\": 0 } },\n },\n};\n","/**\n * S-52 draw order: layers listed bottom → top.\n * Layers not in this list are inserted before point features.\n */\nexport const S52_DRAW_ORDER: string[] = [\n // 1. Meta (hidden, but at very bottom)\n \"DSID\", \"M_COVR\", \"M_NPUB\", \"M_NSYS\", \"M_QUAL\", \"M_SREL\",\n // 2. Depth areas – deepest first (fill)\n \"DEPARE\", \"SEAARE\",\n // 3. Dredged / swept areas (fill)\n \"DRGARE\", \"SWPARE\", \"SBDARE\",\n // 4. Land (fill)\n \"LNDARE\", \"BUAARE\", \"LAKARE\", \"RIVERS\", \"CANALS\", \"VEGATN\", \"AIRARE\",\n // 5. Area hazards (fill)\n \"OBSTRN\", \"UWTROC\", \"MARCUL\",\n // 6. Regulated areas (fill)\n \"TESARE\", \"MIPARE\", \"FAIRWY\", \"TSSLPT\", \"TSSRON\", \"ISTZNE\", \"PRCARE\", \"DMPGRD\",\n \"ACHARE\", \"RESARE\", \"CTNARE\", \"OSPARE\", \"LOGPON\",\n \"CBLARE\", \"PIPARE\",\n // 7. Infrastructure areas (fill)\n \"PONTON\", \"HULKES\", \"DRYDOC\", \"FLODOC\", \"BRIDGE\",\n // 8. Coastline / shore (line)\n \"COALNE\", \"SLCONS\", \"FNCLNE\",\n // 9. Depth contours (line)\n \"DEPCNT\", \"LNDELV\",\n // 10. Navigation lines (line)\n \"NAVLNE\", \"TSSBND\", \"ROADWY\", \"RAILWY\", \"TUNNEL\", \"FERYRT\", \"RECTRC\",\n \"PIPSOL\", \"CBLSUB\", \"CBLOHD\", \"GATCON\", \"DAMCON\", \"BERTHS\",\n // 11. Point features\n \"SOUNDG\", \"MORFAC\", \"PILPNT\", \"BUISGL\", \"SILTNK\", \"LNDMRK\", \"LNDRGN\",\n \"HRBFAC\", \"OFSPLF\", \"SMCFAC\", \"CRANES\", \"DISMAR\", \"ACHBRT\",\n // 12. Nav aids (on top)\n \"FOGSIG\", \"RTPBCN\", \"RDOSTA\", \"SISTAT\", \"PILBOP\", \"DAYMAR\", \"TOPMAR\",\n \"BCNSPP\", \"BCNCAR\", \"BCNISD\", \"BCNSAW\", \"BCNLAT\",\n \"BOYSPP\", \"BOYCAR\", \"BOYISD\", \"BOYSAW\", \"BOYINB\", \"BOYLAT\",\n \"LITVES\", \"LITFLT\", \"LIGHTS\",\n // 13. Hazard points (very top)\n \"WRECKS\",\n];\n\n/** Get numeric draw priority for a layer (lower = drawn first / below) */\nexport function getDrawPriority(layerName: string): number {\n const idx = S52_DRAW_ORDER.indexOf(layerName);\n // Unknown layers go just before point features\n return idx >= 0 ? idx : S52_DRAW_ORDER.length - 15;\n}\n","import { resolveColor } from \"./s52-colors\";\nimport type { ColorTableName } from \"./s52-colors\";\n\n/**\n * S-52 Conditional Symbology Procedures.\n * Each function takes feature properties and returns paint overrides (hex colours).\n * All expression builders accept an optional colorTable parameter.\n */\n\n// ── DEPARE03: Depth Area shading ──────────────────────────\nexport function depareColor(props: Record<string, unknown>, ct: ColorTableName = \"DAY\"): string {\n const drval1 = Number(props.DRVAL1 ?? props.drval1 ?? -1);\n const drval2 = Number(props.DRVAL2 ?? props.drval2 ?? drval1);\n\n if (drval1 < 0 && drval2 <= 0) return resolveColor(\"DEPIT\", ct);\n if (drval1 < 2) return resolveColor(\"DEPVS\", ct);\n if (drval1 < 5) return resolveColor(\"DEPMS\", ct);\n if (drval1 < 10) return resolveColor(\"DEPMD\", ct);\n return resolveColor(\"DEPDW\", ct);\n}\n\nexport function depareFillExpression(ct: ColorTableName = \"DAY\"): unknown[] {\n return [\n \"case\",\n [\"all\", [\"<\", [\"coalesce\", [\"get\", \"DRVAL1\"], [\"get\", \"drval1\"], -1], 0],\n [\"<=\", [\"coalesce\", [\"get\", \"DRVAL2\"], [\"get\", \"drval2\"], 0], 0]],\n resolveColor(\"DEPIT\", ct),\n [\"<\", [\"coalesce\", [\"get\", \"DRVAL1\"], [\"get\", \"drval1\"], -1], 2],\n resolveColor(\"DEPVS\", ct),\n [\"<\", [\"coalesce\", [\"get\", \"DRVAL1\"], [\"get\", \"drval1\"], -1], 5],\n resolveColor(\"DEPMS\", ct),\n [\"<\", [\"coalesce\", [\"get\", \"DRVAL1\"], [\"get\", \"drval1\"], -1], 10],\n resolveColor(\"DEPMD\", ct),\n resolveColor(\"DEPDW\", ct),\n ];\n}\n\n// ── LIGHTS06: Light colour ────────────────────────────────\nexport function lightColor(props: Record<string, unknown>, ct: ColorTableName = \"DAY\"): string {\n const colour = Number(props.COLOUR ?? props.colour ?? 0);\n switch (colour) {\n case 1: return resolveColor(\"LITWT\", ct);\n case 3: return resolveColor(\"LITRD\", ct);\n case 4: return resolveColor(\"LITGN\", ct);\n case 5: return resolveColor(\"LITBL\", ct);\n case 6: return resolveColor(\"LITYW\", ct);\n case 11: return resolveColor(\"LITOR\", ct);\n default: return resolveColor(\"LITYW\", ct);\n }\n}\n\nexport function lightFillExpression(ct: ColorTableName = \"DAY\"): unknown[] {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"COLOUR\"], [\"get\", \"colour\"], 0],\n 1, resolveColor(\"LITWT\", ct),\n 3, resolveColor(\"LITRD\", ct),\n 4, resolveColor(\"LITGN\", ct),\n 5, resolveColor(\"LITBL\", ct),\n 6, resolveColor(\"LITYW\", ct),\n 11, resolveColor(\"LITOR\", ct),\n resolveColor(\"LITYW\", ct),\n ];\n}\n\n// ── Lateral marks (IALA-B, US waters) ─────────────────────\nexport function lateralColor(props: Record<string, unknown>, ct: ColorTableName = \"DAY\"): string {\n const catlam = Number(props.CATLAM ?? props.catlam ?? 0);\n if (catlam === 1) return resolveColor(\"LITRD\", ct);\n if (catlam === 2) return resolveColor(\"LITGN\", ct);\n return resolveColor(\"LITYW\", ct);\n}\n\nexport function lateralFillExpression(ct: ColorTableName = \"DAY\"): unknown[] {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATLAM\"], [\"get\", \"catlam\"], 0],\n 1, resolveColor(\"LITRD\", ct),\n 2, resolveColor(\"LITGN\", ct),\n resolveColor(\"LITYW\", ct),\n ];\n}\n\n// ── Hazard colour based on WATLEV / VALSOU ────────────────\nexport function hazardColor(props: Record<string, unknown>, ct: ColorTableName = \"DAY\"): string {\n const watlev = Number(props.WATLEV ?? props.watlev ?? 0);\n const valsou = props.VALSOU ?? props.valsou;\n\n if (watlev === 1 || watlev === 2) return resolveColor(\"DNGHL\", ct);\n if (valsou != null && Number(valsou) < 2) return resolveColor(\"DNGHL\", ct);\n return resolveColor(\"RESBL\", ct);\n}\n\nexport function hazardFillExpression(ct: ColorTableName = \"DAY\"): unknown[] {\n return [\n \"case\",\n [\"any\",\n [\"==\", [\"coalesce\", [\"get\", \"WATLEV\"], [\"get\", \"watlev\"], 0], 1],\n [\"==\", [\"coalesce\", [\"get\", \"WATLEV\"], [\"get\", \"watlev\"], 0], 2],\n ],\n resolveColor(\"DNGHL\", ct),\n [\"all\",\n [\"has\", \"VALSOU\"],\n [\"<\", [\"get\", \"VALSOU\"], 2],\n ],\n resolveColor(\"DNGHL\", ct),\n resolveColor(\"RESBL\", ct),\n ];\n}\n\n// ── DAYMAR colour from COLOUR attribute ───────────────────\nexport function daymarkColor(props: Record<string, unknown>, ct: ColorTableName = \"DAY\"): string {\n const colour = Number(props.COLOUR ?? props.colour ?? 0);\n switch (colour) {\n case 1: return resolveColor(\"LITWT\", ct);\n case 3: return resolveColor(\"LITRD\", ct);\n case 4: return resolveColor(\"LITGN\", ct);\n case 6: return resolveColor(\"LITYW\", ct);\n case 11: return resolveColor(\"LITOR\", ct);\n default: return resolveColor(\"LITGN\", ct);\n }\n}\n","/**\n * IHO S-52 / NOAA Chart No. 1 / INT1 nautical symbol SVGs.\n *\n * Complete symbology suite following:\n * - IHO S-52 Presentation Library (Ed 4.0)\n * - IALA Maritime Buoyage System R1001 (Region B for US waters)\n * - NOAA Chart No. 1 (Ed 13) / INT1\n *\n * Buoy shape terminology (US / Chart No. 1):\n * - CAN (Q20): Flat-top cylindrical buoy — Port mark in IALA-B (red)\n * - NUN (Q21): Conical/pointed-top buoy — Starboard mark in IALA-B (green)\n * - PILLAR: Tall narrow buoy — used for cardinal, isolated danger, etc.\n * - SPAR: Tall thin pole buoy\n * - SPHERICAL: Round buoy — safe water marks\n * - BARREL: Barrel/tun shaped buoy\n * - SUPER: Large navigation buoy / LANBY\n *\n * Cardinal mark topmark orientations (IALA):\n * - North: both cones point UP ▲▲\n * - South: both cones point DOWN ▼▼\n * - East: cones base-to-base (diamond) ◆\n * - West: cones point-to-point (hourglass) ⊗\n *\n * Each symbol is a compact SVG at 32×32 for Mapbox GL `map.addImage()`.\n */\n\nconst SIZE = 32;\n\nfunction svg(inner: string): string {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${SIZE}\" height=\"${SIZE}\" viewBox=\"0 0 32 32\">${inner}</svg>`;\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION Q: BUOYS AND BEACONS\n// ═══════════════════════════════════════════════════════════\n\n// ── Q20: Can Buoy (flat-top cylinder) — IALA-B Port (red) ── S-52 BOYCAN01\nfunction buoyCan(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"16\" stroke=\"#000\" stroke-width=\"1\"/>\n <rect x=\"9\" y=\"6\" width=\"14\" height=\"10\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── Q21: Nun Buoy (conical/pointed top) — IALA-B Starboard (green) ── S-52 BOYLAT15\nfunction buoyNun(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"16\" stroke=\"#000\" stroke-width=\"1\"/>\n <polygon points=\"9,16 23,16 16,5\" fill=\"#00843d\" stroke=\"#000\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── Q22: Spar Buoy — tall thin vertical pole ── S-52 BOYSPR01\nfunction buoySpar(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"2.5\"/>\n <circle cx=\"16\" cy=\"4\" r=\"2\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── Q23: Pillar Buoy — tall narrow cylinder ── S-52 BOYPIL01\nfunction buoyPillar(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"18\" stroke=\"#000\" stroke-width=\"1\"/>\n <rect x=\"13\" y=\"5\" width=\"6\" height=\"13\" rx=\"1\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── Q24: Spherical Buoy — round shape ── S-52 BOYSPH01\nfunction buoySpherical(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"22\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"14\" r=\"8\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"8\" y1=\"14\" x2=\"24\" y2=\"14\" stroke=\"#fff\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── Q25: Barrel/Tun Buoy ── S-52 BOYBAR01\nfunction buoyBarrel(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"20\" stroke=\"#000\" stroke-width=\"1\"/>\n <ellipse cx=\"16\" cy=\"13\" rx=\"9\" ry=\"7\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"7\" y1=\"13\" x2=\"25\" y2=\"13\" stroke=\"#000\" stroke-width=\"0.6\"/>\n `);\n}\n\n// ── Q26: Super Buoy / LANBY ── S-52 BOYSUP01\nfunction buoySuper(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"20\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <rect x=\"6\" y=\"10\" width=\"20\" height=\"10\" rx=\"2\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"4\" r=\"2\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.6\"/>\n `);\n}\n\n// ── Q130.3: Cardinal North — pillar, both cones up ▲▲ ── S-52 BOYCAR01\nfunction buoyCardinalNorth(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"5\" fill=\"#000\"/>\n <polygon points=\"16,3 13,8 19,8\" fill=\"#000\"/>\n <polygon points=\"16,8 13,13 19,13\" fill=\"#000\"/>\n `);\n}\n\n// ── Q130.3: Cardinal South — pillar, both cones down ▼▼ ── S-52 BOYCAR01\nfunction buoyCardinalSouth(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"23\" width=\"8\" height=\"5\" fill=\"#000\"/>\n <polygon points=\"16,13 13,8 19,8\" fill=\"#000\"/>\n <polygon points=\"16,8 13,3 19,3\" fill=\"#000\"/>\n `);\n}\n\n// ── Q130.3: Cardinal East — cones base-to-base ◆ ── S-52 BOYCAR01\nfunction buoyCardinalEast(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"3\" fill=\"#000\"/>\n <rect x=\"12\" y=\"25\" width=\"8\" height=\"3\" fill=\"#000\"/>\n <polygon points=\"16,3 13,7 19,7\" fill=\"#000\"/>\n <polygon points=\"16,13 13,9 19,9\" fill=\"#000\"/>\n `);\n}\n\n// ── Q130.3: Cardinal West — cones point-to-point (hourglass) ── S-52 BOYCAR01\nfunction buoyCardinalWest(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"17\" width=\"8\" height=\"8\" fill=\"#000\"/>\n <polygon points=\"16,8 13,3 19,3\" fill=\"#000\"/>\n <polygon points=\"16,8 13,13 19,13\" fill=\"#000\"/>\n `);\n}\n\n// ── Q130.4: Isolated Danger — black pillar, red band, 2 sphere topmarks ── S-52 BOYISD02\nfunction buoyIsolatedDanger(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"8\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"19\" width=\"8\" height=\"4\" fill=\"#d42e12\"/>\n <circle cx=\"16\" cy=\"6\" r=\"2.2\" fill=\"#000\"/>\n <circle cx=\"16\" cy=\"11\" r=\"2.2\" fill=\"#000\"/>\n `);\n}\n\n// ── Q130.5: Safe Water — red/white vertical stripes, sphere topmark ── S-52 BOYSAW12\nfunction buoySafeWater(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"20\" r=\"7\" fill=\"#fff\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"14\" y=\"13\" width=\"2\" height=\"14\" fill=\"#d42e12\"/>\n <rect x=\"18\" y=\"13\" width=\"2\" height=\"14\" fill=\"#d42e12\"/>\n <circle cx=\"16\" cy=\"4\" r=\"2.2\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"0.6\"/>\n `);\n}\n\n// ── Q130.6: Special Purpose — yellow, X topmark ── S-52 BOYSPP21\nfunction buoySpecial(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"10\" y=\"12\" width=\"12\" height=\"16\" rx=\"1\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <line x1=\"12\" y1=\"3\" x2=\"20\" y2=\"11\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"20\" y1=\"3\" x2=\"12\" y2=\"11\" stroke=\"#000\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── Q130.8: Emergency Wreck Marking Buoy — blue/yellow vertical stripes ── S-52 BOYEWM01\nfunction buoyEmergencyWreck(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"10\" y=\"12\" width=\"12\" height=\"16\" rx=\"1\" fill=\"#0047ab\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"14\" y=\"12\" width=\"2\" height=\"16\" fill=\"#ffd700\"/>\n <rect x=\"18\" y=\"12\" width=\"2\" height=\"16\" fill=\"#ffd700\"/>\n <line x1=\"16\" y1=\"11\" x2=\"16\" y2=\"3\" stroke=\"#ffd700\" stroke-width=\"2\"/>\n <line x1=\"12\" y1=\"7\" x2=\"20\" y2=\"7\" stroke=\"#ffd700\" stroke-width=\"2\"/>\n <line x1=\"16\" y1=\"11\" x2=\"16\" y2=\"3\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <line x1=\"12\" y1=\"7\" x2=\"20\" y2=\"7\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── Q40: Mooring Buoy ── S-52 MORFAC03\nfunction mooringBuoy(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"23\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"#fff\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"16\" r=\"3\" fill=\"#000\"/>\n `);\n}\n\n// ── Q80: Pile / Post ── S-52 PILPNT01\nfunction pilePost(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"2.5\"/>\n <circle cx=\"16\" cy=\"6\" r=\"2.5\" fill=\"#000\"/>\n `);\n}\n\n// ── Q100: Beacon, Lateral (Port) — post with red triangle topmark ── S-52 BCNLAT15\nfunction beaconLateralPort(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"13\" stroke=\"#000\" stroke-width=\"2\"/>\n <polygon points=\"16,3 9,13 23,13\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── Q100: Beacon, Lateral (Starboard) — post with green square topmark ── S-52 BCNLAT16\nfunction beaconLateralStbd(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"13\" stroke=\"#000\" stroke-width=\"2\"/>\n <rect x=\"9\" y=\"3\" width=\"14\" height=\"10\" fill=\"#00843d\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── Q110: Beacon, Cardinal — post with double cone topmarks ── S-52 BCNCAR01\nfunction beaconCardinal(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"12\" stroke=\"#000\" stroke-width=\"2\"/>\n <polygon points=\"16,2 12,7 20,7\" fill=\"#000\"/>\n <polygon points=\"16,7 12,12 20,12\" fill=\"#000\"/>\n `);\n}\n\n// ── Q110: Beacon, Isolated Danger — post with 2 sphere topmarks ── S-52 BCNISD01\nfunction beaconIsolatedDanger(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"13\" stroke=\"#000\" stroke-width=\"2\"/>\n <circle cx=\"16\" cy=\"5\" r=\"2.5\" fill=\"#000\"/>\n <circle cx=\"16\" cy=\"11\" r=\"2.5\" fill=\"#000\"/>\n `);\n}\n\n// ── Q110: Beacon, Safe Water — post with sphere topmark ── S-52 BCNSAW01\nfunction beaconSafeWater(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"10\" stroke=\"#000\" stroke-width=\"2\"/>\n <circle cx=\"16\" cy=\"6\" r=\"4\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── Q110: Beacon, Special Purpose — post with X topmark ── S-52 BCNSPP01\nfunction beaconSpecial(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"12\" stroke=\"#000\" stroke-width=\"2\"/>\n <line x1=\"10\" y1=\"2\" x2=\"22\" y2=\"12\" stroke=\"#ffd700\" stroke-width=\"3\"/>\n <line x1=\"22\" y1=\"2\" x2=\"10\" y2=\"12\" stroke=\"#ffd700\" stroke-width=\"3\"/>\n <line x1=\"10\" y1=\"2\" x2=\"22\" y2=\"12\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"22\" y1=\"2\" x2=\"10\" y2=\"12\" stroke=\"#000\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── Q100: Daymark, Triangle (port) ──\nfunction daymarkTriangle(): string {\n return svg(`\n <polygon points=\"16,4 6,24 26,24\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── Q100: Daymark, Square (starboard) ──\nfunction daymarkSquare(): string {\n return svg(`\n <rect x=\"6\" y=\"6\" width=\"20\" height=\"20\" fill=\"#00843d\" stroke=\"#000\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION Q: TOPMARKS (TOPMAR) — S-52 PL shapes\n// ═══════════════════════════════════════════════════════════\n\n// ── TOPMAR02: Single cone point up (TOPSHP=1) ──\nfunction topmarkConeUp(): string {\n return svg(`\n <polygon points=\"16,4 8,24 24,24\" fill=\"#000\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── TOPMAR04: Single cone point down (TOPSHP=2) ──\nfunction topmarkConeDown(): string {\n return svg(`\n <polygon points=\"16,28 8,8 24,8\" fill=\"#000\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── TOPMAR10: Single sphere (TOPSHP=3) ──\nfunction topmarkSphere(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"9\" fill=\"#000\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── TOPMAR12: 2 cones up — North cardinal (TOPSHP=4) ──\nfunction topmark2ConesUp(): string {\n return svg(`\n <polygon points=\"16,2 10,13 22,13\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <polygon points=\"16,15 10,26 22,26\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── TOPMAR14: 2 cones down — South cardinal (TOPSHP=5) ──\nfunction topmark2ConesDown(): string {\n return svg(`\n <polygon points=\"16,14 10,3 22,3\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <polygon points=\"16,27 10,16 22,16\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── TOPMAR22: 2 cones base-to-base — East cardinal (TOPSHP=6) ──\nfunction topmark2ConesBase(): string {\n return svg(`\n <polygon points=\"16,2 10,14 22,14\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <polygon points=\"16,30 10,18 22,18\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── TOPMAR24: 2 cones point-to-point — West cardinal (TOPSHP=7) ──\nfunction topmark2ConesPoint(): string {\n return svg(`\n <polygon points=\"16,14 10,2 22,2\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <polygon points=\"16,18 10,30 22,30\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── TOPMAR30: 2 spheres — Isolated Danger (TOPSHP=8) ──\nfunction topmark2Spheres(): string {\n return svg(`\n <circle cx=\"16\" cy=\"9\" r=\"6\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"23\" r=\"6\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── TOPMAR28: Diamond (TOPSHP=9) ──\nfunction topmarkDiamond(): string {\n return svg(`\n <polygon points=\"16,3 26,16 16,29 6,16\" fill=\"#000\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── TOPMAR32: X shape — Special purpose (TOPSHP=10) ──\nfunction topmarkXShape(): string {\n return svg(`\n <line x1=\"6\" y1=\"6\" x2=\"26\" y2=\"26\" stroke=\"#000\" stroke-width=\"3\"/>\n <line x1=\"26\" y1=\"6\" x2=\"6\" y2=\"26\" stroke=\"#000\" stroke-width=\"3\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION P: LIGHTS AND FOG SIGNALS\n// ═══════════════════════════════════════════════════════════\n\n// ── P1: Major Light ── S-52 LIGHTS11: filled circle + elongated upward teardrop flare\nfunction lightMajor(): string {\n return svg(`\n <circle cx=\"16\" cy=\"22\" r=\"3\" fill=\"#d200d2\"/>\n <path d=\"M16,22 L12.5,12 Q16,2 19.5,12 Z\" fill=\"#d200d2\"/>\n `);\n}\n\n// ── P4: Minor Light ── S-52 LIGHTS13: smaller filled circle + shorter teardrop flare\nfunction lightMinor(): string {\n return svg(`\n <circle cx=\"16\" cy=\"22\" r=\"2.5\" fill=\"#d200d2\"/>\n <path d=\"M16,22 L14,14 Q16,7 18,14 Z\" fill=\"#d200d2\"/>\n `);\n}\n\n// ── P40: Sector Light ── S-52 LIGHTS12: radial sector lines from position + connecting arc\nfunction lightSector(): string {\n return svg(`\n <circle cx=\"16\" cy=\"24\" r=\"2.5\" fill=\"#d200d2\"/>\n <line x1=\"16\" y1=\"24\" x2=\"6\" y2=\"6\" stroke=\"#d200d2\" stroke-width=\"0.8\"/>\n <line x1=\"16\" y1=\"24\" x2=\"26\" y2=\"6\" stroke=\"#d200d2\" stroke-width=\"0.8\"/>\n <path d=\"M6,6 A20,20 0 0,1 26,6\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1\"/>\n `);\n}\n\n// ── P30: Directional Light ── S-52: narrow sector with two close radial lines + arc\nfunction lightDirectional(): string {\n return svg(`\n <circle cx=\"16\" cy=\"24\" r=\"2.5\" fill=\"#d200d2\"/>\n <line x1=\"16\" y1=\"24\" x2=\"14\" y2=\"4\" stroke=\"#d200d2\" stroke-width=\"0.8\"/>\n <line x1=\"16\" y1=\"24\" x2=\"18\" y2=\"4\" stroke=\"#d200d2\" stroke-width=\"0.8\"/>\n <path d=\"M14,4 A2,2 0 0,1 18,4\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── P60: Aeronautical Light ── S-52 LIGHTS82: circle + flare + alternating dash ring\nfunction lightAero(): string {\n return svg(`\n <circle cx=\"16\" cy=\"20\" r=\"2.5\" fill=\"#d200d2\"/>\n <path d=\"M16,20 L14.5,10 Q16,4 17.5,10 Z\" fill=\"#d200d2\"/>\n <circle cx=\"16\" cy=\"20\" r=\"9\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"0.7\" stroke-dasharray=\"4,2,1.5,2\"/>\n `);\n}\n\n// ── P6: Light Vessel / Lightship ── S-52 LITVES01\nfunction lightVessel(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <path d=\"M6,22 Q16,28 26,22\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <path d=\"M6,22 L8,18 L24,18 L26,22\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"16\" y1=\"18\" x2=\"16\" y2=\"8\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"6\" r=\"2.5\" fill=\"#d200d2\" stroke=\"#000\" stroke-width=\"0.6\"/>\n <path d=\"M16,6 L15,2 Q16,0 17,2 Z\" fill=\"#d200d2\" opacity=\"0.7\"/>\n `);\n}\n\n// ── P5: Light Float ── S-52 LITFLT01\nfunction lightFloat(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <ellipse cx=\"16\" cy=\"22\" rx=\"10\" ry=\"4\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"16\" y1=\"18\" x2=\"16\" y2=\"8\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"6\" r=\"2.5\" fill=\"#d200d2\" stroke=\"#000\" stroke-width=\"0.6\"/>\n `);\n}\n\n// ── R1: Fog Signal ── S-52 FOGSIG01: megaphone horn with 3 concentric quarter-circle arcs\nfunction fogSignal(): string {\n return svg(`\n <circle cx=\"4\" cy=\"20\" r=\"1.5\" fill=\"#d200d2\"/>\n <polygon points=\"4,17 14,13 14,27 4,23\" fill=\"#d200d2\" stroke=\"#d200d2\" stroke-width=\"0.6\"/>\n <path d=\"M15,14 A6,6 0 0,1 15,26\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\"/>\n <path d=\"M18,10 A10,10 0 0,1 18,30\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\"/>\n <path d=\"M21,6 A14,14 0 0,1 21,34\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── S1: Radar Transponder / RACON ── S-52 RTPBCN01: circle with 3 upward dashed arcs\nfunction radarTransponder(): string {\n return svg(`\n <circle cx=\"16\" cy=\"22\" r=\"2.5\" fill=\"#d200d2\"/>\n <path d=\"M10,22 A6,6 0 0,1 22,22\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\" stroke-dasharray=\"3,2\"/>\n <path d=\"M6,22 A10,10 0 0,1 26,22\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\" stroke-dasharray=\"3,2\"/>\n <path d=\"M2,22 A14,14 0 0,1 30,22\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\" stroke-dasharray=\"3,2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION K: DANGERS (WRECKS, ROCKS, OBSTRUCTIONS)\n// ═══════════════════════════════════════════════════════════\n\n// ── K24: Wreck showing hull/mast above water ── S-52 WRECKS01\nfunction wreckVisible(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <path d=\"M5,22 L8,18 L24,18 L27,22\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <path d=\"M5,22 Q16,26 27,22\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"10\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"20\" y1=\"18\" x2=\"20\" y2=\"12\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"12\" y1=\"13\" x2=\"20\" y2=\"13\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── K26/K29: Submerged wreck ── S-52 WRECKS04: hull outline + dotted danger circle\nfunction wreckSubmerged(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"11\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.8\" stroke-dasharray=\"1.5,2\"/>\n <path d=\"M8,18 L10,14 L22,14 L24,18\" fill=\"none\" stroke=\"#000\" stroke-width=\"1\"/>\n <path d=\"M8,18 Q16,21 24,18\" fill=\"none\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"12\" y1=\"14\" x2=\"12\" y2=\"10\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"20\" y1=\"14\" x2=\"20\" y2=\"11\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── K28: Dangerous wreck ── S-52 WRECKS05: cross in danger circle\nfunction wreckDangerous(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"10\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"9\" y1=\"16\" x2=\"23\" y2=\"16\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"9\" x2=\"16\" y2=\"23\" stroke=\"#000\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── K12: Rock awash at chart datum ── S-52 UWTROC03: simple cross (+)\nfunction rockAwash(): string {\n return svg(`\n <line x1=\"16\" y1=\"7\" x2=\"16\" y2=\"25\" stroke=\"#000\" stroke-width=\"2\"/>\n <line x1=\"7\" y1=\"16\" x2=\"25\" y2=\"16\" stroke=\"#000\" stroke-width=\"2\"/>\n `);\n}\n\n// ── K13: Underwater rock (with depth) ── S-52 UWTROC04: asterisk\nfunction rockUnderwater(): string {\n return svg(`\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"26\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"6\" y1=\"16\" x2=\"26\" y2=\"16\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"9\" y1=\"9\" x2=\"23\" y2=\"23\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"23\" y1=\"9\" x2=\"9\" y2=\"23\" stroke=\"#000\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── K11: Rock covers and uncovers ── S-52 UWTROC01: cross + dotted circle\nfunction rockCoversUncovers(): string {\n return svg(`\n <line x1=\"16\" y1=\"7\" x2=\"16\" y2=\"25\" stroke=\"#000\" stroke-width=\"1.8\"/>\n <line x1=\"7\" y1=\"16\" x2=\"25\" y2=\"16\" stroke=\"#000\" stroke-width=\"1.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"10\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.8\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── K40: Obstruction ── S-52 OBSTRN01: cross with surrounding danger circle\nfunction obstruction(): string {\n return svg(`\n <line x1=\"16\" y1=\"8\" x2=\"16\" y2=\"24\" stroke=\"#000\" stroke-width=\"1.8\"/>\n <line x1=\"8\" y1=\"16\" x2=\"24\" y2=\"16\" stroke=\"#000\" stroke-width=\"1.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"10\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.8\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION E: LANDMARKS\n// ═══════════════════════════════════════════════════════════\n\n// ── E10.3: Church with spire ── S-52 LNDMRK02\nfunction landmarkSpire(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"9\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n <polygon points=\"16,2 13,12 19,12\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"12\" y=\"12\" width=\"8\" height=\"16\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── E20: Tower ── S-52 LNDMRK01\nfunction landmarkTower(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"9\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n <path d=\"M13,4 L11,28 L21,28 L19,4 Z\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <line x1=\"11\" y1=\"4\" x2=\"21\" y2=\"4\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── E22: Chimney ── S-52 LNDMRK03\nfunction landmarkChimney(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"9\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n <rect x=\"14\" y=\"8\" width=\"4\" height=\"20\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <path d=\"M13,8 Q16,2 19,8\" fill=\"none\" stroke=\"#000\" stroke-width=\"1\"/>\n `);\n}\n\n// ── E27: Flagstaff ── S-52 LNDMRK07\nfunction landmarkFlagstaff(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <polygon points=\"16,4 26,4 26,11 16,11\" fill=\"#d42e12\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E24: Monument ── S-52 LNDMRK08\nfunction landmarkMonument(): string {\n return svg(`\n <polygon points=\"16,3 10,26 22,26\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <rect x=\"8\" y=\"26\" width=\"16\" height=\"3\" fill=\"#000\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E25: Traditional Windmill ── S-52 LNDMRK21: 4 vanes in X-pattern\nfunction landmarkWindmill(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"10\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"10\" r=\"2\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"10\" x2=\"6\" y2=\"2\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"26\" y2=\"2\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"6\" y2=\"18\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"26\" y2=\"18\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E26.2: Wind Turbine ── S-52 LNDMRK22: 3-blade modern rotor\nfunction landmarkWindTurbine(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"10\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"10\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"10\" x2=\"16\" y2=\"2\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"9\" y2=\"17\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"16\" y1=\"10\" x2=\"23\" y2=\"17\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E21: Dome / Cupola ── S-52 LNDMRK06\nfunction landmarkDome(): string {\n return svg(`\n <rect x=\"10\" y=\"18\" width=\"12\" height=\"10\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <path d=\"M10,18 Q16,4 22,18\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E30: Radar Scanner ── S-52 LNDMRK12\nfunction landmarkRadarScanner(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"14\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <path d=\"M8,14 L16,6 L24,14\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"14\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E31: Dish Aerial / Satellite Dish ── S-52 LNDMRK13\nfunction landmarkDishAerial(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"14\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <path d=\"M8,8 Q16,18 24,8\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"14\" x2=\"16\" y2=\"8\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E21: Water Tower ── S-52 LNDMRK19\nfunction landmarkWaterTower(): string {\n return svg(`\n <rect x=\"12\" y=\"14\" width=\"8\" height=\"14\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <rect x=\"9\" y=\"4\" width=\"14\" height=\"10\" rx=\"1\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E28: Radio/TV Mast ── S-52 LNDMRK10\nfunction landmarkRadioTvMast(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"12\" y1=\"22\" x2=\"20\" y2=\"22\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <line x1=\"13\" y1=\"18\" x2=\"19\" y2=\"18\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <line x1=\"14\" y1=\"14\" x2=\"18\" y2=\"14\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"4\" r=\"1.5\" fill=\"#000\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E12: Cross (religious) ── S-52 LNDMRK05\nfunction landmarkCross(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"2\"/>\n <line x1=\"10\" y1=\"10\" x2=\"22\" y2=\"10\" stroke=\"#000\" stroke-width=\"2\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E28: Mast (general) ── S-52 LNDMRK11\nfunction landmarkMast(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"4\" stroke=\"#000\" stroke-width=\"2\"/>\n <circle cx=\"16\" cy=\"4\" r=\"2\" fill=\"#000\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ── E33: Silo ── S-52 LNDMRK17\nfunction landmarkSilo(): string {\n return svg(`\n <rect x=\"10\" y=\"10\" width=\"12\" height=\"18\" rx=\"0\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <path d=\"M10,10 Q16,2 22,10\" fill=\"#000\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill=\"none\" stroke=\"#000\" stroke-width=\"0.6\" stroke-dasharray=\"2,2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION N/L/F: FACILITIES AND INFRASTRUCTURE\n// ═══════════════════════════════════════════════════════════\n\n// ── L10: Offshore Platform ── S-52 OFSPLF01\nfunction offshorePlatform(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <rect x=\"8\" y=\"6\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"8\" y1=\"6\" x2=\"24\" y2=\"22\" stroke=\"#000\" stroke-width=\"1\"/>\n <line x1=\"24\" y1=\"6\" x2=\"8\" y2=\"22\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"14\" r=\"3\" fill=\"#000\"/>\n `);\n}\n\n// ── N12: Anchorage ── S-52 ACHARE01: anchor symbol\nfunction anchor(): string {\n return svg(`\n <circle cx=\"16\" cy=\"6\" r=\"3\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"9\" x2=\"16\" y2=\"26\" stroke=\"#d200d2\" stroke-width=\"1.8\"/>\n <path d=\"M9,22 Q12,28 16,26 Q20,28 23,22\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.8\"/>\n <line x1=\"11\" y1=\"12\" x2=\"21\" y2=\"12\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── F53: Crane ── S-52 CRANES01: port crane\nfunction crane(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"8\" stroke=\"#000\" stroke-width=\"2\"/>\n <line x1=\"16\" y1=\"8\" x2=\"26\" y2=\"4\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"12\" x2=\"26\" y2=\"4\" stroke=\"#000\" stroke-width=\"0.8\" stroke-dasharray=\"2,1\"/>\n <rect x=\"12\" y=\"26\" width=\"8\" height=\"2\" fill=\"#000\"/>\n `);\n}\n\n// ── D20: Bridge — fixed bridge, solid arch ── S-52 BRIDGE01 (INT1 D20)\nfunction bridgeFixed(chblk = \"#000\", movable = \"#d200d2\"): string {\n return svg(`\n <line x1=\"4\" y1=\"14\" x2=\"28\" y2=\"14\" stroke=\"${chblk}\" stroke-width=\"2\"/>\n <line x1=\"8\" y1=\"14\" x2=\"8\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <path d=\"M8,14 Q16,6 24,14\" fill=\"none\" stroke=\"${chblk}\" stroke-width=\"1.5\"/>\n `);\n}\n\n// ── D21: Opening Bridge — dashed arch indicates movable span ── S-52 BRIDGE01\nfunction bridgeOpening(chblk = \"#000\", movable = \"#d200d2\"): string {\n return svg(`\n <line x1=\"4\" y1=\"14\" x2=\"28\" y2=\"14\" stroke=\"${chblk}\" stroke-width=\"2\"/>\n <line x1=\"8\" y1=\"14\" x2=\"8\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <path d=\"M8,14 Q16,6 24,14\" fill=\"none\" stroke=\"${movable}\" stroke-width=\"1.5\" stroke-dasharray=\"3,2\"/>\n `);\n}\n\n// ── D23.2: Bascule Bridge — tilting leaf indicated by angled line ── S-52 BRIDGE01\nfunction bridgeBascule(chblk = \"#000\", movable = \"#d200d2\"): string {\n return svg(`\n <line x1=\"4\" y1=\"14\" x2=\"28\" y2=\"14\" stroke=\"${chblk}\" stroke-width=\"2\"/>\n <line x1=\"8\" y1=\"14\" x2=\"8\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"14\" y1=\"14\" x2=\"20\" y2=\"6\" stroke=\"${movable}\" stroke-width=\"2\"/>\n <circle cx=\"14\" cy=\"14\" r=\"1.5\" fill=\"${movable}\"/>\n `);\n}\n\n// ── D23.3: Swing Bridge — pivot indicated by rotation arc ── S-52 BRIDGE01\nfunction bridgeSwing(chblk = \"#000\", movable = \"#d200d2\"): string {\n return svg(`\n <line x1=\"4\" y1=\"14\" x2=\"28\" y2=\"14\" stroke=\"${chblk}\" stroke-width=\"2\"/>\n <line x1=\"8\" y1=\"14\" x2=\"8\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <circle cx=\"16\" cy=\"14\" r=\"3\" fill=\"none\" stroke=\"${movable}\" stroke-width=\"1.5\"/>\n <circle cx=\"16\" cy=\"14\" r=\"1\" fill=\"${movable}\"/>\n `);\n}\n\n// ── D23.1: Lifting Bridge — upward arrows indicate vertical lift ── S-52 BRIDGE01\nfunction bridgeLifting(chblk = \"#000\", movable = \"#d200d2\"): string {\n return svg(`\n <line x1=\"4\" y1=\"16\" x2=\"28\" y2=\"16\" stroke=\"${chblk}\" stroke-width=\"2\"/>\n <line x1=\"8\" y1=\"16\" x2=\"8\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"24\" y1=\"16\" x2=\"24\" y2=\"24\" stroke=\"${chblk}\" stroke-width=\"1.8\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"6\" stroke=\"${movable}\" stroke-width=\"1.5\"/>\n <polygon points=\"12,4 9,8 15,8\" fill=\"${movable}\"/>\n <line x1=\"20\" y1=\"16\" x2=\"20\" y2=\"6\" stroke=\"${movable}\" stroke-width=\"1.5\"/>\n <polygon points=\"20,4 17,8 23,8\" fill=\"${movable}\"/>\n `);\n}\n\n// ── Q31: Single Point Mooring ── S-52 MORFAC04\nfunction spm(): string {\n return svg(`\n <circle cx=\"16\" cy=\"29\" r=\"1.5\" fill=\"#000\"/>\n <line x1=\"16\" y1=\"27.5\" x2=\"16\" y2=\"24\" stroke=\"#000\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"16\" r=\"8\" fill=\"none\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <line x1=\"16\" y1=\"8\" x2=\"16\" y2=\"24\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <line x1=\"8\" y1=\"16\" x2=\"24\" y2=\"16\" stroke=\"#000\" stroke-width=\"1.2\"/>\n <circle cx=\"16\" cy=\"16\" r=\"2.5\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION T: SERVICES\n// ═══════════════════════════════════════════════════════════\n\n// ── T1.1: Pilot Station / Boarding Place ── S-52 PILBOP01: circle with P (path outline)\nfunction pilotStation(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"10\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n <path d=\"M12,22 L12,9 L18,9 Q22,9 22,13 Q22,17 18,17 L12,17\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.8\"/>\n `);\n}\n\n// ── T20: Signal Station ── S-52 SISTAT01\nfunction signalStation(): string {\n return svg(`\n <line x1=\"16\" y1=\"28\" x2=\"16\" y2=\"6\" stroke=\"#000\" stroke-width=\"1.5\"/>\n <polygon points=\"16,6 26,6 26,14 16,14\" fill=\"#d200d2\" stroke=\"#000\" stroke-width=\"0.8\"/>\n <polygon points=\"16,14 26,14 26,18 16,18\" fill=\"#ffd700\" stroke=\"#000\" stroke-width=\"0.8\"/>\n `);\n}\n\n// ── T10: Coast Guard Station ── S-52 CGUSTA01: circle with CG (path outlines)\nfunction coastguardStation(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"10\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n <path d=\"M13,12 Q10,12 10,16 Q10,20 13,20\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n <path d=\"M17,12 L22,12 L22,16 L19,16 L19,15 L22,20 L17,20\" fill=\"none\" stroke=\"#d200d2\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SECTION M: TRACKS AND ROUTES\n// ═══════════════════════════════════════════════════════════\n\n// ── M5: Recommended Track ── S-52 RECTRC01\nfunction recommendedTrack(): string {\n return svg(`\n <line x1=\"4\" y1=\"16\" x2=\"24\" y2=\"16\" stroke=\"#d200d2\" stroke-width=\"1.5\"/>\n <polygon points=\"24,16 18,12 18,20\" fill=\"#d200d2\"/>\n `);\n}\n\n// ── M50: Ferry Route ── S-52 FERYRT01\nfunction ferryRoute(): string {\n return svg(`\n <line x1=\"4\" y1=\"16\" x2=\"28\" y2=\"16\" stroke=\"#d200d2\" stroke-width=\"1.2\" stroke-dasharray=\"4,3\"/>\n <polygon points=\"28,16 22,12 22,20\" fill=\"#d200d2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// SYMBOL REGISTRY\n// ═══════════════════════════════════════════════════════════\n\n/** Color used in the SVG with its S-52 token name, hex, and usage */\nexport interface SymbolColor {\n token: string;\n hex: string;\n usage: string;\n}\n\n/** Line style used in the SVG */\nexport interface SymbolLineStyle {\n element: string;\n width: number;\n pattern?: string;\n color: string;\n}\n\n/** Fill element used in the SVG */\nexport interface SymbolFillElement {\n element: string;\n color: string;\n opacity?: number;\n}\n\nexport interface NauticalSymbol {\n id: string;\n label: string;\n /** INT1 / Chart No. 1 reference */\n int1Ref: string;\n /** Chart No. 1 section letter */\n section: string;\n getSvg: () => string;\n /** Generate SVG with theme-specific colors (for bridge icons etc.) */\n getThemedSvg?: (chblk: string, movable: string) => string;\n /** What this symbol represents on a chart */\n description?: string;\n /** S-52 Presentation Library symbol name */\n s52PlRef?: string;\n /** Grouping key for family clustering */\n group?: string;\n /** IDs of related variant symbols */\n variants?: string[];\n /** S-57 attribute that selects this variant */\n attributeKey?: string;\n /** Value of that attribute for this variant */\n attributeValue?: number;\n /** Example label strings seen on charts */\n labelExamples?: string[];\n /** What the color represents */\n colorMeaning?: string;\n /** Colors used in the SVG */\n colors?: SymbolColor[];\n /** Line/stroke styles used in the SVG */\n lineStyles?: SymbolLineStyle[];\n /** Fill regions in the SVG */\n fillElements?: SymbolFillElement[];\n /** Expanded navigational usage context (2-4 sentences) */\n usageContext?: string;\n /** Render size for documentation */\n renderSize?: string;\n}\n\n/** A logical grouping of related symbols */\nexport interface SymbolGroup {\n id: string;\n label: string;\n section: string;\n description: string;\n symbolIds: string[];\n}\n\n/** Chart No. 1 section metadata */\nexport interface ChartSection {\n id: string;\n label: string;\n description: string;\n}\n\nexport const NAUTICAL_SYMBOLS: NauticalSymbol[] = [\n // ── Section Q: Lateral Buoys ──\n { id: \"buoy-can\", label: \"Can Buoy (Port, IALA-B)\", int1Ref: \"Q20\", section: \"Q\", getSvg: buoyCan,\n group: \"lateral-buoys\", description: \"Flat-top cylindrical buoy marking the port side of a channel (IALA Region B). Painted red in US waters.\",\n s52PlRef: \"BOYCAN01\", attributeKey: \"CATLAM\", attributeValue: 1,\n variants: [\"buoy-can\", \"buoy-nun\"], labelExamples: ['\"2\"', '\"4\"', '\"6A\"'],\n colorMeaning: \"Red = port side (IALA-B)\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and mooring staff\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.2, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.2, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Cylindrical hull\", color: \"#d42e12\" },\n ],\n usageContext: \"A lateral buoy marks the port or starboard side of the route to be followed. In IALA Region B (Americas, Japan, Korea), red can buoys mark the port (left) side when returning from sea. Mariners should keep this buoy to port when proceeding upstream or into harbour. They are numbered with even numbers ascending from seaward.\" },\n\n { id: \"buoy-nun\", label: \"Nun Buoy (Starboard, IALA-B)\", int1Ref: \"Q21\", section: \"Q\", getSvg: buoyNun,\n group: \"lateral-buoys\", description: \"Conical/pointed-top buoy marking the starboard side of a channel (IALA Region B). Painted green in US waters.\",\n s52PlRef: \"BOYLAT15\", attributeKey: \"CATLAM\", attributeValue: 2,\n variants: [\"buoy-can\", \"buoy-nun\"], labelExamples: ['\"1\"', '\"3\"', '\"5\"'],\n colorMeaning: \"Green = starboard side (IALA-B)\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Stbd Green\", hex: \"#00843d\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and mooring staff\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.2, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.2, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Conical hull\", color: \"#00843d\" },\n ],\n usageContext: \"A nun buoy marks the starboard (right) side of a channel when returning from sea in IALA Region B. Green conical buoys are numbered with odd numbers. Mariners should keep this buoy to starboard when proceeding upstream. The pointed top distinguishes it from the flat-topped can buoy.\" },\n\n // ── Section Q: Buoy Hull Shapes ──\n { id: \"buoy-spar\", label: \"Spar Buoy\", int1Ref: \"Q22\", section: \"Q\", getSvg: buoySpar,\n group: \"buoy-shapes\", description: \"Tall, thin vertical pole buoy. Used for lateral marks in shallow or confined waters.\",\n s52PlRef: \"BOYSPR01\", labelExamples: ['\"Fl G 4s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Pole body\" },\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Top ball\" },\n ],\n lineStyles: [\n { element: \"Pole shaft\", width: 2.5, color: \"#000000\" },\n { element: \"Top ball outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Top ball\", color: \"#d42e12\" },\n ],\n usageContext: \"Spar buoys are tall, thin pole-like buoys used in shallow or confined waters where larger buoys cannot be deployed. Their slim profile makes them suitable for narrow channels. They carry the same color coding and meaning as other lateral buoys in the IALA system.\" },\n\n { id: \"buoy-pillar\", label: \"Pillar Buoy\", int1Ref: \"Q23\", section: \"Q\", getSvg: buoyPillar,\n group: \"buoy-shapes\", description: \"Tall narrow cylinder buoy. Used for cardinal, isolated danger, and special purpose marks.\",\n s52PlRef: \"BOYPIL01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and staff\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.2, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.0, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Tall cylindrical hull\", color: \"#ffd700\" },\n ],\n usageContext: \"Pillar buoys have a tall, narrow cylindrical shape and are commonly used for cardinal marks, isolated danger marks, and other special purpose buoys. Their height makes them more visible and provides room for topmarks, lights, and radar reflectors.\" },\n\n { id: \"buoy-spherical\", label: \"Spherical Buoy\", int1Ref: \"Q24\", section: \"Q\", getSvg: buoySpherical,\n group: \"buoy-shapes\", description: \"Round-shaped buoy typically used for safe water marks. Red and white vertical stripes.\",\n s52PlRef: \"BOYSPH01\", colorMeaning: \"Red/white = safe water\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Hull outline\" },\n { token: \"White\", hex: \"#ffffff\", usage: \"Equator band\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.2, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.0, color: \"#000000\" },\n { element: \"Equator band\", width: 1.5, color: \"#ffffff\" },\n ],\n fillElements: [\n { element: \"Spherical hull\", color: \"#d42e12\" },\n ],\n usageContext: \"Spherical buoys are round in shape and typically used as safe water marks, indicating navigable water all around. The red and white colour scheme indicates that the mark is a mid-channel or fairway buoy. Vessels may pass on either side.\" },\n\n { id: \"buoy-barrel\", label: \"Barrel/Tun Buoy\", int1Ref: \"Q25\", section: \"Q\", getSvg: buoyBarrel,\n group: \"buoy-shapes\", description: \"Barrel or tun-shaped buoy, typically used for mooring or special marks.\",\n s52PlRef: \"BOYBAR01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Special Yellow\", hex: \"#ffd700\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and centre band\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.2, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.0, color: \"#000000\" },\n { element: \"Centre band\", width: 0.6, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Barrel hull\", color: \"#ffd700\" },\n ],\n usageContext: \"Barrel or tun buoys have a distinctive rounded barrel shape. They are commonly used for mooring buoys and some special purpose marks. Their squat, stable shape makes them suitable for sheltered waters.\" },\n\n { id: \"buoy-super\", label: \"Super Buoy / LANBY\", int1Ref: \"Q26\", section: \"Q\", getSvg: buoySuper,\n group: \"buoy-shapes\", description: \"Large navigation buoy (LANBY). Replaces lightships at major approaches.\",\n s52PlRef: \"BOYSUP01\", labelExamples: ['\"LANBY\"', '\"Fl(4) W 15s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Hull body\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and mast\" },\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Light housing\" },\n ],\n lineStyles: [\n { element: \"Mooring staff\", width: 1.5, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.2, color: \"#000000\" },\n { element: \"Mast\", width: 1.5, color: \"#000000\" },\n { element: \"Light housing outline\", width: 0.6, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body\", color: \"#d42e12\" },\n { element: \"Light housing\", color: \"#ffd700\" },\n ],\n usageContext: \"Super buoys (LANBY — Large Automatic Navigation Buoy) are very large buoys that have replaced lightships at major harbour approaches. They carry powerful lights, fog signals, and radar equipment. They are critical aids for ocean-going vessels making landfall.\" },\n\n // ── Section Q: Cardinal Buoys ──\n { id: \"buoy-cardinal-north\", label: \"Cardinal Buoy, North\", int1Ref: \"Q130.3\", section: \"Q\", getSvg: buoyCardinalNorth,\n group: \"cardinal-buoys\", description: \"Pass to the NORTH of this mark. Topmark: two cones pointing up ▲▲. Black over yellow.\",\n s52PlRef: \"BOYCAR01\", attributeKey: \"CATCAM\", attributeValue: 1,\n variants: [\"buoy-cardinal-north\", \"buoy-cardinal-south\", \"buoy-cardinal-east\", \"buoy-cardinal-west\"],\n labelExamples: ['\"Q\"', '\"VQ\"'], colorMeaning: \"Black/yellow = cardinal\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Hull body (lower)\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Upper band, topmark cones, outline\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body (lower)\", color: \"#ffd700\" },\n { element: \"Upper band\", color: \"#000000\" },\n { element: \"Topmark cone 1 (up)\", color: \"#000000\" },\n { element: \"Topmark cone 2 (up)\", color: \"#000000\" },\n ],\n usageContext: \"A North cardinal buoy indicates that the deepest or safest water lies to the NORTH of the mark. The topmark of two upward-pointing cones is the key identifier. The light character is continuous quick (Q) or very quick (VQ) flashing. Mariners must pass to the north of this buoy to avoid the hazard it marks.\" },\n\n { id: \"buoy-cardinal-south\", label: \"Cardinal Buoy, South\", int1Ref: \"Q130.3\", section: \"Q\", getSvg: buoyCardinalSouth,\n group: \"cardinal-buoys\", description: \"Pass to the SOUTH of this mark. Topmark: two cones pointing down ▼▼. Yellow over black.\",\n s52PlRef: \"BOYCAR01\", attributeKey: \"CATCAM\", attributeValue: 3,\n variants: [\"buoy-cardinal-north\", \"buoy-cardinal-south\", \"buoy-cardinal-east\", \"buoy-cardinal-west\"],\n labelExamples: ['\"Q(6)+LFl\"', '\"VQ(6)+LFl\"'], colorMeaning: \"Yellow/black = cardinal\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Hull body (upper)\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Lower band, topmark cones, outline\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body (upper)\", color: \"#ffd700\" },\n { element: \"Lower band\", color: \"#000000\" },\n { element: \"Topmark cone 1 (down)\", color: \"#000000\" },\n { element: \"Topmark cone 2 (down)\", color: \"#000000\" },\n ],\n usageContext: \"A South cardinal buoy indicates the safest water lies to the SOUTH. The topmark of two downward-pointing cones distinguishes it. Light character is Q(6)+LFl or VQ(6)+LFl — six flashes followed by a long flash. This unique rhythm helps identify it at night.\" },\n\n { id: \"buoy-cardinal-east\", label: \"Cardinal Buoy, East\", int1Ref: \"Q130.3\", section: \"Q\", getSvg: buoyCardinalEast,\n group: \"cardinal-buoys\", description: \"Pass to the EAST of this mark. Topmark: cones base-to-base ◆. Black-yellow-black.\",\n s52PlRef: \"BOYCAR01\", attributeKey: \"CATCAM\", attributeValue: 2,\n variants: [\"buoy-cardinal-north\", \"buoy-cardinal-south\", \"buoy-cardinal-east\", \"buoy-cardinal-west\"],\n labelExamples: ['\"Q(3)\"', '\"VQ(3)\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Hull body (middle band)\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Upper/lower bands, topmark cones\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull upper band\", color: \"#000000\" },\n { element: \"Hull middle band\", color: \"#ffd700\" },\n { element: \"Hull lower band\", color: \"#000000\" },\n { element: \"Topmark (base-to-base diamond)\", color: \"#000000\" },\n ],\n usageContext: \"An East cardinal buoy indicates the safest water lies to the EAST. The topmark of two cones base-to-base forms a diamond shape. Light character is Q(3) or VQ(3) — three flashes in a group. The body is painted black-yellow-black in horizontal bands.\" },\n\n { id: \"buoy-cardinal-west\", label: \"Cardinal Buoy, West\", int1Ref: \"Q130.3\", section: \"Q\", getSvg: buoyCardinalWest,\n group: \"cardinal-buoys\", description: \"Pass to the WEST of this mark. Topmark: cones point-to-point (hourglass). Yellow-black-yellow.\",\n s52PlRef: \"BOYCAR01\", attributeKey: \"CATCAM\", attributeValue: 4,\n variants: [\"buoy-cardinal-north\", \"buoy-cardinal-south\", \"buoy-cardinal-east\", \"buoy-cardinal-west\"],\n labelExamples: ['\"Q(9)\"', '\"VQ(9)\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Hull upper/lower bands\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Hull middle band, topmark cones\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull upper band\", color: \"#ffd700\" },\n { element: \"Hull middle band\", color: \"#000000\" },\n { element: \"Hull lower band\", color: \"#ffd700\" },\n { element: \"Topmark (point-to-point hourglass)\", color: \"#000000\" },\n ],\n usageContext: \"A West cardinal buoy indicates the safest water lies to the WEST. The topmark of two cones point-to-point forms an hourglass shape. Light character is Q(9) or VQ(9) — nine flashes. The body is painted yellow-black-yellow.\" },\n\n // ── Section Q: Special Purpose Buoys ──\n { id: \"buoy-isolated-danger\", label: \"Isolated Danger Buoy\", int1Ref: \"Q130.4\", section: \"Q\", getSvg: buoyIsolatedDanger,\n group: \"special-buoys\", description: \"Marks an isolated danger with navigable water all around. Black with red horizontal band(s). Topmark: two spheres.\",\n s52PlRef: \"BOYISD01\", labelExamples: ['\"Fl(2)\"'], colorMeaning: \"Black/red band = isolated danger\",\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Hull body and topmark spheres\" },\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Horizontal danger band\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body\", color: \"#000000\" },\n { element: \"Red danger band\", color: \"#d42e12\" },\n { element: \"Topmark sphere 1\", color: \"#000000\" },\n { element: \"Topmark sphere 2\", color: \"#000000\" },\n ],\n usageContext: \"An isolated danger buoy is placed over an isolated danger with navigable water all around it. The hazard is of limited extent. Vessels may pass on any side but should not approach too closely. The distinctive two-sphere topmark and Fl(2) light character distinguish it from all other marks.\" },\n\n { id: \"buoy-safe-water\", label: \"Safe Water Buoy\", int1Ref: \"Q130.5\", section: \"Q\", getSvg: buoySafeWater,\n group: \"special-buoys\", description: \"Indicates navigable water around the mark (fairway/mid-channel). Red and white vertical stripes. Topmark: single sphere.\",\n s52PlRef: \"BOYSAW01\", labelExamples: ['\"Mo(A)\"', '\"LFl 10s\"'], colorMeaning: \"Red/white stripes = safe water\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Vertical stripes and topmark\" },\n { token: \"White\", hex: \"#ffffff\", usage: \"Hull background between stripes\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and staff\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n { element: \"Topmark outline\", width: 0.6, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull background\", color: \"#ffffff\" },\n { element: \"Vertical stripe 1\", color: \"#d42e12\" },\n { element: \"Vertical stripe 2\", color: \"#d42e12\" },\n { element: \"Topmark sphere\", color: \"#d42e12\" },\n ],\n usageContext: \"A safe water mark indicates there is navigable water all around the mark. It is used as a centreline, mid-channel, or landfall buoy. Light character is isophase, occulting, single long flash every 10 seconds, or Morse code 'A'. Vessels may pass on either side.\" },\n\n { id: \"buoy-special\", label: \"Special Purpose Buoy\", int1Ref: \"Q130.6\", section: \"Q\", getSvg: buoySpecial,\n group: \"special-buoys\", description: \"Marks special areas (pipelines, cables, ODAS, recreation zones). Painted yellow. Topmark: X shape.\",\n s52PlRef: \"BOYSPP01\", labelExamples: ['\"SPM\"', '\"ODAS\"', '\"Fl Y 5s\"'], colorMeaning: \"Yellow = special purpose\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Special Yellow\", hex: \"#ffd700\", usage: \"Hull fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline, staff, and X topmark\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n { element: \"X topmark arms\", width: 1.5, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body\", color: \"#ffd700\" },\n ],\n usageContext: \"Special purpose buoys mark areas for specific activities — pipelines, cables, ocean data acquisition systems (ODAS), recreation zones, military exercise areas, or other administrative boundaries. They are always yellow with an X-shaped topmark. Their light, if fitted, is also yellow.\" },\n\n { id: \"buoy-emergency-wreck\", label: \"Emergency Wreck Marking Buoy\", int1Ref: \"Q130.8\", section: \"Q\", getSvg: buoyEmergencyWreck,\n group: \"special-buoys\", description: \"Temporary mark placed over a new wreck. Blue and yellow vertical stripes. Topmark: yellow X.\",\n s52PlRef: \"BOYEWM01\", labelExamples: ['\"Al.Bl.Y 3s\"'], colorMeaning: \"Blue/yellow = emergency wreck\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Emergency Blue\", hex: \"#0047ab\", usage: \"Hull body\" },\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Vertical stripes and X topmark\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and X topmark outline\" },\n ],\n lineStyles: [\n { element: \"Staff\", width: 1.0, color: \"#000000\" },\n { element: \"Hull outline\", width: 0.8, color: \"#000000\" },\n { element: \"X topmark (yellow fill)\", width: 2.0, color: \"#ffd700\" },\n { element: \"X topmark (outline)\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body\", color: \"#0047ab\" },\n { element: \"Yellow vertical stripe 1\", color: \"#ffd700\" },\n { element: \"Yellow vertical stripe 2\", color: \"#ffd700\" },\n ],\n usageContext: \"An emergency wreck marking buoy (EWMB) is deployed rapidly to mark a newly discovered wreck that poses a danger to navigation. It is a temporary measure until the wreck is surveyed and permanent marks are established. The alternating blue and yellow light flashes distinguish it from all other marks. Introduced by IALA in 2005.\" },\n\n // ── Section Q: Mooring ──\n { id: \"mooring-buoy\", label: \"Mooring Buoy\", int1Ref: \"Q40\", section: \"Q\", getSvg: mooringBuoy,\n group: \"mooring\", description: \"Buoy providing a permanent mooring point. White with blue band (varies).\",\n s52PlRef: \"MORFAC04\", attributeKey: \"CATMOR\", attributeValue: 1,\n renderSize: \"32x32\",\n colors: [\n { token: \"White\", hex: \"#ffffff\", usage: \"Outer ring\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Centre eye and outline\" },\n ],\n lineStyles: [\n { element: \"Outer ring\", width: 1.5, color: \"#000000\" },\n { element: \"Mooring chain\", width: 1.2, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Outer ring\", color: \"#ffffff\" },\n { element: \"Centre mooring eye\", color: \"#000000\" },\n ],\n usageContext: \"Mooring buoys provide a permanent point for vessels to secure to without anchoring. They reduce anchor damage to the seabed and are common in harbours, marinas, and environmentally sensitive areas. Vessels should approach slowly and attach bow lines to the buoy ring or hawsepipe.\" },\n\n { id: \"spm\", label: \"Single Point Mooring\", int1Ref: \"Q31\", section: \"Q\", getSvg: spm,\n group: \"mooring\", description: \"Single point mooring (SPM) for tankers. Large buoy with hawsepipe arrangement.\",\n s52PlRef: \"MORFAC04\", attributeKey: \"CATMOR\", attributeValue: 3,\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Centre hub\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Cross and circle outline\" },\n ],\n lineStyles: [\n { element: \"Outer circle\", width: 1.5, color: \"#000000\" },\n { element: \"Vertical cross\", width: 1.2, color: \"#000000\" },\n { element: \"Horizontal cross\", width: 1.2, color: \"#000000\" },\n { element: \"Centre hub outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Centre hub\", color: \"#ffd700\" },\n ],\n usageContext: \"A single point mooring (SPM) is a large, permanently anchored structure used primarily by tankers for loading and unloading petroleum products. The vessel is moored to the SPM by a hawser and can weathervane around it with wind and current. They are typically located well offshore and have exclusion zones.\" },\n\n // ── Section Q: Beacons ──\n { id: \"beacon-lateral-port\", label: \"Beacon, Lateral (Port)\", int1Ref: \"Q100\", section: \"Q\", getSvg: beaconLateralPort,\n group: \"beacons\", description: \"Fixed beacon marking the port side of a channel. Red triangle topmark (IALA-B).\",\n s52PlRef: \"BCNLAT01\", attributeKey: \"CATLAM\", attributeValue: 1,\n variants: [\"beacon-lateral-port\", \"beacon-lateral-stbd\"], colorMeaning: \"Red = port\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Topmark triangle fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post and topmark outline\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n { element: \"Topmark outline\", width: 1.0, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Triangle topmark\", color: \"#d42e12\" },\n ],\n usageContext: \"A lateral beacon marks the port side of a navigable channel. Unlike buoys, beacons are fixed structures (posts driven into the seabed or mounted on rocks). The red triangular topmark identifies it as a port-hand mark in IALA Region B. They are common in shallow coastal areas and intracoastal waterways.\" },\n\n { id: \"beacon-lateral-stbd\", label: \"Beacon, Lateral (Starboard)\", int1Ref: \"Q100\", section: \"Q\", getSvg: beaconLateralStbd,\n group: \"beacons\", description: \"Fixed beacon marking the starboard side of a channel. Green square topmark (IALA-B).\",\n s52PlRef: \"BCNLAT01\", attributeKey: \"CATLAM\", attributeValue: 2,\n variants: [\"beacon-lateral-port\", \"beacon-lateral-stbd\"], colorMeaning: \"Green = starboard\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Stbd Green\", hex: \"#00843d\", usage: \"Topmark square fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post and topmark outline\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n { element: \"Topmark outline\", width: 1.0, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Square topmark\", color: \"#00843d\" },\n ],\n usageContext: \"A starboard lateral beacon marks the right side of a channel when returning from sea in IALA Region B. The green square topmark identifies it. Beacons are fixed structures and are more reliable than buoys as they cannot drift off station.\" },\n\n { id: \"beacon-cardinal\", label: \"Beacon, Cardinal\", int1Ref: \"Q110\", section: \"Q\", getSvg: beaconCardinal,\n group: \"beacons\", description: \"Fixed beacon with cardinal topmarks indicating the safe side to pass.\",\n s52PlRef: \"BCNCAR01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post, topmark cones\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Topmark cone 1\", color: \"#000000\" },\n { element: \"Topmark cone 2\", color: \"#000000\" },\n ],\n usageContext: \"Cardinal beacons are fixed structures with the same topmark system as cardinal buoys — indicating the safe side to pass relative to a danger. They are used in rocky or shallow areas where fixed structures are more practical than floating buoys.\" },\n\n { id: \"beacon-isolated-danger\", label: \"Beacon, Isolated Danger\", int1Ref: \"Q110\", section: \"Q\", getSvg: beaconIsolatedDanger,\n group: \"beacons\", description: \"Fixed beacon marking isolated danger. Two sphere topmarks.\",\n s52PlRef: \"BCNISD01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post and topmark spheres\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Topmark sphere 1\", color: \"#000000\" },\n { element: \"Topmark sphere 2\", color: \"#000000\" },\n ],\n usageContext: \"An isolated danger beacon is placed directly on or over a small hazard with navigable water all around. The two black spheres are the defining feature. Vessels may pass on any side at a safe distance.\" },\n\n { id: \"beacon-safe-water\", label: \"Beacon, Safe Water\", int1Ref: \"Q110\", section: \"Q\", getSvg: beaconSafeWater,\n group: \"beacons\", description: \"Fixed beacon indicating safe water. Single red sphere topmark.\",\n s52PlRef: \"BCNSAW01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Topmark sphere\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post and sphere outline\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n { element: \"Sphere outline\", width: 0.8, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Topmark sphere\", color: \"#d42e12\" },\n ],\n usageContext: \"A safe water beacon indicates navigable water all around, similar to a safe water buoy. The single red sphere topmark is the key identifier. These are often used as fairway or mid-channel markers.\" },\n\n { id: \"beacon-special\", label: \"Beacon, Special Purpose\", int1Ref: \"Q110\", section: \"Q\", getSvg: beaconSpecial,\n group: \"beacons\", description: \"Fixed beacon for special purpose areas. Yellow X topmark.\",\n s52PlRef: \"BCNSPP01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"X topmark fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Post and X outline\" },\n ],\n lineStyles: [\n { element: \"Post shaft\", width: 2.0, color: \"#000000\" },\n { element: \"X topmark (yellow)\", width: 3.0, color: \"#ffd700\" },\n { element: \"X topmark (outline)\", width: 1.2, color: \"#000000\" },\n ],\n fillElements: [],\n usageContext: \"Special purpose beacons mark areas with specific regulations or uses — pipeline corridors, cable areas, ODAS stations, or military exercise zones. The yellow X topmark is the distinguishing feature.\" },\n\n { id: \"pile-post\", label: \"Pile / Post\", int1Ref: \"Q80\", section: \"Q\", getSvg: pilePost,\n group: \"beacons\", description: \"Simple pile or post used as a daybeacon or channel marker.\",\n s52PlRef: \"PILPNT01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Pile shaft and top ball\" },\n ],\n lineStyles: [\n { element: \"Pile shaft\", width: 2.5, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Top ball\", color: \"#000000\" },\n ],\n usageContext: \"A pile or post is a simple vertical structure driven into the seabed, often used as a channel marker or daybeacon in shallow coastal and intracoastal waters. They are the simplest form of fixed navigation aid.\" },\n\n // ── Section Q: Daymarks ──\n { id: \"daymark-triangle\", label: \"Daymark, Triangle (Port)\", int1Ref: \"Q100\", section: \"Q\", getSvg: daymarkTriangle,\n group: \"daymarks\", description: \"Triangular daymark board mounted on a beacon. Red for port (IALA-B).\",\n s52PlRef: \"DAYMAR01\", attributeKey: \"TOPSHP\", attributeValue: 1,\n variants: [\"daymark-triangle\", \"daymark-square\"], colorMeaning: \"Red triangle = port\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Daymark board fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline\" },\n ],\n lineStyles: [\n { element: \"Board outline\", width: 1.5, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Triangle board\", color: \"#d42e12\" },\n ],\n usageContext: \"Triangular daymarks are boards mounted on beacons to aid daytime identification. The red triangle indicates a port-hand mark in IALA Region B. They are essential in the US Intracoastal Waterway (ICW) system where they guide vessels through shallow coastal passages.\" },\n\n { id: \"daymark-square\", label: \"Daymark, Square (Starboard)\", int1Ref: \"Q100\", section: \"Q\", getSvg: daymarkSquare,\n group: \"daymarks\", description: \"Square daymark board mounted on a beacon. Green for starboard (IALA-B).\",\n s52PlRef: \"DAYMAR01\", attributeKey: \"TOPSHP\", attributeValue: 6,\n variants: [\"daymark-triangle\", \"daymark-square\"], colorMeaning: \"Green square = starboard\",\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Stbd Green\", hex: \"#00843d\", usage: \"Daymark board fill\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline\" },\n ],\n lineStyles: [\n { element: \"Board outline\", width: 1.5, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Square board\", color: \"#00843d\" },\n ],\n usageContext: \"Square daymarks are boards mounted on beacons indicating a starboard-hand mark in IALA Region B. The green square shape provides positive daytime identification even when paint condition is poor. Numbered with odd numbers ascending from seaward.\" },\n\n // ── Section Q: Topmarks ──\n { id: \"topmark-cone-up\", label: \"Topmark, Cone Up\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmarkConeUp,\n group: \"topmarks\", description: \"Single cone point up. Used on starboard-hand lateral marks (IALA-B: green buoys).\",\n s52PlRef: \"TOPMAR02\", attributeKey: \"TOPSHP\", attributeValue: 1, // S-57: cone, point up\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Cone fill and outline\" }],\n lineStyles: [{ element: \"Cone outline\", width: 1.0, color: \"#000000\" }],\n fillElements: [{ element: \"Cone body\", color: \"#000000\" }],\n usageContext: \"A single upward-pointing cone is the topmark for starboard-hand lateral marks in IALA-B. It helps identify buoys and beacons at a distance when colour may not be visible.\" },\n\n { id: \"topmark-cone-down\", label: \"Topmark, Cone Down\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmarkConeDown,\n group: \"topmarks\", description: \"Single cone point down. Used on port-hand lateral marks (IALA-B: red buoys).\",\n s52PlRef: \"TOPMAR04\", attributeKey: \"TOPSHP\", attributeValue: 2, // S-57: cone, point down\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Cone fill and outline\" }],\n lineStyles: [{ element: \"Cone outline\", width: 1.0, color: \"#000000\" }],\n fillElements: [{ element: \"Cone body\", color: \"#000000\" }],\n usageContext: \"A single downward-pointing cone is the topmark for port-hand lateral marks in IALA-B. It provides shape-based identification when color is not distinguishable.\" },\n\n { id: \"topmark-sphere\", label: \"Topmark, Sphere\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmarkSphere,\n group: \"topmarks\", description: \"Single sphere. Used on safe water marks.\",\n s52PlRef: \"TOPMAR10\", attributeKey: \"TOPSHP\", attributeValue: 3, // S-57: sphere\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Sphere fill and outline\" }],\n lineStyles: [{ element: \"Sphere outline\", width: 1.0, color: \"#000000\" }],\n fillElements: [{ element: \"Sphere body\", color: \"#000000\" }],\n usageContext: \"A single sphere topmark identifies safe water marks. These indicate navigable water all around — mid-channel or fairway marks. The sphere shape is easily distinguished from cones at a distance.\" },\n\n { id: \"topmark-2-cones-up\", label: \"Topmark, 2 Cones Up (N)\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmark2ConesUp,\n group: \"topmarks\", description: \"Two cones pointing up. North cardinal topmark — pass to the north.\",\n s52PlRef: \"TOPMAR12\", attributeKey: \"TOPSHP\", attributeValue: 10, // S-57: 2 cones points upward (N cardinal)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Both cones\" }],\n lineStyles: [{ element: \"Cone outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper cone\", color: \"#000000\" }, { element: \"Lower cone\", color: \"#000000\" }],\n usageContext: \"Two upward-pointing cones identify a North cardinal mark. Both cone points up = north. This topmark shape is the primary identifier — even when body colours may not be clearly visible.\" },\n\n { id: \"topmark-2-cones-down\", label: \"Topmark, 2 Cones Down (S)\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmark2ConesDown,\n group: \"topmarks\", description: \"Two cones pointing down. South cardinal topmark — pass to the south.\",\n s52PlRef: \"TOPMAR14\", attributeKey: \"TOPSHP\", attributeValue: 11, // S-57: 2 cones points downward (S cardinal)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Both cones\" }],\n lineStyles: [{ element: \"Cone outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper cone\", color: \"#000000\" }, { element: \"Lower cone\", color: \"#000000\" }],\n usageContext: \"Two downward-pointing cones identify a South cardinal mark. Both cone points down = south. Light character: Q(6)+LFl or VQ(6)+LFl.\" },\n\n { id: \"topmark-2-cones-base\", label: \"Topmark, Base-to-Base (E)\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmark2ConesBase,\n group: \"topmarks\", description: \"Two cones base-to-base (diamond shape). East cardinal topmark — pass to the east.\",\n s52PlRef: \"TOPMAR22\", attributeKey: \"TOPSHP\", attributeValue: 12, // S-57: 2 cones base to base (E cardinal)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Both cones\" }],\n lineStyles: [{ element: \"Cone outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper cone\", color: \"#000000\" }, { element: \"Lower cone\", color: \"#000000\" }],\n usageContext: \"Two cones base-to-base forming a diamond shape identify an East cardinal mark. Light character: Q(3) or VQ(3) — three quick flashes.\" },\n\n { id: \"topmark-2-cones-point\", label: \"Topmark, Point-to-Point (W)\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmark2ConesPoint,\n group: \"topmarks\", description: \"Two cones point-to-point (hourglass). West cardinal topmark — pass to the west.\",\n s52PlRef: \"TOPMAR24\", attributeKey: \"TOPSHP\", attributeValue: 13, // S-57: 2 cones point to point (W cardinal)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Both cones\" }],\n lineStyles: [{ element: \"Cone outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper cone\", color: \"#000000\" }, { element: \"Lower cone\", color: \"#000000\" }],\n usageContext: \"Two cones point-to-point forming an hourglass shape identify a West cardinal mark. Light character: Q(9) or VQ(9) — nine quick flashes.\" },\n\n { id: \"topmark-2-spheres\", label: \"Topmark, 2 Spheres (ISD)\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmark2Spheres,\n group: \"topmarks\", description: \"Two spheres vertically. Isolated danger topmark — danger with navigable water around.\",\n s52PlRef: \"TOPMAR30\", attributeKey: \"TOPSHP\", attributeValue: 4, // S-57: 2 spheres (vertically disposed)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Both spheres\" }],\n lineStyles: [{ element: \"Sphere outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper sphere\", color: \"#000000\" }, { element: \"Lower sphere\", color: \"#000000\" }],\n usageContext: \"Two vertically-stacked spheres identify an isolated danger mark. The hazard is small enough to pass on any side. Light character: Fl(2) — groups of two flashes.\" },\n\n { id: \"topmark-diamond\", label: \"Topmark, Diamond\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmarkDiamond,\n group: \"topmarks\", description: \"Diamond shape topmark. Used on some special purpose marks.\",\n s52PlRef: \"TOPMAR28\", attributeKey: \"TOPSHP\", attributeValue: 14, // S-57: rhombus (diamond)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Diamond fill and outline\" }],\n lineStyles: [{ element: \"Diamond outline\", width: 1.0, color: \"#000000\" }],\n fillElements: [{ element: \"Diamond body\", color: \"#000000\" }],\n usageContext: \"A diamond-shaped topmark is occasionally used on special purpose marks. It is less common than other topmark shapes but may be encountered on certain regulatory or administrative boundary marks.\" },\n\n { id: \"topmark-x-shape\", label: \"Topmark, X Shape\", int1Ref: \"Q130\", section: \"Q\", getSvg: topmarkXShape,\n group: \"topmarks\", description: \"X-shape (saltire) topmark. Used on special purpose marks (yellow buoys).\",\n s52PlRef: \"TOPMAR32\", attributeKey: \"TOPSHP\", attributeValue: 7, // S-57: x-shape (saltire)\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"X arms\" }],\n lineStyles: [{ element: \"X arm (diagonal 1)\", width: 3.0, color: \"#000000\" }, { element: \"X arm (diagonal 2)\", width: 3.0, color: \"#000000\" }],\n fillElements: [],\n usageContext: \"The X-shaped (saltire) topmark identifies special purpose buoys and beacons. These marks are yellow and indicate non-navigational areas such as pipeline routes, cable areas, or ODAS stations.\" },\n\n // ── Section P: Lights ──\n { id: \"light-major\", label: \"Light, Major\", int1Ref: \"P1\", section: \"P\", getSvg: lightMajor,\n group: \"lights\", description: \"Major navigational light visible at long range (typically >15 NM). Shown as magenta tear/petal flare.\",\n s52PlRef: \"LIGHTS11\", labelExamples: ['\"Fl W 5s 40m 18M\"', '\"Iso R 4s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Central dot, flare petals, range ring\" },\n ],\n lineStyles: [\n { element: \"Range ring\", width: 0.5, color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Central dot\", color: \"#d200d2\" },\n { element: \"Primary flare (north)\", color: \"#d200d2\", opacity: 0.85 },\n { element: \"Secondary flares\", color: \"#d200d2\", opacity: 0.5 },\n { element: \"Tertiary flares\", color: \"#d200d2\", opacity: 0.35 },\n ],\n usageContext: \"Major lights are powerful coastal lights designed for long-range visibility, typically exceeding 15 nautical miles. They are mounted on lighthouses, towers, or prominent headlands. The magenta tear-drop flare symbol indicates the light's position. The label gives the light character (e.g., 'Fl W 5s'), height, and nominal range.\" },\n\n { id: \"light-minor\", label: \"Light, Minor\", int1Ref: \"P4\", section: \"P\", getSvg: lightMinor,\n group: \"lights\", description: \"Minor light, typically on buoys or small beacons. Shorter range than major lights.\",\n s52PlRef: \"LIGHTS13\", labelExamples: ['\"Fl G 4s\"', '\"Q R\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light dot and flare\" },\n ],\n lineStyles: [\n { element: \"Range ring\", width: 0.4, color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Light dot\", color: \"#d200d2\" },\n { element: \"Upward flare\", color: \"#d200d2\", opacity: 0.7 },\n ],\n usageContext: \"Minor lights are smaller, lower-power lights typically mounted on buoys, beacons, or small structures. Their range is usually less than 15 nautical miles. They are essential for marking channels, harbours, and coastal hazards at night.\" },\n\n { id: \"light-sector\", label: \"Light, Sector\", int1Ref: \"P40\", section: \"P\", getSvg: lightSector,\n group: \"lights\", description: \"Light showing different colors or characteristics in defined sectors. Arc indicates coverage.\",\n s52PlRef: \"LIGHTS12\", labelExamples: ['\"F.WRG\"', '\"Oc.WRG 6s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light dot, sector arcs, sector fills\" },\n ],\n lineStyles: [\n { element: \"Sector boundary rays\", width: 0.5, color: \"#d200d2\" },\n { element: \"Sector arc\", width: 1.0, pattern: \"2, 1\", color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Light dot\", color: \"#d200d2\" },\n { element: \"Sector fill (left)\", color: \"#d200d2\", opacity: 0.2 },\n { element: \"Sector fill (right)\", color: \"#d200d2\", opacity: 0.2 },\n ],\n usageContext: \"Sector lights show different colors (typically white, red, green) in defined arcs. The white sector usually indicates the safe approach bearing. Crossing from white to red or green warns the mariner they are leaving the safe channel. Essential for harbour approaches and narrow passages.\" },\n\n { id: \"light-directional\", label: \"Light, Directional\", int1Ref: \"P30\", section: \"P\", getSvg: lightDirectional,\n group: \"lights\", description: \"Light showing a narrow beam along a specific bearing to guide vessels on a leading line.\",\n s52PlRef: \"LIGHTS13\", labelExamples: ['\"Dir Oc WRG 6s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light dot, beam line, arrowhead\" },\n ],\n lineStyles: [\n { element: \"Beam line\", width: 1.5, color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Light dot\", color: \"#d200d2\" },\n { element: \"Arrowhead\", color: \"#d200d2\", opacity: 0.6 },\n ],\n usageContext: \"A directional light emits a narrow beam along a specific bearing to guide vessels along a leading line or into a harbour entrance. The light may show different colours on either side of the intended track. Mariners should steer to keep in the white (or brightest) sector.\" },\n\n { id: \"light-aero\", label: \"Light, Aeronautical\", int1Ref: \"P60\", section: \"P\", getSvg: lightAero,\n group: \"lights\", description: \"Aeronautical light also visible from the sea. Shown with dashed range rings.\",\n s52PlRef: \"LIGHTS82\", labelExamples: ['\"Aero Al Fl WG 7.5s\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light dot, flare, range rings\" },\n ],\n lineStyles: [\n { element: \"Inner range ring\", width: 0.6, pattern: \"2, 2\", color: \"#d200d2\" },\n { element: \"Outer range ring\", width: 0.4, pattern: \"2, 2\", color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Light dot\", color: \"#d200d2\" },\n { element: \"Upward flare\", color: \"#d200d2\", opacity: 0.6 },\n ],\n usageContext: \"Aeronautical lights are primarily intended for aircraft but are also conspicuous from the sea. They are charted because they can serve as useful navigational references for mariners. The dashed range rings distinguish them from marine lights. Typically found at airports near the coast.\" },\n\n { id: \"light-vessel\", label: \"Light Vessel\", int1Ref: \"P6\", section: \"P\", getSvg: lightVessel,\n group: \"light-vessels\", description: \"Manned or unmanned vessel anchored as a navigational light. Being replaced by LANBY buoys.\",\n s52PlRef: \"LITVES01\", labelExamples: ['\"NANTUCKET\"', '\"AMBROSE\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Hull body\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline, mast, waterline\" },\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light housing and flare\" },\n ],\n lineStyles: [\n { element: \"Waterline curve\", width: 1.5, color: \"#000000\" },\n { element: \"Hull outline\", width: 1.0, color: \"#000000\" },\n { element: \"Mast\", width: 1.5, color: \"#000000\" },\n { element: \"Light housing outline\", width: 0.6, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Hull body\", color: \"#d42e12\" },\n { element: \"Light housing\", color: \"#d200d2\" },\n ],\n usageContext: \"Light vessels (lightships) are ships moored at a fixed station to serve as floating lighthouses. Historically important at major harbour approaches and offshore shoals. Most have been replaced by large automatic navigation buoys (LANBY). The remaining few carry the station name prominently on the hull.\" },\n\n { id: \"light-float\", label: \"Light Float\", int1Ref: \"P5\", section: \"P\", getSvg: lightFloat,\n group: \"light-vessels\", description: \"Unmanned floating light platform. Similar function to light vessel but smaller.\",\n s52PlRef: \"LITFLT01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Float hull\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Outline and mast\" },\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Light housing\" },\n ],\n lineStyles: [\n { element: \"Hull outline\", width: 1.0, color: \"#000000\" },\n { element: \"Mast\", width: 1.5, color: \"#000000\" },\n { element: \"Light housing outline\", width: 0.6, color: \"#000000\" },\n ],\n fillElements: [\n { element: \"Float hull\", color: \"#ffd700\" },\n { element: \"Light housing\", color: \"#d200d2\" },\n ],\n usageContext: \"Light floats are unmanned floating platforms that carry lights and other aids to navigation. They are smaller and less expensive than light vessels, providing a cost-effective alternative for marking offshore positions.\" },\n\n // ── Section R/S: Fog Signals & Radar ──\n { id: \"fog-signal\", label: \"Fog Signal\", int1Ref: \"R1\", section: \"R\", getSvg: fogSignal,\n group: \"fog-radar\", description: \"Audible fog signal device (horn, siren, bell, whistle). Shown as concentric arcs from source.\",\n s52PlRef: \"FOGSIG01\", labelExamples: ['\"Horn Mo(N) 30s\"', '\"BELL\"', '\"Dia\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Horn and sound arcs\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Horn outline\" },\n ],\n lineStyles: [\n { element: \"Inner arc\", width: 1.2, color: \"#d200d2\" },\n { element: \"Middle arc\", width: 1.0, color: \"#d200d2\" },\n { element: \"Outer arc\", width: 0.8, color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Horn body\", color: \"#d200d2\" },\n ],\n usageContext: \"Fog signals are audible devices that operate during periods of reduced visibility (fog, rain, snow). Types include horns, diaphones, sirens, bells, whistles, and gongs. The label describes the signal type and timing. Mariners should be aware that fog signals may be unreliable for position fixing due to sound propagation effects.\" },\n\n { id: \"radar-transponder\", label: \"Radar Transponder / RACON\", int1Ref: \"S1\", section: \"S\", getSvg: radarTransponder,\n group: \"fog-radar\", description: \"Radar beacon (RACON) that returns a coded signal on a vessel's radar display.\",\n s52PlRef: \"RTPBCN01\", labelExamples: ['\"Racon(M)\"', '\"Racon(T)\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Centre dot and range rings\" },\n ],\n lineStyles: [\n { element: \"Inner range ring\", width: 1.0, pattern: \"3, 2\", color: \"#d200d2\" },\n { element: \"Outer range ring\", width: 0.7, pattern: \"3, 2\", color: \"#d200d2\" },\n ],\n fillElements: [\n { element: \"Centre dot\", color: \"#d200d2\" },\n ],\n usageContext: \"A RACON (RAdar beaCON) is a transponder that, when triggered by a vessel's radar, returns a coded signal visible on the radar display. This appears as a distinctive dash pattern extending radially outward from the mark's position. The letter code (e.g., 'M' or 'T') identifies the specific RACON.\" },\n\n // ── Section K: Wrecks ──\n { id: \"wreck-visible\", label: \"Wreck, Visible\", int1Ref: \"K24\", section: \"K\", getSvg: wreckVisible,\n group: \"wrecks\", description: \"Wreck with hull or superstructure visible above chart datum. Always dangerous.\",\n s52PlRef: \"WRECKS01\", attributeKey: \"WATLEV\", attributeValue: 1, labelExamples: ['\"Wk\"', '\"Masts\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Hull, masts, rigging, waterline\" },\n ],\n lineStyles: [\n { element: \"Waterline wave\", width: 1.5, color: \"#000000\" },\n { element: \"Mast lines\", width: 1.5, color: \"#000000\" },\n { element: \"Cross-beam\", width: 1.0, color: \"#000000\" },\n ],\n fillElements: [],\n usageContext: \"A visible wreck has parts of its hull or superstructure above the water surface at chart datum. It is always considered a danger to navigation and must be given a wide berth. Visible wrecks may also be surrounded by debris or underwater structure extending beyond the visible portion.\" },\n\n { id: \"wreck-submerged\", label: \"Wreck, Submerged\", int1Ref: \"K26\", section: \"K\", getSvg: wreckSubmerged,\n group: \"wrecks\", description: \"Wreck submerged at chart datum. Depth may be known or unknown. Dotted circle indicates danger zone.\",\n s52PlRef: \"WRECKS04\", attributeKey: \"WATLEV\", attributeValue: 3, labelExamples: ['\"Wk 8m\"', '\"Wk\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"RESBL (SVG: #4a6fa5)\", hex: \"#4a6fa5\", usage: \"Hull outline, masts, danger circle (S-52 standard: #0064b4)\" },\n ],\n lineStyles: [\n { element: \"Hull waterline\", width: 1.2, color: \"#4a6fa5\" },\n { element: \"Mast lines\", width: 1.0, color: \"#4a6fa5\" },\n { element: \"Danger perimeter\", width: 0.8, pattern: \"1.5, 2\", color: \"#4a6fa5\" },\n ],\n fillElements: [],\n usageContext: \"A submerged wreck lies below the water surface at chart datum. The depth over the wreck may be known (shown as a sounding) or unknown. The dotted circle indicates the approximate danger zone. Vessels should avoid passing over submerged wrecks as actual clearance may be less than charted due to tidal conditions or wreck deterioration.\" },\n\n { id: \"wreck-dangerous\", label: \"Wreck, Dangerous\", int1Ref: \"K28\", section: \"K\", getSvg: wreckDangerous,\n group: \"wrecks\", description: \"Dangerous wreck with depth ≤ safety contour. Shown with red danger symbol.\",\n s52PlRef: \"WRECKS05\", labelExamples: ['\"Wk 2.1m\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"DNGHL (SVG: #d42e12)\", hex: \"#d42e12\", usage: \"Danger circle and cross (S-52 standard: #ff0000)\" },\n ],\n lineStyles: [\n { element: \"Danger circle\", width: 1.5, color: \"#d42e12\" },\n { element: \"Horizontal cross\", width: 1.5, color: \"#d42e12\" },\n { element: \"Vertical cross\", width: 1.5, color: \"#d42e12\" },\n ],\n fillElements: [],\n usageContext: \"A dangerous wreck has a depth equal to or less than the vessel's safety contour, meaning it poses a direct grounding hazard. The red circle-with-cross danger symbol demands immediate attention. Vessels must give these wrecks a wide berth. The S-52 system triggers this symbol automatically when the wreck depth is shallower than the user's safety contour setting.\" },\n\n // ── Section K: Rocks ──\n { id: \"rock-awash\", label: \"Rock Awash\", int1Ref: \"K12\", section: \"K\", getSvg: rockAwash,\n group: \"rocks\", description: \"Rock awash at the level of chart datum. Shown as a simple cross (+).\",\n s52PlRef: \"UWTROC03\", attributeKey: \"WATLEV\", attributeValue: 5, // S-57: awash\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Cross arms\" },\n ],\n lineStyles: [\n { element: \"Vertical arm\", width: 2.0, color: \"#000000\" },\n { element: \"Horizontal arm\", width: 2.0, color: \"#000000\" },\n ],\n fillElements: [],\n usageContext: \"A rock awash is level with the sea surface at chart datum. It may be exposed at low water and submerged at high water. The simple cross (+) symbol is one of the most important danger symbols on a chart. Mariners must always avoid crossing over this symbol.\" },\n\n { id: \"rock-underwater\", label: \"Rock, Underwater\", int1Ref: \"K13\", section: \"K\", getSvg: rockUnderwater,\n group: \"rocks\", description: \"Submerged rock with known or estimated depth. Shown as asterisk.\",\n s52PlRef: \"UWTROC04\", attributeKey: \"WATLEV\", attributeValue: 3, labelExamples: ['\"2.4m\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"RESBL (SVG: #4a6fa5)\", hex: \"#4a6fa5\", usage: \"All asterisk lines (S-52 standard: #0064b4)\" },\n ],\n lineStyles: [\n { element: \"Vertical line\", width: 1.5, color: \"#4a6fa5\" },\n { element: \"Horizontal line\", width: 1.5, color: \"#4a6fa5\" },\n { element: \"Diagonal line 1\", width: 1.2, color: \"#4a6fa5\" },\n { element: \"Diagonal line 2\", width: 1.2, color: \"#4a6fa5\" },\n ],\n fillElements: [],\n usageContext: \"An underwater rock is permanently submerged. The depth may be shown as a sounding alongside the symbol. The blue asterisk symbol distinguishes it from rocks awash. Mariners should check the sounding and compare it to their vessel's draft before navigating near underwater rocks.\" },\n\n { id: \"rock-covers-uncovers\", label: \"Rock, Covers & Uncovers\", int1Ref: \"K11\", section: \"K\", getSvg: rockCoversUncovers,\n group: \"rocks\", description: \"Rock that alternately covers and uncovers with tide. Cross with dashed circle.\",\n s52PlRef: \"UWTROC04\", attributeKey: \"WATLEV\", attributeValue: 4, // S-57: covers and uncovers\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Cross arms and dashed perimeter\" },\n ],\n lineStyles: [\n { element: \"Vertical arm\", width: 1.8, color: \"#000000\" },\n { element: \"Horizontal arm\", width: 1.8, color: \"#000000\" },\n { element: \"Danger perimeter\", width: 0.8, pattern: \"2, 2\", color: \"#000000\" },\n ],\n fillElements: [],\n usageContext: \"A rock that covers and uncovers is alternately exposed and submerged with the tide. The height above chart datum is sometimes shown. The dashed circle indicates the approximate extent of the danger area. These rocks can be particularly hazardous as they may not be visible at all states of the tide.\" },\n\n // ── Section K: Obstructions ──\n { id: \"obstruction\", label: \"Obstruction\", int1Ref: \"K40\", section: \"K\", getSvg: obstruction,\n group: \"obstructions\", description: \"Underwater obstruction (stumps, wellheads, fish havens, etc.). Cross with danger circle.\",\n s52PlRef: \"OBSTRN01\", labelExamples: ['\"Obstn\"', '\"Foul\"'],\n renderSize: \"32x32\",\n colors: [\n { token: \"RESBL (SVG: #4a6fa5)\", hex: \"#4a6fa5\", usage: \"Cross and danger circle (S-52 standard: #0064b4)\" },\n ],\n lineStyles: [\n { element: \"Vertical arm\", width: 1.8, color: \"#4a6fa5\" },\n { element: \"Horizontal arm\", width: 1.8, color: \"#4a6fa5\" },\n { element: \"Danger perimeter\", width: 0.8, pattern: \"2, 2\", color: \"#4a6fa5\" },\n ],\n fillElements: [],\n usageContext: \"Obstructions include any underwater hazard that is not a wreck or natural rock — fish havens, submerged piles, wellheads, disused cables, or foul ground. The blue cross with dashed circle symbol warns mariners. The label may specify the type of obstruction and its depth.\" },\n\n // ── Section E: Landmarks ──\n { id: \"landmark-spire\", label: \"Landmark, Spire\", int1Ref: \"E10.3\", section: \"E\", getSvg: landmarkSpire,\n group: \"landmarks\", description: \"Church spire or steeple, conspicuous from seaward. Useful for visual fixing.\",\n s52PlRef: \"LNDMRK17\", attributeKey: \"CATLMK\", attributeValue: 17,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Spire, building, position circle\" }],\n lineStyles: [{ element: \"Building outline\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Spire\", color: \"#000000\" }, { element: \"Building body\", color: \"#000000\" }],\n usageContext: \"A church spire or steeple is charted when it is conspicuous from seaward and useful for visual position fixing. Mariners can take compass bearings on spires to establish a fix. The dashed circle indicates the landmark's approximate position.\" },\n\n { id: \"landmark-tower\", label: \"Landmark, Tower\", int1Ref: \"E20\", section: \"E\", getSvg: landmarkTower,\n group: \"landmarks\", description: \"Tower conspicuous from seaward. General-purpose landmark symbol.\",\n s52PlRef: \"LNDMRK20\", attributeKey: \"CATLMK\", attributeValue: 20,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower body, cap, position circle\" }],\n lineStyles: [{ element: \"Tower outline\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Tower body\", color: \"#000000\" }, { element: \"Tower cap\", color: \"#000000\" }],\n usageContext: \"A general tower landmark is charted when conspicuous from seaward. This includes water towers, observation towers, and other tall structures. Towers are valuable for radar and visual position fixing due to their height and solid construction.\" },\n\n { id: \"landmark-chimney\", label: \"Landmark, Chimney\", int1Ref: \"E22\", section: \"E\", getSvg: landmarkChimney,\n group: \"landmarks\", description: \"Industrial chimney or smokestack visible from the sea.\",\n s52PlRef: \"LNDMRK01\", attributeKey: \"CATLMK\", attributeValue: 1,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Chimney body, smoke, position circle\" }],\n lineStyles: [{ element: \"Body outline\", width: 0.8, color: \"#000000\" }, { element: \"Smoke plume\", width: 1.0, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Chimney body\", color: \"#000000\" }],\n usageContext: \"Industrial chimneys and smokestacks are charted when conspicuous from seaward. They are often associated with power stations, factories, or refineries. Active chimneys may have visible emissions that aid identification.\" },\n\n { id: \"landmark-flagstaff\", label: \"Landmark, Flagstaff\", int1Ref: \"E27\", section: \"E\", getSvg: landmarkFlagstaff,\n group: \"landmarks\", description: \"Flagstaff or flagpole conspicuous from seaward.\",\n s52PlRef: \"LNDMRK03\", attributeKey: \"CATLMK\", attributeValue: 3,\n renderSize: \"32x32\",\n colors: [\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Pole and position circle\" },\n { token: \"IALA-B Port Red\", hex: \"#d42e12\", usage: \"Flag\" },\n ],\n lineStyles: [{ element: \"Pole\", width: 1.5, color: \"#000000\" }, { element: \"Flag outline\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Flag\", color: \"#d42e12\" }],\n usageContext: \"A flagstaff or flagpole is charted when conspicuous from seaward. Flags flying from these may aid identification. They are often found at government buildings, military installations, or yacht clubs near the coast.\" },\n\n { id: \"landmark-monument\", label: \"Landmark, Monument\", int1Ref: \"E24\", section: \"E\", getSvg: landmarkMonument,\n group: \"landmarks\", description: \"Monument or memorial conspicuous from the sea.\",\n s52PlRef: \"LNDMRK05\", attributeKey: \"CATLMK\", attributeValue: 5,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Monument body, base, position circle\" }],\n lineStyles: [{ element: \"Body outline\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Monument body\", color: \"#000000\" }, { element: \"Base\", color: \"#000000\" }],\n usageContext: \"Monuments and memorials are charted when conspicuous from seaward. Large monuments on prominent headlands or coastal hills can be excellent visual landmarks for position fixing. Examples include obelisks, statues, and war memorials.\" },\n\n { id: \"landmark-windmill\", label: \"Landmark, Windmill\", int1Ref: \"E25\", section: \"E\", getSvg: landmarkWindmill,\n group: \"landmarks\", description: \"Traditional windmill with rotating vanes. Conspicuous landmark.\",\n s52PlRef: \"LNDMRK21\", attributeKey: \"CATLMK\", attributeValue: 7,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower, vanes, hub, position circle\" }],\n lineStyles: [{ element: \"Tower\", width: 1.5, color: \"#000000\" }, { element: \"Vane arms\", width: 1.2, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Hub\", color: \"#000000\" }],\n usageContext: \"Traditional windmills with rotating vanes are conspicuous landmarks, especially common along the coasts of the Netherlands, UK, and New England. Their distinctive shape makes them excellent visual references for coastal navigation.\" },\n\n { id: \"landmark-wind-turbine\", label: \"Landmark, Wind Turbine\", int1Ref: \"E26.2\", section: \"E\", getSvg: landmarkWindTurbine,\n group: \"landmarks\", description: \"Modern 3-blade wind turbine. Increasingly common offshore landmark.\",\n s52PlRef: \"LNDMRK22\", attributeKey: \"CATLMK\", attributeValue: 26,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower, blades, hub, position circle\" }],\n lineStyles: [{ element: \"Tower\", width: 1.5, color: \"#000000\" }, { element: \"Blades\", width: 1.2, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Hub\", color: \"#000000\" }],\n usageContext: \"Modern wind turbines are increasingly common both onshore and offshore. Offshore wind farms can present significant navigational hazards and restricted areas. Individual turbines are charted as landmarks; farms are shown as areas with individual turbine positions. They typically have aviation lights that are visible from sea.\" },\n\n { id: \"landmark-dome\", label: \"Landmark, Dome\", int1Ref: \"E21\", section: \"E\", getSvg: landmarkDome,\n group: \"landmarks\", description: \"Dome or cupola (e.g., observatory, mosque) visible from the sea.\",\n s52PlRef: \"LNDMRK03\", attributeKey: \"CATLMK\", attributeValue: 6,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Dome, base, position circle\" }],\n lineStyles: [{ element: \"Base outline\", width: 0.8, color: \"#000000\" }, { element: \"Dome curve\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Base\", color: \"#000000\" }, { element: \"Dome\", color: \"#000000\" }],\n usageContext: \"Domes and cupolas (observatories, mosques, churches, government buildings) are charted when conspicuous from seaward. Their distinctive rounded profile makes them easily identifiable among other coastal structures.\" },\n\n { id: \"landmark-radar-scanner\", label: \"Landmark, Radar Scanner\", int1Ref: \"E30\", section: \"E\", getSvg: landmarkRadarScanner,\n group: \"landmarks\", description: \"Radar scanner antenna conspicuous from seaward.\",\n s52PlRef: \"LNDMRK12\", attributeKey: \"CATLMK\", attributeValue: 9,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower, scanner dish, position circle\" }],\n lineStyles: [{ element: \"Tower\", width: 1.5, color: \"#000000\" }, { element: \"Scanner frame\", width: 1.5, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [],\n usageContext: \"Radar scanner antennae are charted when they form conspicuous landmarks. They are often found at coast guard stations, vessel traffic services (VTS), or military installations. Their rotating dish is a distinctive visual feature.\" },\n\n { id: \"landmark-dish-aerial\", label: \"Landmark, Dish Aerial\", int1Ref: \"E31\", section: \"E\", getSvg: landmarkDishAerial,\n group: \"landmarks\", description: \"Satellite dish or parabolic antenna visible from the sea.\",\n s52PlRef: \"LNDMRK12\", attributeKey: \"CATLMK\", attributeValue: 12,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower, dish, position circle\" }],\n lineStyles: [{ element: \"Tower\", width: 1.5, color: \"#000000\" }, { element: \"Dish curve\", width: 1.5, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [],\n usageContext: \"Satellite dishes and large parabolic antennae are charted when conspicuous from seaward. Large earth stations with multiple dishes can be distinctive landmarks visible at considerable range.\" },\n\n { id: \"landmark-water-tower\", label: \"Landmark, Water Tower\", int1Ref: \"E21\", section: \"E\", getSvg: landmarkWaterTower,\n group: \"landmarks\", description: \"Water tower. Elevated tank on supporting structure, conspicuous landmark.\",\n s52PlRef: \"LNDMRK19\", attributeKey: \"CATLMK\", attributeValue: 15,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tank, legs, position circle\" }],\n lineStyles: [{ element: \"Leg outlines\", width: 1.2, color: \"#000000\" }, { element: \"Tank outline\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Tank body\", color: \"#000000\" }],\n usageContext: \"Water towers are among the most conspicuous coastal landmarks due to their height and distinctive shape. They are excellent for visual and radar position fixing. Often painted with town names or distinctive colours, making visual identification straightforward.\" },\n\n { id: \"landmark-radio-tv-mast\", label: \"Landmark, Radio/TV Mast\", int1Ref: \"E28\", section: \"E\", getSvg: landmarkRadioTvMast,\n group: \"landmarks\", description: \"Radio or television transmission mast with horizontal cross-arms.\",\n s52PlRef: \"LNDMRK10\", attributeKey: \"CATLMK\", attributeValue: 8,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Mast, cross-arms, top, position circle\" }],\n lineStyles: [{ element: \"Main mast\", width: 1.5, color: \"#000000\" }, { element: \"Cross-arms\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Top ball\", color: \"#000000\" }],\n usageContext: \"Radio and television transmission masts are often the tallest structures in a coastal area. Their height makes them excellent radar targets visible at long range. The horizontal cross-arms holding antennae and guy wires give them a distinctive profile.\" },\n\n { id: \"landmark-cross\", label: \"Landmark, Cross\", int1Ref: \"E12\", section: \"E\", getSvg: landmarkCross,\n group: \"landmarks\", description: \"Religious cross or calvary conspicuous from seaward.\",\n s52PlRef: \"LNDMRK05\", attributeKey: \"CATLMK\", attributeValue: 10,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Cross arms and position circle\" }],\n lineStyles: [{ element: \"Vertical arm\", width: 2.0, color: \"#000000\" }, { element: \"Horizontal arm\", width: 2.0, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [],\n usageContext: \"Religious crosses and calvaries on prominent coastal positions are charted when conspicuous from seaward. They are particularly common along Mediterranean and Atlantic European coasts. Their simple, distinctive shape aids visual identification.\" },\n\n { id: \"landmark-mast\", label: \"Landmark, Mast\", int1Ref: \"E28\", section: \"E\", getSvg: landmarkMast,\n group: \"landmarks\", description: \"General mast (not radio/TV). Pole with spherical top.\",\n s52PlRef: \"LNDMRK10\", attributeKey: \"CATLMK\", attributeValue: 14,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Mast pole, top ball, position circle\" }],\n lineStyles: [{ element: \"Mast pole\", width: 2.0, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Top ball\", color: \"#000000\" }],\n usageContext: \"General masts include flagpoles, signal masts, and other tall vertical structures not specifically classified as radio/TV masts. The spherical top provides a distinctive profile when silhouetted against the sky.\" },\n\n { id: \"landmark-silo\", label: \"Landmark, Silo/Tank\", int1Ref: \"E33\", section: \"E\", getSvg: landmarkSilo,\n group: \"landmarks\", description: \"Silo, grain elevator, or storage tank conspicuous from the sea.\",\n s52PlRef: \"LNDMRK17\", attributeKey: \"CATLMK\", attributeValue: 33,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Body, dome top, position circle\" }],\n lineStyles: [{ element: \"Body outline\", width: 0.8, color: \"#000000\" }, { element: \"Dome curve\", width: 0.8, color: \"#000000\" }, { element: \"Position circle\", width: 0.6, pattern: \"2, 2\", color: \"#000000\" }],\n fillElements: [{ element: \"Silo body\", color: \"#000000\" }, { element: \"Dome top\", color: \"#000000\" }],\n usageContext: \"Silos, grain elevators, and large storage tanks are conspicuous industrial landmarks. Groups of silos at port facilities are particularly useful as they indicate harbour approaches. Their cylindrical shape gives a strong radar echo.\" },\n\n // ── Section L/N: Infrastructure ──\n { id: \"offshore-platform\", label: \"Offshore Platform\", int1Ref: \"L10\", section: \"L\", getSvg: offshorePlatform,\n group: \"infrastructure\", description: \"Fixed offshore platform (oil, gas, wind). Shows as crossed square.\",\n s52PlRef: \"OFSPLF01\",\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Square outline, diagonal crosses, centre dot\" }],\n lineStyles: [{ element: \"Square outline\", width: 1.5, color: \"#000000\" }, { element: \"Diagonal cross 1\", width: 1.0, color: \"#000000\" }, { element: \"Diagonal cross 2\", width: 1.0, color: \"#000000\" }],\n fillElements: [{ element: \"Centre dot\", color: \"#000000\" }],\n usageContext: \"Offshore platforms include oil and gas production platforms, wind farm substations, and other permanent offshore structures. They have safety zones (typically 500m) that vessels must not enter without authorisation. They are lit, have fog signals, and appear on radar.\" },\n\n { id: \"crane\", label: \"Crane\", int1Ref: \"F53\", section: \"L\", getSvg: crane,\n group: \"infrastructure\", description: \"Port crane or dockside loading crane. May have restricted clearance.\",\n s52PlRef: \"CRANES01\",\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Tower, jib, foundation\" }],\n lineStyles: [{ element: \"Tower\", width: 2.0, color: \"#000000\" }, { element: \"Jib arm\", width: 1.5, color: \"#000000\" }, { element: \"Stay wire\", width: 0.8, pattern: \"2, 1\", color: \"#000000\" }],\n fillElements: [{ element: \"Foundation\", color: \"#000000\" }],\n usageContext: \"Port cranes and dockside loading cranes are charted primarily to indicate restricted clearances for vessels passing underneath. Container cranes, gantry cranes, and heavy-lift cranes are common at commercial ports. Their position may affect vessel routing within harbour limits.\" },\n\n { id: \"bridge-fixed\", label: \"Bridge (Fixed)\", int1Ref: \"D20\", section: \"D\", getSvg: () => bridgeFixed(),\n getThemedSvg: (chblk, movable) => bridgeFixed(chblk, movable),\n group: \"bridges\", description: \"Fixed bridge — solid arch. Permanent vertical clearance.\",\n s52PlRef: \"BRIDGE01\", attributeKey: \"CATBRG\", attributeValue: 1,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Deck, abutments, arch\" }],\n lineStyles: [{ element: \"Deck\", width: 2.0, color: \"#000000\" }, { element: \"Arch\", width: 1.5, color: \"#000000\" }],\n fillElements: [],\n usageContext: \"Fixed bridges have a permanent vertical clearance that cannot change. Mariners must verify their vessel's air draft against the charted VERCLR value. The solid arch indicates the span is immovable.\" },\n\n { id: \"bridge-opening\", label: \"Bridge (Opening)\", int1Ref: \"D21\", section: \"D\", getSvg: () => bridgeOpening(),\n getThemedSvg: (chblk, movable) => bridgeOpening(chblk, movable),\n group: \"bridges\", description: \"Opening bridge — dashed magenta arch indicates movable span. Covers draw and pontoon types.\",\n s52PlRef: \"BRIDGE01\", attributeKey: \"CATBRG\", attributeValue: 2,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Deck, abutments\" }, { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Dashed arch (movable span)\" }],\n lineStyles: [{ element: \"Deck\", width: 2.0, color: \"#000000\" }, { element: \"Dashed arch\", width: 1.5, pattern: \"3, 2\", color: \"#d200d2\" }],\n fillElements: [],\n usageContext: \"Opening bridges have variable clearance — check both VERCCL (closed) and VERCOP (open). Vessels requiring the bridge to open must signal or contact the bridge tender. Includes draw and pontoon bridges.\" },\n\n { id: \"bridge-bascule\", label: \"Bridge (Bascule)\", int1Ref: \"D23.2\", section: \"D\", getSvg: () => bridgeBascule(),\n getThemedSvg: (chblk, movable) => bridgeBascule(chblk, movable),\n group: \"bridges\", description: \"Bascule bridge — tilting leaf with pivot point. One or two leaves rotate upward.\",\n s52PlRef: \"BRIDGE01\", attributeKey: \"CATBRG\", attributeValue: 5,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Deck, abutments\" }, { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Tilting leaf and pivot\" }],\n lineStyles: [{ element: \"Deck\", width: 2.0, color: \"#000000\" }, { element: \"Tilting leaf\", width: 2.0, color: \"#d200d2\" }],\n fillElements: [{ element: \"Pivot point\", color: \"#d200d2\" }],\n usageContext: \"Bascule bridges rotate upward around a horizontal pivot. Single-leaf bascules tilt from one side; double-leaf from both. VERCCL gives clearance when closed, VERCOP when open. Common in ports and harbours with regular vessel traffic.\" },\n\n { id: \"bridge-swing\", label: \"Bridge (Swing)\", int1Ref: \"D23.3\", section: \"D\", getSvg: () => bridgeSwing(),\n getThemedSvg: (chblk, movable) => bridgeSwing(chblk, movable),\n group: \"bridges\", description: \"Swing bridge — rotates horizontally around a central pivot point.\",\n s52PlRef: \"BRIDGE01\", attributeKey: \"CATBRG\", attributeValue: 3,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Deck, abutments\" }, { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Pivot circle\" }],\n lineStyles: [{ element: \"Deck\", width: 2.0, color: \"#000000\" }, { element: \"Pivot circle\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [{ element: \"Pivot point\", color: \"#d200d2\" }],\n usageContext: \"Swing bridges rotate horizontally about a central pier. When open, the bridge swings parallel to the channel. HORCLR may be reduced when partially open. Vessels must coordinate passage with the bridge tender.\" },\n\n { id: \"bridge-lifting\", label: \"Bridge (Lifting)\", int1Ref: \"D23.1\", section: \"D\", getSvg: () => bridgeLifting(),\n getThemedSvg: (chblk, movable) => bridgeLifting(chblk, movable),\n group: \"bridges\", description: \"Lifting/vertical-lift bridge — entire deck rises vertically between towers.\",\n s52PlRef: \"BRIDGE01\", attributeKey: \"CATBRG\", attributeValue: 4,\n renderSize: \"32x32\",\n colors: [{ token: \"CHBLK\", hex: \"#000000\", usage: \"Deck, towers\" }, { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Lift arrows\" }],\n lineStyles: [{ element: \"Deck\", width: 2.0, color: \"#000000\" }, { element: \"Lift lines\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [{ element: \"Arrow heads\", color: \"#d200d2\" }],\n usageContext: \"Lifting bridges raise the entire deck span vertically between two towers. VERCCL gives clearance in lowered position, VERCOP in raised. The lift mechanism allows precise height control. Common on major waterways with rail crossings.\" },\n\n { id: \"anchor\", label: \"Anchorage\", int1Ref: \"N12\", section: \"N\", getSvg: anchor,\n group: \"anchorage\", description: \"Designated anchorage area. May have specific regulations or restrictions.\",\n s52PlRef: \"ACHARE01\", labelExamples: ['\"Anch\"', '\"Prohibited\"'],\n renderSize: \"32x32\",\n colors: [{ token: \"TRFCD\", hex: \"#d200d2\", usage: \"Anchor symbol\" }],\n lineStyles: [{ element: \"Ring\", width: 1.5, color: \"#d200d2\" }, { element: \"Shank\", width: 1.8, color: \"#d200d2\" }, { element: \"Arms\", width: 1.8, color: \"#d200d2\" }, { element: \"Cross-bar\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [],\n usageContext: \"Anchorage areas are designated zones where vessels may anchor. They may have specific regulations regarding vessel size, duration, and type. Some anchorages are restricted to specific categories of vessel. Mariners should check local notices for current regulations.\" },\n\n // ── Section T: Services ──\n { id: \"pilot-station\", label: \"Pilot Station\", int1Ref: \"T1.1\", section: \"T\", getSvg: pilotStation,\n group: \"services\", description: \"Pilot boarding place or station. Circle with 'P' indicates where pilots embark.\",\n s52PlRef: \"PILBOP01\",\n renderSize: \"32x32\",\n colors: [{ token: \"TRFCD\", hex: \"#d200d2\", usage: \"Circle and letter P\" }],\n lineStyles: [{ element: \"Circle outline\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [],\n usageContext: \"Pilot stations mark the location where maritime pilots board incoming vessels to guide them through harbour approaches and restricted waters. Pilotage is compulsory in many ports. The pilot boarding ground is the area where the pilot vessel meets incoming traffic.\" },\n\n { id: \"signal-station\", label: \"Signal Station\", int1Ref: \"T20\", section: \"T\", getSvg: signalStation,\n group: \"services\", description: \"Visual signal station for maritime communications (flags, lights).\",\n s52PlRef: \"SISTAT01\",\n renderSize: \"32x32\",\n colors: [\n { token: \"TRFCD\", hex: \"#d200d2\", usage: \"Upper flag\" },\n { token: \"Cardinal Yellow\", hex: \"#ffd700\", usage: \"Lower flag\" },\n { token: \"CHBLK\", hex: \"#000000\", usage: \"Mast and flag outlines\" },\n ],\n lineStyles: [{ element: \"Mast\", width: 1.5, color: \"#000000\" }, { element: \"Flag outlines\", width: 0.8, color: \"#000000\" }],\n fillElements: [{ element: \"Upper flag\", color: \"#d200d2\" }, { element: \"Lower flag\", color: \"#ffd700\" }],\n usageContext: \"Signal stations communicate with vessels using visual signals — flags, lights, or semaphore. They relay information about weather, port conditions, tidal state, or vessel traffic. Many traditional signal stations have been replaced by VHF radio, but some remain operational.\" },\n\n { id: \"coastguard-station\", label: \"Coast Guard Station\", int1Ref: \"T10\", section: \"T\", getSvg: coastguardStation,\n group: \"services\", description: \"Coast Guard station providing rescue and enforcement services.\",\n s52PlRef: \"CGUSTA01\",\n renderSize: \"32x32\",\n colors: [{ token: \"TRFCD\", hex: \"#d200d2\", usage: \"Circle and letters CG\" }],\n lineStyles: [{ element: \"Circle outline\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [],\n usageContext: \"Coast Guard stations provide search and rescue services, maritime law enforcement, and safety patrols. In the US, the USCG operates stations at strategic coastal locations. Vessels in distress should contact the nearest Coast Guard station on VHF Channel 16.\" },\n\n // ── Section M: Tracks & Routes ──\n { id: \"recommended-track\", label: \"Recommended Track\", int1Ref: \"M5\", section: \"M\", getSvg: recommendedTrack,\n group: \"routes\", description: \"Track recommended for navigation but not mandatory. Arrow indicates preferred direction.\",\n s52PlRef: \"RECTRC01\",\n renderSize: \"32x32\",\n colors: [{ token: \"TRFCD\", hex: \"#d200d2\", usage: \"Track line and arrowhead\" }],\n lineStyles: [{ element: \"Track line\", width: 1.5, color: \"#d200d2\" }],\n fillElements: [{ element: \"Arrowhead\", color: \"#d200d2\" }],\n usageContext: \"Recommended tracks are suggested routes for navigation through an area. They are not mandatory but indicate the safest or most efficient route. The arrow shows the preferred direction of travel. Mariners should follow recommended tracks where possible, especially in unfamiliar waters.\" },\n\n { id: \"ferry-route\", label: \"Ferry Route\", int1Ref: \"M50\", section: \"M\", getSvg: ferryRoute,\n group: \"routes\", description: \"Regular ferry route. Dashed line with arrow indicates route and direction.\",\n s52PlRef: \"FERYRT01\",\n renderSize: \"32x32\",\n colors: [{ token: \"TRFCD\", hex: \"#d200d2\", usage: \"Route line and arrowhead\" }],\n lineStyles: [{ element: \"Route line\", width: 1.2, pattern: \"4, 3\", color: \"#d200d2\" }],\n fillElements: [{ element: \"Arrowhead\", color: \"#d200d2\" }],\n usageContext: \"Ferry routes mark the regular paths of ferry services. They cross navigable channels and shipping lanes, creating potential conflict points with other traffic. Mariners should exercise caution when crossing ferry routes and be aware of ferry schedules in busy ports.\" },\n];\n\n// ═══════════════════════════════════════════════════════════\n// OBJECT CLASS → DEFAULT SYMBOL MAPPING\n// ═══════════════════════════════════════════════════════════\n\n/** S-57 object class → default symbol ID mapping.\n * Values are S-52 PL symbol names (matching SVG filenames in s52/point/).\n * Conditional expressions in getIconExpression() override these for classes\n * with attribute-dependent variants.\n */\nexport const SYMBOL_MAP: Record<string, string> = {\n // Lateral buoys — overridden by getIconExpression via CATLAM\n BOYLAT: \"BOYCAN01\",\n BOYSPP: \"BOYSPP11\",\n BOYCAR: \"BOYCAR01\",\n BOYISD: \"BOYISD12\",\n BOYSAW: \"BOYSAW12\",\n BOYINB: \"BOYINB01\",\n // Beacons — overridden by getIconExpression via CATLAM/CATCAM\n BCNLAT: \"BCNLAT15\",\n BCNSPP: \"BCNSPP13\",\n BCNCAR: \"BCNCAR01\",\n BCNISD: \"BCNISD21\",\n BCNSAW: \"BCNSAW13\",\n // Lights & signals\n LIGHTS: \"LIGHTS11\",\n LITVES: \"LIGHTS82\",\n LITFLT: \"LIGHTS82\",\n FOGSIG: \"FOGSIG01\",\n RTPBCN: \"RTPBCN02\",\n RDOSTA: \"RTPBCN02\",\n // Nav aids\n DAYMAR: \"DAYTRI01\",\n PILPNT: \"PILPNT02\",\n TOPMAR: \"TOPMAR02\",\n // Hazards\n WRECKS: \"WRECKS04\",\n OBSTRN: \"OBSTRN01\",\n UWTROC: \"UWTROC03\",\n // Landmarks\n LNDMRK: \"BCNTOW01\",\n // Infrastructure\n MORFAC: \"MORFAC04\",\n OFSPLF: \"OFSPLF01\",\n CRANES: \"CRANES01\",\n BRIDGE: \"BRIDGE01\",\n // Services\n PILBOP: \"PILBOP02\",\n SISTAT: \"SISTAT02\",\n SMCFAC: \"ACHARE02\",\n // Land infrastructure\n SILTNK: \"BCNTOW01\",\n BUISGL: \"BCNTOW01\",\n HRBFAC: \"ACHARE02\",\n // Areas\n ACHARE: \"ACHARE02\",\n // Airport\n AIRARE: \"AIRARE02\",\n};\n\n// ═══════════════════════════════════════════════════════════\n// DATA-DRIVEN ICON EXPRESSIONS (Mapbox GL)\n// ═══════════════════════════════════════════════════════════\n\n/** Get the Mapbox icon-image expression for data-driven symbol selection.\n * Returns S-52 PL symbol names that correspond to SVG files in s52/point/.\n */\nexport function getIconExpression(layerName: string): string | unknown[] {\n // BOYLAT: Can (port) vs Nun (starboard) per IALA-B\n if (layerName === \"BOYLAT\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATLAM\"], [\"get\", \"catlam\"], 0],\n 1, \"BOYCAN01\", // IALA-B: 1 = port-hand = red can\n 2, \"BOYCON01\", // IALA-B: 2 = starboard = green nun/conical\n \"BOYSPP11\", // Default: special purpose\n ];\n }\n\n // BOYCAR: Cardinal direction by CATCAM\n if (layerName === \"BOYCAR\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATCAM\"], [\"get\", \"catcam\"], 0],\n 1, \"BOYCAR01\", // North cardinal\n 2, \"BOYCAR02\", // East cardinal\n 3, \"BOYCAR03\", // South cardinal\n 4, \"BOYCAR04\", // West cardinal\n \"BOYCAR01\",\n ];\n }\n\n // BCNLAT: Lateral beacon port vs starboard\n if (layerName === \"BCNLAT\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATLAM\"], [\"get\", \"catlam\"], 0],\n 1, \"BCNLAT15\", // Port\n 2, \"BCNLAT16\", // Starboard\n \"BCNLAT15\",\n ];\n }\n\n // BCNCAR: Cardinal beacon direction\n if (layerName === \"BCNCAR\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATCAM\"], [\"get\", \"catcam\"], 0],\n 1, \"BCNCAR01\", // North cardinal\n 2, \"BCNCAR02\", // East cardinal\n 3, \"BCNCAR03\", // South cardinal\n 4, \"BCNCAR04\", // West cardinal\n \"BCNCAR01\",\n ];\n }\n\n // WRECKS: Visible vs submerged by WATLEV\n if (layerName === \"WRECKS\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"WATLEV\"], [\"get\", \"watlev\"], 0],\n 1, \"WRECKS01\", // Visible (always dry)\n 2, \"WRECKS01\", // Visible (partly submerged)\n \"WRECKS04\", // Default: submerged/dangerous\n ];\n }\n\n // LNDMRK: Landmark type by CATLMK — maps to S-52 PL or generic tower\n if (layerName === \"LNDMRK\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATLMK\"], [\"get\", \"catlmk\"], 0],\n // Most LNDMRK types → generic tower beacon (best available S-52 vector)\n 1, \"CAIRNS11\", // Cairn\n 17, \"BCNTOW01\", // Spire → tower\n 20, \"BCNTOW01\", // Tower\n \"BCNTOW01\", // Default: tower\n ];\n }\n\n // DAYMAR: Daymark shape by TOPSHP\n if (layerName === \"DAYMAR\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"TOPSHP\"], [\"get\", \"topshp\"], 0],\n 1, \"DAYTRI01\", // Triangle point up\n 2, \"DAYTRI05\", // Triangle point down\n 3, \"DAYSQR01\", // Square\n 5, \"DAYTRI21\", // Triangle point up (variant)\n \"DAYTRI01\",\n ];\n }\n\n // TOPMAR: Topmark shape by TOPSHP — S-52 PL TOPMAR variants\n if (layerName === \"TOPMAR\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"TOPSHP\"], [\"get\", \"topshp\"], 0],\n 1, \"TOPMAR02\", // Cone, point up\n 2, \"TOPMAR04\", // Cone, point down\n 3, \"TOPMAR10\", // Sphere\n 4, \"TOPMAR12\", // 2 cones, points up\n 5, \"TOPMAR14\", // 2 cones, points down\n 6, \"TOPMAR16\", // 2 cones, base to base (diamond)\n 7, \"TOPMAR18\", // 2 cones, point to point\n 8, \"TOPMAR24\", // 2 spheres\n 9, \"TOPMAR22\", // Diamond\n 10, \"TOPMAR28\", // X-shape\n 11, \"TOPMAR30\", // Upright cross\n 12, \"TOPMAR32\", // Cube, point up\n 13, \"TOPMAR34\", // 2 cones, horizontal\n \"TOPMAR02\",\n ];\n }\n\n // UWTROC: Rock type by WATLEV\n if (layerName === \"UWTROC\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"WATLEV\"], [\"get\", \"watlev\"], 0],\n 4, \"UWTROC03\", // Awash\n 5, \"UWTROC04\", // Covers and uncovers\n \"UWTROC04\", // Default: underwater\n ];\n }\n\n // OBSTRN: Obstruction type by WATLEV\n if (layerName === \"OBSTRN\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"WATLEV\"], [\"get\", \"watlev\"], 0],\n 1, \"OBSTRN01\", // Always dry\n 2, \"OBSTRN01\", // Partly submerged\n 3, \"OBSTRN03\", // Always underwater/submerged\n \"OBSTRN03\",\n ];\n }\n\n // MORFAC: Mooring facility type by CATMOR\n if (layerName === \"MORFAC\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATMOR\"], [\"get\", \"catmor\"], 0],\n 1, \"MORFAC04\", // Dolphin\n 2, \"MORFAC04\", // Deviation dolphin\n 3, \"BOYMOR11\", // Mooring buoy\n 7, \"MORFAC03\", // Mooring post\n \"MORFAC04\",\n ];\n }\n\n // BRIDGE: Bridge type — S-52 uses single BRIDGE01 symbol\n if (layerName === \"BRIDGE\") {\n return \"BRIDGE01\";\n }\n\n // LIGHTS: Light type by COLOUR\n if (layerName === \"LIGHTS\") {\n return [\n \"match\",\n [\"coalesce\", [\"get\", \"CATLIT\"], [\"get\", \"catlit\"], 0],\n 8, \"LIGHTS82\", // Aero light\n 9, \"LIGHTS82\", // Air obstruction light\n \"LIGHTS11\", // Default: major light\n ];\n }\n\n return SYMBOL_MAP[layerName] ?? \"\";\n}\n\n/**\n * Browser-only image loaders (`loadSymbolImages`, `loadThemedBridgeImages`)\n * live in `./symbols-browser.ts` (sub-export `@chrtco/sdk/atlas/browser`) —\n * they require a DOM (use `new Image()` + `map.addImage()`).\n */\n\n/** Get inline SVG string for a symbol by ID (for the Atlas legend) */\nexport function getSymbolSvgString(symbolId: string): string | null {\n const sym = NAUTICAL_SYMBOLS.find((s) => s.id === symbolId);\n return sym ? sym.getSvg() : null;\n}\n\n// ═══════════════════════════════════════════════════════════\n// CHART SECTIONS\n// ═══════════════════════════════════════════════════════════\n\nexport const CHART_SECTIONS: ChartSection[] = [\n { id: \"Q\", label: \"Buoys, Beacons & Topmarks\", description: \"All floating and fixed aids to navigation including lateral, cardinal, special purpose marks, and their topmarks.\" },\n { id: \"P\", label: \"Lights\", description: \"Navigational lights including major, minor, sector, directional, and aeronautical lights.\" },\n { id: \"R\", label: \"Fog Signals\", description: \"Audible fog signal devices for navigation in restricted visibility.\" },\n { id: \"S\", label: \"Radar & Radio\", description: \"Radar beacons (RACON), radar transponders, and radio stations.\" },\n { id: \"K\", label: \"Dangers\", description: \"Wrecks, rocks, obstructions, and other underwater hazards.\" },\n { id: \"E\", label: \"Landmarks\", description: \"Conspicuous objects ashore useful for visual navigation and position fixing.\" },\n { id: \"D\", label: \"Bridges\", description: \"Bridges spanning navigable waterways with clearance information.\" },\n { id: \"L\", label: \"Offshore Installations\", description: \"Platforms, wind farms, and other offshore structures.\" },\n { id: \"N\", label: \"Regulated Areas\", description: \"Anchorages, restricted areas, and special-purpose zones.\" },\n { id: \"T\", label: \"Services\", description: \"Pilot stations, signal stations, and coast guard facilities.\" },\n { id: \"M\", label: \"Tracks & Routes\", description: \"Recommended tracks, ferry routes, and traffic separation schemes.\" },\n];\n\n// ═══════════════════════════════════════════════════════════\n// SYMBOL GROUPS\n// ═══════════════════════════════════════════════════════════\n\nexport const SYMBOL_GROUPS: SymbolGroup[] = [\n { id: \"lateral-buoys\", label: \"Lateral Buoys\", section: \"Q\", description: \"Channel marking buoys — Can (port/red) and Nun (starboard/green) per IALA Region B.\", symbolIds: [\"buoy-can\", \"buoy-nun\"] },\n { id: \"buoy-shapes\", label: \"Buoy Hull Shapes\", section: \"Q\", description: \"The physical shape of a buoy hull: spar, pillar, spherical, barrel, or super buoy.\", symbolIds: [\"buoy-spar\", \"buoy-pillar\", \"buoy-spherical\", \"buoy-barrel\", \"buoy-super\"] },\n { id: \"cardinal-buoys\", label: \"Cardinal Buoys\", section: \"Q\", description: \"Indicate the safe side to pass relative to a danger. Four variants: N, S, E, W with distinctive topmarks and color bands.\", symbolIds: [\"buoy-cardinal-north\", \"buoy-cardinal-south\", \"buoy-cardinal-east\", \"buoy-cardinal-west\"] },\n { id: \"special-buoys\", label: \"Special Purpose Buoys\", section: \"Q\", description: \"Isolated danger, safe water, special purpose, and emergency wreck marking buoys.\", symbolIds: [\"buoy-isolated-danger\", \"buoy-safe-water\", \"buoy-special\", \"buoy-emergency-wreck\"] },\n { id: \"mooring\", label: \"Mooring\", section: \"Q\", description: \"Permanent mooring buoys and single-point moorings for vessel berthing.\", symbolIds: [\"mooring-buoy\", \"spm\"] },\n { id: \"beacons\", label: \"Beacons\", section: \"Q\", description: \"Fixed structures (not floating) with topmarks indicating lateral, cardinal, or special purpose information.\", symbolIds: [\"beacon-lateral-port\", \"beacon-lateral-stbd\", \"beacon-cardinal\", \"beacon-isolated-danger\", \"beacon-safe-water\", \"beacon-special\", \"pile-post\"] },\n { id: \"daymarks\", label: \"Daymarks\", section: \"Q\", description: \"Painted boards on beacons providing daytime identification. Triangle (port) and square (starboard).\", symbolIds: [\"daymark-triangle\", \"daymark-square\"] },\n { id: \"topmarks\", label: \"Topmarks\", section: \"Q\", description: \"Shapes mounted atop buoys/beacons to identify their purpose (TOPMAR). 10 standard shapes defined by TOPSHP attribute.\", symbolIds: [\"topmark-cone-up\", \"topmark-cone-down\", \"topmark-sphere\", \"topmark-2-cones-up\", \"topmark-2-cones-down\", \"topmark-2-cones-base\", \"topmark-2-cones-point\", \"topmark-2-spheres\", \"topmark-diamond\", \"topmark-x-shape\"] },\n { id: \"lights\", label: \"Lights\", section: \"P\", description: \"Navigational lights ranging from major coastal lights to minor buoy lights, sector and directional lights.\", symbolIds: [\"light-major\", \"light-minor\", \"light-sector\", \"light-directional\", \"light-aero\"] },\n { id: \"light-vessels\", label: \"Light Vessels & Floats\", section: \"P\", description: \"Manned or unmanned vessels and floats serving as floating lighthouses.\", symbolIds: [\"light-vessel\", \"light-float\"] },\n { id: \"fog-radar\", label: \"Fog Signals & Radar\", section: \"R\", description: \"Audible signals for fog conditions and radar transponders (RACON) for electronic identification.\", symbolIds: [\"fog-signal\", \"radar-transponder\"] },\n { id: \"wrecks\", label: \"Wrecks\", section: \"K\", description: \"Sunken or stranded vessels — visible, submerged, or dangerous to navigation.\", symbolIds: [\"wreck-visible\", \"wreck-submerged\", \"wreck-dangerous\"] },\n { id: \"rocks\", label: \"Rocks\", section: \"K\", description: \"Natural rock hazards — awash, underwater, or covering/uncovering with tide.\", symbolIds: [\"rock-awash\", \"rock-underwater\", \"rock-covers-uncovers\"] },\n { id: \"obstructions\", label: \"Obstructions\", section: \"K\", description: \"Underwater obstructions that are not wrecks or rocks (e.g., stumps, wellheads, fish havens).\", symbolIds: [\"obstruction\"] },\n { id: \"landmarks\", label: \"Landmarks\", section: \"E\", description: \"Conspicuous objects ashore identified by their type (CATLMK attribute). 15 distinct shapes.\", symbolIds: [\"landmark-spire\", \"landmark-tower\", \"landmark-chimney\", \"landmark-flagstaff\", \"landmark-monument\", \"landmark-windmill\", \"landmark-wind-turbine\", \"landmark-dome\", \"landmark-radar-scanner\", \"landmark-dish-aerial\", \"landmark-water-tower\", \"landmark-radio-tv-mast\", \"landmark-cross\", \"landmark-mast\", \"landmark-silo\"] },\n { id: \"bridges\", label: \"Bridges\", section: \"D\", description: \"Bridges spanning navigable waterways. Fixed, opening, bascule, swing, and lifting types.\", symbolIds: [\"bridge-fixed\", \"bridge-opening\", \"bridge-bascule\", \"bridge-swing\", \"bridge-lifting\"] },\n { id: \"infrastructure\", label: \"Infrastructure\", section: \"L\", description: \"Fixed offshore structures and port facilities.\", symbolIds: [\"offshore-platform\", \"crane\"] },\n { id: \"anchorage\", label: \"Anchorage\", section: \"N\", description: \"Designated anchorage areas and berths.\", symbolIds: [\"anchor\"] },\n { id: \"services\", label: \"Services\", section: \"T\", description: \"Maritime service facilities including pilot stations, signal stations, and coast guard.\", symbolIds: [\"pilot-station\", \"signal-station\", \"coastguard-station\"] },\n { id: \"routes\", label: \"Tracks & Routes\", section: \"M\", description: \"Recommended navigation tracks and regular ferry routes.\", symbolIds: [\"recommended-track\", \"ferry-route\"] },\n];\n\n// ═══════════════════════════════════════════════════════════\n// SPRITE SHEET GENERATION\n// ═══════════════════════════════════════════════════════════\n\n/** Generate a single SVG sprite sheet containing all symbols as <symbol> elements */\nexport function generateSpriteSheet(): string {\n const symbols = NAUTICAL_SYMBOLS.map((sym) => {\n const raw = sym.getSvg();\n // Extract inner content from <svg>...</svg>\n const inner = raw.replace(/<svg[^>]*>/, \"\").replace(/<\\/svg>/, \"\");\n return ` <symbol id=\"${sym.id}\" viewBox=\"0 0 32 32\">${inner}</symbol>`;\n });\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\">\n <!-- CHRT Nautical Symbol Sprite Sheet -->\n <!-- ${NAUTICAL_SYMBOLS.length} symbols | IHO S-52 Ed 4.0 | Generated ${new Date().toISOString()} -->\n${symbols.join(\"\\n\")}\n</svg>`;\n}\n\n/** Generate a JSON manifest mapping symbol IDs to metadata */\nexport function generateSpriteManifest(): Record<string, {\n label: string;\n int1Ref: string;\n section: string;\n group?: string;\n s52PlRef?: string;\n description?: string;\n attributeKey?: string;\n attributeValue?: number;\n}> {\n const manifest: Record<string, any> = {};\n for (const sym of NAUTICAL_SYMBOLS) {\n manifest[sym.id] = {\n label: sym.label,\n int1Ref: sym.int1Ref,\n section: sym.section,\n ...(sym.group && { group: sym.group }),\n ...(sym.s52PlRef && { s52PlRef: sym.s52PlRef }),\n ...(sym.description && { description: sym.description }),\n ...(sym.attributeKey && { attributeKey: sym.attributeKey }),\n ...(sym.attributeValue !== undefined && { attributeValue: sym.attributeValue }),\n };\n }\n return manifest;\n}\n","import { resolveColor } from \"./s52-colors\";\nimport type { ColorTableName } from \"./s52-colors\";\nimport { S52_LOOKUP } from \"./s52-lookup\";\nimport {\n depareFillExpression,\n lightFillExpression,\n lateralFillExpression,\n hazardFillExpression,\n} from \"./s52-conditional\";\nimport { getIconExpression, SYMBOL_MAP } from \"./symbols\";\nimport type { ResolvedStyle, GeomType, DisplayCategory } from \"./types\";\n\n/** S-52 display modes */\nexport type DisplayMode = \"BASE\" | \"STANDARD\" | \"ALL\";\n\n/** Check if a layer's display category is visible in the given mode */\nexport function isVisibleInMode(displayCategory: DisplayCategory, mode: DisplayMode): boolean {\n if (displayCategory === \"META\") return false;\n if (mode === \"ALL\") return true;\n if (mode === \"STANDARD\") return displayCategory === \"BASE\" || displayCategory === \"STANDARD\";\n return displayCategory === \"BASE\";\n}\n\n/**\n * Convert S-52 SCAMIN (scale minimum) to Mapbox GL minzoom.\n */\nexport function scaminToMinZoom(scamin?: number): number | undefined {\n if (scamin === undefined || scamin === null || scamin === 0) return undefined;\n if (scamin >= 1_500_000) return 6;\n if (scamin >= 350_000) return 8;\n if (scamin >= 90_000) return 10;\n if (scamin >= 45_000) return 11;\n if (scamin >= 22_000) return 12;\n if (scamin >= 12_000) return 14;\n return undefined;\n}\n\nconst SAFETY_CRITICAL_GROUPS = new Set([24020, 27010, 27070, 27080]);\n\n/** Base cartographic fill layers that must be fully opaque to prevent patchwork from cell overlaps */\nconst OPAQUE_FILL_LAYERS = new Set([\"DEPARE\", \"LNDARE\", \"UNSARE\", \"LAKARE\", \"DRGARE\"]);\n\n/** Nav-aid layers that should always render regardless of SCAMIN */\nconst SCAMIN_OVERRIDE_LAYERS = new Set([\n \"BOYLAT\", \"BOYCAR\", \"BOYSPP\", \"BOYISD\", \"BOYSAW\",\n \"BCNLAT\", \"BCNCAR\", \"BCNSPP\",\n \"LIGHTS\",\n \"FOGSIG\", \"RTPBCN\",\n]);\n\nexport function getCollisionSettings(viewingGroup?: number): {\n iconAllowOverlap: boolean;\n iconOptional: boolean;\n symbolSortKey?: number;\n} {\n if (!viewingGroup) return { iconAllowOverlap: false, iconOptional: true };\n const isSafety = SAFETY_CRITICAL_GROUPS.has(viewingGroup);\n return {\n iconAllowOverlap: isSafety,\n iconOptional: !isSafety,\n symbolSortKey: 99999 - viewingGroup,\n };\n}\n\nconst ZOOM_SCALED_LINES: Record<string, [number, number, number, number]> = {\n DEPCNT: [8, 0.3, 14, 0.8],\n COALNE: [8, 0.5, 14, 1.5],\n SLCONS: [8, 0.6, 14, 1.5],\n TSSBND: [8, 0.5, 14, 1.0],\n BRIDGE: [8, 1.0, 14, 2.0],\n DAMCON: [8, 1.0, 14, 2.0],\n};\n\n/**\n * Resolve S-52 colour tokens in a paint object to hex values.\n */\nfunction resolvePaint(\n layerName: string,\n paint: Record<string, unknown>,\n geomType: GeomType,\n ct: ColorTableName = \"DAY\"\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(paint)) {\n if (typeof value === \"string\" && /^[A-Z]{4,5}[0-9]?$/.test(value)) {\n resolved[key] = resolveColor(value, ct);\n } else {\n resolved[key] = value;\n }\n }\n\n // Inject data-driven expressions for conditional layers\n if (layerName === \"DEPARE\" && geomType === \"fill\") {\n resolved[\"fill-color\"] = depareFillExpression(ct);\n } else if (layerName === \"LIGHTS\" && geomType === \"circle\") {\n resolved[\"circle-color\"] = lightFillExpression(ct);\n } else if ((layerName === \"BOYLAT\" || layerName === \"BCNLAT\") && geomType === \"circle\") {\n resolved[\"circle-color\"] = lateralFillExpression(ct);\n } else if (\n (layerName === \"OBSTRN\" || layerName === \"UWTROC\" || layerName === \"WRECKS\") &&\n geomType === \"circle\"\n ) {\n resolved[\"circle-color\"] = hazardFillExpression(ct);\n }\n\n return resolved;\n}\n\n/**\n * Get the resolved Mapbox GL style for a given S-57 layer.\n */\nexport function resolveStyle(\n layerName: string,\n geomKind?: GeomType,\n ct: ColorTableName = \"DAY\"\n): ResolvedStyle {\n const entry = S52_LOOKUP[layerName];\n\n if (!entry) {\n const type = geomKind ?? \"circle\";\n return {\n type,\n paint: type === \"fill\"\n ? { \"fill-color\": \"#888888\", \"fill-opacity\": 0.2 }\n : type === \"line\"\n ? { \"line-color\": \"#888888\", \"line-width\": 1 }\n : { \"circle-color\": \"#888888\", \"circle-radius\": 3, \"circle-stroke-width\": 0 },\n };\n }\n\n const effectiveType = geomKind ?? entry.style.type;\n\n if (effectiveType === \"symbol\" && entry.style.iconImage) {\n const iconExpr = getIconExpression(layerName);\n return {\n type: \"symbol\",\n paint: {},\n layout: {\n \"icon-image\": iconExpr,\n \"icon-size\": [\"interpolate\", [\"linear\"], [\"zoom\"], 8, 0.4, 14, 0.8],\n \"icon-allow-overlap\": true,\n \"icon-ignore-placement\": false,\n ...(entry.style.layout ?? {}),\n },\n };\n }\n\n if (effectiveType === \"circle\" && entry.style.type === \"symbol\") {\n return {\n type: \"circle\",\n paint: { \"circle-color\": \"#888888\", \"circle-radius\": 4, \"circle-stroke-width\": 1, \"circle-stroke-color\": resolveColor(\"CHBLK\", ct) },\n };\n }\n\n if (effectiveType !== entry.style.type) {\n const mainColorToken = findMainColorToken(entry.style.paint);\n const hexColor = resolveColor(mainColorToken, ct);\n const paint =\n effectiveType === \"fill\"\n ? { \"fill-color\": hexColor, \"fill-opacity\": 0.3 }\n : effectiveType === \"line\"\n ? { \"line-color\": hexColor, \"line-width\": 1 }\n : { \"circle-color\": hexColor, \"circle-radius\": 3, \"circle-stroke-width\": 0 };\n return { type: effectiveType, paint };\n }\n\n const paint = resolvePaint(layerName, { ...entry.style.paint }, effectiveType, ct);\n\n // Force opaque fills for base cartographic layers to prevent patchwork from overlapping cells\n if (effectiveType === \"fill\" && OPAQUE_FILL_LAYERS.has(layerName)) {\n paint[\"fill-opacity\"] = 1.0;\n }\n\n if (effectiveType === \"line\" && ZOOM_SCALED_LINES[layerName]) {\n const [z1, w1, z2, w2] = ZOOM_SCALED_LINES[layerName];\n paint[\"line-width\"] = [\"interpolate\", [\"linear\"], [\"zoom\"], z1, w1, z2, w2];\n }\n\n const minzoom = SCAMIN_OVERRIDE_LAYERS.has(layerName) ? undefined : scaminToMinZoom(entry.scamin);\n const layout = entry.style.layout ? { ...entry.style.layout } : undefined;\n if (effectiveType === \"symbol\" && layout) {\n const collision = getCollisionSettings(entry.viewingGroup);\n layout[\"icon-allow-overlap\"] = collision.iconAllowOverlap;\n if (collision.iconOptional) layout[\"icon-optional\"] = true;\n if (collision.symbolSortKey !== undefined) layout[\"symbol-sort-key\"] = collision.symbolSortKey;\n }\n\n return { type: effectiveType, paint, layout, minzoom };\n}\n\nfunction findMainColorToken(paint: Record<string, unknown>): string {\n for (const key of [\"fill-color\", \"line-color\", \"circle-color\", \"circle-stroke-color\"]) {\n const v = paint[key];\n if (typeof v === \"string\" && /^[A-Z]/.test(v)) return v;\n }\n return \"CHGRF\";\n}\n\nexport function getLookupEntry(layerName: string) {\n return S52_LOOKUP[layerName] ?? null;\n}\n","/**\n * Label configurations for S-57 layers.\n * Defines which layers get text labels and how to extract label text.\n */\n\nimport type maplibregl from \"maplibre-gl\";\nimport type { ExpressionSpecification } from \"@maplibre/maplibre-gl-style-spec\";\nimport type { GeomType } from \"./types\";\n\n/** LITCHR code → abbreviation */\nconst LITCHR_ABBR: Record<number, string> = {\n 1: \"F\",\n 2: \"Fl\",\n 3: \"LFl\",\n 4: \"Oc\",\n 5: \"Iso\",\n 6: \"S.Fl\",\n 7: \"S.LFl\",\n 8: \"Al.Oc\",\n 9: \"Al.LFl\",\n 10: \"Al.Fl\",\n 11: \"Al.Gp\",\n 12: \"Mo\",\n 13: \"Q\",\n 14: \"VQ\",\n 15: \"UQ\",\n 16: \"Al\",\n 17: \"Al.F.Fl\",\n 25: \"Q+LFl\",\n 26: \"VQ+LFl\",\n 27: \"UQ+LFl\",\n 28: \"Al\",\n 29: \"F.LFl\",\n};\n\n/** COLOUR code → letter */\nconst COLOUR_ABBR: Record<number, string> = {\n 1: \"W\",\n 3: \"R\",\n 4: \"G\",\n 5: \"Bu\",\n 6: \"Y\",\n 11: \"Or\",\n};\n\nconst DARK_BG = \"#1a1d23\";\n\nexport interface LabelLayerConfig {\n /** Mapbox source layer type */\n type: \"symbol\";\n /** Text field expression or string */\n textField: ExpressionSpecification | string;\n /** Text size in pixels */\n textSize: number | ExpressionSpecification;\n /** Text color */\n textColor: string;\n /** Halo color for contrast */\n textHaloColor: string;\n /** Halo width */\n textHaloWidth: number;\n /** Text offset [x, y] in ems */\n textOffset: [number, number];\n /** Font stack */\n textFont?: string[];\n /** Additional layout properties */\n layout?: Record<string, unknown>;\n /** Minimum zoom level for this label */\n minzoom?: number;\n}\n\n/** Get label config for a given S-57 layer, or null if no labels */\nexport function getLabelConfig(layerName: string): LabelLayerConfig | null {\n switch (layerName) {\n case \"SOUNDG\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"depth\"],\n textSize: [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 8, 7,\n 11, 9,\n 14, 11\n ] as unknown as ExpressionSpecification,\n textColor: \"#c8c8c8\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 0],\n textFont: [\"Open Sans Regular\", \"Arial Unicode MS Regular\"],\n minzoom: 8,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 5,\n \"text-optional\": true,\n // Shallowest-wins: Mapbox GL renders lower sort keys first and\n // gives them collision priority. Using depth directly ensures\n // the shallowest sounding in a cluster is always the one shown,\n // even when labels are hidden due to overlap.\n \"symbol-sort-key\": [\"to-number\", [\"get\", \"depth\"], 999],\n },\n };\n\n case \"LNDRGN\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 11,\n textColor: \"#e0d8c8\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n textFont: [\"Open Sans Italic\", \"Arial Unicode MS Regular\"],\n minzoom: 9,\n };\n\n case \"LNDMRK\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 9,\n textColor: \"#d4c9b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.2],\n minzoom: 10,\n };\n\n case \"BOYLAT\":\n return {\n type: \"symbol\",\n textField: [\"coalesce\", [\"get\", \"_navAidLabel\"], [\"get\", \"OBJNAM\"]] as unknown as ExpressionSpecification,\n textSize: 8,\n textColor: \"#ffffff\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.5],\n minzoom: 12,\n };\n\n case \"BCNLAT\":\n return {\n type: \"symbol\",\n textField: [\"coalesce\", [\"get\", \"_navAidLabel\"], [\"get\", \"OBJNAM\"]] as unknown as ExpressionSpecification,\n textSize: 8,\n textColor: \"#ffffff\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.5],\n minzoom: 12,\n };\n\n case \"BOYCAR\":\n case \"BCNCAR\":\n return {\n type: \"symbol\",\n textField: [\"coalesce\", [\"get\", \"_navAidLabel\"], [\"get\", \"OBJNAM\"]] as unknown as ExpressionSpecification,\n textSize: 8,\n textColor: \"#fdf0b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.5],\n minzoom: 12,\n };\n\n case \"BOYSPP\":\n case \"BCNSPP\":\n return {\n type: \"symbol\",\n textField: [\"coalesce\", [\"get\", \"_navAidLabel\"], [\"get\", \"OBJNAM\"]] as unknown as ExpressionSpecification,\n textSize: 8,\n textColor: \"#eab308\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.5],\n minzoom: 12,\n };\n\n case \"BOYISD\":\n case \"BOYSAW\":\n return {\n type: \"symbol\",\n textField: [\"coalesce\", [\"get\", \"_navAidLabel\"], [\"get\", \"OBJNAM\"]] as unknown as ExpressionSpecification,\n textSize: 8,\n textColor: \"#ffffff\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.5],\n minzoom: 12,\n };\n\n case \"LIGHTS\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"_lightLabel\"],\n textSize: 8,\n textColor: \"#fdf0b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [1.5, 0],\n minzoom: 11,\n };\n\n case \"SEAARE\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 13,\n textColor: \"#8fb8d0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.8,\n textOffset: [0, 0],\n textFont: [\"Open Sans Italic\", \"Arial Unicode MS Regular\"],\n minzoom: 6,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 8,\n \"text-optional\": true,\n \"text-letter-spacing\": 0.15,\n },\n };\n\n case \"LAKARE\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 11,\n textColor: \"#8fb8d0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n textFont: [\"Open Sans Italic\", \"Arial Unicode MS Regular\"],\n minzoom: 9,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 6,\n \"text-optional\": true,\n },\n };\n\n case \"RIVERS\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 10,\n textColor: \"#8fb8d0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n textFont: [\"Open Sans Italic\", \"Arial Unicode MS Regular\"],\n minzoom: 10,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 4,\n \"text-optional\": true,\n },\n };\n\n case \"CANALS\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 9,\n textColor: \"#8fb8d0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n textFont: [\"Open Sans Italic\", \"Arial Unicode MS Regular\"],\n minzoom: 11,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 4,\n \"text-optional\": true,\n },\n };\n\n case \"LNDARE\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 10,\n textColor: \"#e0d8c8\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n textFont: [\"Open Sans Regular\", \"Arial Unicode MS Regular\"],\n minzoom: 10,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 6,\n \"text-optional\": true,\n },\n };\n\n case \"BRIDGE\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 9,\n textColor: \"#bfa88a\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 1.0],\n minzoom: 12,\n layout: {\n \"text-allow-overlap\": false,\n \"text-optional\": true,\n },\n };\n\n case \"PILPNT\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 8,\n textColor: \"#c8c0b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 1.2],\n minzoom: 13,\n };\n\n case \"MORFAC\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 8,\n textColor: \"#c8c0b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 1.2],\n minzoom: 13,\n };\n\n case \"SLCONS\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 8,\n textColor: \"#bfa88a\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 1.0],\n minzoom: 13,\n layout: {\n \"text-allow-overlap\": false,\n \"text-optional\": true,\n },\n };\n\n case \"BUISGL\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 8,\n textColor: \"#c8c0b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 1.2],\n minzoom: 14,\n layout: {\n \"text-allow-overlap\": false,\n \"text-optional\": true,\n },\n };\n\n case \"AIRARE\":\n return {\n type: \"symbol\",\n textField: [\"get\", \"OBJNAM\"],\n textSize: 10,\n textColor: \"#d4c9b0\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.5,\n textOffset: [0, 0],\n minzoom: 10,\n layout: {\n \"text-anchor\": \"center\",\n \"text-allow-overlap\": false,\n \"text-padding\": 6,\n \"text-optional\": true,\n },\n };\n\n case \"DEPCNT\":\n return {\n type: \"symbol\",\n textField: [\"concat\", [\"get\", \"VALDCO\"], \"m\"] as unknown as ExpressionSpecification,\n textSize: [\n \"interpolate\", [\"linear\"], [\"zoom\"],\n 10, 8,\n 14, 10\n ] as unknown as ExpressionSpecification,\n textColor: \"#c8c8c8\",\n textHaloColor: DARK_BG,\n textHaloWidth: 1.2,\n textOffset: [0, 0],\n textFont: [\"Open Sans Regular\", \"Arial Unicode MS Regular\"],\n minzoom: 10,\n layout: {\n \"symbol-placement\": \"line\",\n \"text-anchor\": \"center\",\n \"symbol-spacing\": 250,\n \"text-rotation-alignment\": \"map\",\n \"text-allow-overlap\": false,\n \"text-optional\": true,\n },\n };\n\n default:\n return null;\n }\n}\n\n/**\n * Build a Mapbox symbol layer spec from a label config.\n */\nexport function buildLabelLayer(\n layerId: string,\n sourceId: string,\n config: LabelLayerConfig,\n visible: boolean,\n overrides?: { textScale?: number; minzoom?: number | null; allowOverlap?: boolean }\n): maplibregl.LayerSpecification {\n // Apply text scale to textSize\n let textSize = config.textSize;\n if (overrides?.textScale && overrides.textScale !== 1) {\n if (typeof textSize === \"number\") {\n textSize = textSize * overrides.textScale;\n } else {\n // For interpolation expressions, wrap in a multiply\n textSize = [\"*\", overrides.textScale, textSize] as unknown as ExpressionSpecification;\n }\n }\n\n const spec: any = {\n id: layerId,\n type: \"symbol\",\n source: sourceId,\n layout: {\n visibility: visible ? \"visible\" : \"none\",\n \"text-field\": config.textField as any,\n \"text-size\": textSize,\n \"text-font\": config.textFont ?? [\"Open Sans Regular\", \"Arial Unicode MS Regular\"],\n \"text-offset\": config.textOffset,\n \"text-anchor\": \"top\",\n \"text-allow-overlap\": overrides?.allowOverlap ?? false,\n \"text-optional\": !(overrides?.allowOverlap),\n \"text-padding\": overrides?.allowOverlap ? 0 : 4,\n ...(config.layout ?? {}),\n },\n paint: {\n \"text-color\": config.textColor,\n \"text-halo-color\": config.textHaloColor,\n \"text-halo-width\": config.textHaloWidth,\n },\n };\n\n // Minzoom: override > config default\n if (overrides?.minzoom !== undefined && overrides.minzoom !== null) {\n spec.minzoom = overrides.minzoom;\n } else if (overrides?.minzoom === null) {\n // null = use config default\n if (config.minzoom !== undefined) spec.minzoom = config.minzoom;\n } else if (config.minzoom !== undefined) {\n spec.minzoom = config.minzoom;\n }\n\n return spec;\n}\n\n/**\n * Pre-process SOUNDG GeoJSON to extract Z coordinates as `depth` properties.\n * Soundings are MultiPoint with Z values in geometry.coordinates[][2].\n * This explodes MultiPoints into individual Points with a `depth` property.\n */\nexport function preprocessSoundings(\n fc: GeoJSON.FeatureCollection\n): GeoJSON.FeatureCollection {\n const features: GeoJSON.Feature[] = [];\n\n for (const f of fc.features) {\n if (!f.geometry) continue;\n\n if (f.geometry.type === \"Point\") {\n const coords = f.geometry.coordinates;\n const depth = coords.length >= 3 ? coords[2] : null;\n if (depth != null) {\n features.push({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: [coords[0], coords[1]] },\n properties: {\n ...f.properties,\n depth: Math.round(depth * 10) / 10 + \"\",\n },\n });\n }\n } else if (f.geometry.type === \"MultiPoint\") {\n for (const coords of f.geometry.coordinates) {\n const depth = coords.length >= 3 ? coords[2] : null;\n if (depth != null) {\n features.push({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: [coords[0], coords[1]] },\n properties: {\n ...f.properties,\n depth: Math.round(depth * 10) / 10 + \"\",\n },\n });\n }\n }\n }\n }\n\n return { type: \"FeatureCollection\", features };\n}\n\n/**\n * Pre-process LIGHTS GeoJSON to derive compact light characteristic labels.\n * Adds `_lightLabel` property (e.g., \"Fl R 4s\").\n */\nexport function preprocessLights(\n fc: GeoJSON.FeatureCollection\n): GeoJSON.FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: fc.features.map((f) => {\n const props = f.properties ?? {};\n const parts: string[] = [];\n\n // Light character\n const litchr = Number(props.LITCHR);\n if (litchr && LITCHR_ABBR[litchr]) parts.push(LITCHR_ABBR[litchr]);\n\n // Color\n const colour = Number(props.COLOUR);\n if (colour && COLOUR_ABBR[colour]) parts.push(COLOUR_ABBR[colour]);\n\n // Period\n const sigper = Number(props.SIGPER);\n if (sigper && sigper > 0) parts.push(sigper + \"s\");\n\n const label = parts.length > 0 ? parts.join(\" \") : \"\";\n\n return {\n ...f,\n properties: { ...props, _lightLabel: label },\n };\n }),\n };\n}\n\n/** List of layers that have labels */\nexport const LABELED_LAYERS = new Set([\n \"SOUNDG\",\n \"LNDRGN\",\n \"LNDMRK\",\n \"LNDARE\",\n \"BOYLAT\",\n \"BCNLAT\",\n \"BOYCAR\",\n \"BOYSPP\",\n \"BOYISD\",\n \"BOYSAW\",\n \"BCNCAR\",\n \"BCNSPP\",\n \"LIGHTS\",\n \"SEAARE\",\n \"LAKARE\",\n \"RIVERS\",\n \"CANALS\",\n \"BRIDGE\",\n \"PILPNT\",\n \"MORFAC\",\n \"SLCONS\",\n \"BUISGL\",\n \"AIRARE\",\n \"DEPCNT\",\n]);\n\n/** Nav aid layer names that need preprocessNavAids */\nconst NAV_AID_LABEL_LAYERS = new Set([\n \"BOYLAT\", \"BCNLAT\", \"BOYCAR\", \"BOYSPP\", \"BOYISD\", \"BOYSAW\", \"BCNCAR\", \"BCNSPP\",\n]);\n\n/** Colour code → short prefix for mariner labels */\nconst NAV_COLOUR_PREFIX: Record<number, string> = {\n 3: \"R\",\n 4: \"G\",\n 6: \"Y\",\n};\n\n/**\n * Pre-process buoy/beacon GeoJSON to derive concise mariner-style labels.\n * Adds `_navAidLabel` property (e.g., 'R \"8\"', 'G \"5\"').\n */\nexport function preprocessNavAids(\n fc: GeoJSON.FeatureCollection\n): GeoJSON.FeatureCollection {\n return {\n type: \"FeatureCollection\",\n features: fc.features.map((f) => {\n const props = f.properties ?? {};\n const objnam = props.OBJNAM as string | undefined;\n if (!objnam) return f;\n\n // Extract trailing number/designation (e.g., \"8\", \"18A\", \"2\")\n const match = objnam.match(/(\\d+[A-Z]?)\\s*$/);\n if (!match) return f;\n\n const designation = match[1];\n const colourCode = Number(props.COLOUR);\n const prefix = NAV_COLOUR_PREFIX[colourCode];\n\n const label = prefix\n ? `${prefix} \"${designation}\"`\n : `\"${designation}\"`;\n\n return {\n ...f,\n properties: { ...props, _navAidLabel: label },\n };\n }),\n };\n}\n\n/** Check if a layer name needs nav aid preprocessing */\nexport function isNavAidLayer(layerName: string): boolean {\n return NAV_AID_LABEL_LAYERS.has(layerName);\n}\n\n/**\n * Pre-process water body polygon GeoJSON into centroid points for label placement.\n * Computes a simple average-coordinate centroid for each polygon feature that has OBJNAM.\n */\nexport function preprocessWaterBodies(\n fc: GeoJSON.FeatureCollection\n): GeoJSON.FeatureCollection {\n const features: GeoJSON.Feature[] = [];\n\n for (const f of fc.features) {\n if (!f.geometry || !f.properties?.OBJNAM) continue;\n\n const centroid = computePolygonCentroid(f.geometry);\n if (!centroid) continue;\n\n features.push({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: centroid },\n properties: { ...f.properties },\n });\n }\n\n return { type: \"FeatureCollection\", features };\n}\n\n/**\n * Compute the centroid of a geometry as a simple average of all coordinates.\n */\nfunction computePolygonCentroid(geom: GeoJSON.Geometry): [number, number] | null {\n const coords: number[][] = [];\n\n function collect(c: any) {\n if (typeof c[0] === \"number\") {\n coords.push(c);\n } else {\n for (const sub of c) collect(sub);\n }\n }\n\n if (geom.type === \"Polygon\" || geom.type === \"MultiPolygon\" ||\n geom.type === \"LineString\" || geom.type === \"MultiLineString\" ||\n geom.type === \"Point\" || geom.type === \"MultiPoint\") {\n collect((geom as any).coordinates);\n }\n\n if (coords.length === 0) return null;\n\n let sumX = 0, sumY = 0;\n for (const c of coords) {\n sumX += c[0];\n sumY += c[1];\n }\n return [sumX / coords.length, sumY / coords.length];\n}\n","/**\n * Spatial grid-based feature decimation for performance at low zoom levels.\n * Thins dense GeoJSON feature sets by keeping only one representative\n * feature per grid cell per layer.\n */\n\nexport interface DecimationOptions {\n /** Grid resolution (cells per axis). Default 80. */\n gridSize?: number;\n /** Zoom level below which decimation kicks in. Default 12. */\n zoomThreshold?: number;\n}\n\nconst DEFAULT_GRID = 80;\n\n/**\n * Zoom-adaptive grid resolution for decimation.\n */\nexport function getGridSizeForZoom(zoom: number): number {\n if (zoom < 7) return 50;\n if (zoom < 8) return 70;\n if (zoom < 10) return 100;\n if (zoom < 12) return 140;\n return 0; // decimation disabled at threshold\n}\n\n/**\n * Extract a single representative coordinate from a feature.\n */\nfunction featureCoord(f: GeoJSON.Feature): [number, number] | null {\n if (!f.geometry) return null;\n const g = f.geometry as any;\n switch (g.type) {\n case \"Point\":\n return [g.coordinates[0], g.coordinates[1]];\n case \"MultiPoint\":\n return g.coordinates.length > 0\n ? [g.coordinates[0][0], g.coordinates[0][1]]\n : null;\n case \"LineString\":\n return g.coordinates.length > 0\n ? [g.coordinates[0][0], g.coordinates[0][1]]\n : null;\n case \"MultiLineString\":\n return g.coordinates.length > 0 && g.coordinates[0].length > 0\n ? [g.coordinates[0][0][0], g.coordinates[0][0][1]]\n : null;\n case \"Polygon\":\n return g.coordinates.length > 0 && g.coordinates[0].length > 0\n ? [g.coordinates[0][0][0], g.coordinates[0][0][1]]\n : null;\n case \"MultiPolygon\":\n return g.coordinates.length > 0 &&\n g.coordinates[0].length > 0 &&\n g.coordinates[0][0].length > 0\n ? [g.coordinates[0][0][0][0], g.coordinates[0][0][0][1]]\n : null;\n default:\n return null;\n }\n}\n\n/**\n * Priority score for a feature — lower = more important = kept first.\n * For soundings: shallowest depth wins (navigational safety).\n * For other features: first-encountered wins.\n */\nfunction featurePriority(f: GeoJSON.Feature, layerName: string): number {\n if (layerName === \"SOUNDG\") {\n const d = parseFloat(f.properties?.depth ?? \"999\");\n return d; // shallowest (lowest depth) wins\n }\n // For nav aids, hazards etc., lower viewing group = more important\n const vg = f.properties?.SCAMIN ?? f.properties?.viewing_group ?? 99999;\n return typeof vg === \"number\" ? vg : 99999;\n}\n\n/**\n * Decimate a GeoJSON FeatureCollection using spatial grid thinning.\n * Only runs when zoom < zoomThreshold. Returns the original FC otherwise.\n *\n * @param fc - Input FeatureCollection\n * @param layerName - S-57 layer name (affects priority logic)\n * @param currentZoom - Current map zoom level\n * @param bounds - Current viewport bounds\n * @param opts - Decimation options\n */\nexport function decimateFeatures(\n fc: GeoJSON.FeatureCollection,\n layerName: string,\n currentZoom: number,\n bounds: { west: number; south: number; east: number; north: number },\n opts?: DecimationOptions\n): GeoJSON.FeatureCollection {\n const threshold = opts?.zoomThreshold ?? 12;\n\n // No decimation at high zoom or for small sets\n if (currentZoom >= threshold || fc.features.length < 500) {\n return fc;\n }\n\n // Skip decimation for polygons — they're typically large and few\n const firstGeom = fc.features[0]?.geometry?.type;\n if (\n firstGeom === \"Polygon\" ||\n firstGeom === \"MultiPolygon\"\n ) {\n return fc;\n }\n\n const gridSize = opts?.gridSize ?? getGridSizeForZoom(currentZoom);\n const { west, south, east, north } = bounds;\n const lngSpan = east - west || 0.001;\n const latSpan = north - south || 0.001;\n\n // Grid cell size\n const cellW = lngSpan / gridSize;\n const cellH = latSpan / gridSize;\n\n // Map from grid key → best feature\n const grid = new Map<number, { feature: GeoJSON.Feature; priority: number }>();\n\n for (const f of fc.features) {\n const coord = featureCoord(f);\n if (!coord) continue;\n\n const col = Math.floor((coord[0] - west) / cellW);\n const row = Math.floor((coord[1] - south) / cellH);\n const key = row * gridSize + col;\n\n const pri = featurePriority(f, layerName);\n const existing = grid.get(key);\n\n if (!existing || pri < existing.priority) {\n grid.set(key, { feature: f, priority: pri });\n }\n }\n\n return {\n type: \"FeatureCollection\",\n features: Array.from(grid.values()).map((v) => v.feature),\n };\n}\n\n/**\n * Get the max number of cells to load based on zoom level.\n */\nexport function getMaxCellsForZoom(zoom: number): number {\n if (zoom < 7) return 40;\n if (zoom < 8) return 50;\n if (zoom < 10) return 80;\n if (zoom <= 12) return 100;\n return 120;\n}\n","/**\n * IHO S-101 ENC Product Specification — Feature Catalogue\n *\n * S-101 replaces S-57 as the data model for Electronic Navigational Charts.\n * This catalogue maps S-101 feature classes to:\n * - S-57 equivalents (where they exist)\n * - Chart No. 1 sections (same organizational structure)\n * - Portrayal catalogue references (S-100 Portrayal Model)\n *\n * Key S-101 changes from S-57:\n * - CamelCase feature class names (DepthArea vs DEPARE)\n * - Complex/structured attributes (nested objects vs flat)\n * - New feature types for AIS, quality, under-keel clearance\n * - Removed/merged features for simplification\n *\n * Reference: IHO S-101 Product Specification (Ed 1.1.0)\n * IHO S-100 Universal Hydrographic Data Model\n */\n\nexport interface S101Feature {\n /** S-101 camelCase feature class name */\n featureClass: string;\n /** Human-readable name */\n name: string;\n /** S-57 6-char equivalent acronym, if any */\n s57Equivalent?: string;\n /** Chart No. 1 section letter */\n section: string;\n /** Group key for clustering */\n group: string;\n /** Feature category */\n category: \"geo\" | \"meta\" | \"info\";\n /** Description of the feature */\n description: string;\n /** S-100 Portrayal Catalogue reference */\n portrayalRef?: string;\n /** True if this feature has no S-57 equivalent */\n isNewInS101: boolean;\n /** Key attributes specific to this feature */\n attributes?: string[];\n}\n\n// ═══════════════════════════════════════════════════════════\n// S-101 FEATURE CATALOGUE\n// ═══════════════════════════════════════════════════════════\n\nexport const S101_FEATURES: S101Feature[] = [\n // ── Section Q: Buoys, Beacons & Topmarks ──\n\n { featureClass: \"BuoyLateral\", name: \"Buoy, Lateral\", s57Equivalent: \"BOYLAT\", section: \"Q\", group: \"lateral-buoys\",\n category: \"geo\", description: \"A buoy used to indicate the port or starboard hand side of a route, following IALA Maritime Buoyage System.\",\n portrayalRef: \"BOYLAT_S101\", isNewInS101: false, attributes: [\"categoryOfLateralMark\", \"colour\", \"colourPattern\", \"buoyShape\"] },\n\n { featureClass: \"BuoyCardinal\", name: \"Buoy, Cardinal\", s57Equivalent: \"BOYCAR\", section: \"Q\", group: \"cardinal-buoys\",\n category: \"geo\", description: \"A buoy used in conjunction with the compass to indicate the direction of safe water (N, E, S, W).\",\n portrayalRef: \"BOYCAR_S101\", isNewInS101: false, attributes: [\"categoryOfCardinalMark\", \"colour\", \"buoyShape\"] },\n\n { featureClass: \"BuoyIsolatedDanger\", name: \"Buoy, Isolated Danger\", s57Equivalent: \"BOYISD\", section: \"Q\", group: \"special-buoys\",\n category: \"geo\", description: \"A buoy moored on or above an isolated danger with navigable water all around.\",\n portrayalRef: \"BOYISD_S101\", isNewInS101: false, attributes: [\"colour\", \"buoyShape\"] },\n\n { featureClass: \"BuoySafeWater\", name: \"Buoy, Safe Water\", s57Equivalent: \"BOYSAW\", section: \"Q\", group: \"special-buoys\",\n category: \"geo\", description: \"A buoy indicating navigable water all around (mid-channel or fairway). Red and white vertical stripes.\",\n portrayalRef: \"BOYSAW_S101\", isNewInS101: false, attributes: [\"colour\", \"colourPattern\", \"buoyShape\"] },\n\n { featureClass: \"BuoySpecialPurpose\", name: \"Buoy, Special Purpose\", s57Equivalent: \"BOYSPP\", section: \"Q\", group: \"special-buoys\",\n category: \"geo\", description: \"A buoy used to indicate a special area or feature (cables, pipelines, military exercise zones, etc.).\",\n portrayalRef: \"BOYSPP_S101\", isNewInS101: false, attributes: [\"categoryOfSpecialPurposeMark\", \"colour\", \"buoyShape\"] },\n\n { featureClass: \"BuoyInstallation\", name: \"Buoy, Installation\", s57Equivalent: \"BOYINB\", section: \"Q\", group: \"special-buoys\",\n category: \"geo\", description: \"A buoy marking an installation such as an ODAS or LANBY.\",\n portrayalRef: \"BOYINB_S101\", isNewInS101: false, attributes: [\"categoryOfInstallationBuoy\", \"buoyShape\"] },\n\n { featureClass: \"BuoyEmergencyWreck\", name: \"Buoy, Emergency Wreck Marking\", s57Equivalent: \"BOYEMW\", section: \"Q\", group: \"special-buoys\",\n category: \"geo\", description: \"A buoy placed to mark a newly discovered wreck. Blue and yellow vertical stripes with yellow cross topmark.\",\n portrayalRef: \"BOYEMW_S101\", isNewInS101: false, attributes: [\"colour\", \"colourPattern\"] },\n\n { featureClass: \"BeaconLateral\", name: \"Beacon, Lateral\", s57Equivalent: \"BCNLAT\", section: \"Q\", group: \"beacons\",\n category: \"geo\", description: \"A fixed beacon used to indicate the port or starboard side of a route.\",\n portrayalRef: \"BCNLAT_S101\", isNewInS101: false, attributes: [\"categoryOfLateralMark\", \"colour\", \"beaconShape\"] },\n\n { featureClass: \"BeaconCardinal\", name: \"Beacon, Cardinal\", s57Equivalent: \"BCNCAR\", section: \"Q\", group: \"beacons\",\n category: \"geo\", description: \"A fixed beacon used to indicate the direction of safe water by reference to the compass.\",\n portrayalRef: \"BCNCAR_S101\", isNewInS101: false, attributes: [\"categoryOfCardinalMark\", \"colour\"] },\n\n { featureClass: \"BeaconIsolatedDanger\", name: \"Beacon, Isolated Danger\", s57Equivalent: \"BCNISD\", section: \"Q\", group: \"beacons\",\n category: \"geo\", description: \"A fixed beacon erected on or near an isolated danger with navigable water around.\",\n portrayalRef: \"BCNISD_S101\", isNewInS101: false, attributes: [\"colour\"] },\n\n { featureClass: \"BeaconSafeWater\", name: \"Beacon, Safe Water\", s57Equivalent: \"BCNSAW\", section: \"Q\", group: \"beacons\",\n category: \"geo\", description: \"A fixed beacon indicating safe water all around (mid-channel or fairway).\",\n portrayalRef: \"BCNSAW_S101\", isNewInS101: false, attributes: [\"colour\"] },\n\n { featureClass: \"BeaconSpecialPurpose\", name: \"Beacon, Special Purpose\", s57Equivalent: \"BCNSPP\", section: \"Q\", group: \"beacons\",\n category: \"geo\", description: \"A fixed beacon marking a special area or feature.\",\n portrayalRef: \"BCNSPP_S101\", isNewInS101: false, attributes: [\"categoryOfSpecialPurposeMark\", \"colour\"] },\n\n { featureClass: \"Topmark\", name: \"Topmark\", s57Equivalent: \"TOPMAR\", section: \"Q\", group: \"topmarks\",\n category: \"geo\", description: \"A characteristic shape fitted to the top of a buoy or beacon as an identification mark.\",\n portrayalRef: \"TOPMAR_S101\", isNewInS101: false, attributes: [\"topmarkDaymarkShape\", \"colour\"] },\n\n { featureClass: \"Daymark\", name: \"Daymark\", s57Equivalent: \"DAYMAR\", section: \"Q\", group: \"daymarks\",\n category: \"geo\", description: \"A painted board on a beacon providing daytime identification.\",\n portrayalRef: \"DAYMAR_S101\", isNewInS101: false, attributes: [\"topmarkDaymarkShape\", \"colour\", \"colourPattern\"] },\n\n { featureClass: \"MooringWarpingFacility\", name: \"Mooring/Warping Facility\", s57Equivalent: \"MORFAC\", section: \"Q\", group: \"mooring\",\n category: \"geo\", description: \"Equipment or structure used for mooring or warping vessels.\",\n portrayalRef: \"MORFAC_S101\", isNewInS101: false, attributes: [\"categoryOfMooringFacility\"] },\n\n // ── New S-101 features in Section Q ──\n\n { featureClass: \"VirtualAISAidToNavigation\", name: \"Virtual AIS Aid to Navigation\", section: \"Q\", group: \"virtual-aids\",\n category: \"geo\", description: \"An AIS target that does not physically exist but is broadcast to indicate a point of interest, hazard, or channel edge. Shown as a dashed circle with 'V' on the chart.\",\n portrayalRef: \"VAISATN_S101\", isNewInS101: true, attributes: [\"categoryOfVirtualAISAidToNavigation\", \"virtualAISAidToNavigationType\", \"mmsiCode\"] },\n\n { featureClass: \"PhysicalAISAidToNavigation\", name: \"Physical AIS Aid to Navigation\", section: \"Q\", group: \"virtual-aids\",\n category: \"geo\", description: \"A physical aid to navigation equipped with an AIS transponder that broadcasts its position and identification.\",\n portrayalRef: \"PAISATN_S101\", isNewInS101: true, attributes: [\"mmsiCode\", \"categoryOfPhysicalAISAidToNavigation\"] },\n\n { featureClass: \"SyntheticAISAidToNavigation\", name: \"Synthetic AIS Aid to Navigation\", section: \"Q\", group: \"virtual-aids\",\n category: \"geo\", description: \"An AIS target transmitted by a shore station to represent a physical aid to navigation that is not itself equipped with AIS.\",\n portrayalRef: \"SAISATN_S101\", isNewInS101: true, attributes: [\"mmsiCode\"] },\n\n { featureClass: \"LocalDirectionOfBuoyage\", name: \"Local Direction of Buoyage\", section: \"Q\", group: \"buoyage-direction\",\n category: \"geo\", description: \"Indicates the local conventional direction of buoyage where it differs from the general direction. Shown as an arrow on the chart.\",\n portrayalRef: \"LDBG_S101\", isNewInS101: true, attributes: [\"orientation\"] },\n\n { featureClass: \"NavigationalSystemOfMarks\", name: \"Navigational System of Marks\", section: \"Q\", group: \"buoyage-direction\",\n category: \"geo\", description: \"The IALA buoyage region (A or B) in effect for a particular area, controlling the colour conventions for lateral marks.\",\n portrayalRef: \"NSMARKS_S101\", isNewInS101: true, attributes: [\"iALABuoyageRegion\"] },\n\n // ── Section P: Lights ──\n\n { featureClass: \"Light\", name: \"Light\", s57Equivalent: \"LIGHTS\", section: \"P\", group: \"lights\",\n category: \"geo\", description: \"A luminous or lighted aid to navigation. S-101 unifies the light feature with structured complex attributes for sectors.\",\n portrayalRef: \"LIGHTS_S101\", isNewInS101: false, attributes: [\"categoryOfLight\", \"lightCharacteristic\", \"signalSequence\", \"colour\", \"sectorLimit\"] },\n\n { featureClass: \"LightAllAround\", name: \"Light All Around\", s57Equivalent: \"LIGHTS\", section: \"P\", group: \"lights\",\n category: \"geo\", description: \"A light visible from all directions (360° coverage). Replaces LIGHTS when no sector geometry is used.\",\n portrayalRef: \"LITALL_S101\", isNewInS101: true, attributes: [\"lightCharacteristic\", \"signalSequence\", \"colour\", \"height\", \"valueOfNominalRange\"] },\n\n { featureClass: \"LightSectored\", name: \"Light Sectored\", s57Equivalent: \"LIGHTS\", section: \"P\", group: \"lights\",\n category: \"geo\", description: \"A light showing different characteristics (colour or visibility) over defined sectors. Uses complex attribute sectorLimit.\",\n portrayalRef: \"LITSEC_S101\", isNewInS101: true, attributes: [\"sectorLimit\", \"lightCharacteristic\", \"colour\"] },\n\n { featureClass: \"LightVessel\", name: \"Light Vessel\", s57Equivalent: \"LITVES\", section: \"P\", group: \"light-vessels\",\n category: \"geo\", description: \"A distinctively marked vessel anchored or moored at a charted point and used as an aid to navigation.\",\n portrayalRef: \"LITVES_S101\", isNewInS101: false, attributes: [\"colour\"] },\n\n { featureClass: \"LightFloat\", name: \"Light Float\", s57Equivalent: \"LITFLT\", section: \"P\", group: \"light-vessels\",\n category: \"geo\", description: \"A small unmanned vessel carrying a light, anchored at a charted point.\",\n portrayalRef: \"LITFLT_S101\", isNewInS101: false, attributes: [\"colour\"] },\n\n // ── Section R: Fog Signals ──\n\n { featureClass: \"FogSignal\", name: \"Fog Signal\", s57Equivalent: \"FOGSIG\", section: \"R\", group: \"fog-radar\",\n category: \"geo\", description: \"An audible aid to navigation used in fog or restricted visibility conditions.\",\n portrayalRef: \"FOGSIG_S101\", isNewInS101: false, attributes: [\"categoryOfFogSignal\", \"signalSequence\"] },\n\n // ── Section S: Radar & Radio ──\n\n { featureClass: \"RadarStation\", name: \"Radar Station\", s57Equivalent: \"RADSTA\", section: \"S\", group: \"fog-radar\",\n category: \"geo\", description: \"A station equipped with radar for surveillance or navigation assistance.\",\n portrayalRef: \"RADSTA_S101\", isNewInS101: false, attributes: [\"categoryOfRadarStation\"] },\n\n { featureClass: \"RadarTransponderBeacon\", name: \"Radar Transponder Beacon\", s57Equivalent: \"RTPBCN\", section: \"S\", group: \"fog-radar\",\n category: \"geo\", description: \"A transponder beacon that returns a distinctive signal when triggered by a radar pulse (RACON).\",\n portrayalRef: \"RTPBCN_S101\", isNewInS101: false, attributes: [\"radarConspicuous\", \"signalSequence\"] },\n\n { featureClass: \"RadarLine\", name: \"Radar Line\", section: \"S\", group: \"radar-features\",\n category: \"geo\", description: \"A line along which a radar-conspicuous feature provides a bearing reference. New in S-101 to better encode radar-detectable linear features.\",\n portrayalRef: \"RADLIN_S101\", isNewInS101: true, attributes: [\"orientation\", \"scaleMinimum\"] },\n\n { featureClass: \"RadarRange\", name: \"Radar Range\", section: \"S\", group: \"radar-features\",\n category: \"geo\", description: \"A distance reference determined by radar from a conspicuous feature. Used for radar-based position fixing.\",\n portrayalRef: \"RADRNG_S101\", isNewInS101: true, attributes: [\"orientation\", \"valueOfRange\"] },\n\n { featureClass: \"RadioStation\", name: \"Radio Station\", s57Equivalent: \"RDOSTA\", section: \"S\", group: \"fog-radar\",\n category: \"geo\", description: \"A station transmitting radio signals for navigational or communication purposes.\",\n portrayalRef: \"RDOSTA_S101\", isNewInS101: false, attributes: [\"categoryOfRadioStation\"] },\n\n // ── Section K: Dangers ──\n\n { featureClass: \"Wreck\", name: \"Wreck\", s57Equivalent: \"WRECKS\", section: \"K\", group: \"wrecks\",\n category: \"geo\", description: \"The remains of a stranded or sunken vessel. S-101 adds structured attributes for wreck condition assessment.\",\n portrayalRef: \"WRECKS_S101\", isNewInS101: false, attributes: [\"categoryOfWreck\", \"valueOfSounding\", \"waterLevelEffect\"] },\n\n { featureClass: \"UnderwaterAwashRock\", name: \"Underwater/Awash Rock\", s57Equivalent: \"UWTROC\", section: \"K\", group: \"rocks\",\n category: \"geo\", description: \"A rock hazard that is either permanently submerged or covers and uncovers with the tide.\",\n portrayalRef: \"UWTROC_S101\", isNewInS101: false, attributes: [\"valueOfSounding\", \"waterLevelEffect\"] },\n\n { featureClass: \"Obstruction\", name: \"Obstruction\", s57Equivalent: \"OBSTRN\", section: \"K\", group: \"obstructions\",\n category: \"geo\", description: \"An object (not a wreck or rock) that may constitute a danger to navigation.\",\n portrayalRef: \"OBSTRN_S101\", isNewInS101: false, attributes: [\"categoryOfObstruction\", \"valueOfSounding\", \"waterLevelEffect\"] },\n\n { featureClass: \"WaterTurbulence\", name: \"Water Turbulence\", section: \"K\", group: \"water-turbulence\",\n category: \"geo\", description: \"An area of disturbed water surface caused by currents, shoals, or wind against tide. Includes overfalls, tide rips, and eddies.\",\n portrayalRef: \"WATTUR_S101\", isNewInS101: true, attributes: [\"categoryOfWaterTurbulence\"] },\n\n { featureClass: \"NewDangerMarking\", name: \"New Danger Marking\", section: \"K\", group: \"obstructions\",\n category: \"geo\", description: \"Indicates a newly discovered danger that has not yet been sufficiently surveyed or charted. Displayed prominently to warn mariners.\",\n portrayalRef: \"NEWDNG_S101\", isNewInS101: true, attributes: [\"dateOfDiscovery\"] },\n\n // ── Section E: Landmarks ──\n\n { featureClass: \"Landmark\", name: \"Landmark\", s57Equivalent: \"LNDMRK\", section: \"E\", group: \"landmarks\",\n category: \"geo\", description: \"A conspicuous object, natural or artificial, on or near the coast that can be used for position fixing.\",\n portrayalRef: \"LNDMRK_S101\", isNewInS101: false, attributes: [\"categoryOfLandmark\", \"function\", \"visuallyConspicuous\"] },\n\n // ── Section D: Bridges ──\n\n { featureClass: \"Bridge\", name: \"Bridge\", s57Equivalent: \"BRIDGE\", section: \"D\", group: \"bridges\",\n category: \"geo\", description: \"A structure spanning a body of water or other obstacle. S-101 adds complex attributes for clearance values.\",\n portrayalRef: \"BRIDGE_S101\", isNewInS101: false, attributes: [\"categoryOfBridge\", \"verticalClearanceFixed\", \"verticalClearanceOpened\", \"horizontalClearanceValue\"] },\n\n // ── Section L: Offshore Installations ──\n\n { featureClass: \"OffshorePlatform\", name: \"Offshore Platform\", s57Equivalent: \"OFSPLF\", section: \"L\", group: \"infrastructure\",\n category: \"geo\", description: \"A permanent offshore structure such as an oil/gas platform or wind turbine foundation.\",\n portrayalRef: \"OFSPLF_S101\", isNewInS101: false, attributes: [\"categoryOfOffshorePlatform\", \"product\"] },\n\n // ── Section N: Regulated Areas ──\n\n { featureClass: \"AnchorageArea\", name: \"Anchorage Area\", s57Equivalent: \"ACHARE\", section: \"N\", group: \"anchorage\",\n category: \"geo\", description: \"An area designated for vessels to anchor. S-101 adds structured temporal attributes for seasonal restrictions.\",\n portrayalRef: \"ACHARE_S101\", isNewInS101: false, attributes: [\"categoryOfAnchorage\", \"restriction\"] },\n\n { featureClass: \"RestrictedArea\", name: \"Restricted Area\", s57Equivalent: \"RESARE\", section: \"N\", group: \"restricted-areas\",\n category: \"geo\", description: \"An area in which navigation and/or anchoring may be restricted.\",\n portrayalRef: \"RESARE_S101\", isNewInS101: false, attributes: [\"categoryOfRestrictedArea\", \"restriction\"] },\n\n { featureClass: \"UnderkeelClearanceManagementArea\", name: \"Under-keel Clearance Management Area\", section: \"N\", group: \"ukc-areas\",\n category: \"geo\", description: \"An area where under-keel clearance is actively managed and vessels must maintain minimum clearance above the seabed. New in S-101.\",\n portrayalRef: \"UKCMGT_S101\", isNewInS101: true, attributes: [\"minimumUnderKeelClearance\", \"waterLevelTrend\"] },\n\n { featureClass: \"ArchipelagicSeaLane\", name: \"Archipelagic Sea Lane\", section: \"N\", group: \"restricted-areas\",\n category: \"geo\", description: \"A sea lane designated for the continuous and expeditious passage of ships through archipelagic waters (UNCLOS Part IV).\",\n portrayalRef: \"ARCSLN_S101\", isNewInS101: true, attributes: [\"categoryOfArchipelagicSeaLane\"] },\n\n // ── Section M: Tracks & Routes ──\n\n { featureClass: \"RecommendedTrack\", name: \"Recommended Track\", s57Equivalent: \"RECTRC\", section: \"M\", group: \"routes\",\n category: \"geo\", description: \"A route recommended for navigation but not requiring mandatory compliance.\",\n portrayalRef: \"RECTRC_S101\", isNewInS101: false, attributes: [\"orientationValue\", \"trafficFlow\"] },\n\n { featureClass: \"TrafficSeparationScheme\", name: \"Traffic Separation Scheme\", s57Equivalent: \"TSSLPT\", section: \"M\", group: \"routes\",\n category: \"geo\", description: \"A routing measure aimed at separating opposing streams of traffic by establishing lanes.\",\n portrayalRef: \"TSS_S101\", isNewInS101: false, attributes: [\"categoryOfTrafficSeparationScheme\"] },\n\n { featureClass: \"FerryRoute\", name: \"Ferry Route\", s57Equivalent: \"FERYRT\", section: \"M\", group: \"routes\",\n category: \"geo\", description: \"A route over which a ferry regularly operates.\",\n portrayalRef: \"FERYRT_S101\", isNewInS101: false, attributes: [\"categoryOfFerryRoute\"] },\n\n // ── Section T: Services ──\n\n { featureClass: \"PilotService\", name: \"Pilot Service\", s57Equivalent: \"PILPNT\", section: \"T\", group: \"services\",\n category: \"geo\", description: \"A place where pilots embark or disembark, or where pilotage services are provided.\",\n portrayalRef: \"PILPNT_S101\", isNewInS101: false, attributes: [\"categoryOfPilot\"] },\n\n { featureClass: \"SignalStation\", name: \"Signal Station\", s57Equivalent: \"SISTAT\", section: \"T\", group: \"services\",\n category: \"geo\", description: \"A station from which visual, audio, or electronic signals are made to regulate or assist navigation.\",\n portrayalRef: \"SISTAT_S101\", isNewInS101: false, attributes: [\"categoryOfSignalStation\"] },\n\n { featureClass: \"CoastGuardStation\", name: \"Coast Guard Station\", s57Equivalent: \"CGUSTA\", section: \"T\", group: \"services\",\n category: \"geo\", description: \"A station from which the coast guard operates to ensure maritime safety.\",\n portrayalRef: \"CGUSTA_S101\", isNewInS101: false, attributes: [] },\n\n // ── Depths & Hydrography (Section D context but main chart area) ──\n\n { featureClass: \"DepthArea\", name: \"Depth Area\", s57Equivalent: \"DEPARE\", section: \"D\", group: \"depths\",\n category: \"geo\", description: \"An area of the sea floor within a defined depth range. Fundamental to safe navigation planning.\",\n portrayalRef: \"DEPARE_S101\", isNewInS101: false, attributes: [\"depthRangeMinimumValue\", \"depthRangeMaximumValue\"] },\n\n { featureClass: \"DepthContour\", name: \"Depth Contour\", s57Equivalent: \"DEPCNT\", section: \"D\", group: \"depths\",\n category: \"geo\", description: \"A line connecting points of equal depth below the sounding datum.\",\n portrayalRef: \"DEPCNT_S101\", isNewInS101: false, attributes: [\"valueOfContour\"] },\n\n { featureClass: \"Sounding\", name: \"Sounding\", s57Equivalent: \"SOUNDG\", section: \"D\", group: \"depths\",\n category: \"geo\", description: \"A measured depth of water at a specific location, reduced to sounding datum.\",\n portrayalRef: \"SOUNDG_S101\", isNewInS101: false, attributes: [\"valueOfSounding\", \"qualityOfSounding\"] },\n\n { featureClass: \"QualityOfBathymetricData\", name: \"Quality of Bathymetric Data\", section: \"D\", group: \"quality-indicators\",\n category: \"meta\", description: \"Indicates the quality and reliability of bathymetric data in an area. Encodes survey date, technique, and positional accuracy. Replaces M_QUAL from S-57.\",\n portrayalRef: \"QOBDAT_S101\", isNewInS101: true, attributes: [\"categoryOfTemporalVariation\", \"dataAssessment\", \"featuresDetected\", \"fullSeafloorCoverageAchieved\", \"horizontalPositionUncertainty\"] },\n\n { featureClass: \"SpatialQuality\", name: \"Spatial Quality\", section: \"D\", group: \"quality-indicators\",\n category: \"meta\", description: \"Provides information about the spatial accuracy and quality of features in a defined area. New meta-feature in S-101.\",\n portrayalRef: \"SPATQL_S101\", isNewInS101: true, attributes: [\"qualityOfHorizontalMeasurement\", \"qualityOfVerticalMeasurement\"] },\n\n // ── Meta features ──\n\n { featureClass: \"DataCoverage\", name: \"Data Coverage\", section: \"M\", group: \"meta-features\",\n category: \"meta\", description: \"Defines the extent of data coverage in a dataset. Indicates which areas contain chart data and at what navigational purpose.\",\n portrayalRef: \"DATCOV_S101\", isNewInS101: true, attributes: [\"maximumDisplayScale\", \"minimumDisplayScale\"] },\n\n { featureClass: \"UpdateInformation\", name: \"Update Information\", section: \"M\", group: \"meta-features\",\n category: \"meta\", description: \"Carries information about updates applied to the dataset. Tracks insertions, modifications, and deletions for incremental updating.\",\n portrayalRef: \"UPDTIF_S101\", isNewInS101: true, attributes: [\"dateOfIssue\", \"updateNumber\"] },\n\n { featureClass: \"TextPlacement\", name: \"Text Placement\", section: \"M\", group: \"meta-features\",\n category: \"meta\", description: \"Controls the position and orientation of text labels on the chart. Allows producers to specify label placement for optimal readability.\",\n portrayalRef: \"TXTPLC_S101\", isNewInS101: true, attributes: [\"textContent\", \"textJustification\", \"textRotation\"] },\n];\n\n// ═══════════════════════════════════════════════════════════\n// S-101 CHART SECTIONS (same structure as S-52 but with S-101 context)\n// ═══════════════════════════════════════════════════════════\n\nexport const S101_CHART_SECTIONS = [\n { id: \"Q\", label: \"Buoys, Beacons & AIS Aids\", description: \"All floating, fixed, and virtual aids to navigation including AIS-based marks new to S-101.\" },\n { id: \"P\", label: \"Lights\", description: \"Navigational lights with structured sector definitions and complex light characteristics.\" },\n { id: \"R\", label: \"Fog Signals\", description: \"Audible fog signal devices with structured signal sequence attributes.\" },\n { id: \"S\", label: \"Radar & Radio\", description: \"Radar beacons, transponders, radar lines/ranges, and radio stations.\" },\n { id: \"K\", label: \"Dangers\", description: \"Wrecks, rocks, obstructions, water turbulence, and new danger markings.\" },\n { id: \"E\", label: \"Landmarks\", description: \"Conspicuous objects ashore with enhanced visual conspicuity encoding.\" },\n { id: \"D\", label: \"Depths & Bridges\", description: \"Bathymetric data, depth areas, soundings, quality indicators, and bridges.\" },\n { id: \"L\", label: \"Offshore Installations\", description: \"Platforms, wind farms, and other offshore structures.\" },\n { id: \"N\", label: \"Regulated Areas\", description: \"Anchorages, restricted areas, under-keel clearance zones, and archipelagic sea lanes.\" },\n { id: \"T\", label: \"Services\", description: \"Pilot stations, signal stations, and coast guard facilities.\" },\n { id: \"M\", label: \"Tracks, Routes & Meta\", description: \"Recommended tracks, traffic separation, data coverage, and update information.\" },\n];\n\n// ═══════════════════════════════════════════════════════════\n// S-101 SYMBOL GROUPS\n// ═══════════════════════════════════════════════════════════\n\nexport const S101_SYMBOL_GROUPS = [\n { id: \"lateral-buoys\", label: \"Lateral Buoys\", section: \"Q\", description: \"Channel marking buoys per IALA buoyage system.\" },\n { id: \"cardinal-buoys\", label: \"Cardinal Buoys\", section: \"Q\", description: \"Compass-referenced danger marking buoys.\" },\n { id: \"special-buoys\", label: \"Special Purpose Buoys\", section: \"Q\", description: \"Isolated danger, safe water, special, and emergency wreck marking buoys.\" },\n { id: \"beacons\", label: \"Beacons\", section: \"Q\", description: \"Fixed aids to navigation with topmarks.\" },\n { id: \"topmarks\", label: \"Topmarks\", section: \"Q\", description: \"Identification shapes on buoys and beacons.\" },\n { id: \"daymarks\", label: \"Daymarks\", section: \"Q\", description: \"Painted boards for daytime identification.\" },\n { id: \"mooring\", label: \"Mooring Facilities\", section: \"Q\", description: \"Mooring buoys and warping facilities.\" },\n { id: \"virtual-aids\", label: \"AIS Aids to Navigation\", section: \"Q\", description: \"Virtual, physical, and synthetic AIS-based navigation aids — new in S-101.\" },\n { id: \"buoyage-direction\", label: \"Buoyage Direction & System\", section: \"Q\", description: \"Local direction of buoyage and IALA region encoding — new in S-101.\" },\n { id: \"lights\", label: \"Lights\", section: \"P\", description: \"All-around, sectored, and directional navigational lights.\" },\n { id: \"light-vessels\", label: \"Light Vessels & Floats\", section: \"P\", description: \"Floating lighthouses.\" },\n { id: \"fog-radar\", label: \"Fog Signals & Radar\", section: \"R\", description: \"Audible signals and radar beacons.\" },\n { id: \"radar-features\", label: \"Radar Lines & Ranges\", section: \"S\", description: \"Radar-detectable linear features and ranges — new in S-101.\" },\n { id: \"wrecks\", label: \"Wrecks\", section: \"K\", description: \"Sunken or stranded vessels.\" },\n { id: \"rocks\", label: \"Rocks\", section: \"K\", description: \"Natural rock hazards.\" },\n { id: \"obstructions\", label: \"Obstructions\", section: \"K\", description: \"Underwater obstructions and new danger markings.\" },\n { id: \"water-turbulence\", label: \"Water Turbulence\", section: \"K\", description: \"Areas of disturbed water — overfalls, tide rips, eddies. New in S-101.\" },\n { id: \"landmarks\", label: \"Landmarks\", section: \"E\", description: \"Conspicuous objects ashore.\" },\n { id: \"bridges\", label: \"Bridges\", section: \"D\", description: \"Structures spanning waterways.\" },\n { id: \"depths\", label: \"Depths & Hydrography\", section: \"D\", description: \"Depth areas, contours, and soundings.\" },\n { id: \"quality-indicators\", label: \"Quality Indicators\", section: \"D\", description: \"Bathymetric data quality and spatial accuracy — new meta-features in S-101.\" },\n { id: \"infrastructure\", label: \"Infrastructure\", section: \"L\", description: \"Offshore platforms and structures.\" },\n { id: \"anchorage\", label: \"Anchorage\", section: \"N\", description: \"Designated anchorage areas.\" },\n { id: \"restricted-areas\", label: \"Restricted & Special Areas\", section: \"N\", description: \"Restricted areas and archipelagic sea lanes.\" },\n { id: \"ukc-areas\", label: \"Under-keel Clearance\", section: \"N\", description: \"Areas with managed under-keel clearance — new in S-101.\" },\n { id: \"services\", label: \"Services\", section: \"T\", description: \"Pilot, signal, and coast guard stations.\" },\n { id: \"routes\", label: \"Tracks & Routes\", section: \"M\", description: \"Recommended tracks and traffic separation.\" },\n { id: \"meta-features\", label: \"Meta Features\", section: \"M\", description: \"Data coverage, update information, and text placement — new in S-101.\" },\n];\n","/**\n * S-101 Portrayal Catalogue — New Symbol SVGs\n *\n * These symbols represent features introduced in S-101 that have no\n * direct S-57/S-52 equivalent. The existing S-52 symbols are reused\n * where S-101 retains visual continuity with the S-57 portrayal.\n *\n * Reference: IHO S-101 Portrayal Catalogue (Ed 1.1.0)\n */\n\nimport type { NauticalSymbol } from \"./symbols\";\n\nconst SIZE = 32;\n\nfunction svg(inner: string): string {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${SIZE}\" height=\"${SIZE}\" viewBox=\"0 0 32 32\">${inner}</svg>`;\n}\n\n// ── Virtual AIS Aid to Navigation — dashed circle with \"V\" ──\nfunction virtualAIS(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"11\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"1.5\" stroke-dasharray=\"4,3\"/>\n <text x=\"16\" y=\"20\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"bold\" fill=\"#a3238e\" font-family=\"sans-serif\">V</text>\n `);\n}\n\n// ── Physical AIS Aid to Navigation — solid circle with \"A\" ──\nfunction physicalAIS(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"11\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"1.5\"/>\n <text x=\"16\" y=\"20\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"bold\" fill=\"#a3238e\" font-family=\"sans-serif\">A</text>\n `);\n}\n\n// ── Synthetic AIS Aid to Navigation — dashed circle with \"S\" ──\nfunction syntheticAIS(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"11\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"1.5\" stroke-dasharray=\"2,2\"/>\n <text x=\"16\" y=\"20\" text-anchor=\"middle\" font-size=\"12\" font-weight=\"bold\" fill=\"#a3238e\" font-family=\"sans-serif\">S</text>\n `);\n}\n\n// ── Local Direction of Buoyage — arrow ──\nfunction localBuoyageDirection(): string {\n return svg(`\n <line x1=\"6\" y1=\"16\" x2=\"26\" y2=\"16\" stroke=\"#a3238e\" stroke-width=\"1.5\"/>\n <polygon points=\"26,16 20,12 20,20\" fill=\"#a3238e\"/>\n `);\n}\n\n// ── Navigational System of Marks — IALA region indicator ──\nfunction navSystemOfMarks(): string {\n return svg(`\n <rect x=\"4\" y=\"8\" width=\"24\" height=\"16\" rx=\"2\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"1.2\"/>\n <text x=\"16\" y=\"20\" text-anchor=\"middle\" font-size=\"10\" font-weight=\"bold\" fill=\"#a3238e\" font-family=\"sans-serif\">IALA</text>\n `);\n}\n\n// ── Radar Line — dashed bearing line ──\nfunction radarLine(): string {\n return svg(`\n <line x1=\"4\" y1=\"28\" x2=\"28\" y2=\"4\" stroke=\"#a3238e\" stroke-width=\"1.5\" stroke-dasharray=\"5,3\"/>\n <circle cx=\"4\" cy=\"28\" r=\"2\" fill=\"#a3238e\"/>\n `);\n}\n\n// ── Radar Range — arc with distance indicator ──\nfunction radarRange(): string {\n return svg(`\n <circle cx=\"4\" cy=\"28\" r=\"2\" fill=\"#a3238e\"/>\n <path d=\"M4,10 A18,18 0 0,1 22,28\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"1.5\" stroke-dasharray=\"5,3\"/>\n `);\n}\n\n// ── Water Turbulence — wavy pattern ──\nfunction waterTurbulence(): string {\n return svg(`\n <path d=\"M4,12 Q8,8 12,12 Q16,16 20,12 Q24,8 28,12\" fill=\"none\" stroke=\"#4a6fa5\" stroke-width=\"1.5\"/>\n <path d=\"M4,18 Q8,14 12,18 Q16,22 20,18 Q24,14 28,18\" fill=\"none\" stroke=\"#4a6fa5\" stroke-width=\"1.5\"/>\n <path d=\"M4,24 Q8,20 12,24 Q16,28 20,24 Q24,20 28,24\" fill=\"none\" stroke=\"#4a6fa5\" stroke-width=\"1.2\"/>\n `);\n}\n\n// ── Quality of Bathymetric Data — hatched zone ──\nfunction qualityOfBathymetry(): string {\n return svg(`\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" rx=\"1\" fill=\"none\" stroke=\"#4a6fa5\" stroke-width=\"1\"/>\n <line x1=\"4\" y1=\"10\" x2=\"10\" y2=\"4\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"4\" y1=\"16\" x2=\"16\" y2=\"4\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"4\" y1=\"22\" x2=\"22\" y2=\"4\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"4\" y1=\"28\" x2=\"28\" y2=\"4\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"10\" y1=\"28\" x2=\"28\" y2=\"10\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"16\" y1=\"28\" x2=\"28\" y2=\"16\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"22\" y1=\"28\" x2=\"28\" y2=\"22\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <text x=\"16\" y=\"18\" text-anchor=\"middle\" font-size=\"7\" fill=\"#4a6fa5\" font-family=\"sans-serif\">ZOC</text>\n `);\n}\n\n// ── Spatial Quality — grid indicator ──\nfunction spatialQuality(): string {\n return svg(`\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" rx=\"1\" fill=\"none\" stroke=\"#4a6fa5\" stroke-width=\"1\"/>\n <line x1=\"4\" y1=\"16\" x2=\"28\" y2=\"16\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <line x1=\"16\" y1=\"4\" x2=\"16\" y2=\"28\" stroke=\"#4a6fa5\" stroke-width=\"0.6\"/>\n <text x=\"16\" y=\"14\" text-anchor=\"middle\" font-size=\"6\" fill=\"#4a6fa5\" font-family=\"sans-serif\">SQ</text>\n `);\n}\n\n// ── Under-keel Clearance Management Area — UKC diamond ──\nfunction ukcArea(): string {\n return svg(`\n <polygon points=\"16,2 30,16 16,30 2,16\" fill=\"none\" stroke=\"#d42e12\" stroke-width=\"1.5\"/>\n <text x=\"16\" y=\"18\" text-anchor=\"middle\" font-size=\"7\" font-weight=\"bold\" fill=\"#d42e12\" font-family=\"sans-serif\">UKC</text>\n `);\n}\n\n// ── Archipelagic Sea Lane — ASL arrow ──\nfunction archipelagicSeaLane(): string {\n return svg(`\n <line x1=\"6\" y1=\"26\" x2=\"26\" y2=\"6\" stroke=\"#a3238e\" stroke-width=\"2\"/>\n <polygon points=\"26,6 20,6 26,12\" fill=\"#a3238e\"/>\n <line x1=\"3\" y1=\"23\" x2=\"23\" y2=\"3\" stroke=\"#a3238e\" stroke-width=\"0.6\" stroke-dasharray=\"3,2\"/>\n <line x1=\"9\" y1=\"29\" x2=\"29\" y2=\"9\" stroke=\"#a3238e\" stroke-width=\"0.6\" stroke-dasharray=\"3,2\"/>\n `);\n}\n\n// ── New Danger Marking — flashing diamond ──\nfunction newDangerMarking(): string {\n return svg(`\n <polygon points=\"16,3 27,16 16,29 5,16\" fill=\"none\" stroke=\"#d42e12\" stroke-width=\"2\"/>\n <line x1=\"11\" y1=\"11\" x2=\"21\" y2=\"21\" stroke=\"#d42e12\" stroke-width=\"1.5\"/>\n <line x1=\"21\" y1=\"11\" x2=\"11\" y2=\"21\" stroke=\"#d42e12\" stroke-width=\"1.5\"/>\n <text x=\"16\" y=\"10\" text-anchor=\"middle\" font-size=\"5\" fill=\"#d42e12\" font-family=\"sans-serif\">NEW</text>\n `);\n}\n\n// ── Data Coverage — grid pattern ──\nfunction dataCoverage(): string {\n return svg(`\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" rx=\"1\" fill=\"none\" stroke=\"#00843d\" stroke-width=\"1.2\"/>\n <line x1=\"4\" y1=\"12\" x2=\"28\" y2=\"12\" stroke=\"#00843d\" stroke-width=\"0.5\"/>\n <line x1=\"4\" y1=\"20\" x2=\"28\" y2=\"20\" stroke=\"#00843d\" stroke-width=\"0.5\"/>\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"28\" stroke=\"#00843d\" stroke-width=\"0.5\"/>\n <line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"28\" stroke=\"#00843d\" stroke-width=\"0.5\"/>\n <text x=\"16\" y=\"18\" text-anchor=\"middle\" font-size=\"6\" fill=\"#00843d\" font-family=\"sans-serif\">COV</text>\n `);\n}\n\n// ── Update Information — delta symbol ──\nfunction updateInformation(): string {\n return svg(`\n <polygon points=\"16,4 6,28 26,28\" fill=\"none\" stroke=\"#00843d\" stroke-width=\"1.5\"/>\n <text x=\"16\" y=\"24\" text-anchor=\"middle\" font-size=\"8\" fill=\"#00843d\" font-family=\"sans-serif\">Δ</text>\n `);\n}\n\n// ── Text Placement — text indicator ──\nfunction textPlacement(): string {\n return svg(`\n <rect x=\"4\" y=\"8\" width=\"24\" height=\"16\" rx=\"1\" fill=\"none\" stroke=\"#666\" stroke-width=\"1\"/>\n <text x=\"16\" y=\"20\" text-anchor=\"middle\" font-size=\"9\" fill=\"#666\" font-family=\"sans-serif\">Txt</text>\n `);\n}\n\n// ── Light All Around — 360° radial symbol ──\nfunction lightAllAround(): string {\n return svg(`\n <circle cx=\"16\" cy=\"16\" r=\"3\" fill=\"#a3238e\"/>\n <circle cx=\"16\" cy=\"16\" r=\"9\" fill=\"none\" stroke=\"#a3238e\" stroke-width=\"0.8\"/>\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"7\" stroke=\"#a3238e\" stroke-width=\"1\"/>\n <line x1=\"16\" y1=\"25\" x2=\"16\" y2=\"29\" stroke=\"#a3238e\" stroke-width=\"1\"/>\n <line x1=\"3\" y1=\"16\" x2=\"7\" y2=\"16\" stroke=\"#a3238e\" stroke-width=\"1\"/>\n <line x1=\"25\" y1=\"16\" x2=\"29\" y2=\"16\" stroke=\"#a3238e\" stroke-width=\"1\"/>\n `);\n}\n\n// ── Light Sectored — sector arcs from center ──\nfunction lightSectored(): string {\n return svg(`\n <circle cx=\"16\" cy=\"22\" r=\"2.5\" fill=\"#a3238e\"/>\n <path d=\"M16,22 L6,6\" stroke=\"#a3238e\" stroke-width=\"0.8\"/>\n <path d=\"M16,22 L16,4\" stroke=\"#a3238e\" stroke-width=\"0.8\"/>\n <path d=\"M16,22 L26,6\" stroke=\"#a3238e\" stroke-width=\"0.8\"/>\n <path d=\"M6,6 A12,12 0 0,1 16,4\" fill=\"none\" stroke=\"#d42e12\" stroke-width=\"2\"/>\n <path d=\"M16,4 A12,12 0 0,1 26,6\" fill=\"none\" stroke=\"#00843d\" stroke-width=\"2\"/>\n `);\n}\n\n// ═══════════════════════════════════════════════════════════\n// S-101 NAUTICAL SYMBOLS ARRAY (new-in-S-101 features only)\n// ═══════════════════════════════════════════════════════════\n\nexport const S101_NEW_SYMBOLS: NauticalSymbol[] = [\n // ── AIS Aids ──\n { id: \"s101-virtual-ais\", label: \"Virtual AIS Aid to Navigation\", int1Ref: \"Q170\", section: \"Q\", getSvg: virtualAIS,\n group: \"virtual-aids\", description: \"An AIS target broadcast to indicate a hazard, channel edge, or point of interest that has no physical structure. Displayed as a dashed position circle with 'V'.\",\n s52PlRef: \"VAISATN_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"AIS symbol outline and text\" }],\n usageContext: \"Virtual AIS aids are increasingly deployed to mark temporary hazards, new dangers, or channel modifications without the delay and cost of placing physical buoys. They appear on ECDIS as a distinctive symbol and require AIS-capable equipment to receive.\" },\n\n { id: \"s101-physical-ais\", label: \"Physical AIS Aid to Navigation\", int1Ref: \"Q170.1\", section: \"Q\", getSvg: physicalAIS,\n group: \"virtual-aids\", description: \"A physical aid to navigation equipped with an AIS transponder broadcasting its identity and position.\",\n s52PlRef: \"PAISATN_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"AIS symbol outline and text\" }],\n usageContext: \"Physical AIS aids combine traditional visual marks with AIS broadcasting. The AIS signal provides positive identification and position data even in poor visibility.\" },\n\n { id: \"s101-synthetic-ais\", label: \"Synthetic AIS Aid to Navigation\", int1Ref: \"Q170.2\", section: \"Q\", getSvg: syntheticAIS,\n group: \"virtual-aids\", description: \"An AIS target transmitted by a shore station representing a physical aid that is not itself AIS-equipped.\",\n s52PlRef: \"SAISATN_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"AIS symbol outline and text\" }],\n usageContext: \"Synthetic AIS aids allow shore stations to broadcast AIS targets for existing physical aids that lack their own transponders. This extends AIS coverage without retrofitting every buoy.\" },\n\n { id: \"s101-local-buoyage-dir\", label: \"Local Direction of Buoyage\", int1Ref: \"Q130.7\", section: \"Q\", getSvg: localBuoyageDirection,\n group: \"buoyage-direction\", description: \"Arrow indicating the local conventional direction of buoyage where it differs from the general direction.\",\n s52PlRef: \"LDBG_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Arrow fill and stroke\" }],\n usageContext: \"In areas where the general direction of buoyage is ambiguous (e.g., interconnected waterways), the local direction arrow tells mariners which way is 'returning from sea' for lateral mark interpretation.\" },\n\n { id: \"s101-nav-system\", label: \"Navigational System of Marks\", int1Ref: \"Q130.0\", section: \"Q\", getSvg: navSystemOfMarks,\n group: \"buoyage-direction\", description: \"Indicates the IALA buoyage region (A or B) in effect, controlling the colour conventions for lateral marks.\",\n s52PlRef: \"NSMARKS_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Border and text\" }],\n usageContext: \"This feature explicitly encodes which IALA region applies, removing ambiguity at boundaries between Region A (most of the world) and Region B (Americas, Japan, Korea, Philippines).\" },\n\n // ── Radar Features ──\n { id: \"s101-radar-line\", label: \"Radar Line\", int1Ref: \"S4\", section: \"S\", getSvg: radarLine,\n group: \"radar-features\", description: \"A line along which a radar-conspicuous feature provides a bearing reference for radar navigation.\",\n s52PlRef: \"RADLIN_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Dashed bearing line\" }],\n usageContext: \"Radar lines help navigators verify their radar bearings against charted reference features. Particularly useful in coastal navigation and pilotage.\" },\n\n { id: \"s101-radar-range\", label: \"Radar Range\", int1Ref: \"S5\", section: \"S\", getSvg: radarRange,\n group: \"radar-features\", description: \"A distance reference determined by radar from a conspicuous feature.\",\n s52PlRef: \"RADRNG_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Dashed arc\" }],\n usageContext: \"Radar ranges provide distance references from radar-conspicuous points, enabling position fixing by range and bearing in restricted visibility.\" },\n\n // ── Lights (new structured types) ──\n { id: \"s101-light-all-around\", label: \"Light All Around\", int1Ref: \"P1.1\", section: \"P\", getSvg: lightAllAround,\n group: \"lights\", description: \"A light visible from all directions (360° coverage). S-101 separates this from sectored lights for clearer data modeling.\",\n s52PlRef: \"LITALL_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Light symbol\" }],\n usageContext: \"In S-101, lights are split into distinct feature types (all-around vs sectored) rather than using a single LIGHTS feature with complex attribute logic. This simplifies portrayal rules.\" },\n\n { id: \"s101-light-sectored\", label: \"Light Sectored\", int1Ref: \"P40.1\", section: \"P\", getSvg: lightSectored,\n group: \"lights\", description: \"A light showing different characteristics over defined sectors. Uses structured sectorLimit complex attribute.\",\n s52PlRef: \"LITSEC_S101\", renderSize: \"32×32\",\n colors: [\n { token: \"PLRTE\", hex: \"#a3238e\", usage: \"Light position\" },\n { token: \"DNGHL\", hex: \"#d42e12\", usage: \"Red sector\" },\n { token: \"CHGRN\", hex: \"#00843d\", usage: \"Green sector\" },\n ],\n usageContext: \"S-101 models each sector as a structured sub-attribute within the light feature, replacing S-57's approach of multiple LIGHTS features for a single physical light.\" },\n\n // ── Dangers ──\n { id: \"s101-water-turbulence\", label: \"Water Turbulence\", int1Ref: \"K44\", section: \"K\", getSvg: waterTurbulence,\n group: \"water-turbulence\", description: \"An area of disturbed water surface caused by currents, shoals, or wind-against-tide. Includes overfalls, tide rips, and eddies.\",\n s52PlRef: \"WATTUR_S101\", renderSize: \"32×32\",\n colors: [{ token: \"DEPVS\", hex: \"#4a6fa5\", usage: \"Wave pattern\" }],\n usageContext: \"Water turbulence areas warn mariners of potentially dangerous sea states. Small craft are particularly vulnerable. In S-101 this is a dedicated feature rather than encoded as a note.\" },\n\n { id: \"s101-new-danger\", label: \"New Danger Marking\", int1Ref: \"K50\", section: \"K\", getSvg: newDangerMarking,\n group: \"obstructions\", description: \"Indicates a newly discovered danger not yet fully surveyed. Displayed prominently with 'NEW' label.\",\n s52PlRef: \"NEWDNG_S101\", renderSize: \"32×32\",\n colors: [{ token: \"DNGHL\", hex: \"#d42e12\", usage: \"Danger diamond and cross\" }],\n usageContext: \"New danger markings alert mariners to recently reported hazards. They are typically displayed with maximum prominence until the area is surveyed and the chart is formally updated.\" },\n\n // ── Regulated Areas ──\n { id: \"s101-ukc-area\", label: \"Under-keel Clearance Management Area\", int1Ref: \"N65\", section: \"N\", getSvg: ukcArea,\n group: \"ukc-areas\", description: \"An area where under-keel clearance is actively managed. Vessels must maintain minimum clearance above the seabed.\",\n s52PlRef: \"UKCMGT_S101\", renderSize: \"32×32\",\n colors: [{ token: \"DNGHL\", hex: \"#d42e12\", usage: \"UKC diamond outline\" }],\n usageContext: \"UKC management areas are critical for deep-draught vessels. Port authorities typically require vessels to calculate their UKC considering tidal predictions, vessel squat, and sea state.\" },\n\n { id: \"s101-archipelagic-sea-lane\", label: \"Archipelagic Sea Lane\", int1Ref: \"N70\", section: \"N\", getSvg: archipelagicSeaLane,\n group: \"restricted-areas\", description: \"A sea lane designated for continuous and expeditious passage through archipelagic waters (UNCLOS Part IV).\",\n s52PlRef: \"ARCSLN_S101\", renderSize: \"32×32\",\n colors: [{ token: \"PLRTE\", hex: \"#a3238e\", usage: \"Lane centerline and boundaries\" }],\n usageContext: \"Archipelagic sea lanes provide rights of passage through archipelagic states similar to transit passage through straits. Vessels must remain within the lane and proceed without delay.\" },\n\n // ── Quality Indicators ──\n { id: \"s101-quality-bathymetry\", label: \"Quality of Bathymetric Data\", int1Ref: \"M12.1\", section: \"D\", getSvg: qualityOfBathymetry,\n group: \"quality-indicators\", description: \"Indicates survey quality, technique, and positional accuracy for an area. Replaces S-57's M_QUAL with richer attributes.\",\n s52PlRef: \"QOBDAT_S101\", renderSize: \"32×32\",\n colors: [{ token: \"DEPVS\", hex: \"#4a6fa5\", usage: \"Hatching and text\" }],\n usageContext: \"Quality of bathymetric data helps mariners assess how much trust to place in charted depths. Categories range from ZOC A1 (full seafloor coverage, high accuracy) to ZOC D (insufficient data).\" },\n\n { id: \"s101-spatial-quality\", label: \"Spatial Quality\", int1Ref: \"M12.2\", section: \"D\", getSvg: spatialQuality,\n group: \"quality-indicators\", description: \"Meta-feature providing spatial accuracy information for features in a defined area.\",\n s52PlRef: \"SPATQL_S101\", renderSize: \"32×32\",\n colors: [{ token: \"DEPVS\", hex: \"#4a6fa5\", usage: \"Grid and text\" }],\n usageContext: \"Spatial quality allows ECDIS to communicate positional uncertainty to the mariner. This is important for passage planning near dangers where position accuracy is critical.\" },\n\n // ── Meta Features ──\n { id: \"s101-data-coverage\", label: \"Data Coverage\", int1Ref: \"M1.1\", section: \"M\", getSvg: dataCoverage,\n group: \"meta-features\", description: \"Defines the extent of data coverage and navigational purpose. Tells the system which areas contain chart data.\",\n s52PlRef: \"DATCOV_S101\", renderSize: \"32×32\",\n colors: [{ token: \"CHGRN\", hex: \"#00843d\", usage: \"Coverage grid\" }],\n usageContext: \"Data coverage boundaries are essential for ECDIS to determine when a vessel is leaving charted waters. The feature also carries scale information for automatic chart loading.\" },\n\n { id: \"s101-update-info\", label: \"Update Information\", int1Ref: \"M1.2\", section: \"M\", getSvg: updateInformation,\n group: \"meta-features\", description: \"Tracks changes applied to the dataset: insertions, modifications, and deletions for incremental updating.\",\n s52PlRef: \"UPDTIF_S101\", renderSize: \"32×32\",\n colors: [{ token: \"CHGRN\", hex: \"#00843d\", usage: \"Delta symbol\" }],\n usageContext: \"Update information features enable incremental chart updates (patches) rather than full dataset replacements. This is fundamental to S-101's efficient update mechanism.\" },\n\n { id: \"s101-text-placement\", label: \"Text Placement\", int1Ref: \"M1.3\", section: \"M\", getSvg: textPlacement,\n group: \"meta-features\", description: \"Controls label position and orientation for optimal readability, replacing S-57's limited text placement approach.\",\n s52PlRef: \"TXTPLC_S101\", renderSize: \"32×32\",\n colors: [{ token: \"CHBLK\", hex: \"#666666\", usage: \"Text indicator\" }],\n usageContext: \"Text placement features allow chart producers to specify exact label positions, preventing overlap and improving chart readability in dense areas.\" },\n];\n","// AUTO-GENERATED by scripts/gen-s52-svgs.ts — do not edit.\n// Source: packages/sdk/assets/s52/{point,pattern,line}/*.svg\n// Regenerate via: bun run gen:svgs\n\nexport const S52_POINT_SVGS: Record<string, string> = {\n \"ACHARE02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 1.0 L 16.1 30.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.8 9.9 L 24.9 9.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.0 24.8 L 10.3 31.0 L 22.1 31.0 L 28.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.0 1.0 L 15.0 8.6 L 7.7 8.6 L 7.7 11.1 L 15.0 11.1 L 15.0 26.9 L 10.3 25.8 L 6.0 22.6 L 1.9 22.6 L 7.7 26.9 L 16.3 31.0 L 24.3 26.9 L 30.1 22.6 L 26.7 22.6 L 21.5 25.8 L 16.7 26.9 L 16.7 11.1 L 24.3 11.1 L 24.3 8.6 L 16.7 8.6 L 16.7 1.0 L 15.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHBRT07\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.9 1.0 L 15.9 14.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 31.0 L 15.9 26.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 21.9 L 22.0 30.9 L 10.3 30.9 L 1.0 21.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.88\\\" cy=\\\"19.85\\\" r=\\\"5.99\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 6.8 10.1 L 25.5 10.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHPNT01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.8 8.3 L 21.5 8.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.5 22.8 L 5.3 25.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.2 28.5 L 11.7 30.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 31.0 L 19.9 30.6 L 23.8 28.7 L 26.4 26.2 L 28.5 22.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.7 30.3 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.2 28.5 L 5.3 25.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHRES51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.0 1.0 L 15.0 8.6 L 7.7 8.6 L 7.7 11.1 L 15.0 11.1 L 15.0 26.9 L 10.3 25.8 L 6.0 22.6 L 1.9 22.6 L 7.7 26.9 L 16.3 31.0 L 24.3 26.9 L 30.1 22.6 L 26.7 22.6 L 21.5 25.8 L 16.7 26.9 L 16.7 11.1 L 24.3 11.1 L 24.3 8.6 L 16.7 8.6 L 16.7 1.0 L 15.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.8 5.6 L 3.7 28.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHRES61\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.0 2.4 L 13.0 9.2 L 6.3 9.2 L 6.3 11.6 L 13.0 11.6 L 13.0 25.9 L 8.7 24.9 L 4.7 22.0 L 1.0 22.0 L 6.3 25.9 L 14.1 29.6 L 21.4 25.9 L 26.7 22.0 L 23.6 22.0 L 18.9 24.9 L 14.5 25.9 L 14.5 11.6 L 21.4 11.6 L 21.4 9.2 L 14.5 9.2 L 14.5 2.4 L 13.0 2.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.6 6.6 L 2.7 27.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 29.9 29.6 L 31.0 29.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.2 20.2 L 30.2 27.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ACHRES71\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 17.4 2.5 L 17.4 9.3 L 10.8 9.3 L 10.8 11.6 L 17.4 11.6 L 17.4 25.8 L 13.1 24.9 L 9.2 21.9 L 5.5 21.9 L 10.8 25.8 L 18.6 29.5 L 25.7 25.8 L 31.0 21.9 L 27.9 21.9 L 23.2 24.9 L 18.9 25.8 L 18.9 11.6 L 25.7 11.6 L 25.7 9.3 L 18.9 9.3 L 18.9 2.5 L 17.4 2.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.0 6.6 L 7.2 27.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.9 29.2 L 2.9 24.4 L 1.0 24.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 29.2 L 4.9 29.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.0 21.9 L 2.0 22.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AIRARE02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 11.3 24.7 L 20.1 24.7 L 17.5 21.7 L 17.5 17.9 L 27.5 17.9 L 18.3 11.8 L 18.3 7.2 L 16.1 4.8 L 13.4 7.2 L 13.4 11.8 L 4.2 17.7 L 13.6 17.8 L 13.6 21.9 L 11.3 24.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AISDEF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"9.85\\\" cy=\\\"27.40\\\" r=\\\"1.24\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.8 27.4 Z\\\" fill=\\\"ARPAT\\\" />\\n <path d=\\\"M 5.0 31.0 L 14.9 31.0 L 9.7 1.0 L 4.8 30.9\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.4 10.9 L 19.0 9.7 L 19.5 8.7 L 20.2 8.1 L 20.8 7.4 L 21.9 7.0 L 22.8 7.1 L 24.0 7.5 L 25.1 7.7 L 26.0 9.1 L 26.7 9.8 L 27.2 10.7 L 27.2 11.7 L 26.7 12.7 L 26.2 13.5 L 25.4 14.5 L 24.5 15.5 L 23.7 16.5 L 23.2 17.3 L 22.7 17.9 L 22.6 18.8 L 22.6 19.7 L 22.6 20.4 L 22.7 21.3 L 22.7 21.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.0 22.5 L 23.4 22.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AISONE01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 22.3 L 31.0 22.3 L 15.7 9.7 L 1.0 22.3\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AISSIX01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 20.8 L 31.0 20.7 L 15.7 8.1 L 1.0 20.8\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.9 L 31.0 23.9\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AISSLP01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.02\\\" cy=\\\"27.40\\\" r=\\\"1.24\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 27.4 Z\\\" fill=\\\"ARPAT\\\" />\\n <path d=\\\"M 11.1 31.0 L 21.1 31.0 L 15.9 1.0 L 10.9 30.9\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"AISVES01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 10.0 31.0 L 22.0 31.0 L 16.0 1.0 L 10.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.01\\\" cy=\\\"25.01\\\" r=\\\"0.75\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 25.0 Z\\\" fill=\\\"ARPAT\\\" />\\n</svg>\\n\",\n \"ARPATG01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"3.72\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"ARPAT\\\" />\\n</svg>\\n\",\n \"ARPONE01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ARPSIX01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNCAR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 17.4 L 6.2 30.8 L 25.8 31.0 L 16.0 17.4 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.0 17.4 L 6.2 30.8 L 25.8 31.0 L 16.0 17.4\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 25.9 14.5 L 6.4 14.5 L 16.0 1.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.0 1.0 L 25.9 14.5 L 6.4 14.5 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 6.1 14.5 L 25.8 14.5 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.1 30.9 L 25.8 30.9 L 16.0 17.4 L 6.1 30.9\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNCAR02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 25.0 13.5 L 7.0 13.4 L 16.0 1.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.0 1.0 L 25.0 13.5 L 7.0 13.4 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 18.5 L 25.0 18.5 L 16.0 31.0 L 7.0 18.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 8.5 18.5 L 25.0 18.5 L 16.0 31.0 L 7.0 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 6.9 13.5 L 25.1 13.5 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.9 18.5 L 25.1 18.5 L 16.0 31.0 L 6.9 18.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNCAR03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.9 1.0 L 25.7 1.1 L 16.0 14.5 L 6.4 1.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 7.9 1.0 L 25.7 1.1 L 16.0 14.5 L 6.4 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.9 17.5 L 25.7 17.5 L 16.0 31.0 L 6.3 17.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 7.9 17.5 L 25.7 17.5 L 16.0 31.0 L 6.3 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 14.5 L 6.2 1.0 L 25.8 1.0 L 16.0 14.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.2 17.5 L 25.8 17.5 L 16.0 31.0 L 6.2 17.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNCAR04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 17.5 L 6.3 31.0 L 25.7 31.0 L 16.0 17.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.0 17.5 L 6.3 31.0 L 25.7 31.0 L 16.0 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.9 1.0 L 25.7 1.0 L 16.0 14.5 L 6.2 1.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 7.9 1.0 L 25.7 1.0 L 16.0 14.5 L 6.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.2 31.0 L 25.8 31.0 L 16.0 17.5 L 6.2 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 14.5 L 6.2 1.0 L 25.8 1.0 L 16.0 14.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNDEF13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 18.5 8.7 L 19.2 7.1 L 20.0 5.7 L 21.0 4.8 L 21.9 3.8 L 23.4 3.3 L 24.7 3.5 L 26.4 4.0 L 28.0 4.4 L 29.3 6.3 L 30.3 7.4 L 31.0 8.7 L 30.9 10.1 L 30.3 11.4 L 29.5 12.6 L 28.3 14.0 L 27.0 15.4 L 25.8 16.9 L 25.0 17.9 L 24.4 18.9 L 24.2 20.1 L 24.2 21.4 L 24.2 22.3 L 24.2 23.6 L 24.2 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.8 28.7 L 25.8 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 4.2 L 1.0 26.9 L 12.4 26.9 L 12.4 4.3 L 1.0 4.2 Z\\\" fill=\\\"CHGRD\\\" />\\n <path d=\\\"M 1.0 4.2 L 1.0 26.9 L 12.4 26.9 L 12.4 4.3 L 1.0 4.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 4.2 L 1.0 26.9 L 12.4 26.9 L 12.4 4.3 L 1.0 4.2\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"6.86\\\" cy=\\\"15.72\\\" r=\\\"0.85\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 6.9 15.7 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNGEN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 11.6 26.8 L 11.6 1.0 L 20.0 1.0 L 20.0 27.2 L 19.4 25.8 L 19.3 24.7 L 18.9 24.3 L 17.6 23.7 L 16.5 23.4 L 16.2 23.2 L 15.1 23.4 L 14.5 23.4 L 13.8 23.7 L 13.3 24.5 L 12.7 25.3 L 12.0 25.8 L 11.6 26.6 L 11.6 27.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 11.6 26.8 L 11.6 1.0 L 20.0 1.0 L 20.0 27.2 L 19.4 25.8 L 19.3 24.7 L 18.9 24.3 L 17.6 23.7 L 16.5 23.4 L 16.2 23.2 L 15.1 23.4 L 14.5 23.4 L 13.8 23.7 L 13.3 24.5 L 12.7 25.3 L 12.0 25.8 L 11.6 26.6 L 11.6 27.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"27.21\\\" r=\\\"3.79\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 7.3 27.2 L 12.2 27.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.8 27.2 L 24.7 27.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNGEN03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.9 9.1 L 20.5 7.7 L 21.2 6.4 L 22.0 5.6 L 22.9 4.7 L 24.2 4.3 L 25.4 4.4 L 26.9 4.8 L 28.3 5.1 L 29.5 6.8 L 30.4 7.8 L 31.0 8.9 L 31.0 10.2 L 30.4 11.4 L 29.7 12.5 L 28.7 13.7 L 27.6 14.9 L 26.5 16.3 L 25.8 17.2 L 25.3 18.1 L 25.2 19.2 L 25.2 20.4 L 25.2 21.2 L 25.3 22.3 L 25.3 22.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.2 26.8 L 26.9 26.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.0 L 17.1 23.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"8.59\\\" cy=\\\"25.92\\\" r=\\\"2.73\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 8.5 22.9 L 8.4 3.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNISD21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.06\\\" cy=\\\"7.07\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.1 7.1 Z\\\" fill=\\\"CHRED\\\" />\\n <circle cx=\\\"15.94\\\" cy=\\\"24.93\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 15.9 24.9 Z\\\" fill=\\\"CHRED\\\" />\\n <circle cx=\\\"16.06\\\" cy=\\\"7.07\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"15.94\\\" cy=\\\"24.93\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"BCNLAT15\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.13\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNLAT16\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.13\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNLAT21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.97\\\" cy=\\\"16.06\\\" r=\\\"0.90\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.1 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNLAT22\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.97\\\" cy=\\\"16.06\\\" r=\\\"0.90\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.1 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNLTC01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"27.06\\\" r=\\\"3.94\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.5 27.1 L 11.8 27.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.6 27.1 L 30.5 27.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.4 27.1 L 10.2 1.0 L 21.8 1.0 L 27.6 27.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.1 22.7 L 24.9 15.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.1 15.1 L 26.5 22.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.6 3.5 L 23.8 10.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.8 3.9 L 7.8 10.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNSAW13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.13\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"DEPVS\\\" />\\n</svg>\\n\",\n \"BCNSAW21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.97\\\" cy=\\\"16.06\\\" r=\\\"0.90\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.1 Z\\\" fill=\\\"DEPVS\\\" />\\n</svg>\\n\",\n \"BCNSPP13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 23.5 1.0 L 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.13\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNSPP21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 31.0 L 12.0 1.0 L 20.0 1.0 L 20.0 31.0 L 12.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.97\\\" cy=\\\"16.06\\\" r=\\\"0.90\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.1 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BCNSTK02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.7 31.0 L 24.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 1.0 L 16.3 30.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BCNTOW01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"26.96\\\" r=\\\"4.04\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.6 27.0 L 12.0 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.8 27.0 L 30.4 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.5 27.0 L 10.2 1.0 L 21.8 1.0 L 27.5 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BLKADJ01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0 Z\\\" fill=\\\"BKAJ1\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"BKAJ1\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.2 6.9 L 25.2 6.9 L 25.2 24.9 L 7.2 24.9 L 7.2 6.9 Z\\\" fill=\\\"BKAJ2\\\" />\\n <path d=\\\"M 7.2 6.9 L 25.2 6.9 L 25.2 24.9 L 7.2 24.9 L 7.2 6.9\\\" fill=\\\"none\\\" stroke=\\\"BKAJ2\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYBAR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"18.32\\\" cy=\\\"24.29\\\" r=\\\"2.44\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 3.7 24.3 L 3.7 16.7 L 4.2 13.6 L 5.9 10.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 8.0 L 10.3 6.7 L 13.0 5.8 L 15.1 5.3 L 17.3 5.3 L 19.8 5.8 L 22.7 7.5 L 24.9 8.9 L 26.1 10.4 L 27.3 12.8 L 28.1 15.0 L 28.3 16.7 L 28.3 24.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 8.4 L 9.0 11.1 L 10.8 13.6 L 11.7 16.2 L 12.5 19.9 L 13.0 22.1 L 13.0 24.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.5 24.3 L 31.0 24.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 10.1 L 8.1 8.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.6 24.3 L 1.0 24.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCAN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.03\\\" cy=\\\"22.72\\\" r=\\\"2.87\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 22.7 L 12.1 22.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.6 22.7 L 28.7 22.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.3 22.7 L 7.9 6.4 L 31.0 6.4 L 26.4 22.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCAR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 20.2 18.2 L 20.2 30.9 L 5.9 31.0 L 20.2 18.2 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 20.2 18.2 L 20.2 30.9 L 5.9 31.0 L 20.2 18.2\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.2 14.7 L 26.1 14.7 L 26.1 1.0 L 11.2 14.7 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 11.2 14.7 L 26.1 14.7 L 26.1 1.0 L 11.2 14.7\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.2 14.7 L 26.1 14.7 L 26.1 1.1 L 11.2 14.7\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.2 18.0 L 20.2 31.0 L 5.9 31.0 L 20.2 18.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCAR02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 10.2 13.5 L 24.3 13.4 L 24.2 1.0 L 10.2 13.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 10.2 13.5 L 24.3 13.4 L 24.2 1.0 L 10.2 13.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.7 18.5 L 21.6 18.5 L 7.7 31.0 L 7.7 18.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 7.7 18.5 L 21.6 18.5 L 7.7 31.0 L 7.7 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.7 18.5 L 21.7 18.5 L 7.7 31.0 L 7.7 18.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.2 13.5 L 24.3 13.5 L 24.3 1.0 L 10.2 13.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCAR03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.7 1.0 L 26.2 1.0 L 11.0 14.3 L 11.0 1.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 12.7 1.0 L 26.2 1.0 L 11.0 14.3 L 11.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 17.5 L 20.8 17.5 L 5.8 30.9 L 5.8 17.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 7.3 17.5 L 20.8 17.5 L 5.8 30.9 L 5.8 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.8 17.5 L 20.8 17.5 L 5.8 31.0 L 5.8 17.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.0 1.0 L 26.2 1.0 L 11.0 14.3\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.0 1.0 L 11.0 14.3\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCAR04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 14.5 L 16.1 1.0 L 30.8 1.0 L 16.1 14.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.1 14.5 L 16.1 1.0 L 30.8 1.0 L 16.1 14.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 17.5 L 16.1 31.0 L 1.4 31.0 L 16.1 17.5 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 16.1 17.5 L 16.1 31.0 L 1.4 31.0 L 16.1 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 17.5 L 16.1 31.0 L 1.1 31.0 L 16.1 17.5\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 1.0 L 16.1 14.5 L 30.9 1.0 L 16.1 1.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYCON01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.03\\\" cy=\\\"25.97\\\" r=\\\"2.92\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 4.3 26.0 L 4.9 21.2 L 5.9 17.3 L 7.4 14.4 L 9.5 11.3 L 11.3 9.0 L 13.9 6.7 L 17.3 4.7 L 19.9 3.1 L 20.9 4.7 L 23.0 8.5 L 25.2 13.4 L 25.9 16.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 26.0 L 13.2 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.9 16.8 L 26.6 21.2 L 26.9 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.6 26.0 L 31.0 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYDEF03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 21.8 10.8 L 22.4 9.6 L 22.9 8.6 L 23.6 7.9 L 24.3 7.2 L 25.4 6.8 L 26.4 6.9 L 27.6 7.2 L 28.8 7.5 L 29.8 8.9 L 30.5 9.7 L 31.0 10.6 L 31.0 11.7 L 30.5 12.7 L 30.0 13.5 L 29.1 14.5 L 28.2 15.6 L 27.3 16.6 L 26.8 17.4 L 26.3 18.1 L 26.2 19.1 L 26.2 20.0 L 26.2 20.7 L 26.3 21.6 L 26.3 21.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.4 25.2 L 27.6 25.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"9.45\\\" cy=\\\"16.19\\\" r=\\\"8.45\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.4 16.2 Z\\\" fill=\\\"CHGRD\\\" />\\n <circle cx=\\\"9.45\\\" cy=\\\"16.19\\\" r=\\\"8.45\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"9.45\\\" cy=\\\"16.19\\\" r=\\\"0.62\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.4 16.2 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYGEN03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 22.4 10.5 L 22.9 9.4 L 23.4 8.4 L 24.1 7.7 L 24.7 7.1 L 25.7 6.7 L 26.6 6.8 L 27.8 7.1 L 28.9 7.4 L 29.8 8.7 L 30.5 9.5 L 31.0 10.3 L 31.0 11.3 L 30.5 12.2 L 30.0 13.1 L 29.2 14.0 L 28.3 15.0 L 27.5 16.0 L 27.0 16.7 L 26.6 17.4 L 26.5 18.3 L 26.5 19.2 L 26.5 19.8 L 26.6 20.7 L 26.6 20.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.7 24.1 L 27.8 24.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"11.24\\\" cy=\\\"14.16\\\" r=\\\"6.78\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"11.31\\\" cy=\\\"23.14\\\" r=\\\"2.16\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 13.5 23.1 L 21.6 23.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.1 L 9.1 23.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYINB01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.02\\\" cy=\\\"22.46\\\" r=\\\"2.28\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.02\\\" cy=\\\"9.75\\\" r=\\\"2.49\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 22.5 L 13.6 22.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 22.5 L 31.0 22.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.6 22.5 L 6.0 12.5 L 26.0 12.5 L 29.4 22.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYISD12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"20.52\\\" cy=\\\"7.07\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 20.5 7.1 Z\\\" fill=\\\"CHRED\\\" />\\n <circle cx=\\\"11.48\\\" cy=\\\"24.93\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 11.5 24.9 Z\\\" fill=\\\"CHRED\\\" />\\n <circle cx=\\\"20.52\\\" cy=\\\"7.07\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"11.48\\\" cy=\\\"24.93\\\" r=\\\"6.07\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"BOYLAT13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"22.32\\\" cy=\\\"21.30\\\" r=\\\"1.03\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 22.3 21.3 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYLAT14\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"22.32\\\" cy=\\\"21.30\\\" r=\\\"1.03\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 22.3 21.3 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYLAT23\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 27.3 L 9.6 4.7 L 31.0 4.7 L 23.8 27.3 L 1.0 27.3 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 1.0 27.3 L 9.6 4.7 L 31.0 4.7 L 23.8 27.3 L 1.0 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.3 L 9.6 4.7 L 31.0 4.7 L 23.8 27.3 L 1.0 27.3\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.63\\\" cy=\\\"15.52\\\" r=\\\"0.85\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 15.5 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYLAT24\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.63\\\" cy=\\\"15.49\\\" r=\\\"0.85\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 15.5 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYLAT50\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.63\\\" cy=\\\"15.49\\\" r=\\\"0.85\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 15.5 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYLAT51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"22.32\\\" cy=\\\"21.30\\\" r=\\\"1.03\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 22.3 21.3 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYMOR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"17.97\\\" cy=\\\"27.31\\\" r=\\\"2.95\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"15.75\\\" cy=\\\"4.93\\\" r=\\\"3.20\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 20.4 27.3 L 31.0 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.8 27.3 L 1.0 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.3 27.3 L 28.3 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.2 27.3 L 3.2 20.9 L 3.5 18.5 L 4.4 15.5 L 5.9 13.0 L 7.1 11.8 L 9.0 10.2 L 11.1 9.2 L 13.1 8.6 L 15.8 8.2 L 18.1 8.5 L 20.7 9.4 L 23.2 10.7 L 25.1 12.4 L 26.8 14.9 L 27.8 17.3 L 28.3 19.7 L 28.3 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.1 11.8 L 9.0 14.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.2 19.0 L 12.2 23.0 L 12.4 25.4 L 12.6 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.0 14.5 L 11.2 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYMOR03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"14.88\\\" cy=\\\"26.37\\\" r=\\\"3.17\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"19.41\\\" cy=\\\"6.11\\\" r=\\\"3.65\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 26.4 L 11.5 26.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.8 26.4 L 28.7 26.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.3 26.4 L 7.9 10.2 L 31.0 10.2 L 26.6 26.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYMOR11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.30\\\" cy=\\\"11.89\\\" r=\\\"2.81\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.3 11.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 22.9 L 3.6 15.1 L 28.4 15.1 L 31.0 22.9 L 1.0 22.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 22.9 L 3.6 15.1 L 28.4 15.1 L 31.0 22.9 L 1.0 22.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYPIL01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.43\\\" cy=\\\"25.37\\\" r=\\\"2.96\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 25.4 L 13.6 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.1 25.4 L 31.0 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.3 25.4 L 15.3 13.6 L 18.6 3.7 L 23.5 3.7 L 23.5 15.6 L 28.2 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYSAW12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"14.78\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHRED\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.11\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYSPH01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.76\\\" cy=\\\"26.22\\\" r=\\\"2.81\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 18.7 26.2 L 31.0 26.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.1 26.2 L 2.6 22.6 L 2.2 19.6 L 1.8 16.4 L 2.5 12.9 L 3.5 10.5 L 5.3 8.1 L 7.3 6.1 L 9.8 4.5 L 12.1 3.7 L 14.9 3.0 L 17.9 3.0 L 20.9 3.7 L 24.2 5.1 L 26.4 6.8 L 27.9 9.0 L 29.7 11.8 L 30.7 14.6 L 30.8 17.7 L 30.5 21.5 L 29.4 24.2 L 28.3 26.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 26.2 L 12.9 26.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYSPP11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"1.13\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYSPP15\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.8 31.0 L 30.8 1.0 L 1.2 31.0 L 30.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"20.95\\\" cy=\\\"21.30\\\" r=\\\"1.03\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 21.0 21.3 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYSPP25\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.4 L 9.6 4.7 L 31.0 4.6 L 23.8 27.3 L 1.0 27.4\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.63\\\" cy=\\\"15.49\\\" r=\\\"0.85\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 15.5 Z\\\" fill=\\\"OUTLW\\\" />\\n</svg>\\n\",\n \"BOYSPR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.5 27.4 L 18.8 1.0 L 24.8 1.0 L 19.3 24.9 L 18.1 24.5 L 17.5 24.1 L 16.4 23.9 L 15.1 24.3 L 12.4 27.4 L 14.1 24.7 L 13.5 25.1 L 12.5 27.4 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 12.5 27.4 L 18.8 1.0 L 24.8 1.0 L 19.3 24.9 L 18.1 24.5 L 17.5 24.1 L 16.4 23.9 L 15.1 24.3 L 12.4 27.4 L 14.1 24.7 L 13.5 25.1 L 12.5 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.21\\\" cy=\\\"27.40\\\" r=\\\"3.60\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 7.2 27.4 L 12.5 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.5 27.4 L 24.8 27.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYSUP01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.02\\\" cy=\\\"23.18\\\" r=\\\"2.28\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 23.2 L 13.6 23.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 23.2 L 31.0 23.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.6 23.2 L 6.0 13.2 L 26.0 13.2 L 29.4 23.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 13.2 L 16.0 6.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYSUP02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.1 25.3 L 4.9 14.1 L 27.2 14.1 L 31.0 25.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 14.1 L 16.1 6.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 25.2 L 4.9 14.0 L 27.2 14.1 L 31.0 25.2 L 1.0 25.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 25.2 L 4.9 14.0 L 27.2 14.1 L 31.0 25.2 L 1.0 25.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BOYSUP03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.12\\\" cy=\\\"24.98\\\" r=\\\"2.07\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.1 9.9 L 16.1 5.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 6.6 L 19.3 9.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 9.9 L 19.3 6.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 25.0 L 14.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 25.0 L 31.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.6 25.0 L 6.0 14.9 L 26.0 14.9 L 29.4 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 14.9 L 16.1 8.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BRIDGE01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"16.07\\\" cy=\\\"15.70\\\" r=\\\"8.63\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"BRTHNO01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"BUAARE02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"LANDF\\\" />\\n</svg>\\n\",\n \"BUIREL01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 16.0 23.5 L 8.5 31.0 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 16.0 23.5 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 16.0 L 23.5 16.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 8.5 L 16.0 23.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 31.0 L 8.5 31.0 L 16.0 23.5 L 23.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BUIREL04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 8.6 L 31.0 23.4\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.4 L 31.0 8.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.8 10.3 L 27.1 10.3 L 27.1 21.7 L 4.8 21.7 L 4.8 10.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BUIREL05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.8 1.0 L 6.5 3.2 L 8.4 4.9 L 10.6 6.0 L 12.8 6.9 L 15.2 7.2 L 17.1 7.1 L 19.1 6.9 L 21.3 6.2 L 23.0 5.1 L 24.5 4.2 L 25.8 2.8 L 26.7 1.7 L 27.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.48\\\" cy=\\\"24.63\\\" r=\\\"6.37\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.5 17.9 L 16.5 7.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.61\\\" cy=\\\"24.56\\\" r=\\\"1.29\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 24.6 Z\\\" fill=\\\"LANDF\\\" />\\n</svg>\\n\",\n \"BUIREL13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 16.0 23.5 L 8.5 31.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0 L 16.0 23.5 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 16.0 L 23.5 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 8.5 L 16.0 23.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 1.0 L 23.5 1.0 L 16.0 8.5 L 8.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 23.5 L 23.5 16.0 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 31.0 L 8.5 31.0 L 16.0 23.5 L 23.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 8.5 L 1.0 23.5 L 8.5 16.0 L 1.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BUIREL14\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 8.6 L 31.0 23.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.4 L 31.0 8.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.8 10.3 L 27.1 10.3 L 27.1 21.7 L 4.8 21.7 L 4.8 10.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BUIREL15\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.8 1.0 L 6.5 3.2 L 8.4 4.9 L 10.6 6.0 L 12.8 6.9 L 15.2 7.2 L 17.1 7.1 L 19.1 6.9 L 21.3 6.2 L 23.0 5.1 L 24.5 4.2 L 25.8 2.8 L 26.7 1.7 L 27.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.48\\\" cy=\\\"24.63\\\" r=\\\"6.37\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.5 17.9 L 16.5 7.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.61\\\" cy=\\\"24.56\\\" r=\\\"1.29\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.6 24.6 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"BUISGL01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0 Z\\\" fill=\\\"CHBRN\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"BUISGL11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CAIRNS01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 17.5 1.1 L 20.1 1.9 L 21.7 2.7 L 23.2 4.6 L 23.8 6.2 L 24.2 7.4 L 24.2 9.4 L 23.4 10.9 L 22.9 12.1 L 21.8 13.5 L 21.3 14.1 L 21.8 12.5 L 22.7 10.9 L 22.9 9.8 L 22.9 7.8 L 22.2 5.8 L 21.7 4.6 L 20.7 3.5 L 19.1 2.1 L 17.5 1.1 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 17.5 1.1 L 20.1 1.9 L 21.7 2.7 L 23.2 4.6 L 23.8 6.2 L 24.2 7.4 L 24.2 9.4 L 23.4 10.9 L 22.9 12.1 L 21.8 13.5 L 21.3 14.1 L 21.8 12.5 L 22.7 10.9 L 22.9 9.8 L 22.9 7.8 L 22.2 5.8 L 21.7 4.6 L 20.7 3.5 L 19.1 2.1 L 17.5 1.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.7 13.7 L 13.2 15.1 L 14.8 16.3 L 15.4 17.2 L 15.9 18.8 L 16.4 20.4 L 16.4 21.6 L 15.6 23.5 L 15.0 25.1 L 14.0 26.3 L 12.2 27.7 L 13.2 26.1 L 14.0 24.5 L 14.8 21.4 L 14.8 19.8 L 14.0 17.9 L 13.4 16.7 L 12.2 14.7 L 11.7 13.7 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 11.7 13.7 L 13.2 15.1 L 14.8 16.3 L 15.4 17.2 L 15.9 18.8 L 16.4 20.4 L 16.4 21.6 L 15.6 23.5 L 15.0 25.1 L 14.0 26.3 L 12.2 27.7 L 13.2 26.1 L 14.0 24.5 L 14.8 21.4 L 14.8 19.8 L 14.0 17.9 L 13.4 16.7 L 12.2 14.7 L 11.7 13.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 14.5 L 26.0 14.7 L 27.6 15.3 L 29.1 16.8 L 29.7 17.9 L 30.5 19.4 L 30.7 21.0 L 30.5 22.6 L 30.1 24.0 L 29.5 25.1 L 28.5 26.1 L 27.4 27.7 L 28.5 25.5 L 29.1 23.5 L 29.5 21.4 L 29.0 18.8 L 27.9 17.2 L 26.6 15.7 L 25.4 15.1 L 24.4 14.5 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 24.4 14.5 L 26.0 14.7 L 27.6 15.3 L 29.1 16.8 L 29.7 17.9 L 30.5 19.4 L 30.7 21.0 L 30.5 22.6 L 30.1 24.0 L 29.5 25.1 L 28.5 26.1 L 27.4 27.7 L 28.5 25.5 L 29.1 23.5 L 29.5 21.4 L 29.0 18.8 L 27.9 17.2 L 26.6 15.7 L 25.4 15.1 L 24.4 14.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.38\\\" cy=\\\"28.67\\\" r=\\\"2.33\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"8.70\\\" cy=\\\"21.00\\\" r=\\\"7.42\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.75\\\" cy=\\\"8.23\\\" r=\\\"7.23\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"23.80\\\" cy=\\\"21.38\\\" r=\\\"6.86\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 2.4 28.7 L 13.8 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.7 L 29.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CAIRNS11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 17.5 1.1 L 20.1 1.9 L 21.7 2.7 L 23.2 4.6 L 23.8 6.2 L 24.2 7.4 L 24.2 9.4 L 23.4 10.9 L 22.9 12.1 L 21.8 13.5 L 21.3 14.1 L 21.8 12.5 L 22.7 10.9 L 22.9 9.8 L 22.9 7.8 L 22.2 5.8 L 21.7 4.6 L 20.7 3.5 L 19.1 2.1 L 17.5 1.1 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 17.5 1.1 L 20.1 1.9 L 21.7 2.7 L 23.2 4.6 L 23.8 6.2 L 24.2 7.4 L 24.2 9.4 L 23.4 10.9 L 22.9 12.1 L 21.8 13.5 L 21.3 14.1 L 21.8 12.5 L 22.7 10.9 L 22.9 9.8 L 22.9 7.8 L 22.2 5.8 L 21.7 4.6 L 20.7 3.5 L 19.1 2.1 L 17.5 1.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.7 13.7 L 13.2 15.1 L 14.8 16.3 L 15.4 17.2 L 15.9 18.8 L 16.4 20.4 L 16.4 21.6 L 15.6 23.5 L 15.0 25.1 L 14.0 26.3 L 12.2 27.7 L 13.2 26.1 L 14.0 24.5 L 14.8 21.4 L 14.8 19.8 L 14.0 17.9 L 13.4 16.7 L 12.2 14.7 L 11.7 13.7 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 11.7 13.7 L 13.2 15.1 L 14.8 16.3 L 15.4 17.2 L 15.9 18.8 L 16.4 20.4 L 16.4 21.6 L 15.6 23.5 L 15.0 25.1 L 14.0 26.3 L 12.2 27.7 L 13.2 26.1 L 14.0 24.5 L 14.8 21.4 L 14.8 19.8 L 14.0 17.9 L 13.4 16.7 L 12.2 14.7 L 11.7 13.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 14.5 L 26.0 14.7 L 27.6 15.3 L 29.1 16.8 L 29.7 17.9 L 30.5 19.4 L 30.7 21.0 L 30.5 22.6 L 30.1 24.0 L 29.5 25.1 L 28.5 26.1 L 27.4 27.7 L 28.5 25.5 L 29.1 23.5 L 29.5 21.4 L 29.0 18.8 L 27.9 17.2 L 26.6 15.7 L 25.4 15.1 L 24.4 14.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 24.4 14.5 L 26.0 14.7 L 27.6 15.3 L 29.1 16.8 L 29.7 17.9 L 30.5 19.4 L 30.7 21.0 L 30.5 22.6 L 30.1 24.0 L 29.5 25.1 L 28.5 26.1 L 27.4 27.7 L 28.5 25.5 L 29.1 23.5 L 29.5 21.4 L 29.0 18.8 L 27.9 17.2 L 26.6 15.7 L 25.4 15.1 L 24.4 14.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.38\\\" cy=\\\"28.67\\\" r=\\\"2.33\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"8.70\\\" cy=\\\"21.00\\\" r=\\\"7.42\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.75\\\" cy=\\\"8.23\\\" r=\\\"7.23\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"23.80\\\" cy=\\\"21.38\\\" r=\\\"6.86\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 2.4 28.7 L 13.8 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.7 L 29.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CBLARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.5 1.0 L 11.0 14.5 L 21.0 18.1 L 13.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CGUSTA02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"2.32\\\" cy=\\\"24.70\\\" r=\\\"1.32\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 2.3 24.7 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 5.4 6.0 L 31.0 6.0 L 31.0 22.0 L 5.4 22.0 L 5.4 6.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 5.4 6.0 L 31.0 6.0 L 31.0 22.0 L 5.4 22.0 L 5.4 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.4 6.0 L 31.0 6.0 L 31.0 22.0 L 5.4 22.0 L 5.4 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 11.3 L 12.8 10.3 L 10.8 10.3 L 8.6 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.6 16.7 L 10.7 18.8 L 12.8 18.8 L 15.0 17.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.7 11.3 L 23.5 10.3 L 21.5 10.3 L 19.2 11.4 L 19.2 16.7 L 21.6 18.8 L 23.5 18.8 L 25.7 17.7 L 25.7 14.7 L 23.5 14.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.6 11.4 L 8.6 16.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHCRDEL1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 31.0 L 31.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHCOR\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHCRID01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.56\\\" r=\\\"2.44\\\" fill=\\\"none\\\" stroke=\\\"CHCOR\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 1.0 L 16.0 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHCOR\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHIMNY01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"13.14\\\" cy=\\\"28.50\\\" r=\\\"2.50\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 28.5 L 21.0 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.3 28.5 L 11.4 8.0 L 14.6 8.0 L 17.1 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.3 28.5 L 10.4 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.4 8.0 L 10.6 5.6 L 10.8 3.6 L 11.9 2.5 L 13.6 1.8 L 16.2 1.8 L 17.5 2.4 L 18.9 1.5 L 21.3 1.0 L 23.5 1.1 L 25.6 1.3 L 26.5 2.3 L 26.7 4.2 L 24.3 5.6 L 21.5 5.7 L 21.4 7.0 L 18.7 8.1 L 14.6 8.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHIMNY11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"13.14\\\" cy=\\\"28.50\\\" r=\\\"2.50\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 28.5 L 21.0 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.3 28.5 L 11.4 8.0 L 14.6 8.0 L 17.1 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.3 28.5 L 10.4 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.4 8.0 L 10.6 5.6 L 10.8 3.6 L 11.9 2.5 L 13.6 1.8 L 16.2 1.8 L 17.5 2.4 L 18.9 1.5 L 21.3 1.0 L 23.5 1.1 L 25.6 1.3 L 26.5 2.3 L 26.7 4.2 L 24.3 5.6 L 21.5 5.7 L 21.4 7.0 L 18.7 8.1 L 14.6 8.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO06\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 15.8 5.9 L 15.8 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.9 24.3 L 17.1 24.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO07\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0 L 1.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 5.1 L 15.0 7.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.2 25.5 L 15.2 11.3 L 9.7 11.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.7 25.5 L 19.8 25.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO08\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0 L 1.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 5.1 L 15.0 7.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.2 25.5 L 15.2 11.3 L 9.7 11.2\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.7 25.5 L 19.8 25.5\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO09\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 15.8 5.9 L 15.8 19.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.9 24.3 L 17.1 24.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO10\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0 L 1.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 5.1 L 15.0 7.6\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.2 25.5 L 15.2 11.3 L 9.7 11.2\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.7 25.5 L 19.8 25.5\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHINFO11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 15.8 5.9 L 15.8 19.0\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.9 24.3 L 17.1 24.3\\\" fill=\\\"none\\\" stroke=\\\"ADINF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CHKSYM01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"OUTLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CLRLIN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.0 31.0 L 16.0 1.0 L 24.0 31.0 L 8.0 31.0 Z\\\" fill=\\\"NINFO\\\" />\\n <path d=\\\"M 8.0 31.0 L 16.0 1.0 L 24.0 31.0 L 8.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CRANES01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"13.50\\\" cy=\\\"26.00\\\" r=\\\"2.50\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 3.5 26.0 L 11.0 26.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 26.0 L 23.5 26.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.0 26.0 L 11.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 26.0 L 16.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 3.5 L 31.0 3.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 3.5 L 1.0 11.0 L 6.0 11.0 L 6.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CTNARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 19.9 L 16.1 5.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.0 25.3 L 18.4 25.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"CTYARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 19.9 L 16.1 5.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.0 25.3 L 18.4 25.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"CTYARE71\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.0 19.1 L 19.0 7.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.3 23.5 L 20.8 23.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"18.93\\\" cy=\\\"16.00\\\" r=\\\"12.07\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 3.2 27.8 L 3.2 22.1 L 1.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.8 L 5.6 27.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.1 19.2 L 2.2 20.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CURDEF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.5 29.1 L 15.5 23.2 L 18.5 29.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.5 23.6 L 15.5 17.7 L 18.5 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.5 2.5 L 15.5 29.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.5 9.9 L 15.5 2.6 L 18.5 9.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 12.8 L 1.4 12.0 L 1.8 11.3 L 2.3 10.8 L 2.8 10.3 L 3.6 10.0 L 4.2 10.1 L 5.1 10.3 L 6.0 10.5 L 6.6 11.5 L 7.2 12.1 L 7.5 12.7 L 7.5 13.5 L 7.2 14.2 L 6.8 14.8 L 6.2 15.5 L 5.5 16.3 L 4.9 17.0 L 4.5 17.6 L 4.2 18.1 L 4.1 18.8 L 4.1 19.4 L 4.1 20.0 L 4.2 20.6 L 4.2 20.7\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.6 23.2 L 5.1 23.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.5 12.7 L 24.8 11.8 L 25.2 11.1 L 25.7 10.6 L 26.2 10.1 L 27.0 9.8 L 27.7 9.9 L 28.6 10.1 L 29.4 10.3 L 30.1 11.3 L 30.6 11.9 L 31.0 12.6 L 31.0 13.3 L 30.6 14.0 L 30.3 14.6 L 29.7 15.3 L 29.0 16.1 L 28.4 16.9 L 28.0 17.4 L 27.6 17.9 L 27.6 18.6 L 27.6 19.3 L 27.6 19.8 L 27.6 20.4 L 27.6 20.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.0 23.0 L 28.6 23.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CURENT01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.7 30.6 L 16.0 24.0 L 19.3 30.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 24.5 L 16.0 17.9 L 19.3 24.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 9.2 L 16.0 1.1 L 19.3 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CURSRA01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 1.0 L 16.1 31.0\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 15.8 L 31.0 15.8\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"CURSRB01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 13.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 1.0 L 15.9 13.0\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 19.0 L 15.9 31.0\\\" fill=\\\"none\\\" stroke=\\\"CURSR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DANGER01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.3 13.0 L 3.8 9.4 L 7.1 6.4 L 9.8 5.2 L 13.3 4.2 L 19.0 4.2 L 22.8 5.2 L 26.6 7.5 L 29.1 10.4 L 31.0 14.1 L 31.0 18.6 L 28.5 22.1 L 25.6 24.9 L 22.0 26.8 L 18.1 27.9 L 12.8 27.7 L 9.1 26.3 L 5.7 24.1 L 2.9 21.2 L 1.0 17.4 L 1.3 13.0 Z\\\" fill=\\\"DEPVS\\\" />\\n <path d=\\\"M 1.3 13.0 L 3.8 9.4 L 7.1 6.4 L 9.8 5.2 L 13.3 4.2 L 19.0 4.2 L 22.8 5.2 L 26.6 7.5 L 29.1 10.4 L 31.0 14.1 L 31.0 18.6 L 28.5 22.1 L 25.6 24.9 L 22.0 26.8 L 18.1 27.9 L 12.8 27.7 L 9.1 26.3 L 5.7 24.1 L 2.9 21.2 L 1.0 17.4 L 1.3 13.0\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DANGER02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\"></svg>\\n\",\n \"DANGER03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.3 13.0 L 3.8 9.4 L 7.1 6.4 L 9.8 5.2 L 13.3 4.2 L 19.0 4.2 L 22.8 5.2 L 26.6 7.5 L 29.1 10.4 L 31.0 14.1 L 31.0 18.6 L 28.5 22.1 L 25.6 24.9 L 22.0 26.8 L 18.1 27.9 L 12.8 27.7 L 9.1 26.3 L 5.7 24.1 L 2.9 21.2 L 1.0 17.4 L 1.3 13.0 Z\\\" fill=\\\"DEPIT\\\" />\\n <path d=\\\"M 1.3 13.0 L 3.8 9.4 L 7.1 6.4 L 9.8 5.2 L 13.3 4.2 L 19.0 4.2 L 22.8 5.2 L 26.6 7.5 L 29.1 10.4 L 31.0 14.1 L 31.0 18.6 L 28.5 22.1 L 25.6 24.9 L 22.0 26.8 L 18.1 27.9 L 12.8 27.7 L 9.1 26.3 L 5.7 24.1 L 2.9 21.2 L 1.0 17.4 L 1.3 13.0\\\" fill=\\\"none\\\" stroke=\\\"DEPIT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DAYSQR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.7 1.0 L 5.7 21.6 L 26.3 21.6 L 26.3 1.0 L 5.7 1.0\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 23.1 L 16.1 31.0\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.08\\\" cy=\\\"21.48\\\" r=\\\"2.57\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.1 21.5 Z\\\" fill=\\\"LITGN\\\" />\\n <circle cx=\\\"16.08\\\" cy=\\\"21.48\\\" r=\\\"2.57\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"DAYSQR21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.2 1.0 L 7.2 18.6 L 24.8 18.6 L 24.8 1.0 L 7.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 18.6 L 16.0 25.3\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.07\\\" cy=\\\"28.14\\\" r=\\\"2.86\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.6 28.1 L 13.3 28.1\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 28.1 L 22.7 28.1\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DAYTRI01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 3.5 21.1 L 28.5 21.1 L 16.0 1.0 L 3.5 21.1\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 21.1 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.95\\\" cy=\\\"21.07\\\" r=\\\"2.50\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 21.1 Z\\\" fill=\\\"LITRD\\\" />\\n <circle cx=\\\"15.95\\\" cy=\\\"21.07\\\" r=\\\"2.50\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"DAYTRI05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 3.6 1.0 L 28.4 1.0 L 16.0 20.9 L 3.6 1.2\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.93\\\" cy=\\\"20.42\\\" r=\\\"2.47\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 15.9 20.4 Z\\\" fill=\\\"LITRD\\\" />\\n <circle cx=\\\"15.93\\\" cy=\\\"20.42\\\" r=\\\"2.47\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 21.7 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DAYTRI21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.7 17.6 L 26.3 17.6 L 16.0 1.0 L 5.7 17.6\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 17.6 L 16.0 25.8\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.96\\\" cy=\\\"28.32\\\" r=\\\"2.68\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.9 28.2 L 13.3 28.2\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.6 28.2 L 22.1 28.2\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DAYTRI25\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.4 1.0 L 27.6 1.0 L 16.0 19.6 L 4.4 1.2\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 19.5 L 16.0 25.2\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"15.93\\\" cy=\\\"28.00\\\" r=\\\"3.00\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.1 28.0 L 13.0 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 28.0 L 22.9 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DIRBOY01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.0 20.9 L 2.2 20.9 L 16.0 7.1 L 29.7 20.9 L 22.7 20.9 L 22.7 25.5 L 9.0 25.5 L 9.0 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"4.48\\\" cy=\\\"10.02\\\" r=\\\"3.48\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.8\\\" />\\n <circle cx=\\\"27.59\\\" cy=\\\"10.02\\\" r=\\\"3.41\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.8\\\" />\\n</svg>\\n\",\n \"DIRBOYA1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.0 20.9 L 2.2 20.9 L 16.0 7.1 L 29.7 20.9 L 22.7 20.9 L 22.7 25.5 L 9.0 25.5 L 9.0 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"4.48\\\" cy=\\\"10.02\\\" r=\\\"3.48\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"1.8\\\" />\\n <circle cx=\\\"27.59\\\" cy=\\\"10.02\\\" r=\\\"3.41\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"1.8\\\" />\\n</svg>\\n\",\n \"DIRBOYB1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.0 20.9 L 2.2 20.9 L 16.0 7.1 L 29.7 20.9 L 22.7 20.9 L 22.7 25.5 L 9.0 25.5 L 9.0 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"4.48\\\" cy=\\\"10.02\\\" r=\\\"3.48\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"1.8\\\" />\\n <circle cx=\\\"27.59\\\" cy=\\\"10.02\\\" r=\\\"3.41\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"1.8\\\" />\\n</svg>\\n\",\n \"DISMAR03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"DISMAR04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 5.1 L 1.0 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.4 13.3 L 1.0 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.5 18.7 L 9.2 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.6 13.3 L 14.6 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.6 15.5 L 16.5 13.5 L 18.2 13.0 L 19.3 13.0 L 21.6 14.1 L 22.8 15.7 L 22.8 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.8 16.0 L 23.9 13.8 L 26.1 12.8 L 27.5 12.8 L 29.7 13.8 L 31.0 16.0 L 31.0 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DNGHILIT\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0 Z\\\" fill=\\\"DNGHL\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"DNGHL\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 31.0 L 31.0 31.0 L 31.0 1.0 L 1.0 1.0 L 1.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"DNGHL\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DOMES001\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.73\\\" cy=\\\"25.99\\\" r=\\\"2.56\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 13.2 25.8 L 3.4 25.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.4 25.8 L 2.8 24.9 L 2.0 22.8 L 1.2 20.7 L 1.0 19.0 L 1.0 16.6 L 1.6 14.1 L 2.7 11.2 L 3.6 9.4 L 5.3 7.6 L 7.1 6.1 L 8.8 5.2 L 11.6 4.2 L 14.0 3.7 L 16.6 3.4 L 19.5 3.9 L 22.3 4.8 L 25.0 6.5 L 27.5 8.9 L 28.9 10.8 L 30.2 13.3 L 30.9 16.4 L 31.0 20.1 L 30.4 22.6 L 29.6 24.6 L 28.7 25.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.2 25.8 L 28.6 25.8 L 28.8 25.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DOMES011\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.73\\\" cy=\\\"25.99\\\" r=\\\"2.56\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 13.2 25.8 L 3.4 25.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.4 25.8 L 2.8 24.9 L 2.0 22.8 L 1.2 20.7 L 1.0 19.0 L 1.0 16.6 L 1.6 14.1 L 2.7 11.2 L 3.6 9.4 L 5.3 7.6 L 7.1 6.1 L 8.8 5.2 L 11.6 4.2 L 14.0 3.7 L 16.6 3.4 L 19.5 3.9 L 22.3 4.8 L 25.0 6.5 L 27.5 8.9 L 28.9 10.8 L 30.2 13.3 L 30.9 16.4 L 31.0 20.1 L 30.4 22.6 L 29.6 24.6 L 28.7 25.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.2 25.8 L 28.6 25.8 L 28.8 25.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DSHAER01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.49\\\" cy=\\\"28.74\\\" r=\\\"2.26\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 6.1 28.7 L 12.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.8 28.7 L 24.0 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.4 1.3 L 25.9 10.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.3 6.1 L 19.7 3.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.1 14.1 L 10.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.2 15.0 L 19.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.4 1.0 L 9.3 3.3 L 8.9 7.0 L 9.6 10.0 L 11.8 12.8 L 14.1 14.1 L 17.2 15.0 L 19.3 15.0 L 22.0 14.6 L 24.5 13.2 L 25.9 10.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DSHAER11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"15.49\\\" cy=\\\"28.74\\\" r=\\\"2.26\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 6.1 28.7 L 12.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.8 28.7 L 24.0 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.4 1.3 L 25.9 10.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.3 6.1 L 19.7 3.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.1 14.1 L 10.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.2 15.0 L 19.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.4 1.0 L 9.3 3.3 L 8.9 7.0 L 9.6 10.0 L 11.8 12.8 L 14.1 14.1 L 17.2 15.0 L 19.3 15.0 L 22.0 14.6 L 24.5 13.2 L 25.9 10.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DWRTPT51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 7.3 L 1.0 24.6 L 6.6 24.6 L 8.6 23.6 L 10.6 20.8 L 10.6 11.2 L 8.6 8.3 L 6.7 7.3 L 1.0 7.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.6 7.3 L 19.4 24.7 L 23.3 7.5 L 27.1 24.7 L 31.0 7.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DWRUTE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.8 10.0 L 9.8 10.0 L 15.8 1.0 L 22.0 10.0 L 19.0 10.0 L 19.0 21.9 L 22.2 21.9 L 16.0 31.0 L 9.9 21.9 L 12.8 21.9 L 12.8 10.0 Z\\\" fill=\\\"TRFCD\\\" />\\n <path d=\\\"M 12.8 10.0 L 9.8 10.0 L 15.8 1.0 L 22.0 10.0 L 19.0 10.0 L 19.0 21.9 L 22.2 21.9 L 16.0 31.0 L 9.9 21.9 L 12.8 21.9 L 12.8 10.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.8 10.0 L 9.8 10.0 L 15.8 1.0 L 22.0 10.0 L 19.0 10.0 L 19.0 21.9 L 22.2 21.9 L 16.0 31.0 L 9.9 21.9 L 12.8 21.9 L 12.8 10.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"EBBSTR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.6 9.4 L 16.0 1.0 L 19.4 9.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.1 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"EBLVRM11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"NINFO\\\" />\\n</svg>\\n\",\n \"ENTRES51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 23.5 16.0 L 9.5 16.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"ENTRES61\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 20.1 15.7 L 8.2 15.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"13.73\\\" cy=\\\"15.68\\\" r=\\\"12.73\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 29.6 29.1 L 31.0 29.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 29.9 19.2 L 29.9 27.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ENTRES71\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 24.9 16.0 L 13.7 16.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"18.93\\\" cy=\\\"16.00\\\" r=\\\"12.07\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 3.2 27.8 L 3.2 22.1 L 1.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.8 L 5.6 27.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.1 19.2 L 2.2 20.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ERBLTIK1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.9 14.4 L 17.6 14.4\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.1 15.3 L 10.7 14.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.1 14.7 L 24.7 15.4\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 17.4 L 4.4 16.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.5 16.4 L 31.0 17.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"EVENTS02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 4.8 L 31.0 4.8 L 31.0 27.3 L 1.0 27.3 L 1.0 4.8\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 27.3 L 31.0 4.8\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FAIRWY51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.7 31.0 L 12.7 11.0 L 9.3 11.0 L 16.0 1.0 L 22.7 11.0 L 19.3 11.0 L 19.3 31.0 L 12.7 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FAIRWY52\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.4 20.9 L 22.7 20.9 L 16.1 31.0 L 9.4 20.9 L 12.7 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.6 20.9 L 12.6 11.0 L 9.3 11.0 L 16.0 1.0 L 22.6 11.0 L 19.3 11.0 L 19.3 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FLASTK01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.5 28.5 L 13.5 12.5 L 18.5 12.5 L 18.5 28.5 L 17.8 26.7 L 16.0 26.1 L 14.4 26.7 L 13.5 28.5 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 13.5 28.5 L 13.5 12.5 L 18.5 12.5 L 18.5 28.5 L 17.8 26.7 L 16.0 26.1 L 14.4 26.7 L 13.5 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"28.53\\\" r=\\\"2.47\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 18.5 28.5 L 23.4 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.5 28.5 L 8.6 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.8 1.0 L 17.2 1.9 L 15.7 2.9 L 14.4 4.4 L 13.5 6.3 L 13.5 8.1 L 13.8 9.1 L 15.1 9.6 L 16.6 9.6 L 17.5 9.1 L 18.1 7.8 L 17.8 6.3 L 17.2 5.6 L 17.2 4.4 L 17.2 3.2 L 18.1 2.2 L 18.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FLASTK11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.5 28.5 L 13.5 12.5 L 18.5 12.5 L 18.5 28.5 L 17.8 26.7 L 16.0 26.1 L 14.4 26.7 L 13.5 28.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 13.5 28.5 L 13.5 12.5 L 18.5 12.5 L 18.5 28.5 L 17.8 26.7 L 16.0 26.1 L 14.4 26.7 L 13.5 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"28.53\\\" r=\\\"2.47\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 18.5 28.5 L 23.4 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.5 28.5 L 8.6 28.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.8 1.0 L 17.2 1.9 L 15.7 2.9 L 14.4 4.4 L 13.5 6.3 L 13.5 8.1 L 13.8 9.1 L 15.1 9.6 L 16.6 9.6 L 17.5 9.1 L 18.1 7.8 L 17.8 6.3 L 17.2 5.6 L 17.2 4.4 L 17.2 3.2 L 18.1 2.2 L 18.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FLDSTR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 9.2 L 16.0 1.1 L 19.3 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 18.4 L 19.3 25.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 24.5 L 19.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 25.3 L 16.0 27.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FLGSTF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.00\\\" r=\\\"3.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 25.0 L 16.0 1.0 L 25.0 1.0 L 25.0 11.5 L 16.0 11.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.0 28.0 L 13.0 28.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 28.0 L 25.0 28.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FOGSIG01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 2.4 2.2 L 3.8 9.9 L 7.1 17.4 L 10.9 22.8 L 16.0 27.6 L 20.9 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.5 1.8 L 13.0 7.6 L 16.0 13.2 L 19.0 18.2 L 22.8 21.4 L 25.3 22.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.7 1.0 L 21.9 6.9 L 25.1 11.6 L 28.2 14.1 L 29.6 15.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FORSTC01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FORSTC11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FOULGND1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 14.5 4.5 L 6.7 27.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.2 4.5 L 18.2 27.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.2 12.2 L 31.0 12.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 19.9 L 28.4 19.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FRYARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.6 15.8 L 1.0 15.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.7 15.8 L 25.1 15.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.1 14.3 L 7.7 14.3 L 7.7 17.7 L 17.0 17.7 L 19.4 16.5 L 19.4 15.4 L 17.1 14.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.5 15.9 L 31.0 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FRYARE52\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.6 15.8 L 1.0 15.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.7 15.8 L 25.1 15.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.1 14.3 L 7.7 14.3 L 7.7 17.7 L 17.0 17.7 L 19.4 16.5 L 19.4 15.4 L 17.1 14.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.5 15.9 L 31.0 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHFAC02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 28.9 L 31.0 28.9 L 31.0 15.8 L 1.1 15.8 L 1.1 28.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.9 3.1 L 17.7 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHFAC03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 12.3 L 1.0 19.7 L 31.0 19.7 L 31.0 12.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.7 12.4 L 8.7 19.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 12.5 L 16.0 19.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.6 12.5 L 23.6 19.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHGRD01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.7 16.1 L 1.5 11.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.7 16.2 L 1.0 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.8 16.1 L 7.9 13.9 L 10.5 12.0 L 13.9 10.4 L 17.7 9.9 L 21.1 10.1 L 24.9 10.8 L 28.1 12.3 L 30.4 14.0 L 30.9 15.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.6 16.1 L 8.9 18.7 L 12.8 21.0 L 17.0 21.9 L 20.0 22.1 L 23.2 21.6 L 26.2 20.4 L 28.7 18.2 L 30.6 15.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.9 10.4 L 21.7 13.7 L 21.7 18.2 L 23.9 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 15.2 L 30.5 15.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHHAV01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 20.6 L 6.3 16.1 L 8.6 13.6 L 11.2 12.0 L 13.9 10.9 L 16.5 10.2 L 19.4 10.2 L 21.7 10.4 L 24.6 11.4 L 27.2 12.6 L 29.6 14.4 L 31.0 16.1 L 29.2 17.8 L 27.5 19.2 L 25.4 20.3 L 22.7 21.3 L 20.0 21.8 L 16.9 21.8 L 13.9 21.3 L 11.1 20.3 L 8.6 18.6 L 6.9 17.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.4 15.4 L 1.6 10.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.0 11.5 L 24.4 12.8 L 23.9 14.6 L 23.8 15.8 L 23.8 16.7 L 24.1 18.4 L 24.8 20.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.9 17.2 L 5.4 15.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHRES51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 20.8 L 6.3 16.3 L 8.6 13.8 L 11.2 12.1 L 13.9 11.1 L 16.5 10.3 L 19.4 10.3 L 21.7 10.6 L 24.6 11.6 L 27.2 12.7 L 29.6 14.5 L 31.0 16.3 L 29.2 17.9 L 27.6 19.4 L 25.4 20.4 L 22.7 21.5 L 20.0 22.0 L 16.9 22.0 L 13.9 21.5 L 11.1 20.4 L 8.6 18.8 L 6.9 17.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 16.1 L 2.1 11.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.1 17.4 L 5.9 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.4 7.2 L 10.7 24.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHRES61\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 20.2 L 5.7 16.2 L 7.7 14.0 L 10.0 12.5 L 12.4 11.6 L 14.7 10.9 L 17.3 10.9 L 19.4 11.1 L 21.9 12.0 L 24.2 13.0 L 26.3 14.6 L 27.6 16.2 L 26.0 17.6 L 24.5 18.9 L 22.6 19.9 L 20.2 20.8 L 17.8 21.2 L 15.1 21.2 L 12.4 20.8 L 9.9 19.9 L 7.7 18.4 L 6.2 17.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.4 16.1 L 2.0 11.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.4 17.2 L 5.3 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.2 8.1 L 9.6 23.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.2 15.6 L 30.2 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 29.6 23.9 L 31.0 23.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHRES71\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.2 19.8 L 11.4 16.2 L 13.2 14.3 L 15.3 12.9 L 17.5 12.1 L 19.5 11.5 L 21.8 11.5 L 23.7 11.7 L 25.9 12.5 L 28.0 13.4 L 29.9 14.8 L 31.0 16.2 L 29.6 17.5 L 28.3 18.7 L 26.6 19.5 L 24.4 20.4 L 22.3 20.8 L 19.8 20.8 L 17.5 20.4 L 15.2 19.5 L 13.2 18.2 L 11.9 17.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.1 16.1 L 8.1 12.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 17.1 L 11.1 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.9 9.0 L 14.9 23.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.1 22.9 L 3.1 17.4 L 1.0 17.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 22.9 L 5.4 22.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.1 14.6 L 2.1 15.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"GATCON03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 2.3 9.6 L 29.4 9.6\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.3 22.4 L 29.6 22.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.3 16.0 L 16.0 5.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.3 16.0 L 16.0 26.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.4 5.3 L 11.7 16.0 L 22.4 26.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"GATCON04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 2.3 9.6 L 29.4 9.6\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.3 22.4 L 29.6 22.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 5.3 L 16.0 26.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"HILTOP01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 24.0 14.3 L 24.7 16.9 L 31.0 13.6 L 24.0 14.3 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 24.0 14.3 L 24.7 16.9 L 31.0 13.6 L 24.0 14.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.0 18.2 L 22.4 20.2 L 28.9 23.7 L 24.0 18.2 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 24.0 18.2 L 22.4 20.2 L 28.9 23.7 L 24.0 18.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.3 20.6 L 8.6 18.5 L 3.8 24.1 L 10.3 20.6 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 10.3 20.6 L 8.6 18.5 L 3.8 24.1 L 10.3 20.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.3 22.1 L 12.8 21.2 L 11.3 28.5 L 15.3 22.1 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 15.3 22.1 L 12.8 21.2 L 11.3 28.5 L 15.3 22.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.2 20.6 L 17.7 21.8 L 22.2 27.8 L 20.2 20.6 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 20.2 20.6 L 17.7 21.8 L 22.2 27.8 L 20.2 20.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.3 11.3 L 22.4 12.9 L 25.8 6.4 L 20.4 11.3 L 20.3 11.3 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 20.3 11.3 L 22.4 12.9 L 25.8 6.4 L 20.4 11.3 L 20.3 11.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.7 16.7 L 8.4 14.0 L 1.0 13.3 L 7.7 16.7 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 7.7 16.7 L 8.4 14.0 L 1.0 13.3 L 7.7 16.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 11.2 L 17.7 10.7 L 15.1 3.5 L 14.9 11.2 L 15.0 11.2 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 15.0 11.2 L 17.7 10.7 L 15.1 3.5 L 14.9 11.2 L 15.0 11.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.3 13.3 L 12.4 11.8 L 7.0 6.4 L 10.2 13.3 L 10.3 13.3 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 10.3 13.3 L 12.4 11.8 L 7.0 6.4 L 10.2 13.3 L 10.3 13.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"HILTOP11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 24.0 14.3 L 24.7 16.9 L 31.0 13.6 L 24.0 14.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 24.0 14.3 L 24.7 16.9 L 31.0 13.6 L 24.0 14.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.0 18.2 L 22.4 20.2 L 28.9 23.7 L 24.0 18.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 24.0 18.2 L 22.4 20.2 L 28.9 23.7 L 24.0 18.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.3 20.6 L 8.6 18.5 L 3.8 24.1 L 10.3 20.6 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 10.3 20.6 L 8.6 18.5 L 3.8 24.1 L 10.3 20.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.3 22.1 L 12.8 21.2 L 11.3 28.5 L 15.3 22.1 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 15.3 22.1 L 12.8 21.2 L 11.3 28.5 L 15.3 22.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.2 20.6 L 17.7 21.8 L 22.2 27.8 L 20.2 20.6 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 20.2 20.6 L 17.7 21.8 L 22.2 27.8 L 20.2 20.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.3 11.3 L 22.4 12.9 L 25.8 6.4 L 20.4 11.3 L 20.3 11.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 20.3 11.3 L 22.4 12.9 L 25.8 6.4 L 20.4 11.3 L 20.3 11.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.7 16.7 L 8.4 14.0 L 1.0 13.3 L 7.7 16.7 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 7.7 16.7 L 8.4 14.0 L 1.0 13.3 L 7.7 16.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.0 11.2 L 17.7 10.7 L 15.1 3.5 L 14.9 11.2 L 15.0 11.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 15.0 11.2 L 17.7 10.7 L 15.1 3.5 L 14.9 11.2 L 15.0 11.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.3 13.3 L 12.4 11.8 L 7.0 6.4 L 10.2 13.3 L 10.3 13.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 10.3 13.3 L 12.4 11.8 L 7.0 6.4 L 10.2 13.3 L 10.3 13.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"HRBFAC09\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 6.1 15.9 L 7.4 14.7 L 9.2 13.0 L 10.8 12.1 L 12.4 11.3 L 14.3 10.5 L 15.6 10.1 L 17.5 10.0 L 19.0 10.0 L 20.7 10.0 L 22.8 10.5 L 24.4 11.0 L 26.2 11.7 L 28.0 12.7 L 29.3 13.8 L 30.4 14.8 L 31.0 15.9 L 29.6 17.2 L 27.8 19.0 L 25.7 20.0 L 24.1 20.7 L 22.0 21.2 L 20.3 21.5 L 19.0 21.5 L 17.2 21.5 L 15.6 21.2 L 14.3 21.1 L 13.3 20.7 L 11.6 20.0 L 10.0 19.0 L 8.7 17.8 L 7.4 17.2 L 6.9 16.6 L 6.1 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.1 15.9 L 1.5 20.4 L 1.3 19.0 L 1.0 17.2 L 1.0 15.6 L 1.0 13.5 L 1.5 11.4 L 2.1 10.5 L 6.1 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.5 5.7 L 7.7 3.7 L 9.2 2.7 L 11.4 1.8 L 14.5 1.2 L 17.5 1.0 L 20.4 1.5 L 22.7 2.3 L 24.7 3.6 L 27.0 5.7 L 28.7 7.7 L 29.3 8.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.2 26.0 L 7.6 28.3 L 10.1 29.6 L 12.0 30.4 L 14.0 30.8 L 16.6 31.0 L 18.2 31.0 L 20.3 30.5 L 22.5 29.7 L 24.6 28.4 L 26.2 27.1 L 27.6 25.9 L 29.4 23.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"HULKES01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.2 22.0 L 4.3 23.0 L 7.8 23.6 L 10.8 24.2 L 13.5 24.2 L 16.6 23.2 L 18.7 23.0 L 21.2 22.0 L 23.3 21.1 L 24.9 20.1 L 27.4 19.0 L 28.9 18.0 L 29.8 16.9 L 31.0 16.5 L 29.8 15.0 L 28.3 13.4 L 26.4 12.4 L 24.7 11.3 L 22.8 10.3 L 20.6 9.4 L 19.1 8.8 L 16.8 8.4 L 14.5 7.8 L 12.4 7.8 L 10.8 7.8 L 8.9 8.2 L 7.4 8.2 L 5.2 8.8 L 3.7 9.2 L 2.8 9.7 L 1.2 10.3 L 1.2 22.0 L 1.2 22.0 Z\\\" fill=\\\"CHBRN\\\" />\\n <path d=\\\"M 1.2 22.0 L 4.3 23.0 L 7.8 23.6 L 10.8 24.2 L 13.5 24.2 L 16.6 23.2 L 18.7 23.0 L 21.2 22.0 L 23.3 21.1 L 24.9 20.1 L 27.4 19.0 L 28.9 18.0 L 29.8 16.9 L 31.0 16.5 L 29.8 15.0 L 28.3 13.4 L 26.4 12.4 L 24.7 11.3 L 22.8 10.3 L 20.6 9.4 L 19.1 8.8 L 16.8 8.4 L 14.5 7.8 L 12.4 7.8 L 10.8 7.8 L 8.9 8.2 L 7.4 8.2 L 5.2 8.8 L 3.7 9.2 L 2.8 9.7 L 1.2 10.3 L 1.2 22.0 L 1.2 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.2 22.0 L 1.2 10.3\\\" fill=\\\"none\\\" stroke=\\\"CSTLN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 10.5 L 4.9 8.6 L 10.0 7.8 L 14.6 7.8 L 19.7 8.8 L 24.5 11.3 L 29.1 14.0 L 31.0 16.2 L 26.2 19.8 L 21.6 22.0 L 17.9 23.4 L 12.9 24.2 L 11.0 24.2 L 7.9 23.7 L 1.2 22.2\\\" fill=\\\"none\\\" stroke=\\\"CSTLN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"INFARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.6 26.4 L 26.0 26.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.9 3.1 L 14.2 6.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 31.0 L 31.0 31.0 L 30.9 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.1 30.8 L 1.1 1.0 L 30.7 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.6 26.4 L 17.6 11.0 L 10.9 11.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"INFORM01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 21.7 10.3 L 31.0 10.3 L 31.0 1.0 L 21.7 1.0 L 21.7 10.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.1 2.3 L 26.1 3.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.3 8.6 L 26.3 4.2 L 24.6 4.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 8.6 L 27.6 8.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"3.02\\\" cy=\\\"28.95\\\" r=\\\"2.02\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 21.6 10.3 L 4.4 27.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ISODGR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 26.7 5.3 L 31.0 16.0 L 26.7 26.7 L 16.0 31.0 L 5.3 26.7 L 1.0 16.0 L 5.3 5.3 L 16.0 1.0 L 16.0 12.8 L 21.9 6.9 L 25.1 10.1 L 19.2 16.0 L 25.1 21.9 L 21.9 25.1 L 16.0 19.2 L 10.1 25.1 L 6.9 21.9 L 12.8 16.0 L 6.9 10.1 L 10.1 6.9 L 16.0 12.8 L 16.0 1.0 Z\\\" fill=\\\"ISDNG\\\" />\\n <path d=\\\"M 16.0 1.0 L 26.7 5.3 L 31.0 16.0 L 26.7 26.7 L 16.0 31.0 L 5.3 26.7 L 1.0 16.0 L 5.3 5.3 L 16.0 1.0 L 16.0 12.8 L 21.9 6.9 L 25.1 10.1 L 19.2 16.0 L 25.1 21.9 L 21.9 25.1 L 16.0 19.2 L 10.1 25.1 L 6.9 21.9 L 12.8 16.0 L 6.9 10.1 L 10.1 6.9 L 16.0 12.8 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"ISDNG\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 5.3 5.3 L 16.0 1.0 L 26.7 5.3 L 31.0 16.0 L 26.7 26.7 L 16.0 31.0 L 5.3 26.7 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"ISDNG\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ITZARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.7 27.8 L 4.7 4.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.1 4.3 L 23.1 27.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 4.3 L 8.7 4.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.3 27.7 L 8.7 27.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.1 4.3 L 31.0 4.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTDEF\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 31.0 L 10.9 6.9 L 10.9 5.8 L 11.2 4.2 L 12.0 2.8 L 12.8 2.1 L 14.1 1.0 L 16.0 1.0 L 17.6 1.0 L 18.7 1.3 L 20.3 2.3 L 20.8 3.9 L 21.1 5.3 L 21.1 6.6 L 16.3 31.0 Z\\\" fill=\\\"CHMGD\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.9 6.9 L 10.9 5.8 L 11.2 4.2 L 12.0 2.8 L 12.8 2.1 L 14.1 1.0 L 16.0 1.0 L 17.6 1.0 L 18.7 1.3 L 20.3 2.3 L 20.8 3.9 L 21.1 5.3 L 21.1 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.9 6.4 L 10.9 4.7 L 11.4 3.1 L 12.3 2.3 L 13.6 1.3 L 15.2 1.0 L 16.3 1.0 L 17.6 1.0 L 18.9 1.5 L 20.0 2.6 L 20.8 4.2 L 21.1 5.3 L 20.8 7.7 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0 Z\\\" fill=\\\"LITRD\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 5.2 L 21.0 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.5 6.6 L 11.8 5.2 L 12.1 4.1 L 12.9 3.2 L 14.1 2.1 L 15.4 1.9 L 16.3 1.9 L 17.4 2.1 L 18.8 2.7 L 19.6 3.5 L 20.2 4.6 L 20.4 5.7 L 20.2 7.7 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.7 6.0 L 11.5 3.5 L 13.8 1.6 L 16.3 1.0 L 18.5 1.9 L 19.9 2.7 L 21.0 4.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0 Z\\\" fill=\\\"LITGN\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 5.2 L 21.0 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.5 6.6 L 11.8 5.2 L 12.1 4.1 L 12.9 3.2 L 14.1 2.1 L 15.4 1.9 L 16.3 1.9 L 17.4 2.1 L 18.8 2.7 L 19.6 3.5 L 20.2 4.6 L 20.4 5.7 L 20.2 7.7 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITGN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.7 6.0 L 11.5 3.5 L 13.8 1.6 L 16.3 1.0 L 18.5 1.9 L 19.9 2.7 L 21.0 4.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0 Z\\\" fill=\\\"LITYW\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITYW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 5.2 L 21.0 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.5 6.6 L 11.8 5.2 L 12.1 4.1 L 12.9 3.2 L 14.1 2.1 L 15.4 1.9 L 16.3 1.9 L 17.4 2.1 L 18.8 2.7 L 19.6 3.5 L 20.2 4.6 L 20.4 5.7 L 20.2 7.7 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"LITYW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.7 6.0 L 11.5 3.5 L 13.8 1.6 L 16.3 1.0 L 18.5 1.9 L 19.9 2.7 L 21.0 4.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS14\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0 Z\\\" fill=\\\"CHMGD\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.8 7.1 L 11.8 6.3 L 11.8 4.9 L 12.4 3.5 L 13.2 3.0 L 14.3 2.1 L 16.0 1.9 L 17.4 2.1 L 18.5 2.4 L 19.6 3.2 L 20.2 4.6 L 20.4 5.7 L 20.4 6.9 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 5.2 L 21.0 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 28.0 L 11.5 6.6 L 11.8 5.2 L 12.1 4.1 L 12.9 3.2 L 14.1 2.1 L 15.4 1.9 L 16.3 1.9 L 17.4 2.1 L 18.8 2.7 L 19.6 3.5 L 20.2 4.6 L 20.4 5.7 L 20.2 7.7 L 16.3 28.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.7 6.0 L 11.5 3.5 L 13.8 1.6 L 16.3 1.0 L 18.5 1.9 L 19.9 2.7 L 21.0 4.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS81\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 25.9 L 6.9 5.9 L 12.9 26.0 L 19.0 5.9 L 25.0 26.1 L 31.0 5.9\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LIGHTS82\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"6.96\\\" cy=\\\"17.80\\\" r=\\\"5.96\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 14.9 23.1 L 25.9 23.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 12.1 L 28.0 8.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.8 17.5 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LITDEF11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 31.0 L 10.9 6.9 L 10.9 5.8 L 11.2 4.2 L 12.0 2.8 L 12.8 2.1 L 14.1 1.0 L 16.0 1.0 L 17.6 1.0 L 18.7 1.3 L 20.3 2.3 L 20.8 3.9 L 21.1 5.3 L 21.1 6.6 L 16.3 31.0 Z\\\" fill=\\\"CHMGD\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.9 6.9 L 10.9 5.8 L 11.2 4.2 L 12.0 2.8 L 12.8 2.1 L 14.1 1.0 L 16.0 1.0 L 17.6 1.0 L 18.7 1.3 L 20.3 2.3 L 20.8 3.9 L 21.1 5.3 L 21.1 6.6 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 31.0 L 10.9 6.4 L 10.9 4.7 L 11.4 3.1 L 12.3 2.3 L 13.6 1.3 L 15.2 1.0 L 16.3 1.0 L 17.6 1.0 L 18.9 1.5 L 20.0 2.6 L 20.8 4.2 L 21.1 5.3 L 20.8 7.7 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LITFLT01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"18.97\\\" r=\\\"2.40\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 19.0 L 12.7 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.0 19.0 L 2.7 12.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.0 19.0 L 29.3 12.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.0 14.0 L 12.7 10.6 L 19.3 10.6 L 21.0 14.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.7 12.3 L 9.3 14.0 L 22.7 14.0 L 29.3 12.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.3 19.0 L 31.0 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LITFLT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 13.0 L 5.6 21.5 L 26.9 21.5 L 31.0 12.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 13.0 L 5.6 21.5 L 26.9 21.5 L 31.0 12.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 12.9 L 5.6 21.5 L 26.9 21.5 L 30.9 12.9 L 1.0 12.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 12.9 L 5.6 21.5 L 26.9 21.5 L 30.9 12.9 L 1.0 12.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.9 12.9 L 10.9 10.5 L 21.2 10.5 L 21.2 12.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LITVES01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"24.83\\\" r=\\\"2.33\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.0 24.8 L 12.7 24.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.0 24.8 L 2.7 16.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.0 24.8 L 29.3 16.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 19.0 L 16.0 9.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.3 19.0 L 9.3 13.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.7 19.0 L 22.7 13.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.8 L 16.0 4.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 6.5 L 19.3 9.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 9.8 L 19.3 6.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.7 21.5 L 10.2 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.8 21.5 L 27.3 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.7 16.5 L 9.2 19.0 L 16.0 19.0 L 22.7 19.0 L 29.3 16.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.3 24.8 L 31.0 24.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LITVES02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.9 23.3 L 1.0 15.1 L 31.0 15.1 L 25.6 23.3 L 5.9 23.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 5.9 23.3 L 1.0 15.1 L 31.0 15.1 L 25.6 23.3 L 5.9 23.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 15.1 L 16.0 8.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LNDARE01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"13.54\\\" fill=\\\"none\\\" stroke=\\\"LANDA\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"LANDA\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CSTLN\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"LOCMAG01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 18.9 22.5 L 18.9 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 23.4 L 18.9 1.0 L 13.1 17.9 L 14.2 18.3 L 15.1 18.7 L 15.9 19.4 L 16.4 20.0 L 17.0 20.6 L 17.8 21.6 L 18.3 22.4 L 18.8 23.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LOCMAG51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 18.9 23.6 L 18.9 1.0 L 13.0 18.1 L 14.1 18.5 L 15.0 18.9 L 15.8 19.6 L 16.4 20.2 L 17.0 20.8 L 17.7 21.8 L 18.3 22.6 L 18.8 23.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 23.5 L 19.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"LOWACC01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.5 10.2 L 5.8 10.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 8.0 L 5.0 6.6 L 5.0 6.1 L 5.4 5.6 L 5.7 5.2 L 6.3 4.5 L 6.6 3.9 L 6.8 3.2 L 6.6 2.5 L 6.3 2.0 L 5.8 1.5 L 5.3 1.1 L 4.8 1.1 L 4.2 1.0 L 3.7 1.1 L 3.2 1.4 L 2.7 1.9 L 2.4 2.4 L 2.3 2.8 L 2.3 3.3 L 2.4 3.7 L 2.5 3.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.8 8.1 L 29.7 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MAGVAR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.0 23.8 L 19.0 1.0 L 13.0 18.2 L 14.2 18.6 L 15.1 19.1 L 15.9 19.7 L 16.4 20.4 L 17.1 21.0 L 17.8 22.0 L 18.3 22.8 L 18.9 23.7 L 19.0 23.8 Z\\\" fill=\\\"CHMGD\\\" />\\n <path d=\\\"M 19.0 23.8 L 19.0 1.0 L 13.0 18.2 L 14.2 18.6 L 15.1 19.1 L 15.9 19.7 L 16.4 20.4 L 17.1 21.0 L 17.8 22.0 L 18.3 22.8 L 18.9 23.7 L 19.0 23.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.8 1.0 L 18.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MAGVAR51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.0 23.7 L 19.0 1.0 L 13.0 18.2 L 14.2 18.5 L 15.1 19.0 L 15.9 19.6 L 16.4 20.3 L 17.1 20.9 L 17.8 21.9 L 18.3 22.7 L 18.9 23.6 L 19.0 23.7 Z\\\" fill=\\\"CHMGF\\\" />\\n <path d=\\\"M 19.0 23.7 L 19.0 1.0 L 13.0 18.2 L 14.2 18.5 L 15.1 19.0 L 15.9 19.6 L 16.4 20.3 L 17.1 20.9 L 17.8 21.9 L 18.3 22.7 L 18.9 23.6 L 19.0 23.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 23.5 L 18.9 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MARCUL02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.8 19.3 L 10.6 14.1 L 13.7 12.4 L 16.1 11.7 L 18.3 11.4 L 20.8 11.9 L 23.5 12.7 L 25.2 13.8 L 26.6 14.9 L 27.5 16.2 L 26.0 17.4 L 24.5 18.6 L 22.2 19.6 L 20.4 20.2 L 18.1 20.3 L 15.8 20.2 L 13.5 19.7 L 11.8 18.8 L 4.8 13.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 11.7 L 1.0 7.5 L 30.8 7.5 L 30.8 11.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 20.3 L 1.0 24.6 L 31.0 24.6 L 31.0 20.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 20.3 L 7.3 24.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 20.3 L 24.4 24.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 20.3 L 15.9 24.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 7.6 L 7.3 11.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 7.5 L 24.4 11.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.8 7.4 L 15.8 11.7\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MONUMT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"27.31\\\" r=\\\"3.69\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.2 27.3 L 11.3 27.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.7 27.3 L 30.8 27.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.4 1.5 L 8.8 13.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 9.3 L 8.6 23.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.4 18.5 L 17.8 23.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.0 27.2 L 10.3 1.0 L 20.5 1.2 L 23.4 27.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MONUMT12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"27.31\\\" r=\\\"3.69\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 1.2 27.3 L 11.3 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.7 27.3 L 30.8 27.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.4 1.5 L 8.8 13.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 9.3 L 8.6 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.4 18.5 L 17.8 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.0 27.2 L 10.3 1.0 L 20.5 1.2 L 23.4 27.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MORFAC03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.2 31.0 L 1.0 1.0 Z\\\" fill=\\\"LANDA\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.2 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDA\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.2 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MORFAC04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.6 31.0 L 26.4 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.9 31.0 L 10.6 9.5 L 21.4 9.5 L 23.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 30.9 L 16.1 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MSTCON04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.69\\\" r=\\\"2.31\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 9.1 28.7 L 13.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.3 28.7 L 22.9 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.7 28.7 L 16.0 1.0 L 18.3 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MSTCON14\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.69\\\" r=\\\"2.31\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 9.1 28.7 L 13.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.3 28.7 L 22.9 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.7 28.7 L 16.0 1.0 L 18.3 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKINF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 6.0 L 11.5 6.0 L 11.5 26.0 L 1.0 25.5 L 1.0 6.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 1.0 6.0 L 11.5 6.0 L 11.5 26.0 L 1.0 25.5 L 1.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.5 6.0 L 31.0 6.0 L 31.0 26.0 L 20.5 26.0 L 20.5 6.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 20.5 6.0 L 31.0 6.0 L 31.0 26.0 L 20.5 26.0 L 20.5 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.5 6.0 L 20.5 6.0 L 20.5 26.0 L 11.5 26.0 L 11.5 6.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 11.5 6.0 L 20.5 6.0 L 20.5 26.0 L 11.5 26.0 L 11.5 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 6.0 L 31.0 6.0 L 31.0 26.0 L 1.0 26.0 L 1.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKPRH02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 6.0 L 31.0 6.0 L 31.0 13.0 L 1.0 13.0 L 1.0 6.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 1.0 6.0 L 31.0 6.0 L 31.0 13.0 L 1.0 13.0 L 1.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 19.0 L 31.0 19.0 L 31.0 26.0 L 1.0 26.0 L 1.0 19.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 1.0 19.0 L 31.0 19.0 L 31.0 26.0 L 1.0 26.0 L 1.0 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 13.0 L 31.0 13.0 L 31.0 19.0 L 1.0 19.0 L 1.0 13.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 1.0 13.0 L 31.0 13.0 L 31.0 19.0 L 1.0 19.0 L 1.0 13.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 6.0 L 31.0 6.0 L 31.0 26.0 L 1.0 26.0 L 1.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKPRH12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKPRH13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0 Z\\\" fill=\\\"CHRED\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHRED\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKRCD01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKRCD02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 7.7 9.3 L 14.3 16.0 L 7.7 22.7 L 1.0 16.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 1.0 16.0 L 7.7 9.3 L 14.3 16.0 L 7.7 22.7 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.7 16.0 L 24.3 9.3 L 31.0 16.0 L 24.3 22.7 L 17.7 16.0 Z\\\" fill=\\\"CHYLW\\\" />\\n <path d=\\\"M 17.7 16.0 L 24.3 9.3 L 31.0 16.0 L 24.3 22.7 L 17.7 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHYLW\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 7.7 9.3 L 14.3 16.0 L 7.7 22.7 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.7 16.0 L 24.3 9.3 L 31.0 16.0 L 24.3 22.7 L 17.7 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKRCD03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NMKRCD04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0 Z\\\" fill=\\\"CHGRN\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 31.0 16.0 L 16.0 31.0 L 16.0 1.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 16.0 1.0 L 31.0 16.0 L 16.0 31.0 L 1.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NORTHAR1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 31.0 L 16.3 1.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.8 20.7 L 12.8 14.1 L 19.6 20.7 L 19.6 14.2\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.4 8.9 L 19.6 8.9 L 16.2 1.1 L 12.4 8.9 Z\\\" fill=\\\"SCLBR\\\" />\\n <path d=\\\"M 12.4 8.9 L 19.6 8.9 L 16.2 1.1 L 12.4 8.9\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NOTBRD11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.5 31.0 L 23.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 31.0 L 16.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.8 16.0 L 27.3 16.0 L 27.3 1.0 L 4.8 1.0 L 4.8 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OBSTRN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"DEPVS\\\" />\\n</svg>\\n\",\n \"OBSTRN02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\"></svg>\\n\",\n \"OBSTRN03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"DEPIT\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"DEPIT\\\" />\\n</svg>\\n\",\n \"OBSTRN18\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 30.8 1.0 L 1.0 1.0 Z\\\" fill=\\\"LANDA\\\" />\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 30.8 1.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDA\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 1.0 L 1.0 31.0 L 31.0 31.0 L 30.8 1.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CSTLN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OFSPLF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"3.75\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 1.0 L 31.0 1.0 L 31.0 31.0 L 1.0 31.0 L 1.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OSPONE02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OSPSIX02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OWNSHP01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"15.88\\\" r=\\\"7.89\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"OWNSHP05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 17.8 1.0 L 19.5 5.5 L 19.6 31.0 L 12.5 31.0 L 12.4 5.6 L 14.1 1.1 L 17.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PASTRK01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"PSTRK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PASTRK02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"SYTRK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PILBOP02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 10.2 16.2 L 16.0 31.0 L 22.1 16.2 L 16.0 1.0 Z\\\" fill=\\\"CHMGD\\\" />\\n <path d=\\\"M 16.0 1.0 L 10.2 16.2 L 16.0 31.0 L 22.1 16.2 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.17\\\" r=\\\"14.77\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"PILPNT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"PLNPOS01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 15.9 L 1.4 14.3 L 3.4 12.5 L 6.7 11.2 L 10.2 10.6 L 15.6 10.2 L 21.2 10.6 L 25.0 11.2 L 28.2 12.5 L 30.3 14.3 L 31.0 15.9 L 30.8 18.0 L 28.2 19.7 L 25.0 20.8 L 21.2 21.8 L 15.6 21.8 L 10.2 21.8 L 6.7 21.0 L 2.9 19.7 L 1.1 18.1 L 1.0 15.9\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PLNPOS02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PLNSPD03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 26.1 L 1.1 5.8 L 31.0 5.8 L 31.0 26.2 L 1.0 26.1\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PLNSPD04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 26.1 L 1.1 5.8 L 31.0 5.8 L 31.0 26.2 L 1.0 26.1\\\" fill=\\\"none\\\" stroke=\\\"APLRT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"POSGEN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"3.75\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"LANDF\\\" />\\n</svg>\\n\",\n \"POSGEN03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"3.75\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"POSGEN04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"POSITN02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.25\\\" cy=\\\"16.25\\\" r=\\\"14.75\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.3 1.0 L 16.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.3 L 31.0 16.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRCARE12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.1 31.0 L 26.9 31.0 L 15.5 1.0 L 5.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 26.8 L 17.5 26.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.6 23.4 L 15.6 11.6\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRCARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.0 31.0 L 16.0 1.0 L 28.0 31.0 L 4.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 23.2 L 16.0 12.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.4 27.3 L 17.7 27.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRDINS02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 11.1 8.3 L 2.5 16.9 L 1.0 15.4 L 1.0 8.9 L 6.3 3.5 L 11.1 8.3 Z\\\" fill=\\\"CHBRN\\\" />\\n <path d=\\\"M 11.1 8.3 L 2.5 16.9 L 1.0 15.4 L 1.0 8.9 L 6.3 3.5 L 11.1 8.3\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.9 8.6 L 25.7 3.5 L 31.0 8.9 L 31.0 15.1 L 29.2 16.9 L 20.9 8.6 Z\\\" fill=\\\"CHBRN\\\" />\\n <path d=\\\"M 20.9 8.6 L 25.7 3.5 L 31.0 8.9 L 31.0 15.1 L 29.2 16.9 L 20.9 8.6\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 11.8 L 24.8 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.2 11.8 L 7.5 28.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.3 3.5 L 11.1 8.3 L 2.5 16.9 L 1.0 15.4 L 1.0 8.9 L 6.3 3.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.7 3.5 L 31.0 8.9 L 31.0 15.1 L 29.2 16.9 L 20.9 8.6 L 25.7 3.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRICKE03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.6 31.0 L 22.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 31.0 L 14.5 17.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 15.7 L 10.2 20.7 L 14.5 21.9 L 19.7 21.5 L 24.2 19.3 L 26.1 17.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.6 6.4 L 12.8 9.0 L 14.9 9.4 L 18.6 9.2 L 22.0 6.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.3 1.0 L 16.4 3.4 L 14.9 9.4 L 14.5 17.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRICKE04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 10.2 31.0 L 24.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.0 31.0 L 17.0 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.5 22.8 L 11.9 18.1 L 17.0 16.8 L 21.0 17.5 L 24.5 21.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.4 9.9 L 15.5 6.5 L 18.2 6.3 L 21.6 7.8 L 24.1 11.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.4 1.0 L 18.2 6.1 L 17.2 10.7 L 17.0 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"QUAPOS01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.1 3.4 L 1.1 29.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 3.3 L 9.5 3.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.1 16.3 L 9.5 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.4 5.4 L 12.4 13.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.5 3.2 L 12.5 5.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.5 16.1 L 12.5 13.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.5 28.6 L 23.5 2.9 L 31.0 28.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.4 17.7 L 27.8 17.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"QUARRY01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.9 10.5 L 6.4 17.0 L 5.3 15.9 L 5.3 11.0 L 9.3 6.9 L 12.9 10.5 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 12.9 10.5 L 6.4 17.0 L 5.3 15.9 L 5.3 11.0 L 9.3 6.9 L 12.9 10.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.3 10.7 L 23.9 6.9 L 27.9 11.0 L 27.9 15.6 L 26.5 17.0 L 20.3 10.7 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 20.3 10.7 L 23.9 6.9 L 27.9 11.0 L 27.9 15.6 L 26.5 17.0 L 20.3 10.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.7 13.2 L 23.2 25.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.7 13.2 L 10.2 25.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.3 6.9 L 12.9 10.5 L 6.4 17.0 L 5.3 15.9 L 5.3 11.0 L 9.3 6.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.9 6.9 L 27.9 11.0 L 27.9 15.6 L 26.5 17.0 L 20.3 10.7 L 23.9 6.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"QUESMRK1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.6 7.5 L 9.4 5.6 L 10.3 3.9 L 11.5 2.8 L 12.6 1.6 L 14.4 1.0 L 15.9 1.1 L 18.0 1.7 L 19.9 2.2 L 21.4 4.5 L 22.6 5.7 L 23.4 7.2 L 23.4 8.9 L 22.6 10.5 L 21.8 12.0 L 20.4 13.6 L 18.8 15.3 L 17.4 17.0 L 16.5 18.3 L 15.8 19.5 L 15.7 21.0 L 15.7 22.5 L 15.7 23.7 L 15.8 25.2 L 15.8 25.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.4 31.0 L 18.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RACNSP01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.15\\\" cy=\\\"16.10\\\" r=\\\"7.33\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.2 8.8 L 16.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 23.5 L 16.1 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 16.0 L 30.9 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.8 16.0 L 1.1 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 21.2 L 26.7 26.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.6 5.7 L 21.2 11.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.8 21.3 L 5.4 26.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.6 5.7 L 11.0 11.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RADRFL03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.15\\\" cy=\\\"16.10\\\" r=\\\"7.33\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.2 8.8 L 16.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 23.5 L 16.1 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 16.0 L 30.9 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.8 16.0 L 1.1 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.3 21.2 L 26.7 26.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.6 5.7 L 21.2 11.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.8 21.3 L 5.4 26.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.6 5.7 L 11.0 11.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RASCAN01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.28\\\" cy=\\\"28.24\\\" r=\\\"2.76\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.9 28.1 L 9.9 8.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.8 28.0 L 21.8 8.7 L 12.3 8.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.7 28.1 L 6.2 28.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 28.0 L 26.5 28.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.5 8.7 L 9.9 8.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.8 8.4 L 15.8 1.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 1.0 L 27.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RASCAN11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.28\\\" cy=\\\"28.24\\\" r=\\\"2.76\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 9.9 28.1 L 9.9 8.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.8 28.0 L 21.8 8.7 L 12.3 8.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.7 28.1 L 6.2 28.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 28.0 L 26.5 28.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.5 8.7 L 9.9 8.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.8 8.4 L 15.8 1.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 1.0 L 27.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RCLDEF01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 13.6 L 1.3 12.9 L 1.6 12.2 L 2.1 11.8 L 2.5 11.4 L 3.1 11.2 L 3.7 11.2 L 4.4 11.4 L 5.1 11.6 L 5.7 12.4 L 6.2 12.9 L 6.5 13.5 L 6.5 14.1 L 6.2 14.7 L 5.8 15.2 L 5.3 15.8 L 4.8 16.4 L 4.3 17.1 L 3.9 17.5 L 3.7 17.9 L 3.6 18.5 L 3.6 19.1 L 3.6 19.5 L 3.7 20.0 L 3.7 20.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.1 22.2 L 4.4 22.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.5 13.6 L 25.9 12.9 L 26.2 12.2 L 26.6 11.8 L 27.0 11.4 L 27.7 11.2 L 28.2 11.2 L 29.0 11.4 L 29.7 11.6 L 30.3 12.4 L 30.7 12.9 L 31.0 13.5 L 31.0 14.1 L 30.7 14.7 L 30.4 15.2 L 29.9 15.8 L 29.3 16.4 L 28.8 17.1 L 28.5 17.5 L 28.2 17.9 L 28.1 18.5 L 28.1 19.1 L 28.1 19.5 L 28.2 20.0 L 28.2 20.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.7 22.2 L 29.0 22.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.04\\\" cy=\\\"16.01\\\" r=\\\"5.41\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 11.8 12.0 L 16.1 3.1 L 20.3 12.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.3 20.1 L 15.8 28.9 L 11.8 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RCTLPT52\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.3 4.5 L 16.0 1.0 L 18.6 4.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.3 7.0 L 9.6 9.5 L 12.8 9.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 9.4 L 22.4 9.4 L 20.4 6.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 26.9 L 12.7 31.0 L 19.2 31.0 L 19.2 27.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 23.7 L 12.7 20.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 13.0 L 12.7 16.2\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.6 12.8 L 19.6 15.9\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.5 20.1 L 19.5 23.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RDOCAL02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"22.13\\\" r=\\\"8.87\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 9.1 15.6 L 16.1 1.0 L 23.0 15.6\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RDOCAL03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.01\\\" r=\\\"6.31\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 11.1 11.4 L 16.1 1.0 L 21.0 11.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.9 20.8 L 15.8 31.0 L 11.1 20.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RDOSTA02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"RECDEF51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.3 L 6.6 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.4 16.3 L 31.0 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 13.8 L 14.4 13.3 L 14.7 12.9 L 15.0 12.6 L 15.2 12.3 L 15.7 12.2 L 16.1 12.2 L 16.6 12.4 L 17.1 12.5 L 17.5 13.0 L 17.8 13.4 L 18.0 13.8 L 18.0 14.2 L 17.8 14.6 L 17.6 15.0 L 17.2 15.4 L 16.8 15.8 L 16.5 16.3 L 16.3 16.6 L 16.1 16.9 L 16.0 17.3 L 16.0 17.7 L 16.0 18.0 L 16.1 18.3 L 16.1 18.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.7 19.8 L 16.6 19.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.4 18.9 L 8.9 16.3 L 12.4 13.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.4 18.9 L 23.0 16.2 L 19.4 13.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RECTRC55\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 31.0 L 16.0 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 18.8 L 16.0 13.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 6.6 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.6 18.8 L 16.0 22.4 L 13.3 18.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 13.2 L 16.0 9.6 L 13.3 13.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RECTRC56\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.1 19.3 L 16.0 23.4 L 12.9 19.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.1 12.7 L 16.0 8.6 L 12.9 12.7\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RECTRC57\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 31.0 L 16.0 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 10.5 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.5 21.5 L 16.0 15.6 L 11.5 21.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RECTRC58\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.8 18.5 L 16.0 13.4 L 12.2 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"REFPNT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 13.0 L 13.0 13.0 L 13.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 19.0 L 13.0 19.0 L 13.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 1.0 L 19.0 13.0 L 31.0 13.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 19.0 L 19.0 19.0 L 19.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RETRFL01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.3 6.2 L 24.8 6.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.2 25.5 L 24.7 25.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 15.6 L 24.8 15.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.2 1.0 L 7.2 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RETRFL02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.2 6.2 L 24.6 6.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.4 25.8 L 24.8 25.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.4 16.1 L 24.8 16.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 1.0 L 7.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RFNERY01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.4 26.9 L 13.4 12.6 L 17.8 12.6 L 17.8 26.9 L 17.2 25.3 L 15.6 24.7 L 14.2 25.3 L 13.4 26.9 Z\\\" fill=\\\"LANDF\\\" />\\n <path d=\\\"M 13.4 26.9 L 13.4 12.6 L 17.8 12.6 L 17.8 26.9 L 17.2 25.3 L 15.6 24.7 L 14.2 25.3 L 13.4 26.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 2.4 L 16.7 3.2 L 15.3 4.0 L 14.2 5.4 L 13.4 7.1 L 13.4 8.7 L 13.7 9.6 L 14.8 10.1 L 16.1 10.1 L 17.0 9.6 L 17.5 8.5 L 17.2 7.1 L 16.7 6.5 L 16.7 5.4 L 16.7 4.3 L 17.5 3.5 L 18.1 2.4\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 8.9 26.8 L 22.0 26.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RFNERY11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.4 26.9 L 13.4 12.6 L 17.8 12.6 L 17.8 26.9 L 17.2 25.3 L 15.6 24.7 L 14.2 25.3 L 13.4 26.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 13.4 26.9 L 13.4 12.6 L 17.8 12.6 L 17.8 26.9 L 17.2 25.3 L 15.6 24.7 L 14.2 25.3 L 13.4 26.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 2.4 L 16.7 3.2 L 15.3 4.0 L 14.2 5.4 L 13.4 7.1 L 13.4 8.7 L 13.7 9.6 L 14.8 10.1 L 16.1 10.1 L 17.0 9.6 L 17.5 8.5 L 17.2 7.1 L 16.7 6.5 L 16.7 5.4 L 16.7 4.3 L 17.5 3.5 L 18.1 2.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 8.9 26.8 L 22.0 26.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ROLROL01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 9.8 L 1.0 22.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.6 9.8 L 17.6 22.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 9.7 L 5.2 9.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 5.2 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.6 9.8 L 21.7 9.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.6 16.1 L 21.7 16.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.2 16.0 L 6.7 22.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.7 16.0 L 23.2 22.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.2 14.9 L 23.2 10.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.6 14.8 L 6.6 10.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.2 9.7 L 6.6 10.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.2 16.0 L 6.6 14.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.7 16.0 L 23.2 15.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.7 9.8 L 23.2 10.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"11.88\\\" cy=\\\"19.04\\\" r=\\\"3.08\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <circle cx=\\\"27.96\\\" cy=\\\"19.04\\\" r=\\\"3.04\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"RSCSTA02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 4.0 L 10.0 16.0 L 16.0 28.0 L 22.0 16.0 L 16.0 4.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 4.0 L 10.0 16.0 L 16.0 28.0 L 22.0 16.0 L 16.0 4.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 1.0 16.0 L 10.0 16.0 L 16.0 16.0 L 19.0 16.0 L 28.0 16.0 L 31.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RSRDEF51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 19.9 L 16.1 5.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.0 25.3 L 18.4 25.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"RTLDEF51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 14.0 4.5 L 16.6 1.0 L 19.3 4.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 7.0 L 10.2 9.5 L 13.4 9.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.6 9.4 L 23.1 9.4 L 21.1 6.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 26.9 L 13.3 31.0 L 19.9 31.0 L 19.9 27.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 23.7 L 13.3 20.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 13.0 L 13.3 16.2\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.2 12.8 L 20.2 15.9\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.1 20.1 L 20.1 23.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.3 16.6 L 3.6 16.0 L 3.9 15.4 L 4.2 15.1 L 4.6 14.7 L 5.2 14.5 L 5.7 14.5 L 6.3 14.7 L 6.9 14.9 L 7.4 15.6 L 7.8 16.0 L 8.0 16.5 L 8.0 17.0 L 7.8 17.5 L 7.5 18.0 L 7.1 18.5 L 6.6 19.0 L 6.1 19.6 L 5.8 20.0 L 5.6 20.4 L 5.6 20.9 L 5.6 21.4 L 5.6 21.7 L 5.6 22.2 L 5.6 22.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.2 24.1 L 6.3 24.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.0 16.5 L 24.2 15.9 L 24.5 15.4 L 24.9 15.0 L 25.2 14.6 L 25.8 14.4 L 26.3 14.5 L 27.0 14.7 L 27.6 14.8 L 28.1 15.5 L 28.4 16.0 L 28.7 16.4 L 28.7 17.0 L 28.4 17.5 L 28.2 17.9 L 27.7 18.5 L 27.2 19.0 L 26.8 19.6 L 26.5 20.0 L 26.3 20.3 L 26.2 20.8 L 26.2 21.3 L 26.2 21.7 L 26.3 22.2 L 26.3 22.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.8 24.0 L 27.0 24.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RTPBCN02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 29.9 11.3 L 31.0 16.1 L 30.0 21.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.0 11.4 L 1.0 16.1 L 2.0 21.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 30.2 L 8.3 27.9 L 5.5 24.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.8 29.9 L 24.0 27.8 L 27.1 24.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 1.8 L 8.3 4.2 L 5.3 7.2\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.9 2.0 L 24.3 4.4 L 27.1 7.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SCALEB10\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 4.0 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 7.0 L 16.0 4.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 10.0 L 16.0 7.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 13.0 L 16.0 10.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 16.0 L 16.0 13.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 19.0 L 16.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 22.0 L 16.0 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 25.0 L 16.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 28.0 L 16.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 31.0 L 16.0 28.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SCALEB11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 16.0 7.0\\\" fill=\\\"none\\\" stroke=\\\"SNDG2\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 7.0 L 16.0 13.0\\\" fill=\\\"none\\\" stroke=\\\"SNDG1\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 13.0 L 16.0 19.0\\\" fill=\\\"none\\\" stroke=\\\"SNDG2\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 19.0 L 16.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"SNDG1\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 25.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"SNDG2\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SILBUI01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBRN\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"SILBUI11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"LANDF\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"SISTAT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 2.9 8.5 L 31.0 8.5 L 31.0 26.0 L 2.9 26.0 L 2.9 8.5 Z\\\" fill=\\\"CHWHT\\\" />\\n <path d=\\\"M 2.9 8.5 L 31.0 8.5 L 31.0 26.0 L 2.9 26.0 L 2.9 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHWHT\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 8.5 L 31.0 26.0 L 2.9 26.0 L 2.9 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.4 12.6 L 12.3 11.5 L 9.9 11.5 L 8.7 12.6 L 8.7 15.0 L 9.9 16.2 L 11.8 16.2 L 13.4 17.3 L 13.4 19.7 L 12.3 21.3 L 9.2 21.3 L 7.8 19.8\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.1 12.6 L 24.0 11.5 L 21.6 11.5 L 20.5 12.6 L 20.5 15.0 L 21.8 16.2 L 23.5 16.2 L 25.1 17.3 L 25.1 19.8 L 24.0 21.0 L 20.9 21.0 L 19.6 19.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.9 8.5 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"2.17\\\" cy=\\\"7.21\\\" r=\\\"1.17\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 2.2 7.2 Z\\\" fill=\\\"LANDF\\\" />\\n</svg>\\n\",\n \"SMCFAC02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 19.5 1.7 L 16.0 7.1 L 16.0 24.0 L 29.1 21.1 L 27.8 20.1 L 26.5 19.0 L 25.2 17.6 L 23.9 15.9 L 22.8 14.1 L 21.7 12.4 L 20.8 10.4 L 20.2 8.2 L 19.7 6.3 L 19.5 4.3 L 19.5 3.0 L 19.5 1.9 L 19.5 1.7\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 5.4 L 14.7 5.8 L 13.4 6.9 L 12.3 7.6 L 11.2 8.7 L 10.3 9.8 L 9.4 11.1 L 8.6 12.2 L 7.9 13.7 L 7.2 15.2 L 6.8 16.5 L 6.6 18.3 L 6.4 20.1 L 6.4 22.5 L 6.6 23.8 L 6.6 25.5 L 7.0 24.9 L 8.1 23.8 L 9.0 22.9 L 10.3 22.2 L 11.8 21.8 L 12.7 21.6 L 14.0 21.6 L 13.4 20.7 L 12.7 19.4 L 12.1 17.4 L 11.8 16.1 L 11.8 15.0 L 11.8 13.9 L 11.8 12.6 L 12.3 11.1 L 12.7 9.5 L 13.6 8.2 L 14.2 7.1 L 15.1 6.0 L 15.8 5.4 L 16.0 5.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.11\\\" r=\\\"14.89\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 1.0 L 16.0 26.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.4 26.6 L 26.5 26.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SNDWAV02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 18.3 L 3.1 18.3 L 4.2 17.7 L 5.9 14.0 L 6.8 14.0 L 8.2 17.7 L 8.9 18.3 L 13.4 18.3 L 14.2 17.6 L 15.3 14.1 L 16.0 14.1 L 17.3 17.6 L 18.1 18.3 L 21.8 18.3 L 23.1 18.3 L 23.9 17.8 L 25.5 13.7 L 26.4 13.7 L 27.9 17.7 L 28.9 18.3 L 31.0 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SOUNDGB1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 12.9 L 1.0 19.1 L 31.0 19.1 L 31.0 12.9\\\" fill=\\\"none\\\" stroke=\\\"SNDG1\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SOUNDGC2\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"SNDG1\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"SOUNDSA1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 15.9 L 31.0 15.9\\\" fill=\\\"none\\\" stroke=\\\"SNDG2\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SOUNDSB1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 12.9 L 1.0 19.1 L 31.0 19.1 L 31.0 12.9\\\" fill=\\\"none\\\" stroke=\\\"SNDG2\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SOUNDSC2\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"SNDG1\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"SPRING02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\"></svg>\\n\",\n \"SWPARE51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 11.9 L 1.0 20.1 L 31.0 20.1 L 31.0 11.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TIDCUR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 12.0 11.2 L 16.0 7.2 L 20.1 11.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.9 17.3 L 16.0 13.3 L 20.1 17.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 1.3 L 16.0 5.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 7.2 L 16.0 11.1\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 13.3 L 16.0 17.4\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.9 5.0 L 16.0 1.0 L 20.1 5.2\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 27.0 L 16.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 20.2 L 16.0 24.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TIDCUR02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 18.5 1.0 L 18.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 1.0 L 16.1 31.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 1.0 L 11.0 5.9\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 1.0 L 21.0 5.9\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 13.4 L 11.0 18.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 13.4 L 21.0 18.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 6.9 L 11.0 12.0\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 7.1 L 21.0 12.3\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TIDCUR03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 7.4 L 31.0 7.4\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 24.6 L 31.0 24.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 7.4 L 31.0 24.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 7.4 L 1.0 24.6\\\" fill=\\\"none\\\" stroke=\\\"NINFO\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TIDEHT01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.4 16.0 L 3.4 15.2 L 3.7 14.1 L 4.2 13.0 L 4.9 12.0 L 5.9 11.3 L 7.1 10.7 L 8.2 10.4 L 9.2 10.3 L 10.4 10.5 L 11.4 10.9 L 12.3 11.5 L 13.1 12.1 L 13.9 13.2 L 14.4 14.5 L 14.4 15.5 L 14.4 16.0 L 14.4 16.8 L 14.6 17.8 L 14.8 18.6 L 15.4 19.6 L 16.4 20.4 L 16.8 20.8 L 17.4 21.1 L 18.0 21.4 L 19.1 21.6 L 20.3 21.7 L 21.6 21.4 L 22.6 21.0 L 23.7 20.3 L 24.5 19.5 L 25.2 18.3 L 25.5 17.2 L 25.7 16.6 L 25.7 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TIDSTR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.2 L 16.0 1.2 L 31.0 16.2 L 15.9 30.8 L 1.0 16.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TMARDEF1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 31.0 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TMARDEF2\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 10.4 31.0 L 21.6 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TMBYRD01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 8.5 L 31.0 8.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.5 L 31.0 23.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 1.0 L 8.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 1.0 L 23.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TNKCON02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"TNKCON12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"TNKFRM01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"11.93\\\" cy=\\\"12.32\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 11.9 12.3 Z\\\" fill=\\\"LANDF\\\" />\\n <circle cx=\\\"12.01\\\" cy=\\\"21.17\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 12.0 21.2 Z\\\" fill=\\\"LANDF\\\" />\\n <circle cx=\\\"20.39\\\" cy=\\\"20.93\\\" r=\\\"3.52\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 20.4 20.9 Z\\\" fill=\\\"LANDF\\\" />\\n <circle cx=\\\"20.58\\\" cy=\\\"12.40\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 20.6 12.4 Z\\\" fill=\\\"LANDF\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"TNKFRM11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"11.93\\\" cy=\\\"12.32\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 11.9 12.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"12.01\\\" cy=\\\"21.17\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 12.0 21.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"20.39\\\" cy=\\\"20.93\\\" r=\\\"3.52\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 20.4 20.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"20.58\\\" cy=\\\"12.40\\\" r=\\\"3.80\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 20.6 12.4 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n</svg>\\n\",\n \"TOPMAR02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 21.7 4.2 L 1.0 27.8 L 31.0 27.8 L 21.7 4.2 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 21.7 4.2 L 1.0 27.8 L 31.0 27.8 L 21.7 4.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 5.4 L 31.0 5.4 L 9.2 26.6 L 1.0 5.4 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 5.4 L 31.0 5.4 L 9.2 26.6 L 1.0 5.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.9 17.7 L 5.8 31.0 L 23.2 31.0 L 16.9 17.7 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.9 17.7 L 5.8 31.0 L 23.2 31.0 L 16.9 17.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.6 1.0 L 9.5 14.7 L 26.2 14.7 L 20.6 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 20.6 1.0 L 9.5 14.7 L 26.2 14.7 L 20.6 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR06\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.6 18.0 L 23.7 18.0 L 9.5 31.0 L 4.6 18.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 4.6 18.0 L 23.7 18.0 L 9.5 31.0 L 4.6 18.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.3 1.0 L 27.4 1.0 L 13.6 14.0 L 8.3 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 8.3 1.0 L 27.4 1.0 L 13.6 14.0 L 8.3 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR07\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 6.9 18.5 L 24.7 18.5 L 11.8 31.0 L 6.9 18.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 6.9 18.5 L 24.7 18.5 L 11.8 31.0 L 6.9 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.3 1.0 L 8.4 14.3 L 25.1 14.3 L 18.3 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 18.3 1.0 L 8.4 14.3 L 25.1 14.3 L 18.3 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR08\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.2 17.0 L 3.1 31.0 L 21.8 31.0 L 15.2 17.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 15.2 17.0 L 3.1 31.0 L 21.8 31.0 L 15.2 17.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.8 1.0 L 28.9 1.0 L 15.6 13.9 L 9.8 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 9.8 1.0 L 28.9 1.0 L 15.6 13.9 L 9.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR10\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"TOPMAR12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"14.50\\\" cy=\\\"24.25\\\" r=\\\"6.75\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 14.5 24.3 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"17.50\\\" cy=\\\"7.75\\\" r=\\\"6.75\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 17.5 7.8 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"TOPMAR13\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.3 31.0 L 21.8 31.0 L 30.7 1.0 L 8.8 1.0 L 1.3 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR14\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 24.8 L 27.3 24.8 L 31.0 7.3 L 4.8 7.3 L 1.0 24.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR16\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 12.7 L 12.7 30.3 L 31.0 19.3 L 20.0 1.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 12.7 L 19.3 1.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR17\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 15.0 L 31.0 15.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 6.6 L 11.8 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR18\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 6.7 L 31.0 6.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.3 6.6 L 9.5 25.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR22\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 4.1 L 1.0 27.9 L 31.0 27.9 L 16.0 4.1 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 4.1 L 1.0 27.9 L 31.0 27.9 L 16.0 4.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR24\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 4.4 L 31.0 4.4 L 16.0 27.6 L 1.0 4.4 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 1.0 4.4 L 31.0 4.4 L 16.0 27.6 L 1.0 4.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR25\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 7.6 14.3 L 24.4 14.3 L 16.0 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 1.0 L 7.6 14.3 L 24.4 14.3 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 17.7 L 7.6 31.0 L 24.4 31.0 L 16.0 17.7 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 17.7 L 7.6 31.0 L 24.4 31.0 L 16.0 17.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR26\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.5 17.9 L 24.5 17.9 L 16.0 31.0 L 7.5 17.9 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 7.5 17.9 L 24.5 17.9 L 16.0 31.0 L 7.5 17.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.5 1.0 L 24.5 1.0 L 16.0 14.1 L 7.5 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 7.5 1.0 L 24.5 1.0 L 16.0 14.1 L 7.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR27\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.0 L 7.6 14.3 L 24.4 14.3 L 16.0 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 1.0 L 7.6 14.3 L 24.4 14.3 L 16.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.6 18.1 L 24.4 18.1 L 16.0 31.0 L 7.6 18.1 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 7.6 18.1 L 24.4 18.1 L 16.0 31.0 L 7.6 18.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR28\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.5 1.0 L 24.5 1.0 L 16.0 14.1 L 7.5 1.0 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 7.5 1.0 L 24.5 1.0 L 16.0 14.1 L 7.5 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 17.5 L 7.5 31.0 L 24.5 31.0 L 16.0 17.5 Z\\\" fill=\\\"CHBLK\\\" />\\n <path d=\\\"M 16.0 17.5 L 7.5 31.0 L 24.5 31.0 L 16.0 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR30\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"TOPMAR32\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"7.67\\\" r=\\\"6.67\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 7.7 Z\\\" fill=\\\"CHBLK\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"24.33\\\" r=\\\"6.67\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 24.3 Z\\\" fill=\\\"CHBLK\\\" />\\n</svg>\\n\",\n \"TOPMAR33\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 6.8 31.0 L 25.2 31.0 L 25.2 1.0 L 6.8 1.0 L 6.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR34\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 24.4 L 1.0 7.6 L 31.0 7.6 L 31.0 24.4 L 1.0 24.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR36\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 1.0 L 1.0 16.3 L 16.3 31.0 L 31.0 16.3 L 16.3 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR65\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.1 3.8 L 28.0 28.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 7.7 L 1.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR85\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 1.0 L 31.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 31.0 1.0 L 1.0 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR86\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 1.8 L 16.0 30.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 15.9 L 31.0 15.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR87\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.8 1.1 L 15.7 30.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.1 31.0 L 11.3 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.9 30.9 L 19.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR88\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.3 30.9 L 16.4 1.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.9 1.0 L 20.7 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.1 1.1 L 12.2 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOPMAR89\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 6.0 L 31.0 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 6.0 L 15.9 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.02\\\" cy=\\\"28.31\\\" r=\\\"2.69\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 11.1 28.3 L 13.3 1.0 L 18.7 1.0 L 21.0 28.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.3 L 24.1 28.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 28.3 L 7.9 28.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 6.2 L 18.7 6.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.27\\\" r=\\\"2.73\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 10.5 28.3 L 12.9 6.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 6.5 L 21.5 1.0 L 10.5 1.0 L 10.5 6.5 L 21.5 6.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.8 28.3 L 13.3 28.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.3 L 24.2 28.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 28.3 L 18.9 6.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.09\\\" cy=\\\"28.35\\\" r=\\\"2.65\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 11.0 28.4 L 13.3 1.0 L 18.7 1.0 L 21.0 28.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.4 L 24.2 28.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 28.4 L 7.8 28.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 6.2 L 18.7 6.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"29.00\\\" r=\\\"2.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 12.0 29.0 L 14.0 9.0 L 18.0 9.0 L 19.4 29.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.4 12.6 L 18.0 12.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.0 29.0 L 14.0 29.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 29.0 L 22.0 29.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.0 1.0 L 22.0 3.0 L 22.0 9.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 1.0 L 10.0 3.0 L 10.0 9.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"28.27\\\" r=\\\"2.73\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 10.5 28.3 L 12.9 6.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 6.5 L 21.5 1.0 L 10.5 1.0 L 10.5 6.5 L 21.5 6.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.8 28.3 L 13.3 28.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.7 28.3 L 24.2 28.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.5 28.3 L 18.9 6.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TOWERS15\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"29.00\\\" r=\\\"2.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 12.0 29.0 L 14.0 9.0 L 18.0 9.0 L 19.4 29.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.4 12.6 L 18.0 12.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.0 29.0 L 14.0 29.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 29.0 L 22.0 29.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.0 1.0 L 22.0 3.0 L 22.0 9.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.0 1.0 L 10.0 3.0 L 10.0 9.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TREPNT04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 15.6 31.0 L 15.6 1.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.4 8.4 L 29.6 8.4\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.4 15.8 L 23.7 15.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.7 1.0 L 20.4 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.5 31.0 L 20.5 31.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.2 4.6 L 23.7 4.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 12.0 L 25.6 12.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TREPNT05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"11.25\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 1.0 27.3 L 31.0 27.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 27.1 L 16.0 15.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TSLDEF51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.3 11.0 L 16.0 1.0 L 22.6 11.0 L 19.3 11.0 L 19.3 31.0 L 12.6 31.0 L 12.6 11.0 L 9.3 11.0 Z\\\" fill=\\\"TRFCD\\\" />\\n <path d=\\\"M 9.3 11.0 L 16.0 1.0 L 22.6 11.0 L 19.3 11.0 L 19.3 31.0 L 12.6 31.0 L 12.6 11.0 L 9.3 11.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.6 31.0 L 12.6 11.0 L 9.3 11.0 L 16.0 1.0 L 22.6 11.0 L 19.3 11.0 L 19.3 31.0 L 12.6 31.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.6 17.3 L 2.9 16.6 L 3.1 16.1 L 3.5 15.7 L 3.9 15.3 L 4.5 15.1 L 5.0 15.2 L 5.7 15.4 L 6.3 15.5 L 6.8 16.3 L 7.2 16.7 L 7.5 17.2 L 7.5 17.7 L 7.2 18.3 L 6.9 18.7 L 6.5 19.3 L 5.9 19.8 L 5.5 20.4 L 5.2 20.8 L 4.9 21.2 L 4.9 21.7 L 4.9 22.2 L 4.9 22.6 L 4.9 23.1 L 4.9 23.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.5 25.0 L 5.7 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.5 17.3 L 24.8 16.6 L 25.1 16.1 L 25.5 15.7 L 25.9 15.3 L 26.5 15.1 L 27.0 15.2 L 27.6 15.4 L 28.3 15.5 L 28.8 16.3 L 29.2 16.7 L 29.4 17.2 L 29.4 17.7 L 29.2 18.3 L 28.9 18.7 L 28.4 19.3 L 27.9 19.8 L 27.5 20.4 L 27.2 20.8 L 26.9 21.2 L 26.9 21.7 L 26.9 22.2 L 26.9 22.6 L 26.9 23.1 L 26.9 23.1\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.5 25.0 L 27.6 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TSSCRS51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.1 19.9 L 16.1 5.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.0 25.3 L 18.4 25.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"TSSLPT51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 9.3 11.0 L 16.0 1.0 L 22.7 11.0 L 19.3 11.0 L 19.3 31.0 L 12.7 31.0 L 12.7 11.0 L 9.3 11.0 Z\\\" fill=\\\"TRFCD\\\" />\\n <path d=\\\"M 9.3 11.0 L 16.0 1.0 L 22.7 11.0 L 19.3 11.0 L 19.3 31.0 L 12.7 31.0 L 12.7 11.0 L 9.3 11.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 31.0 L 12.7 11.0 L 9.3 11.0 L 16.0 1.0 L 22.7 11.0 L 19.3 11.0 L 19.3 31.0 L 12.7 31.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TSSRON51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.3 17.7 L 2.2 20.7 L 3.5 23.8 L 5.3 26.3 L 8.2 28.5 L 11.6 30.4 L 15.4 31.0 L 18.4 30.8 L 21.6 29.9 L 24.9 28.1 L 27.5 25.5 L 29.6 22.0 L 30.7 18.3 L 30.7 14.2 L 29.6 10.0 L 27.5 6.5 L 24.4 3.9 L 20.7 2.0 L 16.5 1.3 L 11.8 2.0 L 8.4 3.6 L 5.5 5.6 L 11.1 11.2 L 1.3 11.2 L 1.3 1.0 L 5.7 5.6\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TWRDEF51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.6 4.5 L 16.2 1.0 L 18.8 4.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.6 6.9 L 9.8 9.4 L 13.0 9.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.1 9.3 L 22.6 9.3 L 20.6 6.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.9 13.4 L 12.9 18.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.2 13.3 L 19.2 17.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.6 27.4 L 16.2 31.0 L 18.9 27.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.9 22.2 L 9.5 22.2 L 11.5 24.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.3 22.2 L 22.4 22.2 L 20.7 25.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.4 13.0 L 1.7 12.4 L 2.0 11.8 L 2.4 11.5 L 2.7 11.1 L 3.3 10.9 L 3.8 10.9 L 4.4 11.1 L 5.0 11.3 L 5.5 12.0 L 5.9 12.4 L 6.2 12.9 L 6.2 13.4 L 5.9 13.9 L 5.6 14.4 L 5.2 14.9 L 4.7 15.4 L 4.3 16.0 L 4.0 16.4 L 3.7 16.7 L 3.7 17.2 L 3.7 17.7 L 3.7 18.1 L 3.7 18.5 L 3.7 18.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.3 20.4 L 4.4 20.4\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.8 12.9 L 26.1 12.3 L 26.4 11.8 L 26.8 11.4 L 27.1 11.0 L 27.7 10.8 L 28.2 10.9 L 28.8 11.1 L 29.4 11.2 L 29.9 11.9 L 30.3 12.3 L 30.6 12.8 L 30.6 13.3 L 30.3 13.9 L 30.0 14.3 L 29.6 14.8 L 29.1 15.3 L 28.6 15.9 L 28.4 16.3 L 28.1 16.7 L 28.1 17.1 L 28.1 17.6 L 28.1 18.0 L 28.1 18.5 L 28.1 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.7 20.3 L 28.8 20.3\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TWRTPT52\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.5 4.5 L 16.1 1.0 L 18.7 4.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.5 6.9 L 9.8 9.4 L 12.9 9.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.0 9.3 L 22.5 9.3 L 20.5 6.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.9 13.4 L 12.9 18.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.1 13.3 L 19.1 17.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.6 27.4 L 16.2 31.0 L 18.8 27.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.9 22.2 L 9.5 22.2 L 11.5 24.7\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.2 22.2 L 22.4 22.2 L 20.6 25.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TWRTPT53\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 13.3 4.5 L 16.0 1.0 L 18.6 4.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 11.3 7.0 L 9.6 9.5 L 12.8 9.5\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.9 9.4 L 22.4 9.4 L 20.4 6.8\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 26.9 L 12.7 31.0 L 19.2 31.0 L 19.2 27.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 23.7 L 12.7 20.3\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.7 13.0 L 12.7 16.2\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.6 12.8 L 19.6 15.9\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.5 20.1 L 19.5 23.4\\\" fill=\\\"none\\\" stroke=\\\"TRFCD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"UNITFTH1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 6.3 14.0 L 25.7 14.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.8 1.0 L 6.3 1.0 L 6.2 31.0\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"UNITMTR1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 3.1 31.0 L 3.1 1.0 L 16.1 25.2 L 28.9 1.4 L 28.9 30.6\\\" fill=\\\"none\\\" stroke=\\\"SCLBR\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"UWTROC03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 16.0 16.0 Z\\\" fill=\\\"DEPVS\\\" />\\n <path d=\\\"M 16.1 6.4 L 16.1 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 16.4 L 26.2 16.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"UWTROC04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 31.0 16.1 L 1.0 16.1\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.8 3.9 L 7.1 28.2\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.8 27.7 L 6.8 3.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VECGND01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.5 26.4 L 15.9 15.8 L 24.6 26.6\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.3 L 15.8 5.4 L 31.0 23.4\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VECGND21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.5 26.4 L 15.9 15.8 L 24.6 26.6\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 23.3 L 15.8 5.4 L 31.0 23.4\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VECWTR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 24.9 L 15.8 7.0 L 31.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"SHIPS\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VECWTR21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 24.9 L 15.8 7.0 L 31.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"ARPAT\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WATTUR02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 18.9 L 2.8 18.3 L 5.0 16.8 L 7.0 13.9 L 9.0 12.9 L 11.2 13.1 L 9.0 15.1 L 9.0 17.0 L 11.3 19.1 L 13.2 18.3 L 15.0 17.1 L 17.1 13.9 L 19.3 13.0 L 21.1 13.1 L 19.0 15.1 L 18.9 17.2 L 21.3 19.1 L 23.3 18.2 L 25.0 17.1 L 27.0 14.1 L 29.3 13.0 L 31.0 13.2 L 29.0 15.7 L 29.1 17.2 L 30.9 19.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WAYPNT01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"1.8\\\" />\\n</svg>\\n\",\n \"WAYPNT03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"APLRT\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"WAYPNT11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"1.2\\\" />\\n <circle cx=\\\"15.90\\\" cy=\\\"15.95\\\" r=\\\"9.90\\\" fill=\\\"none\\\" stroke=\\\"PLRTE\\\" stroke-width=\\\"1.2\\\" />\\n</svg>\\n\",\n \"WEDKLP03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 16.8 L 7.0 15.3 L 13.0 16.8 L 19.0 15.3 L 25.0 16.8 L 31.0 15.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 2.5 12.3 L 7.0 15.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 19.8 L 13.0 16.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 12.3 L 19.0 15.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.5 19.8 L 25.0 16.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WIMCON01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"14.46\\\" cy=\\\"28.74\\\" r=\\\"2.26\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 14.5 8.4 L 14.5 26.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.7 28.7 L 21.2 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.2 28.7 L 7.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 24.3 8.4\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 8.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 8.2 15.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WIMCON11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"14.46\\\" cy=\\\"28.74\\\" r=\\\"2.26\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 14.5 8.4 L 14.5 26.5\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.7 28.7 L 21.2 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 12.2 28.7 L 7.7 28.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 24.3 8.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 8.2 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.5 8.4 L 8.2 15.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WNDFRM51\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 9.6 L 24.4 9.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.6 L 10.7 3.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.6 L 10.7 15.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 10.1 26.8 L 21.8 26.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.5 L 16.0 26.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WNDFRM61\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 9.6 L 24.4 9.6\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.6 L 10.7 3.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.6 L 10.7 15.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"16.00\\\" cy=\\\"16.00\\\" r=\\\"15.00\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" />\\n <path d=\\\"M 10.1 26.8 L 21.8 26.8\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 9.5 L 16.0 26.7\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WNDMIL02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"22.95\\\" r=\\\"8.05\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 27.0 1.0 L 5.0 23.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 1.0 L 27.0 23.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WNDMIL12\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <circle cx=\\\"16.00\\\" cy=\\\"22.95\\\" r=\\\"8.05\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 27.0 1.0 L 5.0 23.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 1.0 L 27.0 23.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WRECKS01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 7.9 21.8 L 1.0 12.5 L 31.0 21.8 L 19.5 21.8 L 19.5 21.3 L 19.2 20.8 L 19.0 20.4 L 18.5 19.9 L 18.1 19.5 L 17.6 19.5 L 16.9 19.5 L 16.5 19.5 L 15.8 19.7 L 15.1 20.4 L 14.8 21.1 L 14.8 21.3 L 14.8 21.8 L 7.9 21.8 L 7.9 21.8 Z\\\" fill=\\\"CHGRD\\\" />\\n <path d=\\\"M 7.9 21.8 L 1.0 12.5 L 31.0 21.8 L 19.5 21.8 L 19.5 21.3 L 19.2 20.8 L 19.0 20.4 L 18.5 19.9 L 18.1 19.5 L 17.6 19.5 L 16.9 19.5 L 16.5 19.5 L 15.8 19.7 L 15.1 20.4 L 14.8 21.1 L 14.8 21.3 L 14.8 21.8 L 7.9 21.8 L 7.9 21.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <circle cx=\\\"17.15\\\" cy=\\\"21.77\\\" r=\\\"2.31\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" />\\n <path d=\\\"M 1.0 21.8 L 14.8 21.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.5 21.8 L 31.0 21.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.7 17.2 L 19.5 7.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WRECKS04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 16.0 25.0 L 16.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.0 10.0 L 7.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.0 10.0 L 25.0 22.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 16.0 L 31.0 16.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.0 7.0 L 16.0 25.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"WRECKS05\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 13.7 L 4.0 9.9 L 8.5 7.3 L 13.0 6.0 L 18.7 5.5 L 23.8 7.3 L 28.0 9.9 L 31.0 13.7 L 31.0 18.8 L 28.3 21.8 L 23.8 24.7 L 18.7 26.5 L 13.6 26.5 L 8.5 24.7 L 4.7 22.1 L 1.0 18.8 L 1.0 13.7 Z\\\" fill=\\\"DEPVS\\\" />\\n <path d=\\\"M 1.0 13.7 L 4.0 9.9 L 8.5 7.3 L 13.0 6.0 L 18.7 5.5 L 23.8 7.3 L 28.0 9.9 L 31.0 13.7 L 31.0 18.8 L 28.3 21.8 L 23.8 24.7 L 18.7 26.5 L 13.6 26.5 L 8.5 24.7 L 4.7 22.1 L 1.0 18.8 L 1.0 13.7\\\" fill=\\\"none\\\" stroke=\\\"DEPVS\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.5 11.1 L 8.5 21.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.8 11.1 L 23.8 21.4\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.4 16.3 L 29.0 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.2 8.6 L 16.2 23.9\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n};\n\nexport const S52_PATTERN_SVGS: Record<string, string> = {\n \"AIRARE02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 28 28\\\">\\n <path d=\\\"M 8.9 25.1 L 18.8 25.1 L 15.9 21.8 L 15.9 17.6 L 27.0 17.6 L 16.8 10.7 L 16.8 5.6 L 14.3 2.9 L 11.3 5.6 L 11.3 10.7 L 1.0 17.3 L 11.5 17.4 L 11.5 22.0 L 8.9 25.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DIAMOND1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 8.2 1.0 L 23.8 31.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.2 31.0 L 23.8 1.0\\\" fill=\\\"none\\\" stroke=\\\"CHBLK\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALA11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 22.4 9.2 L 27.7 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.7 7.1 L 23.5 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 7.1 L 26.7 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.1 9.2 L 18.5 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.4 7.1 L 14.2 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 7.1 L 17.4 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.8 9.3 L 9.1 9.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 7.2 L 4.9 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.9 7.2 L 8.1 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.8 15.5 L 14.1 15.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 13.4 L 9.8 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.9 13.4 L 13.0 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 15.4 L 23.4 15.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.4 13.3 L 19.2 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.2 13.3 L 22.4 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.7 21.4 L 19.0 21.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 19.3 L 14.8 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.8 19.3 L 18.0 23.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.5 9.0 L 1.0 7.6 L 1.2 6.6 L 1.5 5.9 L 2.4 5.6 L 2.9 5.5 L 28.1 5.5 L 29.6 5.7 L 30.5 6.1 L 30.8 6.6 L 31.0 7.1 L 31.0 7.5 L 31.0 8.2 L 30.7 8.7 L 18.5 24.9 L 18.0 25.4 L 17.6 26.0 L 17.1 26.3 L 16.8 26.3 L 16.4 26.5 L 15.8 26.4 L 15.5 26.3 L 14.8 26.1 L 14.4 25.8 L 14.1 25.4 L 13.7 25.0 L 1.5 9.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALA21\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 22.4 9.2 L 27.7 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.7 7.1 L 23.5 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 7.1 L 26.7 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.1 9.2 L 18.5 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.4 7.1 L 14.2 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 7.1 L 17.4 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.8 9.3 L 9.1 9.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 7.2 L 4.9 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.9 7.2 L 8.1 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.8 15.5 L 14.1 15.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 13.4 L 9.8 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.9 13.4 L 13.0 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.1 15.4 L 23.4 15.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 22.4 13.3 L 19.2 17.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 19.2 13.3 L 22.4 17.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.5 9.0 L 1.0 7.6 L 1.2 6.6 L 1.5 5.9 L 2.4 5.6 L 2.9 5.5 L 28.1 5.5 L 29.6 5.7 L 30.5 6.1 L 30.8 6.6 L 31.0 7.1 L 31.0 7.5 L 31.0 8.2 L 30.7 8.7 L 18.5 24.9 L 18.0 25.4 L 17.6 26.0 L 17.1 26.3 L 16.8 26.3 L 16.4 26.5 L 15.8 26.4 L 15.5 26.3 L 14.8 26.1 L 14.4 25.8 L 14.1 25.4 L 13.7 25.0 L 1.5 9.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALB01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 22.4 9.2 L 27.7 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 26.7 7.1 L 23.5 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.5 7.1 L 26.7 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.1 9.2 L 18.5 9.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.4 7.1 L 14.2 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 7.1 L 17.4 11.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.8 9.3 L 9.1 9.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 7.2 L 4.9 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.9 7.2 L 8.1 11.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.1 16.2 L 18.4 16.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.4 14.1 L 14.2 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.2 14.1 L 17.4 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.5 9.0 L 1.0 7.6 L 1.2 6.6 L 1.5 5.9 L 2.4 5.6 L 2.9 5.5 L 28.1 5.5 L 29.6 5.7 L 30.5 6.1 L 30.8 6.6 L 31.0 7.1 L 31.0 7.5 L 31.0 8.2 L 30.7 8.7 L 18.5 24.9 L 18.0 25.4 L 17.6 26.0 L 17.1 26.3 L 16.8 26.3 L 16.4 26.5 L 15.8 26.4 L 15.5 26.3 L 14.8 26.1 L 14.4 25.8 L 14.1 25.4 L 13.7 25.0 L 1.5 9.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALC01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 27.7 14.0 L 24.4 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 14.0 L 27.7 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 14.0 L 14.6 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.6 14.0 L 18.0 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.1 14.1 L 4.7 18.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.7 14.1 L 8.1 18.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.6 12.0 L 3.7 12.2 L 3.1 12.5 L 2.4 13.0 L 1.9 13.6 L 1.4 14.4 L 1.2 15.1 L 1.0 16.0 L 1.1 17.0 L 1.3 17.8 L 1.7 18.7 L 2.5 19.4 L 3.5 19.8 L 4.5 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.3 12.1 L 27.8 12.1 L 28.6 12.3 L 29.6 12.8 L 30.2 13.4 L 30.7 14.1 L 30.8 14.7 L 30.9 15.4 L 31.0 16.0 L 30.9 16.9 L 30.8 17.7 L 30.5 18.5 L 30.2 18.9 L 29.4 19.6 L 28.9 19.9 L 28.5 20.0 L 27.8 20.0 L 4.4 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.6 16.3 L 9.2 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 23.2 16.3 L 28.8 16.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.3 16.2 L 18.9 16.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALD01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 24.8 13.8 L 21.4 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 21.4 13.8 L 24.8 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.4 14.0 L 7.0 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.1 14.0 L 10.4 18.5\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.6 12.0 L 3.7 12.2 L 3.1 12.5 L 2.4 13.0 L 1.9 13.6 L 1.4 14.4 L 1.2 15.1 L 1.0 16.0 L 1.1 17.0 L 1.3 17.8 L 1.7 18.7 L 2.5 19.4 L 3.5 19.8 L 4.5 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.3 12.1 L 27.8 12.1 L 28.6 12.3 L 29.6 12.8 L 30.2 13.4 L 30.7 14.1 L 30.8 14.7 L 30.9 15.4 L 31.0 16.0 L 30.9 16.9 L 30.8 17.7 L 30.5 18.5 L 30.2 18.9 L 29.4 19.6 L 28.9 19.9 L 28.5 20.0 L 27.8 20.0 L 4.4 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.0 16.2 L 11.6 16.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.2 16.1 L 26.2 16.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DQUALU01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.6 12.0 L 3.7 12.2 L 3.1 12.5 L 2.4 13.0 L 1.9 13.6 L 1.4 14.4 L 1.2 15.1 L 1.0 16.0 L 1.1 17.0 L 1.3 17.8 L 1.7 18.7 L 2.5 19.4 L 3.5 19.8 L 4.5 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.3 12.1 L 27.8 12.1 L 28.6 12.3 L 29.6 12.8 L 30.2 13.4 L 30.7 14.1 L 30.8 14.7 L 30.9 15.4 L 31.0 16.0 L 30.9 16.9 L 30.8 17.7 L 30.5 18.5 L 30.2 18.9 L 29.4 19.6 L 28.9 19.9 L 28.5 20.0 L 27.8 20.0 L 4.4 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.4 13.9 L 14.4 17.5 L 14.6 18.1 L 15.0 18.4 L 15.6 18.7 L 16.2 18.7 L 16.7 18.6 L 17.2 18.2 L 17.5 17.9 L 17.7 17.5 L 17.7 13.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"DRGARE01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\"></svg>\\n\",\n \"FOULAR11\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 28 28\\\">\\n <path d=\\\"M 24.8 17.9 L 18.0 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 17.9 L 24.8 27.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.2 1.0 L 10.0 10.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.9 1.1 L 3.2 10.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHFAC03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 28 28\\\">\\n <path d=\\\"M 1.0 10.8 L 1.0 17.2 L 27.0 17.2 L 27.0 11.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.7 10.9 L 7.7 17.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.0 11.0 L 14.0 17.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 20.6 11.0 L 20.6 17.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHFAC04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\n <path d=\\\"M 1.0 21.4 L 23.0 21.4 L 23.0 11.9 L 1.1 11.9 L 1.1 21.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.8 2.6 L 13.2 12.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"FSHHAV02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.7 15.8 L 1.6 10.7\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.7 16.2 L 1.0 20.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.7 16.2 L 7.8 13.9 L 10.5 12.0 L 13.9 10.5 L 17.7 9.9 L 21.1 10.1 L 24.9 10.9 L 28.2 12.4 L 30.4 14.1 L 31.0 15.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 16.0 L 9.2 18.7 L 13.2 20.9 L 17.3 21.9 L 20.4 22.1 L 23.6 21.5 L 26.6 20.4 L 29.1 18.1 L 31.0 15.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.9 11.6 L 24.9 14.1 L 24.9 17.5 L 26.6 20.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"ICEARE04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.7 29.9 L 9.2 26.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 9.1 L 5.5 14.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.6 17.2 L 19.2 18.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.0 7.2 L 14.5 2.1\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.7 27.8 L 22.6 26.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 27.9 18.4 L 29.2 24.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 25.5 8.6 L 31.0 8.2\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MARCUL02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 4.8 19.3 L 10.6 14.1 L 13.7 12.4 L 16.1 11.7 L 18.3 11.4 L 20.8 11.9 L 23.5 12.7 L 25.2 13.8 L 26.6 14.9 L 27.5 16.2 L 26.0 17.4 L 24.5 18.6 L 22.2 19.6 L 20.4 20.2 L 18.1 20.3 L 15.8 20.2 L 13.5 19.7 L 11.8 18.8 L 4.8 13.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 11.7 L 1.0 7.5 L 30.8 7.5 L 30.8 11.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 20.3 L 1.0 24.6 L 31.0 24.6 L 31.0 20.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 20.3 L 7.3 24.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 20.3 L 24.4 24.6\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.9 20.3 L 15.9 24.4\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 7.3 7.6 L 7.3 11.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.4 7.5 L 24.4 11.8\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 15.8 7.4 L 15.8 11.7\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"MARSHES1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M 8.0 10.4 L 8.0 1.1\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.7 14.9 L 12.4 14.9\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.0 12.0 L 15.0 12.0\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.0 11.6 L 2.5 5.8\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 10.8 11.6 L 13.3 6.0\\\" fill=\\\"none\\\" stroke=\\\"CHBRN\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"NODATA03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"28\\\" height=\\\"28\\\" viewBox=\\\"0 0 28 28\\\">\\n <path d=\\\"M 1.0 14.1 L 27.0 13.9\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"OVERSC01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M 8.0 1.0 L 8.0 15.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"PRTSUR01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M 1.0 8.0 L 15.0 8.0\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"QUESMRK1\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\">\\n <path d=\\\"M 5.5 4.9 L 6.1 3.8 L 6.6 2.7 L 7.3 2.1 L 8.0 1.4 L 9.0 1.0 L 10.0 1.1 L 11.2 1.4 L 12.3 1.7 L 13.3 3.1 L 14.0 3.8 L 14.5 4.7 L 14.5 5.8 L 14.0 6.7 L 13.5 7.6 L 12.6 8.6 L 11.7 9.6 L 10.9 10.6 L 10.3 11.4 L 9.9 12.1 L 9.8 13.0 L 9.8 13.9 L 9.8 14.6 L 9.9 15.5 L 9.9 15.6\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 9.0 19.0 L 11.2 19.0\\\" fill=\\\"none\\\" stroke=\\\"CHMGD\\\" stroke-width=\\\"1.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"RCKLDG01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 5.6 29.0 L 9.8 25.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.2 7.2 L 6.2 13.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 16.1 14.7 L 13.0 19.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.2 7.8 L 14.7 3.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 17.9 22.2 L 18.9 27.8\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 28.8 21.5 L 31.0 16.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 29.1 9.8 L 24.2 8.2\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 6.2 13.1 L 1.0 10.4\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 13.2 19.1 L 12.7 13.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.5 29.0 L 6.0 24.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 18.0 22.2 L 22.1 25.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 30.9 16.5 L 25.7 18.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 24.3 8.3 L 28.3 5.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 14.7 3.0 L 16.8 7.6\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"SNDWAV01\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 32 32\\\">\\n <path d=\\\"M 1.0 18.3 L 3.1 18.3 L 4.2 17.7 L 5.9 14.0 L 6.8 14.0 L 8.2 17.7 L 8.9 18.3 L 13.4 18.3 L 14.2 17.6 L 15.3 14.1 L 16.0 14.1 L 17.3 17.6 L 18.1 18.3 L 21.8 18.3 L 23.1 18.3 L 23.9 17.8 L 25.5 13.7 L 26.4 13.7 L 27.9 17.7 L 28.9 18.3 L 31.0 18.3\\\" fill=\\\"none\\\" stroke=\\\"CHGRD\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"TSSJCT02\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\">\\n <path d=\\\"M 1.0 19.0 L 19.0 1.0\\\" fill=\\\"none\\\" stroke=\\\"TRFCF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VEGATN03\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\">\\n <path d=\\\"M 7.8 15.0 L 7.8 1.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 1.6 4.5 L 14.4 4.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 4.0 7.9 L 11.6 7.9\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.5 1.0 L 10.1 1.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 5.9 15.0 L 10.1 15.0\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.9 2.7 L 11.6 2.7\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 3.3 6.1 L 12.5 6.1\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n \"VEGATN04\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 16 16\\\">\\n <circle cx=\\\"8.00\\\" cy=\\\"8.00\\\" r=\\\"5.25\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" />\\n <path d=\\\"M 1.0 13.3 L 15.0 13.3\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n <path d=\\\"M 8.0 13.2 L 8.0 7.5\\\" fill=\\\"none\\\" stroke=\\\"LANDF\\\" stroke-width=\\\"0.8\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" />\\n</svg>\\n\",\n};\n\nexport const S52_LINE_SVGS: Record<string, string> = {\n\n};\n","/**\n * S-52 SVG Loader — pure (DOM-free) string operations over the inlined S-52\n * SVG catalogue in `s52-svgs-generated.ts`. SVG files use S-52 color token\n * names (e.g., CHBLK, LITRD) as fill/stroke values; `applyColorTheme` swaps\n * those tokens for hex from the active palette.\n *\n * Browser-only image loaders live in `./s52-svg-loader-browser.ts` (sub-export\n * `@chrtco/sdk/atlas/browser`) — they use `new Image()` and require a DOM.\n */\n\nimport { resolveColor, type ColorTableName, S52_DAY, S52_DUSK, S52_NIGHT } from \"./s52-colors\";\nimport {\n S52_POINT_SVGS,\n S52_PATTERN_SVGS,\n S52_LINE_SVGS,\n} from \"./s52-svgs-generated\";\n\n/** All S-52 SVGs by name (point + pattern + line) */\nexport const ALL_S52_SVGS: Record<string, string> = {\n ...S52_POINT_SVGS,\n ...S52_PATTERN_SVGS,\n ...S52_LINE_SVGS,\n};\n\n// ── All known color tokens across all S-52 palettes ──────────────\n\nconst ALL_COLOR_TOKENS: Set<string> = new Set([\n ...Object.keys(S52_DAY),\n ...Object.keys(S52_DUSK),\n ...Object.keys(S52_NIGHT),\n // Additional tokens from OpenCPN that may appear in SVGs\n \"CHRED\", \"CHGRN\", \"CHYLW\", \"CHMGD\", \"CHMGF\", \"CHWHT\",\n \"SCLBR\", \"CHCOR\", \"ISDNG\", \"SNDG1\", \"SNDG2\", \"DEPSC\", \"DEPCN\",\n \"RADHI\", \"RADLO\", \"ARPAT\", \"NINFO\", \"ADINF\", \"RESGR\",\n \"SHIPS\", \"PSTRK\", \"SYTRK\", \"PLRTE\", \"APLRT\",\n \"UINFD\", \"UINFF\", \"UIBCK\", \"UIAFD\", \"UINFR\", \"UINFG\",\n \"UINFO\", \"UINFB\", \"UINFM\", \"UIBDR\", \"UIAFF\",\n \"OUTLL\", \"RES01\", \"RES02\", \"RES03\", \"BKAJ2\",\n]);\n\n// ── Public API ───────────────────────────────────────────────────\n\n/**\n * Get raw SVG string for an S-52 symbol by name (e.g., \"BOYCAN01\").\n * Returns null if the symbol is not found.\n */\nexport function getS52SvgString(symbolName: string): string | null {\n return ALL_S52_SVGS[symbolName] ?? null;\n}\n\n/**\n * Get an S-52 SVG string with color tokens resolved to hex values\n * from the specified color table.\n */\nexport function getThemedS52Svg(\n symbolName: string,\n colorTable: ColorTableName = \"DAY\",\n): string | null {\n const raw = ALL_S52_SVGS[symbolName];\n if (!raw) return null;\n return applyColorTheme(raw, colorTable);\n}\n\n/**\n * Replace S-52 color token names in an SVG string with hex colors\n * from the active color table.\n *\n * Matches tokens in fill=\"TOKEN\" and stroke=\"TOKEN\" attribute values.\n */\nexport function applyColorTheme(\n svgString: string,\n colorTable: ColorTableName = \"DAY\",\n): string {\n return svgString.replace(\n /(fill|stroke)=\"([A-Z][A-Z0-9]{3,5})\"/g,\n (match, attr, token) => {\n if (token === \"none\") return match;\n if (ALL_COLOR_TOKENS.has(token)) {\n const hex = resolveColor(token, colorTable);\n return `${attr}=\"${hex}\"`;\n }\n return match;\n },\n );\n}\n\n/** Get a list of all available S-52 point symbol names. */\nexport function getAvailablePointSymbols(): string[] {\n return Object.keys(S52_POINT_SVGS);\n}\n\n/** Get a list of all available S-52 pattern names. */\nexport function getAvailablePatterns(): string[] {\n return Object.keys(S52_PATTERN_SVGS);\n}\n\n/** Get a list of all available S-52 line symbol names. */\nexport function getAvailableLineSymbols(): string[] {\n return Object.keys(S52_LINE_SVGS);\n}\n\n/** Stats for debugging */\nexport function getS52SymbolStats(): {\n pointCount: number;\n patternCount: number;\n lineCount: number;\n totalCount: number;\n} {\n return {\n pointCount: Object.keys(S52_POINT_SVGS).length,\n patternCount: Object.keys(S52_PATTERN_SVGS).length,\n lineCount: Object.keys(S52_LINE_SVGS).length,\n totalCount: Object.keys(ALL_S52_SVGS).length,\n };\n}\n","/**\n * Zoom range of CHRT tile builds — kept in lockstep with the baremetal\n * tippecanoe invocation (tools/chrt-baremetal/server/src/tilebuild/per-layer-zoom.ts).\n *\n * Per-S-57-class minzoom/maxzoom narrowing is handled inside the MVT at\n * tile-build time via per-feature `tippecanoe.minzoom/maxzoom`; these two\n * constants are the outer envelope the MapLibre source declares, so the\n * client doesn't request tiles outside what the pmtiles can actually serve.\n */\nexport const BUILD_MINZOOM = 3;\nexport const BUILD_MAXZOOM = 14;\n","/**\n * Post-consolidation (2026-04): one consolidated PMTiles per region, all\n * S-57 classes as distinct MVT layers inside. The MapLibre style emits one\n * vector source (id = region) and N paint layers that reference it via\n * `source-layer` = S-57 class name.\n *\n * `buildSources()` returns either the legacy Mapbox MTS shape (preserved for\n * demos / external style export — see generateStyle comments) or the PMTiles\n * shape pointing at a single tile URL per region.\n */\n\nimport {\n BUILD_MINZOOM,\n BUILD_MAXZOOM,\n} from \"./tile-zoom\";\n\n/** Vector source emitted for the legacy Mapbox MTS path. */\nexport interface MapboxVectorSource {\n type: \"vector\";\n url: string;\n}\n\n/**\n * Vector source emitted for the tiles.chrt.co PMTiles path. Uses an explicit\n * `tiles` array (not a TileJSON `url`) because the tile-worker serves raw MVT\n * bytes without a TileJSON descriptor.\n */\nexport interface PmtilesVectorSource {\n type: \"vector\";\n tiles: string[];\n minzoom: number;\n maxzoom: number;\n}\n\nexport type VectorSourceSpec = MapboxVectorSource | PmtilesVectorSource;\n\nexport type SourceMode = \"mapbox\" | \"pmtiles\";\n\n/**\n * Default tile-worker origin for PMTiles mode. Callers should pass\n * `tileBaseUrl` explicitly via `BuildSourcesOptions` to override (e.g. the\n * React app reads `import.meta.env.VITE_TILE_WORKER_BASE`; the offline-worker\n * reads `env.TILE_BASE_URL`). This constant is the prod fallback only.\n */\nexport const DEFAULT_TILE_BASE_URL = \"https://tiles.chrt.co\";\n\n/** Canonical source id used in `generateStyle()` — matches the region name\n * of the one consolidated PMTiles served by the tile-worker for this region. */\nexport const DEFAULT_REGION = \"NOAA_ENC\";\n\nexport interface BuildSourcesOptions {\n /** Which tile path to emit. Default: \"pmtiles\" (the supported path post-Mapbox). */\n mode?: SourceMode;\n /** Chart region. Default: \"NOAA_ENC\". */\n region?: string;\n /**\n * Reserved for future cache-busting on KV-pointer flips. Currently unused;\n * build pinning rides in the JWT, not the URL.\n */\n buildTag?: string;\n /** Override tile-worker origin (e.g. staging). Default: DEFAULT_TILE_BASE_URL. */\n tileBaseUrl?: string;\n}\n\n/**\n * Build the \"sources\" block for a CHRT style.\n *\n * - `mode: \"mapbox\"`: one mapbox:// url (kept for external style export only).\n * - `mode: \"pmtiles\"` (default): one vector tile endpoint for the region,\n * routed by the Worker to the one consolidated PMTiles:\n * `${tileBaseUrl}/v1/tiles/{region}/{z}/{x}/{y}.mvt`\n */\nexport function buildSources(\n opts: BuildSourcesOptions = {},\n): Record<string, VectorSourceSpec> {\n const mode: SourceMode = opts.mode ?? \"pmtiles\";\n const region = opts.region ?? DEFAULT_REGION;\n\n if (mode === \"mapbox\") {\n return {\n [region]: {\n type: \"vector\",\n url: `mapbox://chrt.${region.toLowerCase()}`,\n },\n };\n }\n\n const base = (opts.tileBaseUrl ?? DEFAULT_TILE_BASE_URL).replace(/\\/+$/, \"\");\n return {\n [region]: {\n type: \"vector\",\n tiles: [`${base}/v1/tiles/${region}/{z}/{x}/{y}.mvt`],\n minzoom: BUILD_MINZOOM,\n maxzoom: BUILD_MAXZOOM,\n },\n };\n}\n","/**\n * Builds Mapbox GL Style layer specs from S-52 lookup entries.\n * Wraps the existing atlas resolveStyle() and adds source/source-layer/filter.\n */\n\nimport { resolveStyle } from \"./style-resolver\";\nimport { S52_LOOKUP } from \"./s52-lookup\";\nimport { S52_DRAW_ORDER } from \"./draw-order\";\nimport { getIconExpression, SYMBOL_MAP } from \"./symbols\";\nimport { getLabelConfig, LABELED_LAYERS } from \"./labels\";\nimport { resolveColor } from \"./s52-colors\";\nimport type { ColorTableName } from \"./s52-colors\";\nimport type { GeomType } from \"./types\";\nimport { DEFAULT_REGION } from \"./source-registry\";\n\n// Geometry-type filters for Mapbox GL\nconst GEOM_FILTERS: Record<string, unknown[]> = {\n fill: [\"any\", [\"==\", [\"geometry-type\"], \"Polygon\"], [\"==\", [\"geometry-type\"], \"MultiPolygon\"]],\n line: [\"any\", [\"==\", [\"geometry-type\"], \"LineString\"], [\"==\", [\"geometry-type\"], \"MultiLineString\"]],\n circle: [\"any\", [\"==\", [\"geometry-type\"], \"Point\"], [\"==\", [\"geometry-type\"], \"MultiPoint\"]],\n symbol: [\"any\", [\"==\", [\"geometry-type\"], \"Point\"], [\"==\", [\"geometry-type\"], \"MultiPoint\"]],\n};\n\n// Layers that should get fill outlines\nconst FILL_OUTLINE_LAYERS = new Set([\n \"DEPARE\", \"LNDARE\", \"DRGARE\", \"LAKARE\", \"RIVERS\", \"CANALS\", \"BUAARE\",\n \"RESARE\", \"ACHARE\", \"FAIRWY\", \"TESARE\", \"MIPARE\", \"PRCARE\",\n]);\n\n// Zoom-scaled line widths (from style-resolver.ts)\nconst ZOOM_SCALED_LINES: Record<string, [number, number, number, number]> = {\n DEPCNT: [8, 0.3, 14, 0.8],\n COALNE: [8, 0.5, 14, 1.5],\n SLCONS: [8, 0.6, 14, 1.5],\n TSSBND: [8, 0.5, 14, 1.0],\n BRIDGE: [8, 1.0, 14, 2.0],\n DAMCON: [8, 1.0, 14, 2.0],\n};\n\n// Base cartographic fills that need full opacity\nconst OPAQUE_FILLS = new Set([\"DEPARE\", \"LNDARE\", \"UNSARE\", \"LAKARE\", \"DRGARE\"]);\n\n// Safety-critical groups that allow icon overlap\nconst SAFETY_GROUPS = new Set([24020, 27010, 27070, 27080]);\n\nexport interface StyleLayer {\n id: string;\n type: string;\n source: string;\n \"source-layer\": string;\n filter?: unknown[];\n paint: Record<string, unknown>;\n layout?: Record<string, unknown>;\n minzoom?: number;\n maxzoom?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Build a light label text-field expression using Mapbox GL expressions.\n * Replicates preprocessLights() logic as a static GL expression.\n */\nfunction buildLightLabelExpression(): unknown[] {\n // LITCHR → abbreviation\n const litchrExpr = [\n \"match\", [\"coalesce\", [\"get\", \"LITCHR\"], 0],\n 1, \"F\", 2, \"Fl\", 3, \"LFl\", 4, \"Oc\", 5, \"Iso\",\n 6, \"S.Fl\", 7, \"S.LFl\", 12, \"Mo\", 13, \"Q\", 14, \"VQ\", 15, \"UQ\",\n \"\",\n ];\n\n // COLOUR → letter\n const colourExpr = [\n \"match\", [\"coalesce\", [\"get\", \"COLOUR\"], 0],\n 1, \" W\", 3, \" R\", 4, \" G\", 5, \" Bu\", 6, \" Y\", 11, \" Or\",\n \"\",\n ];\n\n // SIGPER → \"Ns\" or \"\"\n const sigperExpr = [\n \"case\",\n [\"all\", [\"has\", \"SIGPER\"], [\">\", [\"to-number\", [\"get\", \"SIGPER\"], 0], 0]],\n [\"concat\", \" \", [\"to-string\", [\"get\", \"SIGPER\"]], \"s\"],\n \"\",\n ];\n\n return [\"concat\", litchrExpr, colourExpr, sigperExpr];\n}\n\n/**\n * Build all Mapbox GL layers for a given S-57 object class.\n * Returns multiple layers (fill, outline, symbol, label, etc.).\n *\n * Post-consolidation: all S-57 classes live as MVT layers inside one\n * consolidated PMTiles per region; `source` is always the region name.\n */\nexport function buildLayersForClass(\n objectClass: string,\n ct: ColorTableName,\n sourceId: string = DEFAULT_REGION,\n): StyleLayer[] {\n // Only build layers for classes the S-52 lookup actually has styling for;\n // otherwise we'd emit orphan paint layers for classes with no `resolveStyle`\n // hit, which MapLibre would render as empty but still count against layer\n // budget.\n if (!S52_LOOKUP[objectClass]) return [];\n\n const entry = S52_LOOKUP[objectClass];\n const layers: StyleLayer[] = [];\n\n // Determine what geometry types this class should render as\n const geomTypes = getGeomTypesForClass(objectClass, entry?.style.type);\n\n for (const geomType of geomTypes) {\n const resolved = resolveStyle(objectClass, geomType, ct);\n const layerId = `s52-${objectClass}-${resolved.type}`;\n\n const layer: StyleLayer = {\n id: layerId,\n type: resolved.type,\n source: sourceId,\n \"source-layer\": objectClass,\n paint: resolved.paint as Record<string, unknown>,\n metadata: {\n \"s52:objectClass\": objectClass,\n \"s52:displayCategory\": entry?.displayCategory ?? \"OTHER\",\n \"s52:category\": entry?.category ?? \"Meta\",\n },\n };\n\n // Geometry filter\n if (GEOM_FILTERS[resolved.type]) {\n layer.filter = GEOM_FILTERS[resolved.type];\n }\n\n // Minzoom\n if (resolved.minzoom) {\n layer.minzoom = resolved.minzoom;\n }\n\n // Force opaque fills for base layers\n if (resolved.type === \"fill\" && OPAQUE_FILLS.has(objectClass)) {\n layer.paint[\"fill-opacity\"] = 1.0;\n }\n\n // Zoom-scaled line widths\n if (resolved.type === \"line\" && ZOOM_SCALED_LINES[objectClass]) {\n const [z1, w1, z2, w2] = ZOOM_SCALED_LINES[objectClass];\n layer.paint[\"line-width\"] = [\"interpolate\", [\"linear\"], [\"zoom\"], z1, w1, z2, w2];\n }\n\n // Symbol layer enhancements\n if (resolved.type === \"symbol\") {\n const iconExpr = getIconExpression(objectClass);\n layer.layout = {\n \"icon-image\": iconExpr,\n \"icon-size\": [\"interpolate\", [\"linear\"], [\"zoom\"], 8, 0.4, 14, 0.8],\n \"icon-allow-overlap\": SAFETY_GROUPS.has(entry?.viewingGroup ?? 0),\n \"icon-optional\": !SAFETY_GROUPS.has(entry?.viewingGroup ?? 0),\n ...(resolved.layout ?? {}),\n };\n } else if (resolved.layout) {\n layer.layout = resolved.layout;\n }\n\n layers.push(layer);\n\n // Add fill outline\n if (resolved.type === \"fill\" && FILL_OUTLINE_LAYERS.has(objectClass)) {\n const outlineColor = objectClass === \"DEPARE\"\n ? resolveColor(\"CHGRD\", ct)\n : resolveColor(\"CHGRF\", ct);\n layers.push({\n id: `s52-${objectClass}-outline`,\n type: \"line\",\n source: sourceId,\n \"source-layer\": objectClass,\n filter: GEOM_FILTERS.fill,\n paint: {\n \"line-color\": outlineColor,\n \"line-width\": 0.3,\n \"line-opacity\": 0.4,\n },\n metadata: { \"s52:objectClass\": objectClass, \"s52:role\": \"outline\" },\n });\n }\n }\n\n return layers;\n}\n\n/**\n * Build a label layer for a given S-57 object class.\n */\nexport function buildLabelLayer(\n objectClass: string,\n ct: ColorTableName,\n sourceId: string = DEFAULT_REGION,\n): StyleLayer | null {\n if (!LABELED_LAYERS.has(objectClass)) return null;\n\n const config = getLabelConfig(objectClass);\n if (!config) return null;\n\n // For LIGHTS, replace the runtime _lightLabel with a GL expression\n let textField = config.textField;\n if (objectClass === \"LIGHTS\") {\n textField = buildLightLabelExpression() as unknown as typeof textField;\n }\n\n // For nav aids, _navAidLabel is runtime-preprocessed.\n // In static style, fall back to OBJNAM since we can't do regex in GL expressions.\n if (typeof textField !== \"string\" && Array.isArray(textField)) {\n const flat = JSON.stringify(textField);\n if (flat.includes(\"_navAidLabel\")) {\n textField = [\"get\", \"OBJNAM\"] as unknown as typeof textField;\n }\n }\n\n const layer: StyleLayer = {\n id: `s52-${objectClass}-label`,\n type: \"symbol\",\n source: sourceId,\n \"source-layer\": objectClass,\n filter: GEOM_FILTERS.symbol,\n layout: {\n \"text-field\": textField,\n \"text-size\": config.textSize,\n \"text-font\": config.textFont ?? [\"Open Sans Regular\", \"Arial Unicode MS Regular\"],\n \"text-offset\": config.textOffset,\n \"text-anchor\": \"top\",\n \"text-allow-overlap\": false,\n \"text-optional\": true,\n \"text-padding\": 4,\n ...(config.layout ?? {}),\n },\n paint: {\n \"text-color\": config.textColor,\n \"text-halo-color\": config.textHaloColor,\n \"text-halo-width\": config.textHaloWidth,\n },\n };\n\n if (config.minzoom) {\n layer.minzoom = config.minzoom;\n }\n\n // DEPCNT labels follow the line\n if (objectClass === \"DEPCNT\") {\n layer.filter = GEOM_FILTERS.line;\n }\n\n return layer;\n}\n\n/** Determine appropriate geometry types for a class */\nfunction getGeomTypesForClass(\n objectClass: string,\n defaultType?: GeomType,\n): GeomType[] {\n // Symbol layers render as symbols only (not fill/line)\n if (SYMBOL_MAP[objectClass] && defaultType === \"symbol\") {\n return [\"symbol\"];\n }\n\n // SOUNDG is invisible (labels only) — render as circle with 0 opacity\n if (objectClass === \"SOUNDG\") {\n return [\"circle\"];\n }\n\n // Default: use the lookup table's type\n if (defaultType) {\n return [defaultType];\n }\n\n // Fallback\n return [\"circle\"];\n}\n\n/**\n * Get the full ordered list of object classes for style generation.\n * Uses S52_DRAW_ORDER as base, then adds any missing classes from the\n * S-52 lookup table so a newly-ingested class automatically gets styled\n * without touching this file.\n */\nexport function getOrderedClasses(): string[] {\n const ordered = [...S52_DRAW_ORDER];\n\n for (const key of Object.keys(S52_LOOKUP)) {\n if (!ordered.includes(key)) {\n // Insert before point features\n const insertIdx = ordered.indexOf(\"SOUNDG\");\n if (insertIdx >= 0) {\n ordered.splice(insertIdx, 0, key);\n } else {\n ordered.push(key);\n }\n }\n }\n\n return ordered;\n}\n","/**\n * Generates a complete Mapbox GL Style Specification v8 JSON\n * from the S-52 atlas definitions.\n */\n\nimport type { ColorTableName } from \"./s52-colors\";\nimport {\n buildSources,\n DEFAULT_REGION,\n type BuildSourcesOptions,\n} from \"./source-registry\";\nimport { buildLayersForClass, buildLabelLayer, getOrderedClasses } from \"./layer-builder\";\nimport type { StyleLayer } from \"./layer-builder\";\n\nexport interface MapboxStyle {\n version: 8;\n name: string;\n metadata: Record<string, unknown>;\n sources: Record<string, unknown>;\n sprite?: string;\n glyphs: string;\n layers: StyleLayer[];\n}\n\nconst META_LAYERS = new Set([\n \"DSID\", \"C_AGGR\", \"C_ASSO\", \"CTRPNT\", \"MAGVAR\", \"M_COVR\", \"M_NPUB\",\n \"M_NSYS\", \"M_QUAL\", \"M_SREL\", \"M_SDAT\", \"M_VDAT\", \"M_CSCL\", \"TS_FEB\",\n \"TS_TIS\", \"COSARE\", \"NEWOBJ\", \"LOCMAG\",\n]);\n\nconst PALETTE_NAMES: Record<ColorTableName, string> = {\n DAY: \"DAY_BRIGHT\",\n DUSK: \"DUSK\",\n NIGHT: \"NIGHT\",\n};\n\nexport function generateStyle(\n palette: ColorTableName = \"DAY\",\n opts: BuildSourcesOptions = {},\n): MapboxStyle {\n const sources = buildSources(opts);\n const sourceId = opts.region ?? DEFAULT_REGION;\n const orderedClasses = getOrderedClasses();\n const layers: StyleLayer[] = [];\n const labelLayers: StyleLayer[] = [];\n\n for (const objectClass of orderedClasses) {\n // Skip meta layers\n if (META_LAYERS.has(objectClass)) continue;\n\n // Build feature layers — all reference the one consolidated region source\n const featureLayers = buildLayersForClass(objectClass, palette, sourceId);\n layers.push(...featureLayers);\n\n // Build label layer\n const label = buildLabelLayer(objectClass, palette, sourceId);\n if (label) labelLayers.push(label);\n }\n\n // Labels go after all feature layers (rendered on top)\n layers.push(...labelLayers);\n\n return {\n version: 8,\n name: `CHRT S-52 ${PALETTE_NAMES[palette]}`,\n metadata: {\n \"chrt:s52-edition\": \"4.0\",\n \"chrt:color-table\": palette,\n \"chrt:generated-at\": new Date().toISOString(),\n \"chrt:layer-count\": layers.length,\n \"chrt:description\": \"IHO S-52 portrayal rules for Electronic Navigational Charts (ENCs). Generated from the CHRT atlas engine.\",\n },\n sources,\n // TODO(Phase 9): the superadmin style-generator emits a reference JSON\n // intended for external upload to Mapbox Studio. That flow is vestigial —\n // we're decommissioning Mapbox MTS. When the page is repurposed to\n // generate a MapLibre-native style for self-hosted consumers, wire the\n // `sprite` field back in against a CHRT-hosted sprite route (see\n // `.lovable/` follow-ups). Runtime maps load S-52 symbols via\n // `loadS52SymbolImages()` — no sprite fetch happens at runtime.\n glyphs: \"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf\",\n layers,\n };\n}\n\nexport function generateStyleJSON(\n palette: ColorTableName = \"DAY\",\n opts: BuildSourcesOptions = {},\n): string {\n return JSON.stringify(generateStyle(palette, opts), null, 2);\n}\n\n/** Get summary stats about the generated style */\nexport function getStyleStats(style: MapboxStyle): {\n totalLayers: number;\n fillLayers: number;\n lineLayers: number;\n symbolLayers: number;\n circleLayers: number;\n sources: number;\n objectClasses: Set<string>;\n} {\n const objectClasses = new Set<string>();\n let fillLayers = 0;\n let lineLayers = 0;\n let symbolLayers = 0;\n let circleLayers = 0;\n\n for (const layer of style.layers) {\n const oc = (layer.metadata as Record<string, unknown>)?.[\"s52:objectClass\"];\n if (typeof oc === \"string\") objectClasses.add(oc);\n\n switch (layer.type) {\n case \"fill\": fillLayers++; break;\n case \"line\": lineLayers++; break;\n case \"symbol\": symbolLayers++; break;\n case \"circle\": circleLayers++; break;\n }\n }\n\n return {\n totalLayers: style.layers.length,\n fillLayers,\n lineLayers,\n symbolLayers,\n circleLayers,\n sources: Object.keys(style.sources).length,\n objectClasses,\n };\n}\n"],"mappings":"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AAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAKO,IAAM,YAAoC;AAAA,EAC/C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,OAAO;AAAA,EACP,OAAO;AAAA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AAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AACd;AAEO,IAAM,mBAA2C;AAAA,EACtD,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AACd;AAEO,IAAM,gBAAwC,CAErD;;;ACtWO,IAAM,eAAuC;AAAA,EAClD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAIA,IAAM,mBAAgC,oBAAI,IAAI;AAAA,EAC5C,GAAG,OAAO,KAAK,OAAO;AAAA,EACtB,GAAG,OAAO,KAAK,QAAQ;AAAA,EACvB,GAAG,OAAO,KAAK,SAAS;AAAA;AAAA,EAExB;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAC7C;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EACtD;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAC7C;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EACpC;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAC7C;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EACpC;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AACtC,CAAC;AAQM,SAAS,gBAAgB,YAAmC;AACjE,SAAO,aAAa,UAAU,KAAK;AACrC;AAMO,SAAS,gBACd,YACA,aAA6B,OACd;AACf,QAAM,MAAM,aAAa,UAAU;AACnC,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,gBAAgB,KAAK,UAAU;AACxC;AAQO,SAAS,gBACd,WACA,aAA6B,OACrB;AACR,SAAO,UAAU;AAAA,IACf;AAAA,IACA,CAAC,OAAO,MAAM,UAAU;AACtB,UAAI,UAAU,OAAQ,QAAO;AAC7B,UAAI,iBAAiB,IAAI,KAAK,GAAG;AAC/B,cAAM,MAAM,aAAa,OAAO,UAAU;AAC1C,eAAO,GAAG,IAAI,KAAK,GAAG;AAAA,MACxB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAGO,SAAS,2BAAqC;AACnD,SAAO,OAAO,KAAK,cAAc;AACnC;AAGO,SAAS,uBAAiC;AAC/C,SAAO,OAAO,KAAK,gBAAgB;AACrC;AAGO,SAAS,0BAAoC;AAClD,SAAO,OAAO,KAAK,aAAa;AAClC;AAGO,SAAS,oBAKd;AACA,SAAO;AAAA,IACL,YAAY,OAAO,KAAK,cAAc,EAAE;AAAA,IACxC,cAAc,OAAO,KAAK,gBAAgB,EAAE;AAAA,IAC5C,WAAW,OAAO,KAAK,aAAa,EAAE;AAAA,IACtC,YAAY,OAAO,KAAK,YAAY,EAAE;AAAA,EACxC;AACF;;;ACzGO,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;;;ACkCtB,IAAM,wBAAwB;AAI9B,IAAM,iBAAiB;AAwBvB,SAAS,aACd,OAA4B,CAAC,GACK;AAClC,QAAM,OAAmB,KAAK,QAAQ;AACtC,QAAM,SAAS,KAAK,UAAU;AAE9B,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,MACL,CAAC,MAAM,GAAG;AAAA,QACR,MAAM;AAAA,QACN,KAAK,iBAAiB,OAAO,YAAY,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,KAAK,eAAe,uBAAuB,QAAQ,QAAQ,EAAE;AAC3E,SAAO;AAAA,IACL,CAAC,MAAM,GAAG;AAAA,MACR,MAAM;AAAA,MACN,OAAO,CAAC,GAAG,IAAI,aAAa,MAAM,kBAAkB;AAAA,MACpD,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;AChFA,IAAM,eAA0C;AAAA,EAC9C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,SAAS,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG,cAAc,CAAC;AAAA,EAC7F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG,iBAAiB,CAAC;AAAA,EACnG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC;AAAA,EAC3F,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC;AAC7F;AAGA,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC5D;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AACpD,CAAC;AAGD,IAAMC,qBAAsE;AAAA,EAC1E,QAAQ,CAAC,GAAG,KAAK,IAAI,GAAG;AAAA,EACxB,QAAQ,CAAC,GAAG,KAAK,IAAI,GAAG;AAAA,EACxB,QAAQ,CAAC,GAAG,KAAK,IAAI,GAAG;AAAA,EACxB,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAG;AAAA,EACxB,QAAQ,CAAC,GAAG,GAAK,IAAI,CAAG;AAAA,EACxB,QAAQ,CAAC,GAAG,GAAK,IAAI,CAAG;AAC1B;AAGA,IAAM,eAAe,oBAAI,IAAI,CAAC,UAAU,UAAU,UAAU,UAAU,QAAQ,CAAC;AAG/E,IAAM,gBAAgB,oBAAI,IAAI,CAAC,OAAO,OAAO,OAAO,KAAK,CAAC;AAmB1D,SAAS,4BAAuC;AAE9C,QAAM,aAAa;AAAA,IACjB;AAAA,IAAS,CAAC,YAAY,CAAC,OAAO,QAAQ,GAAG,CAAC;AAAA,IAC1C;AAAA,IAAG;AAAA,IAAK;AAAA,IAAG;AAAA,IAAM;AAAA,IAAG;AAAA,IAAO;AAAA,IAAG;AAAA,IAAM;AAAA,IAAG;AAAA,IACvC;AAAA,IAAG;AAAA,IAAQ;AAAA,IAAG;AAAA,IAAS;AAAA,IAAI;AAAA,IAAM;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAM;AAAA,IAAI;AAAA,IACxD;AAAA,EACF;AAGA,QAAM,aAAa;AAAA,IACjB;AAAA,IAAS,CAAC,YAAY,CAAC,OAAO,QAAQ,GAAG,CAAC;AAAA,IAC1C;AAAA,IAAG;AAAA,IAAM;AAAA,IAAG;AAAA,IAAM;AAAA,IAAG;AAAA,IAAM;AAAA,IAAG;AAAA,IAAO;AAAA,IAAG;AAAA,IAAM;AAAA,IAAI;AAAA,IAClD;AAAA,EACF;AAGA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,CAAC,OAAO,CAAC,OAAO,QAAQ,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,IACxE,CAAC,UAAU,KAAK,CAAC,aAAa,CAAC,OAAO,QAAQ,CAAC,GAAG,GAAG;AAAA,IACrD;AAAA,EACF;AAEA,SAAO,CAAC,UAAU,YAAY,YAAY,UAAU;AACtD;AASO,SAAS,oBACd,aACA,IACA,WAAmB,gBACL;AAKd,MAAI,CAAC,WAAW,WAAW,EAAG,QAAO,CAAC;AAEtC,QAAM,QAAQ,WAAW,WAAW;AACpC,QAAM,SAAuB,CAAC;AAG9B,QAAM,YAAY,qBAAqB,aAAa,OAAO,MAAM,IAAI;AAErE,aAAW,YAAY,WAAW;AAChC,UAAM,WAAW,aAAa,aAAa,UAAU,EAAE;AACvD,UAAM,UAAU,OAAO,WAAW,IAAI,SAAS,IAAI;AAEnD,UAAM,QAAoB;AAAA,MACxB,IAAI;AAAA,MACJ,MAAM,SAAS;AAAA,MACf,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA,QACR,mBAAmB;AAAA,QACnB,uBAAuB,OAAO,mBAAmB;AAAA,QACjD,gBAAgB,OAAO,YAAY;AAAA,MACrC;AAAA,IACF;AAGA,QAAI,aAAa,SAAS,IAAI,GAAG;AAC/B,YAAM,SAAS,aAAa,SAAS,IAAI;AAAA,IAC3C;AAGA,QAAI,SAAS,SAAS;AACpB,YAAM,UAAU,SAAS;AAAA,IAC3B;AAGA,QAAI,SAAS,SAAS,UAAU,aAAa,IAAI,WAAW,GAAG;AAC7D,YAAM,MAAM,cAAc,IAAI;AAAA,IAChC;AAGA,QAAI,SAAS,SAAS,UAAUA,mBAAkB,WAAW,GAAG;AAC9D,YAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAIA,mBAAkB,WAAW;AACtD,YAAM,MAAM,YAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,IAClF;AAGA,QAAI,SAAS,SAAS,UAAU;AAC9B,YAAM,WAAW,kBAAkB,WAAW;AAC9C,YAAM,SAAS;AAAA,QACb,cAAc;AAAA,QACd,aAAa,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,GAAG,KAAK,IAAI,GAAG;AAAA,QAClE,sBAAsB,cAAc,IAAI,OAAO,gBAAgB,CAAC;AAAA,QAChE,iBAAiB,CAAC,cAAc,IAAI,OAAO,gBAAgB,CAAC;AAAA,QAC5D,GAAI,SAAS,UAAU,CAAC;AAAA,MAC1B;AAAA,IACF,WAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,SAAS;AAAA,IAC1B;AAEA,WAAO,KAAK,KAAK;AAGjB,QAAI,SAAS,SAAS,UAAU,oBAAoB,IAAI,WAAW,GAAG;AACpE,YAAM,eAAe,gBAAgB,WACjC,aAAa,SAAS,EAAE,IACxB,aAAa,SAAS,EAAE;AAC5B,aAAO,KAAK;AAAA,QACV,IAAI,OAAO,WAAW;AAAA,QACtB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,QAAQ,aAAa;AAAA,QACrB,OAAO;AAAA,UACL,cAAc;AAAA,UACd,cAAc;AAAA,UACd,gBAAgB;AAAA,QAClB;AAAA,QACA,UAAU,EAAE,mBAAmB,aAAa,YAAY,UAAU;AAAA,MACpE,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAASC,iBACd,aACA,IACA,WAAmB,gBACA;AACnB,MAAI,CAAC,eAAe,IAAI,WAAW,EAAG,QAAO;AAE7C,QAAM,SAAS,eAAe,WAAW;AACzC,MAAI,CAAC,OAAQ,QAAO;AAGpB,MAAI,YAAY,OAAO;AACvB,MAAI,gBAAgB,UAAU;AAC5B,gBAAY,0BAA0B;AAAA,EACxC;AAIA,MAAI,OAAO,cAAc,YAAY,MAAM,QAAQ,SAAS,GAAG;AAC7D,UAAM,OAAO,KAAK,UAAU,SAAS;AACrC,QAAI,KAAK,SAAS,cAAc,GAAG;AACjC,kBAAY,CAAC,OAAO,QAAQ;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,QAAoB;AAAA,IACxB,IAAI,OAAO,WAAW;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,QAAQ,aAAa;AAAA,IACrB,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO,YAAY,CAAC,qBAAqB,0BAA0B;AAAA,MAChF,eAAe,OAAO;AAAA,MACtB,eAAe;AAAA,MACf,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,GAAI,OAAO,UAAU,CAAC;AAAA,IACxB;AAAA,IACA,OAAO;AAAA,MACL,cAAc,OAAO;AAAA,MACrB,mBAAmB,OAAO;AAAA,MAC1B,mBAAmB,OAAO;AAAA,IAC5B;AAAA,EACF;AAEA,MAAI,OAAO,SAAS;AAClB,UAAM,UAAU,OAAO;AAAA,EACzB;AAGA,MAAI,gBAAgB,UAAU;AAC5B,UAAM,SAAS,aAAa;AAAA,EAC9B;AAEA,SAAO;AACT;AAGA,SAAS,qBACP,aACA,aACY;AAEZ,MAAI,WAAW,WAAW,KAAK,gBAAgB,UAAU;AACvD,WAAO,CAAC,QAAQ;AAAA,EAClB;AAGA,MAAI,gBAAgB,UAAU;AAC5B,WAAO,CAAC,QAAQ;AAAA,EAClB;AAGA,MAAI,aAAa;AACf,WAAO,CAAC,WAAW;AAAA,EACrB;AAGA,SAAO,CAAC,QAAQ;AAClB;AAQO,SAAS,oBAA8B;AAC5C,QAAM,UAAU,CAAC,GAAG,cAAc;AAElC,aAAW,OAAO,OAAO,KAAK,UAAU,GAAG;AACzC,QAAI,CAAC,QAAQ,SAAS,GAAG,GAAG;AAE1B,YAAM,YAAY,QAAQ,QAAQ,QAAQ;AAC1C,UAAI,aAAa,GAAG;AAClB,gBAAQ,OAAO,WAAW,GAAG,GAAG;AAAA,MAClC,OAAO;AACL,gBAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACrRA,IAAM,cAAc,oBAAI,IAAI;AAAA,EAC1B;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1D;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC5D;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAChC,CAAC;AAED,IAAM,gBAAgD;AAAA,EACpD,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AACT;AAEO,SAAS,cACd,UAA0B,OAC1B,OAA4B,CAAC,GAChB;AACb,QAAM,UAAU,aAAa,IAAI;AACjC,QAAM,WAAW,KAAK,UAAU;AAChC,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,SAAuB,CAAC;AAC9B,QAAM,cAA4B,CAAC;AAEnC,aAAW,eAAe,gBAAgB;AAExC,QAAI,YAAY,IAAI,WAAW,EAAG;AAGlC,UAAM,gBAAgB,oBAAoB,aAAa,SAAS,QAAQ;AACxE,WAAO,KAAK,GAAG,aAAa;AAG5B,UAAM,QAAQC,iBAAgB,aAAa,SAAS,QAAQ;AAC5D,QAAI,MAAO,aAAY,KAAK,KAAK;AAAA,EACnC;AAGA,SAAO,KAAK,GAAG,WAAW;AAE1B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM,aAAa,cAAc,OAAO,CAAC;AAAA,IACzC,UAAU;AAAA,MACR,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,sBAAqB,oBAAI,KAAK,GAAE,YAAY;AAAA,MAC5C,oBAAoB,OAAO;AAAA,MAC3B,oBAAoB;AAAA,IACtB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ;AAAA,IACR;AAAA,EACF;AACF;AAEO,SAAS,kBACd,UAA0B,OAC1B,OAA4B,CAAC,GACrB;AACR,SAAO,KAAK,UAAU,cAAc,SAAS,IAAI,GAAG,MAAM,CAAC;AAC7D;AAGO,SAAS,cAAc,OAQ5B;AACA,QAAM,gBAAgB,oBAAI,IAAY;AACtC,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,eAAe;AACnB,MAAI,eAAe;AAEnB,aAAW,SAAS,MAAM,QAAQ;AAChC,UAAM,KAAM,MAAM,WAAuC,iBAAiB;AAC1E,QAAI,OAAO,OAAO,SAAU,eAAc,IAAI,EAAE;AAEhD,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AAAQ;AAAc;AAAA,MAC3B,KAAK;AAAQ;AAAc;AAAA,MAC3B,KAAK;AAAU;AAAgB;AAAA,MAC/B,KAAK;AAAU;AAAgB;AAAA,IACjC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,MAAM,OAAO;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,OAAO,KAAK,MAAM,OAAO,EAAE;AAAA,IACpC;AAAA,EACF;AACF;;;A7B3GO,IAAM,OAAN,MAAW;AAAA;AAAA,EAEP;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,gBAAqC;AAC/C,UAAM,SACJ,OAAO,mBAAmB,WACtB,EAAE,QAAQ,eAAe,IACzB;AAEN,SAAK,OAAO,IAAI,WAAW,OAAO,QAAQ,OAAO,SAAS,OAAO,OAAO;AACxE,SAAK,QAAQ,IAAI,cAAc,KAAK,IAAI;AACxC,SAAK,QAAQ,IAAI,cAAc,KAAK,IAAI;AACxC,SAAK,WAAW,IAAI,iBAAiB,KAAK,IAAI;AAC9C,SAAK,aAAa,IAAI,iBAAiB,KAAK,IAAI;AAChD,SAAK,UAAU,IAAI,cAAc,KAAK,IAAI;AAC1C,SAAK,UAAU,IAAI,gBAAgB,KAAK,MAAM,OAAO,UAAU,OAAO,YAAY;AAAA,EACpF;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,SAAsD;AACnE,WAAO,KAAK,WAAW,KAAK,OAAO;AAAA,EACrC;AAAA;AAAA,EAGA,MAAM,MAAM,SAAmD;AAC7D,WAAO,KAAK,QAAQ,OAAO,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0CA,aACE,SAC+B;AAC/B,UAAM,WAAW,QAAQ,SAAS;AAClC,WAAO;AAAA,MACL,CAAC,QAAQ,WACP,KAAK,SAAS,EAAE,GAAG,SAAS,OAAO,UAAU,QAAQ,OAAO,CAAC;AAAA,MAC/D,CAAC,MAAM,EAAE;AAAA,MACT,CAAC,MAAM,EAAE,eAAe;AAAA,MACxB,EAAE,UAAU,QAAQ,QAAQ,OAAO;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UACE,SAC2B;AAC3B,UAAM,WAAW,SAAS,SAAS;AACnC,WAAO;AAAA,MACL,CAAC,QAAQ,WACP,KAAK,MAAM,KAAK,EAAE,GAAG,SAAS,OAAO,UAAU,QAAQ,OAAO,CAAC;AAAA,MACjE,CAAC,MAAM,EAAE;AAAA,MACT,CAAC,MAAM,EAAE;AAAA,MACT,EAAE,UAAU,QAAQ,SAAS,OAAO;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,WAAmB;AACjB,WAAO,KAAK,MAAM,SAAS;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAkE;AAChE,UAAM,SAAS,KAAK,KAAK,UAAU;AACnC,WAAO,CAAC,QAAgB;AACtB,UAAI,IAAI,SAAS,aAAa,GAAG;AAC/B,eAAO,EAAE,KAAK,SAAS,EAAE,aAAa,OAAO,EAAE;AAAA,MACjD;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["src","paint","SIZE","svg","ZOOM_SCALED_LINES","buildLabelLayer","buildLabelLayer"]}
|