From 3dbd666175a726d32bcfb490de169029821eb177 Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Fri, 10 Apr 2026 15:47:38 -0400 Subject: [PATCH 1/6] changes to relay rendering --- frontend/src/components/ProfilingPanel.tsx | 203 +++++++++++---- .../src/components/topologyFlowData.test.tsx | 235 ++++++++++++++++++ frontend/src/components/topologyFlowData.tsx | 22 +- frontend/src/components/topologyGraph.test.ts | 88 +++++++ frontend/src/components/topologyGraph.ts | 177 +++++++++---- frontend/src/components/topologyTrace.ts | 10 +- pyproject.toml | 5 +- 7 files changed, 639 insertions(+), 101 deletions(-) diff --git a/frontend/src/components/ProfilingPanel.tsx b/frontend/src/components/ProfilingPanel.tsx index 1d83828..0e1a41a 100644 --- a/frontend/src/components/ProfilingPanel.tsx +++ b/frontend/src/components/ProfilingPanel.tsx @@ -3,8 +3,12 @@ import { createPortal } from "react-dom"; import { Panel } from "./Panel"; import { TraceTimingPanel, type TimingTraceSample } from "./TraceTimingPanel"; +import { buildRelayAliasIndex, classifyComponents } from "./topologyGraph"; import { buildLeaseColorMap, leaseColorForEndpoint } from "../utils/traceColors"; -import { endpointIdFromStreamAddress } from "../utils/streamAddress"; +import { + endpointIdFromStreamAddress, + streamAddressWithoutEndpoint, +} from "../utils/streamAddress"; import type { GraphSnapshotPayload, ProfilingTraceControlRequest, @@ -169,8 +173,20 @@ function isRecord(value: unknown): value is Record { return typeof value === "object" && value !== null; } +function canonicalizeProfilingTopic( + topic: string, + relayEndpointByInternalTopic: Map +): string { + return ( + relayEndpointByInternalTopic.get(topic) + ?? relayEndpointByInternalTopic.get(streamAddressWithoutEndpoint(topic)) + ?? topic + ); +} + function extractTraceSamples( - event: ProfilingTraceEnvelope | null + event: ProfilingTraceEnvelope | null, + relayEndpointByInternalTopic: Map ): PublisherTraceSample[] { if (!event) { return []; @@ -207,7 +223,7 @@ function extractTraceSamples( rowId: `${processId}:${endpointId}`, processId, endpointId, - topic, + topic: canonicalizeProfilingTopic(topic, relayEndpointByInternalTopic), timestamp: typeof timestamp === "number" && Number.isFinite(timestamp) ? timestamp @@ -229,12 +245,18 @@ function extractTraceSamples( function toContributor( process: ProcessProfilingSnapshotPayload, subscriber: SubscriberProfilingSnapshot, - endpointOwnerById: Map + endpointOwnerById: Map, + endpointOwnerByTopic: Map, + relayEndpointByInternalTopic: Map ): SubscriberContributor { + const topic = canonicalizeProfilingTopic( + subscriber.topic, + relayEndpointByInternalTopic + ); return { id: `${process.process_id}:${subscriber.endpoint_id}`, endpointId: subscriber.endpoint_id, - topic: subscriber.topic, + topic, processId: process.process_id, pid: process.pid, host: process.host, @@ -243,20 +265,34 @@ function toContributor( typeof subscriber.channel_kind_last === "string" ? subscriber.channel_kind_last : "unknown", - unitAddress: endpointOwnerById.get(subscriber.endpoint_id) ?? null, + unitAddress: + endpointOwnerById.get(subscriber.endpoint_id) + ?? endpointOwnerByTopic.get(topic) + ?? null, }; } function topicScopeForPublisher( topic: string, - graphSnapshot: GraphSnapshotPayload | null + graphSnapshot: GraphSnapshotPayload | null, + relayEndpointByInternalTopic: Map ): Set { - const candidateTopics = new Set([topic]); - const routedTopics = graphSnapshot?.graph[topic]; - if (Array.isArray(routedTopics)) { + const normalizedTopic = canonicalizeProfilingTopic( + topic, + relayEndpointByInternalTopic + ); + const candidateTopics = new Set([normalizedTopic]); + const rawTopics = new Set([topic, normalizedTopic]); + for (const rawTopic of rawTopics) { + const routedTopics = graphSnapshot?.graph[rawTopic]; + if (!Array.isArray(routedTopics)) { + continue; + } for (const routedTopic of routedTopics) { if (typeof routedTopic === "string") { - candidateTopics.add(routedTopic); + candidateTopics.add( + canonicalizeProfilingTopic(routedTopic, relayEndpointByInternalTopic) + ); } } } @@ -278,9 +314,14 @@ function sampleTopicMatchesScope(sampleTopic: string, topicScope: Set): function contributorListForPublisher( topic: string, subscribers: SubscriberContributor[], - graphSnapshot: GraphSnapshotPayload | null + graphSnapshot: GraphSnapshotPayload | null, + relayEndpointByInternalTopic: Map ): SubscriberContributor[] { - const candidateTopics = topicScopeForPublisher(topic, graphSnapshot); + const candidateTopics = topicScopeForPublisher( + topic, + graphSnapshot, + relayEndpointByInternalTopic + ); return subscribers .filter((subscriber) => candidateTopics.has(subscriber.topic)) @@ -302,7 +343,9 @@ function toPublisherRow( publisher: PublisherProfilingSnapshot, allSubscribers: SubscriberContributor[], graphSnapshot: GraphSnapshotPayload | null, - endpointOwnerById: Map + endpointOwnerById: Map, + endpointOwnerByTopic: Map, + relayEndpointByInternalTopic: Map ): PublisherRow { const rowId = `${process.process_id}:${publisher.endpoint_id}`; const rawNumBuffers = publisher["num_buffers"]; @@ -310,10 +353,14 @@ function toPublisherRow( typeof rawNumBuffers === "number" && Number.isFinite(rawNumBuffers) ? Math.max(0, Math.trunc(rawNumBuffers)) : null; + const topic = canonicalizeProfilingTopic( + publisher.topic, + relayEndpointByInternalTopic + ); return { id: rowId, endpointId: publisher.endpoint_id, - topic: publisher.topic, + topic, processId: process.process_id, pid: process.pid, host: process.host, @@ -328,11 +375,15 @@ function toPublisherRow( numBuffers ), contributors: contributorListForPublisher( - publisher.topic, + topic, allSubscribers, - graphSnapshot + graphSnapshot, + relayEndpointByInternalTopic ), - unitAddress: endpointOwnerById.get(publisher.endpoint_id) ?? null, + unitAddress: + endpointOwnerById.get(publisher.endpoint_id) + ?? endpointOwnerByTopic.get(topic) + ?? null, }; } @@ -379,41 +430,74 @@ export function ProfilingPanel({ () => (profilingSnapshot ? Object.values(profilingSnapshot) : []), [profilingSnapshot] ); + const topologyComponents = useMemo( + () => (graphSnapshot ? classifyComponents(graphSnapshot) : null), + [graphSnapshot] + ); + const relayEndpointByInternalTopic = useMemo(() => { + if (!topologyComponents) { + return new Map(); + } + return buildRelayAliasIndex(topologyComponents.collections).endpointByInternalTopic; + }, [topologyComponents]); const endpointOwnerById = useMemo(() => { const index = new Map(); - if (!graphSnapshot) { + if (!topologyComponents) { return index; } - for (const session of Object.values(graphSnapshot.sessions)) { - const metadata = isRecord(session.metadata) ? session.metadata : null; - const components = - metadata && isRecord(metadata.components) ? metadata.components : null; - if (!components) { - continue; + const registerOwner = (componentAddress: string, streamAddress: string) => { + const endpointId = endpointIdFromStreamAddress(streamAddress); + if (endpointId && !index.has(endpointId)) { + index.set(endpointId, componentAddress); } - for (const [componentAddress, rawComponent] of Object.entries(components)) { - if (!isRecord(rawComponent) || !isRecord(rawComponent.streams)) { - continue; - } - for (const stream of Object.values(rawComponent.streams)) { - if (!isRecord(stream) || typeof stream.address !== "string") { - continue; - } - const endpointId = endpointIdFromStreamAddress(stream.address); - if (endpointId && !index.has(endpointId)) { - index.set(endpointId, componentAddress); - } - } + }; + for (const unit of topologyComponents.units.values()) { + for (const stream of unit.streams) { + registerOwner(unit.address, stream.address); + } + } + for (const collection of topologyComponents.collections.values()) { + for (const stream of collection.streams) { + registerOwner(collection.address, stream.address); + } + } + return index; + }, [topologyComponents]); + const endpointOwnerByTopic = useMemo(() => { + const index = new Map(); + if (!topologyComponents) { + return index; + } + const registerOwner = (componentAddress: string, streamAddress: string) => { + index.set(streamAddress, componentAddress); + index.set(streamAddressWithoutEndpoint(streamAddress), componentAddress); + }; + for (const unit of topologyComponents.units.values()) { + for (const stream of unit.streams) { + registerOwner(unit.address, stream.address); + } + } + for (const collection of topologyComponents.collections.values()) { + for (const stream of collection.streams) { + registerOwner(collection.address, stream.address); } } return index; - }, [graphSnapshot]); + }, [topologyComponents]); const publisherRows = useMemo(() => { const allSubscribers: SubscriberContributor[] = []; for (const process of processRows) { for (const subscriber of Object.values(process.subscribers)) { - allSubscribers.push(toContributor(process, subscriber, endpointOwnerById)); + allSubscribers.push( + toContributor( + process, + subscriber, + endpointOwnerById, + endpointOwnerByTopic, + relayEndpointByInternalTopic + ) + ); } } @@ -426,7 +510,9 @@ export function ProfilingPanel({ publisher, allSubscribers, graphSnapshot, - endpointOwnerById + endpointOwnerById, + endpointOwnerByTopic, + relayEndpointByInternalTopic ) ); } @@ -443,7 +529,13 @@ export function ProfilingPanel({ } return a.endpointId.localeCompare(b.endpointId); }); - }, [endpointOwnerById, graphSnapshot, processRows]); + }, [ + endpointOwnerById, + endpointOwnerByTopic, + graphSnapshot, + processRows, + relayEndpointByInternalTopic, + ]); const filteredRows = useMemo(() => { const query = searchText.trim().toLowerCase(); @@ -537,7 +629,10 @@ export function ProfilingPanel({ if (!latestTraceEvent || activeTraceRowIds.length === 0) { return; } - const extracted = extractTraceSamples(latestTraceEvent); + const extracted = extractTraceSamples( + latestTraceEvent, + relayEndpointByInternalTopic + ); if (extracted.length === 0) { return; } @@ -547,7 +642,11 @@ export function ProfilingPanel({ .filter((row): row is PublisherRow => row !== undefined) .map((row) => ({ row, - topicScope: topicScopeForPublisher(row.topic, graphSnapshot), + topicScope: topicScopeForPublisher( + row.topic, + graphSnapshot, + relayEndpointByInternalTopic + ), })); const topicScopeByRowId = new Map( activeRowsWithTopicScope.map((entry) => [entry.row.id, entry.topicScope]) @@ -594,7 +693,13 @@ export function ProfilingPanel({ } return changed ? next : previous; }); - }, [activeTraceRowIds, graphSnapshot, latestTraceEvent, rowById]); + }, [ + activeTraceRowIds, + graphSnapshot, + latestTraceEvent, + relayEndpointByInternalTopic, + rowById, + ]); const applyTraceControl = async ( row: PublisherRow, @@ -717,7 +822,13 @@ export function ProfilingPanel({ : TRACE_DEFAULT_WINDOW_SECONDS ); const activeTraceTopicScope = activeTraceRow - ? Array.from(topicScopeForPublisher(activeTraceRow.topic, graphSnapshot)) + ? Array.from( + topicScopeForPublisher( + activeTraceRow.topic, + graphSnapshot, + relayEndpointByInternalTopic + ) + ) : []; const activeTraceSubscriberEndpointIds = activeTraceSamples .filter( diff --git a/frontend/src/components/topologyFlowData.test.tsx b/frontend/src/components/topologyFlowData.test.tsx index 6e15b50..969f111 100644 --- a/frontend/src/components/topologyFlowData.test.tsx +++ b/frontend/src/components/topologyFlowData.test.tsx @@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest"; import { dashboardFixtures } from "../fixtures/dashboardFixtures"; import { buildFlowData, validateFlowData, type FlowData, type LayoutMode } from "./topologyFlowData"; +import type { GraphSnapshotPayload } from "../types/api"; type Box = { id: string; @@ -110,6 +111,98 @@ function flowForFixture( ); } +function inputStream(address: string) { + return { + name: address.split("/").pop() ?? address, + address, + msg_type: "builtins.str", + leaky: false, + max_queue: 1, + }; +} + +function outputStream(address: string) { + return { + name: address.split("/").pop() ?? address, + address, + msg_type: "builtins.str", + num_buffers: 4, + buf_size: 256, + force_tcp: false, + }; +} + +function topicStream(address: string) { + return { + name: address.split("/").pop() ?? address, + address, + msg_type: "builtins.str", + }; +} + +function relayStream( + address: string, + metadataType: "RelayMetadata" | "InputRelayMetadata" | "OutputRelayMetadata", + relayInputTopic: string, + relayOutputTopic: string, + extra: Record = {} +) { + return { + name: address.split("/").pop() ?? address, + address, + msg_type: "builtins.str", + metadata_type: metadataType, + relay_group: relayInputTopic.split("/").slice(0, -1).join("/"), + relay_input_topic: relayInputTopic, + relay_output_topic: relayOutputTopic, + ...extra, + }; +} + +function relayCollapseSnapshot( + graph: Record, + component: Record +): GraphSnapshotPayload { + return { + graph, + edge_owners: [], + sessions: { + "relay-session": { + edges: [], + metadata: { + components: { + "SYSTEM/SOURCE": { + name: "SOURCE", + component_type: "fixture.Source", + streams: { + OUTPUT: outputStream("SYSTEM/SOURCE/OUTPUT:source-output"), + }, + tasks: [], + }, + "SYSTEM/PASSTHROUGH": component, + "SYSTEM/SINK": { + name: "SINK", + component_type: "fixture.Sink", + streams: { + INPUT: inputStream("SYSTEM/SINK/INPUT:sink-input"), + }, + tasks: [], + }, + }, + }, + }, + }, + processes: {}, + }; +} + +function visibleExternalEdges(flow: FlowData): string[] { + return flow.edges + .filter((edge) => edge.className !== "topology-internal-edge") + .map((edge) => `${edge.source}->${edge.target}`) + .sort(); +} + describe("topologyFlowData", () => { it("lays out dense unit internals without overlap in both layouts", () => { for (const layoutMode of ["tb", "lr"] as LayoutMode[]) { @@ -193,4 +286,146 @@ describe("topologyFlowData", () => { "nested scope: ROOT_TOPIC overlaps INNER" ).toBe(0); }); + + it("collapses neutral relay runtime topics to the relay endpoint", () => { + const flow = buildFlowData( + relayCollapseSnapshot( + { + "SYSTEM/SOURCE/OUTPUT": ["SYSTEM/PASSTHROUGH/IN"], + "SYSTEM/PASSTHROUGH/IN": ["SYSTEM/PASSTHROUGH/MID"], + "SYSTEM/PASSTHROUGH/MID": ["SYSTEM/PASSTHROUGH/OUT", "SYSTEM/PASSTHROUGH/__relays__/MID/INPUT"], + "SYSTEM/PASSTHROUGH/__relays__/MID/OUTPUT": ["SYSTEM/PASSTHROUGH/MID"], + "SYSTEM/PASSTHROUGH/OUT": ["SYSTEM/SINK/INPUT"], + }, + { + name: "PASSTHROUGH", + component_type: "fixture.Passthrough", + children: [], + topics: { + IN: topicStream("SYSTEM/PASSTHROUGH/IN"), + OUT: topicStream("SYSTEM/PASSTHROUGH/OUT"), + }, + relays: { + MID: relayStream( + "SYSTEM/PASSTHROUGH/MID", + "RelayMetadata", + "SYSTEM/PASSTHROUGH/__relays__/MID/INPUT", + "SYSTEM/PASSTHROUGH/__relays__/MID/OUTPUT", + { + leaky: true, + max_queue: 9, + num_buffers: 6, + } + ), + }, + } + ), + "tb", + null, + "curved", + false + ); + + expect(validateFlowData(flow)).toBe(true); + expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); + expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); + expect(visibleExternalEdges(flow)).toEqual([ + "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/MID", + "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", + "stream:SYSTEM/PASSTHROUGH/MID->stream:SYSTEM/PASSTHROUGH/OUT", + "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", + ]); + }); + + it("collapses input relay runtime topics to the collection boundary endpoints", () => { + const flow = buildFlowData( + relayCollapseSnapshot( + { + "SYSTEM/SOURCE/OUTPUT": ["SYSTEM/PASSTHROUGH/IN"], + "SYSTEM/PASSTHROUGH/IN": ["SYSTEM/PASSTHROUGH/__relays__/IN/INPUT"], + "SYSTEM/PASSTHROUGH/__relays__/IN/OUTPUT": ["SYSTEM/PASSTHROUGH/OUT"], + "SYSTEM/PASSTHROUGH/OUT": ["SYSTEM/SINK/INPUT"], + }, + { + name: "PASSTHROUGH", + component_type: "fixture.Passthrough", + children: [], + topics: { + OUT: topicStream("SYSTEM/PASSTHROUGH/OUT"), + }, + relays: { + IN: relayStream( + "SYSTEM/PASSTHROUGH/IN", + "InputRelayMetadata", + "SYSTEM/PASSTHROUGH/__relays__/IN/INPUT", + "SYSTEM/PASSTHROUGH/__relays__/IN/OUTPUT", + { + leaky: true, + max_queue: 7, + } + ), + }, + } + ), + "tb", + null, + "curved", + false + ); + + expect(validateFlowData(flow)).toBe(true); + expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); + expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); + expect(visibleExternalEdges(flow)).toEqual([ + "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/OUT", + "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", + "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", + ]); + }); + + it("collapses output relay runtime topics to the collection boundary endpoints", () => { + const flow = buildFlowData( + relayCollapseSnapshot( + { + "SYSTEM/SOURCE/OUTPUT": ["SYSTEM/PASSTHROUGH/IN"], + "SYSTEM/PASSTHROUGH/IN": ["SYSTEM/PASSTHROUGH/__relays__/OUT/INPUT"], + "SYSTEM/PASSTHROUGH/__relays__/OUT/OUTPUT": ["SYSTEM/PASSTHROUGH/OUT"], + "SYSTEM/PASSTHROUGH/OUT": ["SYSTEM/SINK/INPUT"], + }, + { + name: "PASSTHROUGH", + component_type: "fixture.Passthrough", + children: [], + topics: { + IN: topicStream("SYSTEM/PASSTHROUGH/IN"), + }, + relays: { + OUT: relayStream( + "SYSTEM/PASSTHROUGH/OUT", + "OutputRelayMetadata", + "SYSTEM/PASSTHROUGH/__relays__/OUT/INPUT", + "SYSTEM/PASSTHROUGH/__relays__/OUT/OUTPUT", + { + num_buffers: 8, + force_tcp: true, + } + ), + }, + } + ), + "tb", + null, + "curved", + false + ); + + expect(validateFlowData(flow)).toBe(true); + expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); + expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); + expect(visibleExternalEdges(flow)).toEqual([ + "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/OUT", + "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", + "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", + ]); + }); }); diff --git a/frontend/src/components/topologyFlowData.tsx b/frontend/src/components/topologyFlowData.tsx index 6beb385..d0dccef 100644 --- a/frontend/src/components/topologyFlowData.tsx +++ b/frontend/src/components/topologyFlowData.tsx @@ -2,6 +2,7 @@ import { MarkerType, Position, type Edge, type Node } from "reactflow"; import { belongsToCollection, + buildRelayAliasIndex, buildCollectionParentMap, classifyComponents, computeRanks, @@ -389,6 +390,7 @@ export function buildFlowData( ? "smoothstep" : "default"; const { units, collections } = classifyComponents(graphSnapshot); + const relayAliasIndex = buildRelayAliasIndex(collections); const visibleAddresses = visibleComponentAddresses( units, collections, @@ -431,6 +433,9 @@ export function buildFlowData( collectionOwnerByStreamAddress.set(streamAddressWithoutEndpoint(stream.address), collection.address); } } + for (const [internalTopic, collectionAddress] of relayAliasIndex.collectionByInternalTopic.entries()) { + collectionOwnerByStreamAddress.set(internalTopic, collectionAddress); + } const canonicalStreamByAlias = new Map(); for (const unit of units.values()) { @@ -445,13 +450,26 @@ export function buildFlowData( canonicalStreamByAlias.set(streamAddressWithoutEndpoint(stream.address), stream.address); } } + for (const [internalTopic, endpointAddress] of relayAliasIndex.endpointByInternalTopic.entries()) { + canonicalStreamByAlias.set(internalTopic, endpointAddress); + } + + const canonicalizeStreamAddress = (streamAddress: string): string => + canonicalStreamByAlias.get(streamAddress) + ?? canonicalStreamByAlias.get(streamAddressWithoutEndpoint(streamAddress)) + ?? streamAddress; const rawEdges: Array<{ from: string; to: string }> = []; for (const [fromTopic, toTopics] of Object.entries(graphSnapshot.graph)) { for (const toTopic of toTopics) { + const from = canonicalizeStreamAddress(fromTopic); + const to = canonicalizeStreamAddress(toTopic); + if (from === to) { + continue; + } rawEdges.push({ - from: canonicalStreamByAlias.get(fromTopic) ?? fromTopic, - to: canonicalStreamByAlias.get(toTopic) ?? toTopic, + from, + to, }); } } diff --git a/frontend/src/components/topologyGraph.test.ts b/frontend/src/components/topologyGraph.test.ts index a7d2eb1..07adec1 100644 --- a/frontend/src/components/topologyGraph.test.ts +++ b/frontend/src/components/topologyGraph.test.ts @@ -32,6 +32,20 @@ function collection(address: string, children: string[]): CollectionComponent { }; } +function stream(address: string, direction: "input" | "output" | "unknown" = "unknown") { + return { + name: address.split("/").pop() ?? address, + address, + direction, + msgType: "builtins.str", + collectionKind: null, + relayMetadataType: null, + relayGroup: null, + relayInputTopic: null, + relayOutputTopic: null, + } as const; +} + describe("topologyGraph helpers", () => { it("builds nested scope paths and parent membership", () => { const collections = new Map([ @@ -84,6 +98,10 @@ describe("topologyGraph helpers", () => { direction: "output", msgType: "builtins.str", collectionKind: null, + relayMetadataType: null, + relayGroup: null, + relayInputTopic: null, + relayOutputTopic: null, }, ], }, @@ -105,4 +123,74 @@ describe("topologyGraph helpers", () => { rootScopeHasExternalStreamContext(graphSnapshot, units, collections, "LAB") ).toBe(true); }); + + it("treats relay-internal topics as collection-owned root context", () => { + const units = new Map([ + [ + "SYSTEM/SOURCE", + { + ...unit("SYSTEM/SOURCE"), + streams: [stream("SYSTEM/SOURCE/OUTPUT:source-output", "output")], + }, + ], + [ + "SYSTEM/SINK", + { + ...unit("SYSTEM/SINK"), + streams: [stream("SYSTEM/SINK/INPUT:sink-input", "input")], + }, + ], + ]); + const collections = new Map([ + [ + "SYSTEM", + collection("SYSTEM", [ + "SYSTEM/SOURCE", + "SYSTEM/PASSTHROUGH", + "SYSTEM/SINK", + ]), + ], + [ + "SYSTEM/PASSTHROUGH", + { + ...collection("SYSTEM/PASSTHROUGH", []), + streams: [ + { + ...stream("SYSTEM/PASSTHROUGH/IN", "input"), + name: "IN", + collectionKind: "relay", + relayMetadataType: "InputRelayMetadata", + relayGroup: "SYSTEM/PASSTHROUGH/__relays__/IN", + relayInputTopic: "SYSTEM/PASSTHROUGH/__relays__/IN/INPUT", + relayOutputTopic: "SYSTEM/PASSTHROUGH/__relays__/IN/OUTPUT", + }, + { + ...stream("SYSTEM/PASSTHROUGH/OUT", "output"), + name: "OUT", + collectionKind: "topic", + }, + ], + }, + ], + ]); + const graphSnapshot: GraphSnapshotPayload = { + graph: { + "SYSTEM/SOURCE/OUTPUT": ["SYSTEM/PASSTHROUGH/__relays__/IN/INPUT"], + "SYSTEM/PASSTHROUGH/__relays__/IN/OUTPUT": ["SYSTEM/PASSTHROUGH/OUT"], + "SYSTEM/PASSTHROUGH/OUT": ["SYSTEM/SINK/INPUT"], + }, + edge_owners: [], + sessions: {}, + processes: {}, + }; + + expect( + rootScopeHasExternalStreamContext( + graphSnapshot, + units, + collections, + "SYSTEM" + ) + ).toBe(false); + }); }); diff --git a/frontend/src/components/topologyGraph.ts b/frontend/src/components/topologyGraph.ts index 06266ea..eaf6ab1 100644 --- a/frontend/src/components/topologyGraph.ts +++ b/frontend/src/components/topologyGraph.ts @@ -4,18 +4,29 @@ import { streamAddressWithoutEndpoint } from "../utils/streamAddress"; type AnyRecord = Record; export type StreamDirection = "input" | "output" | "unknown"; +export type RelayMetadataType = + | "RelayMetadata" + | "InputRelayMetadata" + | "OutputRelayMetadata" + | null; + +export type ComponentStream = { + name: string; + address: string; + direction: StreamDirection; + msgType: string | null; + collectionKind: "topic" | "relay" | null; + relayMetadataType: RelayMetadataType; + relayGroup: string | null; + relayInputTopic: string | null; + relayOutputTopic: string | null; +}; export type UnitComponent = { address: string; name: string; componentType: string; - streams: Array<{ - name: string; - address: string; - direction: StreamDirection; - msgType: string | null; - collectionKind: "topic" | "relay" | null; - }>; + streams: ComponentStream[]; tasks: Array<{ name: string; subscribes: string | null; @@ -27,16 +38,20 @@ export type CollectionComponent = { address: string; name: string; componentType: string; - streams: Array<{ - name: string; - address: string; - direction: StreamDirection; - msgType: string | null; - collectionKind: "topic" | "relay" | null; - }>; + streams: ComponentStream[]; children: string[]; }; +export type TopologyComponents = { + units: Map; + collections: Map; +}; + +export type RelayAliasIndex = { + endpointByInternalTopic: Map; + collectionByInternalTopic: Map; +}; + function isRecord(value: unknown): value is AnyRecord { return typeof value === "object" && value !== null; } @@ -66,46 +81,83 @@ function streamDirection(stream: AnyRecord): StreamDirection { return "unknown"; } +function relayMetadataType(stream: AnyRecord): RelayMetadataType { + const explicitType = + typeof stream.metadata_type === "string" + ? stream.metadata_type + : typeof stream.__type__ === "string" + ? stream.__type__ + : typeof stream.type === "string" + ? stream.type + : null; + if (explicitType === "InputRelayMetadata" || explicitType.endsWith(".InputRelayMetadata")) { + return "InputRelayMetadata"; + } + if (explicitType === "OutputRelayMetadata" || explicitType.endsWith(".OutputRelayMetadata")) { + return "OutputRelayMetadata"; + } + if (explicitType === "RelayMetadata" || explicitType.endsWith(".RelayMetadata")) { + return "RelayMetadata"; + } + + const hasInputHints = "leaky" in stream || "max_queue" in stream; + const hasOutputHints = + "num_buffers" in stream + || "buf_size" in stream + || "force_tcp" in stream + || "host" in stream + || "port" in stream; + if (hasInputHints && !hasOutputHints) { + return "InputRelayMetadata"; + } + if (hasOutputHints && !hasInputHints) { + return "OutputRelayMetadata"; + } + if (hasInputHints || hasOutputHints) { + return "RelayMetadata"; + } + return null; +} + function parseStreamEntries( streams: AnyRecord | null, collectionKind: "topic" | "relay" | null = null -): Array<{ - name: string; - address: string; - direction: StreamDirection; - msgType: string | null; - collectionKind: "topic" | "relay" | null; -}> { +): ComponentStream[] { if (!streams) { return []; } - const out: Array<{ - name: string; - address: string; - direction: StreamDirection; - msgType: string | null; - collectionKind: "topic" | "relay" | null; - }> = []; + const out: ComponentStream[] = []; for (const [streamName, streamValue] of Object.entries(streams)) { if (!isRecord(streamValue) || typeof streamValue.address !== "string") { continue; } + const isRelay = collectionKind === "relay"; out.push({ name: streamName, address: streamValue.address, direction: streamDirection(streamValue), msgType: typeof streamValue.msg_type === "string" ? streamValue.msg_type : null, collectionKind, + relayMetadataType: isRelay ? relayMetadataType(streamValue) : null, + relayGroup: + isRelay && typeof streamValue.relay_group === "string" + ? streamValue.relay_group + : null, + relayInputTopic: + isRelay && typeof streamValue.relay_input_topic === "string" + ? streamValue.relay_input_topic + : null, + relayOutputTopic: + isRelay && typeof streamValue.relay_output_topic === "string" + ? streamValue.relay_output_topic + : null, }); } out.sort((a, b) => a.address.localeCompare(b.address)); return out; } -export function classifyComponents(graphSnapshot: GraphSnapshotPayload): { - units: Map; - collections: Map; -} { +export function classifyComponents(graphSnapshot: GraphSnapshotPayload): TopologyComponents { const componentRecords = new Map(); for (const session of Object.values(graphSnapshot.sessions)) { const metadata = isRecord(session.metadata) ? session.metadata : null; @@ -131,27 +183,23 @@ export function classifyComponents(graphSnapshot: GraphSnapshotPayload): { ? component.component_type : "Component"; + const topicStreams = parseStreamEntries( + isRecord(component.topics) ? component.topics : null, + "topic" + ); + const relayStreams = parseStreamEntries( + isRecord(component.relays) ? component.relays : null, + "relay" + ); const childrenRaw = Array.isArray(component.children) ? component.children.filter((value): value is string => typeof value === "string") : []; - if (childrenRaw.length > 0) { - const collectionStreamMap = new Map(); - for (const stream of parseStreamEntries( - isRecord(component.topics) ? component.topics : null, - "topic" - )) { + if (childrenRaw.length > 0 || topicStreams.length > 0 || relayStreams.length > 0) { + const collectionStreamMap = new Map(); + for (const stream of topicStreams) { collectionStreamMap.set(stream.address, stream); } - for (const stream of parseStreamEntries( - isRecord(component.relays) ? component.relays : null, - "relay" - )) { + for (const stream of relayStreams) { collectionStreamMap.set(stream.address, stream); } collections.set(address, { @@ -210,6 +258,35 @@ export function classifyComponents(graphSnapshot: GraphSnapshotPayload): { return { units, collections }; } +function registerAlias(index: Map, streamAddress: string | null, value: T): void { + if (!streamAddress) { + return; + } + index.set(streamAddress, value); + index.set(streamAddressWithoutEndpoint(streamAddress), value); +} + +export function buildRelayAliasIndex( + collections: Map +): RelayAliasIndex { + const endpointByInternalTopic = new Map(); + const collectionByInternalTopic = new Map(); + + for (const collection of collections.values()) { + for (const stream of collection.streams) { + if (stream.collectionKind !== "relay") { + continue; + } + registerAlias(endpointByInternalTopic, stream.relayInputTopic, stream.address); + registerAlias(endpointByInternalTopic, stream.relayOutputTopic, stream.address); + registerAlias(collectionByInternalTopic, stream.relayInputTopic, collection.address); + registerAlias(collectionByInternalTopic, stream.relayOutputTopic, collection.address); + } + } + + return { endpointByInternalTopic, collectionByInternalTopic }; +} + export function computeRanks( ownerIds: string[], edges: Array<{ from: string; to: string }> @@ -349,6 +426,7 @@ export function rootScopeHasExternalStreamContext( rootCollectionAddress: string ): boolean { const parentByAddress = buildCollectionParentMap(collections); + const relayAliasIndex = buildRelayAliasIndex(collections); const ownerByStreamAddress = new Map(); const registerOwner = (streamAddress: string, ownerAddress: string) => { ownerByStreamAddress.set(streamAddress, ownerAddress); @@ -364,6 +442,9 @@ export function rootScopeHasExternalStreamContext( registerOwner(stream.address, collection.address); } } + for (const [internalTopic, collectionAddress] of relayAliasIndex.collectionByInternalTopic.entries()) { + ownerByStreamAddress.set(internalTopic, collectionAddress); + } const streamAddresses = new Set(); for (const [fromTopic, toTopics] of Object.entries(graphSnapshot.graph)) { diff --git a/frontend/src/components/topologyTrace.ts b/frontend/src/components/topologyTrace.ts index c441ad4..ef5fc60 100644 --- a/frontend/src/components/topologyTrace.ts +++ b/frontend/src/components/topologyTrace.ts @@ -2,7 +2,11 @@ import { MarkerType } from "reactflow"; import type { GraphSnapshotPayload } from "../types/api"; import { streamAddressWithoutEndpoint } from "../utils/streamAddress"; -import type { CollectionComponent, UnitComponent } from "./topologyGraph"; +import { + buildRelayAliasIndex, + type CollectionComponent, + type UnitComponent, +} from "./topologyGraph"; import type { FlowData } from "./topologyFlowData"; export type TopologyComponents = { @@ -29,6 +33,10 @@ export function buildCanonicalStreamAliasIndex( canonicalByAlias.set(streamAddressWithoutEndpoint(stream.address), stream.address); } } + const relayAliasIndex = buildRelayAliasIndex(topologyComponents.collections); + for (const [internalTopic, endpointAddress] of relayAliasIndex.endpointByInternalTopic.entries()) { + canonicalByAlias.set(internalTopic, endpointAddress); + } return canonicalByAlias; } diff --git a/pyproject.toml b/pyproject.toml index 1255844..061999f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,4 @@ artifacts = [ [tool.pytest.ini_options] norecursedirs = "tests/helpers" -addopts = "-p no:warnings" - -[tool.uv.sources] -ezmsg = { git = "https://github.com/ezmsg-org/ezmsg", branch = "feature/dashboard-integration" } \ No newline at end of file +addopts = "-p no:warnings" \ No newline at end of file From 8ad84cc472ba7ef3fe7535d538893fe8daa18a74 Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Tue, 28 Apr 2026 11:35:55 -0400 Subject: [PATCH 2/6] Better rendering for relays --- docs/development.md | 3 +- frontend/src/components/ProfilingPanel.tsx | 37 ++++++++++-- frontend/src/components/topologyGraph.ts | 27 ++++++--- pyproject.toml | 5 +- .../dashboard/_web/assets/index-Cofzl4Dj.js | 60 +++++++++++++++++++ .../dashboard/_web/assets/index-KcK4UZ3i.js | 60 ------------------- src/ezmsg/dashboard/_web/index.html | 2 +- 7 files changed, 116 insertions(+), 78 deletions(-) create mode 100644 src/ezmsg/dashboard/_web/assets/index-Cofzl4Dj.js delete mode 100644 src/ezmsg/dashboard/_web/assets/index-KcK4UZ3i.js diff --git a/docs/development.md b/docs/development.md index 9e6892e..410044f 100644 --- a/docs/development.md +++ b/docs/development.md @@ -165,8 +165,7 @@ uv run python -m ezmsg.dashboard.build_frontend Then verify the package and tests: ```bash -PYTHONPYCACHEPREFIX=/tmp/pycache .venv/bin/pytest tests/backend -q -uv run python -m build +uv run pytest tests/backend -q ``` The `_web/` bundle under `src/ezmsg/dashboard/` is part of the Python package and should be updated as part of the release. diff --git a/frontend/src/components/ProfilingPanel.tsx b/frontend/src/components/ProfilingPanel.tsx index 0e1a41a..21b390c 100644 --- a/frontend/src/components/ProfilingPanel.tsx +++ b/frontend/src/components/ProfilingPanel.tsx @@ -7,6 +7,7 @@ import { buildRelayAliasIndex, classifyComponents } from "./topologyGraph"; import { buildLeaseColorMap, leaseColorForEndpoint } from "../utils/traceColors"; import { endpointIdFromStreamAddress, + parseTopicAndEndpoint, streamAddressWithoutEndpoint, } from "../utils/streamAddress"; import type { @@ -58,6 +59,7 @@ type PublisherActivityTone = "idle" | "active" | "backpressure"; type SubscriberContributor = { id: string; endpointId: string; + displayEndpointId: string; topic: string; processId: string; pid: number; @@ -70,6 +72,7 @@ type SubscriberContributor = { type PublisherRow = { id: string; endpointId: string; + displayEndpointId: string; topic: string; processId: string; pid: number; @@ -184,6 +187,17 @@ function canonicalizeProfilingTopic( ); } +function canonicalizeProfilingEndpointId( + endpointId: string, + relayEndpointByInternalTopic: Map +): string { + const { topic, endpointToken } = parseTopicAndEndpoint(endpointId); + if (topic.length === 0 || endpointToken.length === 0) { + return endpointId; + } + return `${canonicalizeProfilingTopic(topic, relayEndpointByInternalTopic)}:${endpointToken}`; +} + function extractTraceSamples( event: ProfilingTraceEnvelope | null, relayEndpointByInternalTopic: Map @@ -256,6 +270,10 @@ function toContributor( return { id: `${process.process_id}:${subscriber.endpoint_id}`, endpointId: subscriber.endpoint_id, + displayEndpointId: canonicalizeProfilingEndpointId( + subscriber.endpoint_id, + relayEndpointByInternalTopic + ), topic, processId: process.process_id, pid: process.pid, @@ -360,6 +378,10 @@ function toPublisherRow( return { id: rowId, endpointId: publisher.endpoint_id, + displayEndpointId: canonicalizeProfilingEndpointId( + publisher.endpoint_id, + relayEndpointByInternalTopic + ), topic, processId: process.process_id, pid: process.pid, @@ -754,8 +776,8 @@ export function ProfilingPanel({ process_id: row.processId, enabled: nextOpen, publisher_endpoint_id: nextOpen ? row.endpointId : null, - publisher_topic: nextOpen ? row.topic : null, - subscriber_topic: null, + publisher_topic: null, + subscriber_topic: nextOpen ? row.topic : null, metrics: nextOpen ? defaultTraceMetrics : null, sample_mod: 1, ttl_seconds: null, @@ -1034,8 +1056,8 @@ export function ProfilingPanel({
Endpoint - - {row.endpointId} + + {row.displayEndpointId}
@@ -1155,8 +1177,11 @@ export function ProfilingPanel({
Endpoint - - {contributor.endpointId} + + {contributor.displayEndpointId}
diff --git a/frontend/src/components/topologyGraph.ts b/frontend/src/components/topologyGraph.ts index eaf6ab1..4e18639 100644 --- a/frontend/src/components/topologyGraph.ts +++ b/frontend/src/components/topologyGraph.ts @@ -90,14 +90,25 @@ function relayMetadataType(stream: AnyRecord): RelayMetadataType { : typeof stream.type === "string" ? stream.type : null; - if (explicitType === "InputRelayMetadata" || explicitType.endsWith(".InputRelayMetadata")) { - return "InputRelayMetadata"; - } - if (explicitType === "OutputRelayMetadata" || explicitType.endsWith(".OutputRelayMetadata")) { - return "OutputRelayMetadata"; - } - if (explicitType === "RelayMetadata" || explicitType.endsWith(".RelayMetadata")) { - return "RelayMetadata"; + if (typeof explicitType === "string") { + if ( + explicitType === "InputRelayMetadata" + || explicitType.endsWith(".InputRelayMetadata") + ) { + return "InputRelayMetadata"; + } + if ( + explicitType === "OutputRelayMetadata" + || explicitType.endsWith(".OutputRelayMetadata") + ) { + return "OutputRelayMetadata"; + } + if ( + explicitType === "RelayMetadata" + || explicitType.endsWith(".RelayMetadata") + ) { + return "RelayMetadata"; + } } const hasInputHints = "leaky" in stream || "max_queue" in stream; diff --git a/pyproject.toml b/pyproject.toml index 061999f..2448b9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,4 +54,7 @@ artifacts = [ [tool.pytest.ini_options] norecursedirs = "tests/helpers" -addopts = "-p no:warnings" \ No newline at end of file +addopts = "-p no:warnings" + +[tool.uv.sources] +ezmsg = { path = "../ezmsg", editable = true } \ No newline at end of file diff --git a/src/ezmsg/dashboard/_web/assets/index-Cofzl4Dj.js b/src/ezmsg/dashboard/_web/assets/index-Cofzl4Dj.js new file mode 100644 index 0000000..1565f96 --- /dev/null +++ b/src/ezmsg/dashboard/_web/assets/index-Cofzl4Dj.js @@ -0,0 +1,60 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(s){if(s.ep)return;s.ep=!0;const o=n(s);fetch(s.href,o)}})();function Ap(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Mp={exports:{}},pl={},Rp={exports:{}},_e={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var To=Symbol.for("react.element"),ny=Symbol.for("react.portal"),ry=Symbol.for("react.fragment"),sy=Symbol.for("react.strict_mode"),oy=Symbol.for("react.profiler"),iy=Symbol.for("react.provider"),ly=Symbol.for("react.context"),ay=Symbol.for("react.forward_ref"),uy=Symbol.for("react.suspense"),cy=Symbol.for("react.memo"),dy=Symbol.for("react.lazy"),dd=Symbol.iterator;function fy(e){return e===null||typeof e!="object"?null:(e=dd&&e[dd]||e["@@iterator"],typeof e=="function"?e:null)}var Op={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Lp=Object.assign,$p={};function fs(e,t,n){this.props=e,this.context=t,this.refs=$p,this.updater=n||Op}fs.prototype.isReactComponent={};fs.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};fs.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Bp(){}Bp.prototype=fs.prototype;function Xu(e,t,n){this.props=e,this.context=t,this.refs=$p,this.updater=n||Op}var Qu=Xu.prototype=new Bp;Qu.constructor=Xu;Lp(Qu,fs.prototype);Qu.isPureReactComponent=!0;var fd=Array.isArray,jp=Object.prototype.hasOwnProperty,Zu={current:null},Fp={key:!0,ref:!0,__self:!0,__source:!0};function zp(e,t,n){var r,s={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)jp.call(t,r)&&!Fp.hasOwnProperty(r)&&(s[r]=t[r]);var l=arguments.length-2;if(l===1)s.children=n;else if(1>>1,R=I[F];if(0>>1;Fs(re,b))Js(fe,re)?(I[F]=fe,I[J]=b,F=J):(I[F]=re,I[Q]=b,F=Q);else if(Js(fe,b))I[F]=fe,I[J]=b,F=J;else break e}}return S}function s(I,S){var b=I.sortIndex-S.sortIndex;return b!==0?b:I.id-S.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,l=i.now();e.unstable_now=function(){return i.now()-l}}var a=[],u=[],c=1,d=null,f=3,h=!1,_=!1,x=!1,N=typeof setTimeout=="function"?setTimeout:null,p=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(I){for(var S=n(u);S!==null;){if(S.callback===null)r(u);else if(S.startTime<=I)r(u),S.sortIndex=S.expirationTime,t(a,S);else break;S=n(u)}}function w(I){if(x=!1,y(I),!_)if(n(a)!==null)_=!0,T(P);else{var S=n(u);S!==null&&M(w,S.startTime-I)}}function P(I,S){_=!1,x&&(x=!1,p(A),A=-1),h=!0;var b=f;try{for(y(S),d=n(a);d!==null&&(!(d.expirationTime>S)||I&&!U());){var F=d.callback;if(typeof F=="function"){d.callback=null,f=d.priorityLevel;var R=F(d.expirationTime<=S);S=e.unstable_now(),typeof R=="function"?d.callback=R:d===n(a)&&r(a),y(S)}else r(a);d=n(a)}if(d!==null)var X=!0;else{var Q=n(u);Q!==null&&M(w,Q.startTime-S),X=!1}return X}finally{d=null,f=b,h=!1}}var L=!1,O=null,A=-1,j=5,z=-1;function U(){return!(e.unstable_now()-zI||125F?(I.sortIndex=b,t(u,I),n(a)===null&&I===n(u)&&(x?(p(A),A=-1):x=!0,M(w,b-F))):(I.sortIndex=R,t(a,I),_||h||(_=!0,T(P))),I},e.unstable_shouldYield=U,e.unstable_wrapCallback=function(I){var S=f;return function(){var b=f;f=S;try{return I.apply(this,arguments)}finally{f=b}}}})(Vp);Wp.exports=Vp;var Ey=Wp.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ny=E,St=Ey;function ne(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),$a=Object.prototype.hasOwnProperty,Ty=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,hd={},md={};function ky(e){return $a.call(md,e)?!0:$a.call(hd,e)?!1:Ty.test(e)?md[e]=!0:(hd[e]=!0,!1)}function Cy(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Iy(e,t,n,r){if(t===null||typeof t>"u"||Cy(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function dt(e,t,n,r,s,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var Je={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Je[e]=new dt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Je[t]=new dt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Je[e]=new dt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Je[e]=new dt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Je[e]=new dt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Je[e]=new dt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Je[e]=new dt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Je[e]=new dt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Je[e]=new dt(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ju=/[\-:]([a-z])/g;function ec(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ju,ec);Je[t]=new dt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ju,ec);Je[t]=new dt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ju,ec);Je[t]=new dt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Je[e]=new dt(e,1,!1,e.toLowerCase(),null,!1,!1)});Je.xlinkHref=new dt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Je[e]=new dt(e,1,!1,e.toLowerCase(),null,!0,!0)});function tc(e,t,n,r){var s=Je.hasOwnProperty(t)?Je[t]:null;(s!==null?s.type!==0:r||!(2l||s[i]!==o[l]){var a=` +`+s[i].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=i&&0<=l);break}}}finally{Vl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Os(e):""}function by(e){switch(e.tag){case 5:return Os(e.type);case 16:return Os("Lazy");case 13:return Os("Suspense");case 19:return Os("SuspenseList");case 0:case 2:case 15:return e=Gl(e.type,!1),e;case 11:return e=Gl(e.type.render,!1),e;case 1:return e=Gl(e.type,!0),e;default:return""}}function za(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Pr:return"Fragment";case br:return"Portal";case Ba:return"Profiler";case nc:return"StrictMode";case ja:return"Suspense";case Fa:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Kp:return(e.displayName||"Context")+".Consumer";case Yp:return(e._context.displayName||"Context")+".Provider";case rc:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case sc:return t=e.displayName||null,t!==null?t:za(e.type)||"Memo";case Nn:t=e._payload,e=e._init;try{return za(e(t))}catch{}}return null}function Py(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return za(t);case 8:return t===nc?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Un(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Qp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Ay(e){var t=Qp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Lo(e){e._valueTracker||(e._valueTracker=Ay(e))}function Zp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Qp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Pi(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Da(e,t){var n=t.checked;return je({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function yd(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Un(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function qp(e,t){t=t.checked,t!=null&&tc(e,"checked",t,!1)}function Ua(e,t){qp(e,t);var n=Un(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ha(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ha(e,t.type,Un(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function vd(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Ha(e,t,n){(t!=="number"||Pi(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ls=Array.isArray;function Vr(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=$o.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function qs(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ds={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},My=["Webkit","ms","Moz","O"];Object.keys(Ds).forEach(function(e){My.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ds[t]=Ds[e]})});function nh(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ds.hasOwnProperty(e)&&Ds[e]?(""+t).trim():t+"px"}function rh(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=nh(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var Ry=je({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ga(e,t){if(t){if(Ry[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ne(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ne(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(ne(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ne(62))}}function Ya(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ka=null;function oc(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Xa=null,Gr=null,Yr=null;function wd(e){if(e=Io(e)){if(typeof Xa!="function")throw Error(ne(280));var t=e.stateNode;t&&(t=vl(t),Xa(e.stateNode,e.type,t))}}function sh(e){Gr?Yr?Yr.push(e):Yr=[e]:Gr=e}function oh(){if(Gr){var e=Gr,t=Yr;if(Yr=Gr=null,wd(e),t)for(e=0;e>>=0,e===0?32:31-(Wy(e)/Vy|0)|0}var Bo=64,jo=4194304;function $s(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Oi(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var l=i&~s;l!==0?r=$s(l):(o&=i,o!==0&&(r=$s(o)))}else i=n&~s,i!==0?r=$s(i):o!==0&&(r=$s(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,o=t&-t,s>=o||s===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ko(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ut(t),e[t]=n}function Xy(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Hs),Pd=" ",Ad=!1;function Th(e,t){switch(e){case"keyup":return Ev.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function kh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ar=!1;function Tv(e,t){switch(e){case"compositionend":return kh(t);case"keypress":return t.which!==32?null:(Ad=!0,Pd);case"textInput":return e=t.data,e===Pd&&Ad?null:e;default:return null}}function kv(e,t){if(Ar)return e==="compositionend"||!pc&&Th(e,t)?(e=Eh(),gi=cc=An=null,Ar=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Ld(n)}}function Ph(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ph(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ah(){for(var e=window,t=Pi();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Pi(e.document)}return t}function hc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Lv(e){var t=Ah(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Ph(n.ownerDocument.documentElement,n)){if(r!==null&&hc(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,o=Math.min(r.start,s);r=r.end===void 0?o:Math.min(r.end,s),!e.extend&&o>r&&(s=r,r=o,o=s),s=$d(n,o);var i=$d(n,r);s&&i&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Mr=null,tu=null,Vs=null,nu=!1;function Bd(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;nu||Mr==null||Mr!==Pi(r)||(r=Mr,"selectionStart"in r&&hc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Vs&&so(Vs,r)||(Vs=r,r=Bi(tu,"onSelect"),0Lr||(e.current=au[Lr],au[Lr]=null,Lr--)}function Ce(e,t){Lr++,au[Lr]=e.current,e.current=t}var Hn={},it=Vn(Hn),gt=Vn(!1),dr=Hn;function ts(e,t){var n=e.type.contextTypes;if(!n)return Hn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},o;for(o in n)s[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function yt(e){return e=e.childContextTypes,e!=null}function Fi(){Ae(gt),Ae(it)}function Wd(e,t,n){if(it.current!==Hn)throw Error(ne(168));Ce(it,t),Ce(gt,n)}function zh(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(ne(108,Py(e)||"Unknown",s));return je({},n,r)}function zi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Hn,dr=it.current,Ce(it,e),Ce(gt,gt.current),!0}function Vd(e,t,n){var r=e.stateNode;if(!r)throw Error(ne(169));n?(e=zh(e,t,dr),r.__reactInternalMemoizedMergedChildContext=e,Ae(gt),Ae(it),Ce(it,e)):Ae(gt),Ce(gt,n)}var ln=null,_l=!1,ia=!1;function Dh(e){ln===null?ln=[e]:ln.push(e)}function Yv(e){_l=!0,Dh(e)}function Gn(){if(!ia&&ln!==null){ia=!0;var e=0,t=Te;try{var n=ln;for(Te=1;e>=i,s-=i,an=1<<32-Ut(t)+s|n<A?(j=O,O=null):j=O.sibling;var z=f(p,O,y[A],w);if(z===null){O===null&&(O=j);break}e&&O&&z.alternate===null&&t(p,O),g=o(z,g,A),L===null?P=z:L.sibling=z,L=z,O=j}if(A===y.length)return n(p,O),Re&&Zn(p,A),P;if(O===null){for(;AA?(j=O,O=null):j=O.sibling;var U=f(p,O,z.value,w);if(U===null){O===null&&(O=j);break}e&&O&&U.alternate===null&&t(p,O),g=o(U,g,A),L===null?P=U:L.sibling=U,L=U,O=j}if(z.done)return n(p,O),Re&&Zn(p,A),P;if(O===null){for(;!z.done;A++,z=y.next())z=d(p,z.value,w),z!==null&&(g=o(z,g,A),L===null?P=z:L.sibling=z,L=z);return Re&&Zn(p,A),P}for(O=r(p,O);!z.done;A++,z=y.next())z=h(O,p,A,z.value,w),z!==null&&(e&&z.alternate!==null&&O.delete(z.key===null?A:z.key),g=o(z,g,A),L===null?P=z:L.sibling=z,L=z);return e&&O.forEach(function(Z){return t(p,Z)}),Re&&Zn(p,A),P}function N(p,g,y,w){if(typeof y=="object"&&y!==null&&y.type===Pr&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Oo:e:{for(var P=y.key,L=g;L!==null;){if(L.key===P){if(P=y.type,P===Pr){if(L.tag===7){n(p,L.sibling),g=s(L,y.props.children),g.return=p,p=g;break e}}else if(L.elementType===P||typeof P=="object"&&P!==null&&P.$$typeof===Nn&&Kd(P)===L.type){n(p,L.sibling),g=s(L,y.props),g.ref=Ss(p,L,y),g.return=p,p=g;break e}n(p,L);break}else t(p,L);L=L.sibling}y.type===Pr?(g=ar(y.props.children,p.mode,w,y.key),g.return=p,p=g):(w=Ni(y.type,y.key,y.props,null,p.mode,w),w.ref=Ss(p,g,y),w.return=p,p=w)}return i(p);case br:e:{for(L=y.key;g!==null;){if(g.key===L)if(g.tag===4&&g.stateNode.containerInfo===y.containerInfo&&g.stateNode.implementation===y.implementation){n(p,g.sibling),g=s(g,y.children||[]),g.return=p,p=g;break e}else{n(p,g);break}else t(p,g);g=g.sibling}g=ha(y,p.mode,w),g.return=p,p=g}return i(p);case Nn:return L=y._init,N(p,g,L(y._payload),w)}if(Ls(y))return _(p,g,y,w);if(ys(y))return x(p,g,y,w);Vo(p,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,g!==null&&g.tag===6?(n(p,g.sibling),g=s(g,y),g.return=p,p=g):(n(p,g),g=pa(y,p.mode,w),g.return=p,p=g),i(p)):n(p,g)}return N}var rs=Vh(!0),Gh=Vh(!1),Hi=Vn(null),Wi=null,jr=null,vc=null;function _c(){vc=jr=Wi=null}function xc(e){var t=Hi.current;Ae(Hi),e._currentValue=t}function du(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Xr(e,t){Wi=e,vc=jr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ht=!0),e.firstContext=null)}function Mt(e){var t=e._currentValue;if(vc!==e)if(e={context:e,memoizedValue:t,next:null},jr===null){if(Wi===null)throw Error(ne(308));jr=e,Wi.dependencies={lanes:0,firstContext:e}}else jr=jr.next=e;return t}var rr=null;function wc(e){rr===null?rr=[e]:rr.push(e)}function Yh(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,wc(t)):(n.next=s.next,s.next=n),t.interleaved=n,mn(e,r)}function mn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Tn=!1;function Sc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Kh(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function dn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Bn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Se&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,mn(e,n)}return s=r.interleaved,s===null?(t.next=t,wc(r)):(t.next=s.next,s.next=t),r.interleaved=t,mn(e,n)}function vi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lc(e,n)}}function Xd(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?s=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?s=o=t:o=o.next=t}else s=o=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Vi(e,t,n,r){var s=e.updateQueue;Tn=!1;var o=s.firstBaseUpdate,i=s.lastBaseUpdate,l=s.shared.pending;if(l!==null){s.shared.pending=null;var a=l,u=a.next;a.next=null,i===null?o=u:i.next=u,i=a;var c=e.alternate;c!==null&&(c=c.updateQueue,l=c.lastBaseUpdate,l!==i&&(l===null?c.firstBaseUpdate=u:l.next=u,c.lastBaseUpdate=a))}if(o!==null){var d=s.baseState;i=0,c=u=a=null,l=o;do{var f=l.lane,h=l.eventTime;if((r&f)===f){c!==null&&(c=c.next={eventTime:h,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var _=e,x=l;switch(f=t,h=n,x.tag){case 1:if(_=x.payload,typeof _=="function"){d=_.call(h,d,f);break e}d=_;break e;case 3:_.flags=_.flags&-65537|128;case 0:if(_=x.payload,f=typeof _=="function"?_.call(h,d,f):_,f==null)break e;d=je({},d,f);break e;case 2:Tn=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,f=s.effects,f===null?s.effects=[l]:f.push(l))}else h={eventTime:h,lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},c===null?(u=c=h,a=d):c=c.next=h,i|=f;if(l=l.next,l===null){if(l=s.shared.pending,l===null)break;f=l,l=f.next,f.next=null,s.lastBaseUpdate=f,s.shared.pending=null}}while(!0);if(c===null&&(a=d),s.baseState=a,s.firstBaseUpdate=u,s.lastBaseUpdate=c,t=s.shared.interleaved,t!==null){s=t;do i|=s.lane,s=s.next;while(s!==t)}else o===null&&(s.shared.lanes=0);hr|=i,e.lanes=i,e.memoizedState=d}}function Qd(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=aa.transition;aa.transition={};try{e(!1),t()}finally{Te=n,aa.transition=r}}function dm(){return Rt().memoizedState}function Zv(e,t,n){var r=Fn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},fm(e))pm(t,n);else if(n=Yh(e,t,n,r),n!==null){var s=ut();Ht(n,e,r,s),hm(n,t,r)}}function qv(e,t,n){var r=Fn(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(fm(e))pm(t,s);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,l=o(i,n);if(s.hasEagerState=!0,s.eagerState=l,Vt(l,i)){var a=t.interleaved;a===null?(s.next=s,wc(t)):(s.next=a.next,a.next=s),t.interleaved=s;return}}catch{}finally{}n=Yh(e,t,s,r),n!==null&&(s=ut(),Ht(n,e,r,s),hm(n,t,r))}}function fm(e){var t=e.alternate;return e===Be||t!==null&&t===Be}function pm(e,t){Gs=Yi=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function hm(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lc(e,n)}}var Ki={readContext:Mt,useCallback:nt,useContext:nt,useEffect:nt,useImperativeHandle:nt,useInsertionEffect:nt,useLayoutEffect:nt,useMemo:nt,useReducer:nt,useRef:nt,useState:nt,useDebugValue:nt,useDeferredValue:nt,useTransition:nt,useMutableSource:nt,useSyncExternalStore:nt,useId:nt,unstable_isNewReconciler:!1},Jv={readContext:Mt,useCallback:function(e,t){return Kt().memoizedState=[e,t===void 0?null:t],e},useContext:Mt,useEffect:qd,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,xi(4194308,4,im.bind(null,t,e),n)},useLayoutEffect:function(e,t){return xi(4194308,4,e,t)},useInsertionEffect:function(e,t){return xi(4,2,e,t)},useMemo:function(e,t){var n=Kt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Kt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Zv.bind(null,Be,e),[r.memoizedState,e]},useRef:function(e){var t=Kt();return e={current:e},t.memoizedState=e},useState:Zd,useDebugValue:Pc,useDeferredValue:function(e){return Kt().memoizedState=e},useTransition:function(){var e=Zd(!1),t=e[0];return e=Qv.bind(null,e[1]),Kt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Be,s=Kt();if(Re){if(n===void 0)throw Error(ne(407));n=n()}else{if(n=t(),Xe===null)throw Error(ne(349));pr&30||qh(r,t,n)}s.memoizedState=n;var o={value:n,getSnapshot:t};return s.queue=o,qd(em.bind(null,r,o,e),[e]),r.flags|=2048,po(9,Jh.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Kt(),t=Xe.identifierPrefix;if(Re){var n=un,r=an;n=(r&~(1<<32-Ut(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=co++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Xt]=t,e[lo]=r,Nm(e,t,!1,!1),t.stateNode=e;e:{switch(i=Ya(n,r),n){case"dialog":Pe("cancel",e),Pe("close",e),s=r;break;case"iframe":case"object":case"embed":Pe("load",e),s=r;break;case"video":case"audio":for(s=0;sis&&(t.flags|=128,r=!0,Es(o,!1),t.lanes=4194304)}else{if(!r)if(e=Gi(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Es(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!Re)return rt(t),null}else 2*Ue()-o.renderingStartTime>is&&n!==1073741824&&(t.flags|=128,r=!0,Es(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Ue(),t.sibling=null,n=Oe.current,Ce(Oe,r?n&1|2:n&1),t):(rt(t),null);case 22:case 23:return $c(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?_t&1073741824&&(rt(t),t.subtreeFlags&6&&(t.flags|=8192)):rt(t),null;case 24:return null;case 25:return null}throw Error(ne(156,t.tag))}function l_(e,t){switch(gc(t),t.tag){case 1:return yt(t.type)&&Fi(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ss(),Ae(gt),Ae(it),Tc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Nc(t),null;case 13:if(Ae(Oe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(ne(340));ns()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ae(Oe),null;case 4:return ss(),null;case 10:return xc(t.type._context),null;case 22:case 23:return $c(),null;case 24:return null;default:return null}}var Yo=!1,ot=!1,a_=typeof WeakSet=="function"?WeakSet:Set,ue=null;function Fr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){ze(e,t,r)}else n.current=null}function xu(e,t,n){try{n()}catch(r){ze(e,t,r)}}var cf=!1;function u_(e,t){if(ru=Li,e=Ah(),hc(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,l=-1,a=-1,u=0,c=0,d=e,f=null;t:for(;;){for(var h;d!==n||s!==0&&d.nodeType!==3||(l=i+s),d!==o||r!==0&&d.nodeType!==3||(a=i+r),d.nodeType===3&&(i+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++u===s&&(l=i),f===o&&++c===r&&(a=i),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=l===-1||a===-1?null:{start:l,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(su={focusedElem:e,selectionRange:n},Li=!1,ue=t;ue!==null;)if(t=ue,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ue=e;else for(;ue!==null;){t=ue;try{var _=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(_!==null){var x=_.memoizedProps,N=_.memoizedState,p=t.stateNode,g=p.getSnapshotBeforeUpdate(t.elementType===t.type?x:$t(t.type,x),N);p.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(ne(163))}}catch(w){ze(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,ue=e;break}ue=t.return}return _=cf,cf=!1,_}function Ys(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var o=s.destroy;s.destroy=void 0,o!==void 0&&xu(t,n,o)}s=s.next}while(s!==r)}}function Sl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function wu(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Cm(e){var t=e.alternate;t!==null&&(e.alternate=null,Cm(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Xt],delete t[lo],delete t[lu],delete t[Vv],delete t[Gv])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Im(e){return e.tag===5||e.tag===3||e.tag===4}function df(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Im(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Su(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ji));else if(r!==4&&(e=e.child,e!==null))for(Su(e,t,n),e=e.sibling;e!==null;)Su(e,t,n),e=e.sibling}function Eu(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Eu(e,t,n),e=e.sibling;e!==null;)Eu(e,t,n),e=e.sibling}var Ze=null,Bt=!1;function xn(e,t,n){for(n=n.child;n!==null;)bm(e,t,n),n=n.sibling}function bm(e,t,n){if(Zt&&typeof Zt.onCommitFiberUnmount=="function")try{Zt.onCommitFiberUnmount(hl,n)}catch{}switch(n.tag){case 5:ot||Fr(n,t);case 6:var r=Ze,s=Bt;Ze=null,xn(e,t,n),Ze=r,Bt=s,Ze!==null&&(Bt?(e=Ze,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Ze.removeChild(n.stateNode));break;case 18:Ze!==null&&(Bt?(e=Ze,n=n.stateNode,e.nodeType===8?oa(e.parentNode,n):e.nodeType===1&&oa(e,n),no(e)):oa(Ze,n.stateNode));break;case 4:r=Ze,s=Bt,Ze=n.stateNode.containerInfo,Bt=!0,xn(e,t,n),Ze=r,Bt=s;break;case 0:case 11:case 14:case 15:if(!ot&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var o=s,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&xu(n,t,i),s=s.next}while(s!==r)}xn(e,t,n);break;case 1:if(!ot&&(Fr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(l){ze(n,t,l)}xn(e,t,n);break;case 21:xn(e,t,n);break;case 22:n.mode&1?(ot=(r=ot)||n.memoizedState!==null,xn(e,t,n),ot=r):xn(e,t,n);break;default:xn(e,t,n)}}function ff(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new a_),t.forEach(function(r){var s=v_.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function Ot(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=i),r&=~o}if(r=s,r=Ue()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*d_(r/1960))-r,10e?16:e,Mn===null)var r=!1;else{if(e=Mn,Mn=null,Zi=0,Se&6)throw Error(ne(331));var s=Se;for(Se|=4,ue=e.current;ue!==null;){var o=ue,i=o.child;if(ue.flags&16){var l=o.deletions;if(l!==null){for(var a=0;aUe()-Oc?lr(e,0):Rc|=n),vt(e,t)}function Bm(e,t){t===0&&(e.mode&1?(t=jo,jo<<=1,!(jo&130023424)&&(jo=4194304)):t=1);var n=ut();e=mn(e,t),e!==null&&(ko(e,t,n),vt(e,n))}function y_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Bm(e,n)}function v_(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(ne(314))}r!==null&&r.delete(t),Bm(e,n)}var jm;jm=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||gt.current)ht=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ht=!1,o_(e,t,n);ht=!!(e.flags&131072)}else ht=!1,Re&&t.flags&1048576&&Uh(t,Ui,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;wi(e,t),e=t.pendingProps;var s=ts(t,it.current);Xr(t,n),s=Cc(null,t,r,e,s,n);var o=Ic();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,yt(r)?(o=!0,zi(t)):o=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,Sc(t),s.updater=wl,t.stateNode=s,s._reactInternals=t,pu(t,r,e,n),t=gu(null,t,r,!0,o,n)):(t.tag=0,Re&&o&&mc(t),lt(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(wi(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=x_(r),e=$t(r,e),s){case 0:t=mu(null,t,r,e,n);break e;case 1:t=lf(null,t,r,e,n);break e;case 11:t=sf(null,t,r,e,n);break e;case 14:t=of(null,t,r,$t(r.type,e),n);break e}throw Error(ne(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:$t(r,s),mu(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:$t(r,s),lf(e,t,r,s,n);case 3:e:{if(wm(t),e===null)throw Error(ne(387));r=t.pendingProps,o=t.memoizedState,s=o.element,Kh(e,t),Vi(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){s=os(Error(ne(423)),t),t=af(e,t,r,n,s);break e}else if(r!==s){s=os(Error(ne(424)),t),t=af(e,t,r,n,s);break e}else for(xt=$n(t.stateNode.containerInfo.firstChild),wt=t,Re=!0,Ft=null,n=Gh(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ns(),r===s){t=gn(e,t,n);break e}lt(e,t,r,n)}t=t.child}return t;case 5:return Xh(t),e===null&&cu(t),r=t.type,s=t.pendingProps,o=e!==null?e.memoizedProps:null,i=s.children,ou(r,s)?i=null:o!==null&&ou(r,o)&&(t.flags|=32),xm(e,t),lt(e,t,i,n),t.child;case 6:return e===null&&cu(t),null;case 13:return Sm(e,t,n);case 4:return Ec(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=rs(t,null,r,n):lt(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:$t(r,s),sf(e,t,r,s,n);case 7:return lt(e,t,t.pendingProps,n),t.child;case 8:return lt(e,t,t.pendingProps.children,n),t.child;case 12:return lt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,o=t.memoizedProps,i=s.value,Ce(Hi,r._currentValue),r._currentValue=i,o!==null)if(Vt(o.value,i)){if(o.children===s.children&&!gt.current){t=gn(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var l=o.dependencies;if(l!==null){i=o.child;for(var a=l.firstContext;a!==null;){if(a.context===r){if(o.tag===1){a=dn(-1,n&-n),a.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?a.next=a:(a.next=c.next,c.next=a),u.pending=a}}o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),du(o.return,n,t),l.lanes|=n;break}a=a.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(ne(341));i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),du(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}lt(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Xr(t,n),s=Mt(s),r=r(s),t.flags|=1,lt(e,t,r,n),t.child;case 14:return r=t.type,s=$t(r,t.pendingProps),s=$t(r.type,s),of(e,t,r,s,n);case 15:return vm(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:$t(r,s),wi(e,t),t.tag=1,yt(r)?(e=!0,zi(t)):e=!1,Xr(t,n),mm(t,r,s),pu(t,r,s,n),gu(null,t,r,!0,e,n);case 19:return Em(e,t,n);case 22:return _m(e,t,n)}throw Error(ne(156,t.tag))};function Fm(e,t){return fh(e,t)}function __(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bt(e,t,n,r){return new __(e,t,n,r)}function jc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function x_(e){if(typeof e=="function")return jc(e)?1:0;if(e!=null){if(e=e.$$typeof,e===rc)return 11;if(e===sc)return 14}return 2}function zn(e,t){var n=e.alternate;return n===null?(n=bt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ni(e,t,n,r,s,o){var i=2;if(r=e,typeof e=="function")jc(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Pr:return ar(n.children,s,o,t);case nc:i=8,s|=8;break;case Ba:return e=bt(12,n,t,s|2),e.elementType=Ba,e.lanes=o,e;case ja:return e=bt(13,n,t,s),e.elementType=ja,e.lanes=o,e;case Fa:return e=bt(19,n,t,s),e.elementType=Fa,e.lanes=o,e;case Xp:return Nl(n,s,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Yp:i=10;break e;case Kp:i=9;break e;case rc:i=11;break e;case sc:i=14;break e;case Nn:i=16,r=null;break e}throw Error(ne(130,e==null?e:typeof e,""))}return t=bt(i,n,t,s),t.elementType=e,t.type=r,t.lanes=o,t}function ar(e,t,n,r){return e=bt(7,e,r,t),e.lanes=n,e}function Nl(e,t,n,r){return e=bt(22,e,r,t),e.elementType=Xp,e.lanes=n,e.stateNode={isHidden:!1},e}function pa(e,t,n){return e=bt(6,e,null,t),e.lanes=n,e}function ha(e,t,n){return t=bt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function w_(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Kl(0),this.expirationTimes=Kl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Kl(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function Fc(e,t,n,r,s,o,i,l,a){return e=new w_(e,t,n,l,a),t===1?(t=1,o===!0&&(t|=8)):t=0,o=bt(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sc(o),e}function S_(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Hm)}catch(e){console.error(e)}}Hm(),Hp.exports=Nt;var Wm=Hp.exports,xf=Wm;La.createRoot=xf.createRoot,La.hydrateRoot=xf.hydrateRoot;function el({title:e,subtitle:t,children:n}){const r=!!e||!!t;return m.jsxs("section",{className:`panel ${r?"":"panel--headerless"}`.trim(),children:[r?m.jsxs("header",{className:"panel__header",children:[e?m.jsx("h2",{children:e}):null,t?m.jsx("p",{children:t}):null]}):null,m.jsx("div",{className:"panel__body",children:n})]})}const tl=["#93c5fd","#a78bfa","#f9a8d4","#86efac","#fdba74","#67e8f9","#fca5a5","#c4b5fd","#fde68a","#6ee7b7","#fda4af","#5eead4","#ddd6fe","#bef264","#fbcfe8","#bae6fd"];function C_(e){let t=0;for(let n=0;n>>0;return t}function I_(e){return`hsl(${(e*137.508%360).toFixed(1)} 75% 68%)`}function wf(e){const t=[...new Set(e)].sort(),n={};for(let r=0;re.layout.cols){$_(e);for(let o=0;ol+a+1||(e.beginPath(),e.moveTo(c,t.top),e.lineTo(c,t.top+t.plotHeight),e.stroke())}for(let u=0;u<=t.yTicks;u+=1){const c=t.plotBottom-u/t.yTicks*(t.plotBottom-t.plotTop);e.beginPath(),e.moveTo(l,c),e.lineTo(l+a,c),e.stroke()}e.strokeStyle=s.axis,e.beginPath(),e.moveTo(l,t.plotBottom),e.lineTo(l+a,t.plotBottom),e.stroke()}function rl(e,t,{color:n,lineWidth:r,alpha:s=1,lineDash:o=[],startCol:i,endCol:l,yMaxMs:a,layout:u}){const c=Math.max(0,i-1),d=Math.min(u.cols-1,l+1);e.strokeStyle=n,e.lineWidth=r,e.globalAlpha=s,e.setLineDash(o),e.beginPath();const f=[];let h=null,_=Number.NaN,x=!1;for(let N=c-1;N>=0;N-=1){const p=t[N];if(Number.isFinite(p)){h=N,_=p,x=p>a;break}}for(let N=c;N<=d;N+=1){const p=t[N];if(!Number.isFinite(p))continue;const g=p>a;if(g&&!x&&f.push(N),h!==null&&Number.isFinite(_)){const y=_>a;if(!(y&&g)){const w=u.left+h+.5,P=y?u.plotTop:mo(_,a,u),L=u.left+N+.5,O=g?u.plotTop:mo(p,a,u);e.moveTo(w,P),e.lineTo(L,O)}}h=N,_=p,x=g}if(e.stroke(),e.setLineDash([]),e.globalAlpha=1,f.length>0){e.fillStyle=n,e.globalAlpha=Math.min(1,s+.1);for(const N of f){const p=u.left+N;e.fillRect(p,u.plotTop,1,3)}e.globalAlpha=1}}function Ef(e,t,n,{color:r,alpha:s,lineDash:o=[],startCol:i,endCol:l,yMaxMs:a,layout:u}){e.strokeStyle=r,e.lineWidth=1,e.globalAlpha=s,e.setLineDash(o);for(let c=i;c<=l;c+=1){const d=t[c],f=n[c];if(!Number.isFinite(d)||!Number.isFinite(f)||f<=d)continue;const h=u.left+c+.5,_=d>a?u.plotTop:mo(d,a,u),x=f>a?u.plotTop:mo(f,a,u);e.beginPath(),e.moveTo(h,_),e.lineTo(h,x),e.stroke()}e.setLineDash([]),e.globalAlpha=1}function Nf(e,t,{color:n,alpha:r,startCol:s,endCol:o,yMaxMs:i,layout:l}){const a=Math.max(0,s-1),u=Math.min(l.cols-1,o+1);let c=null,d=null;for(let f=a;f<=u;f+=1){const h=t[f];!Number.isFinite(h)||h<=0||(c===null&&(c=f),d=f)}if(!(c===null||d===null)){e.fillStyle=n,e.globalAlpha=r,e.beginPath(),e.moveTo(l.left+c+.5,l.plotBottom);for(let f=c;f<=d;f+=1){const h=t[f];if(!Number.isFinite(h)||h<=0)continue;const _=Math.min(h,i),x=l.left+f+.5,N=mo(_,i,l);e.lineTo(x,N)}e.lineTo(l.left+d+.5,l.plotBottom),e.closePath(),e.fill(),e.globalAlpha=1}}function F_(e,{leaseBins:t,userBins:n,color:r,startCol:s,endCol:o,yMaxMs:i,layout:l}){if(Nf(e,t,{color:r,alpha:.18,startCol:s,endCol:o,yMaxMs:i,layout:l}),n!==null){const a=new Float32Array(n.length);a.fill(Number.NaN);for(let u=s;u<=o&&u9&&(n*=10,r=1),Math.max(Dr,r*n)}function kf(e){if(!Number.isFinite(e)||e<=0)return js;const t=1e3/e;return D_(t*1.25)}function Cf(e,t,n,r,s,o,i){let l=e.get(o),a=t.get(o),u=n.get(o),c=r.get(o),d=s.get(o);return l||(l=nl(i),e.set(o,l)),a||(a=nl(i),t.set(o,a)),u||(u=new Float64Array(i),n.set(o,u)),c||(c=new Uint16Array(i),r.set(o,c)),d||(d=new Int32Array(i),d.fill(-2147483648),s.set(o,d)),{bins:l,peakBins:a,sumBins:u,countBins:c,cycleBins:d}}function U_({samples:e,publisherProcessId:t,publisherEndpointId:n,nominalPublishRateHz:r,topic:s,topicScope:o,leaseColorMap:i,selectedSubscriberEndpointId:l=null,windowSeconds:a,onWindowSecondsChange:u,darkMode:c=!1}){const d=E.useRef(null),f=E.useRef(null),h=E.useRef(null),_=E.useRef(null),x=E.useRef(!0),N=E.useRef(!1),[p,g]=E.useState(()=>a.toFixed(1)),[y,w]=E.useState(!0),[P,L]=E.useState(`${js.toFixed(2)}`),[O,A]=E.useState("lease_time_ns"),j=E.useMemo(()=>l?Qs(l,i):null,[i,l]),z=c?Vm:b_,U=E.useMemo(()=>Qo(P),[P]),Z=E.useMemo(()=>o&&o.length>0?o:[s],[s,o]),D=E.useMemo(()=>[...Z].sort().join("|"),[Z]),v=`${t}|${n}`,k=M=>{const I=Qo(M??p);if(I===null||!u){g(a.toFixed(1));return}const S=gr(I,.5,30);u(S),g(S.toFixed(1))},T=()=>{var M;if(y){const I=((M=h.current)==null?void 0:M.yMaxMs)??kf(r);L(I.toFixed(2)),w(!1);return}w(!0)};return E.useEffect(()=>{g(a.toFixed(1))},[a]),E.useEffect(()=>{const M=d.current;if(!M)return;const I=M.getContext("2d");if(!I)return;const S=Math.max(1,window.devicePixelRatio||1),b=M_(M,a),F=Math.floor(b.width*S),R=Math.floor(b.height*S),X=f.current,Q=!X||X.width!==F||X.height!==R;Q&&(M.width=F,M.height=R,f.current={width:F,height:R}),I.setTransform(S,0,0,S,0,0);const re=Math.max(1,a*1e9),J=kf(r),fe=y?J:Math.max(Dr,U??js);let V=h.current;const me=V===null||Q||V.layout.cols!==b.cols||V.layout.width!==b.width||V.windowNs!==re||V.scopeSignature!==D||V.publisherSignature!==v;if(me&&(V=R_(b,re,D,v,fe),h.current=V,_.current=null,I.fillStyle=z.background,I.fillRect(0,0,b.width,b.height)),V===null)return;const K=new Set;let C=V.lastTimestamp,B=!1,te=V.lastWipeCycle,q=null;V.originNs!==null&&Number.isFinite(V.lastTimestamp)&&(q=ma(V.lastTimestamp,V.originNs,V.windowNs,V.layout.cols));const ae=e!==_.current?e:[];e!==_.current&&(_.current=e);for(const oe of ae){if(!Number.isFinite(oe.timestamp)||!Number.isFinite(oe.value)||!O_(oe.topic,Z))continue;const ee=oe.metric==="publish_delta_ns"&&oe.processId===t&&oe.endpointId===n,ge=oe.metric==="lease_time_ns",de=oe.metric==="user_span_ns";if(!ee&&!ge&&!de||(V.originNs===null&&(V.originNs=oe.timestamp),V.originNs===null||oe.timestamp0&&(B_(V,q,Y,K),q=Y):q=Y,ee){$>V.publishCycle[H]&&(V.publishCycle[H]=$,V.publishBins[H]=Number.NaN,V.publishPeakBins[H]=Number.NaN,V.publishSumBins[H]=0,V.publishCountBins[H]=0,K.add(H));const se=Math.min(65535,V.publishCountBins[H]+1);V.publishCountBins[H]=se,V.publishSumBins[H]+=G;const le=V.publishSumBins[H]/se,we=V.publishBins[H];(!Number.isFinite(we)||Math.abs(le-we)>1e-6)&&(V.publishBins[H]=le,K.add(H));const Ee=V.publishPeakBins[H];(!Number.isFinite(Ee)||G>Ee)&&(V.publishPeakBins[H]=G,K.add(H))}else{const se=ge?Cf(V.leaseBinsByEndpoint,V.leasePeakBinsByEndpoint,V.leaseSumByEndpoint,V.leaseCountByEndpoint,V.leaseCycleByEndpoint,oe.endpointId,V.layout.cols):Cf(V.userBinsByEndpoint,V.userPeakBinsByEndpoint,V.userSumByEndpoint,V.userCountByEndpoint,V.userCycleByEndpoint,oe.endpointId,V.layout.cols);$>se.cycleBins[H]&&(se.cycleBins[H]=$,se.bins[H]=Number.NaN,se.peakBins[H]=Number.NaN,se.sumBins[H]=0,se.countBins[H]=0,K.add(H));const le=Math.min(65535,se.countBins[H]+1);se.countBins[H]=le,se.sumBins[H]+=G;const we=se.sumBins[H]/le,Ee=se.bins[H];(!Number.isFinite(Ee)||Math.abs(we-Ee)>1e-6)&&(se.bins[H]=we,K.add(H));const be=se.peakBins[H];(!Number.isFinite(be)||G>be)&&(se.peakBins[H]=G,K.add(H))}C=Math.max(C,oe.timestamp),B=!0}const pe=y&&!x.current;if(x.current=y,y?pe?V.yMaxMs=J:te>V.lastWipeCycle&&(V.lastWipeCycle=te,V.yMaxMs=J):V.yMaxMs=Math.max(Dr,U??js),y){const oe=V.yMaxMs.toFixed(2);P!==oe&&L(oe)}if(B&&V.originNs!==null){const oe=ma(C,V.originNs,V.windowNs,V.layout.cols);K.add(oe.col),V.lastCursorCol!==null&&Sf(K,V.lastCursorCol,V.layout.cols);const ee=(oe.col+P_)%V.layout.cols;Sf(K,ee,V.layout.cols),V.lastCursorCol=ee,V.lastTimestamp=C}if((me||K.size>0)&&(I.fillStyle=z.background,I.fillRect(0,0,V.layout.width,V.layout.height),z_(I,V,0,V.layout.cols-1,O,l,i,z)),V.lastTimestamp<=0){I.fillStyle=z.background,I.fillRect(0,0,V.layout.width,V.layout.height),I.fillStyle=z.waitingText,I.font='12px "Avenir Next", sans-serif',I.fillText("Waiting for trace samples...",V.layout.left,26),Tf(I,V,a,z);return}Tf(I,V,a,z)},[y,c,Z,i,U,r,n,t,v,l,e,O,D,a,z]),m.jsxs("div",{className:"timing-trace",children:[m.jsxs("div",{className:"timing-trace__controls",children:[m.jsxs("div",{className:"timing-trace__controls-left",children:[m.jsxs("label",{className:"timing-trace__axis-input",children:[m.jsx("span",{children:"Window (s)"}),m.jsx("input",{type:"number",min:.5,max:30,step:"0.5",value:p,onChange:M=>{const I=M.target.value;g(I),N.current||k(I)},onMouseDown:()=>{N.current=!1},onBlur:()=>{N.current=!1,k()},onKeyDown:M=>{if(M.key==="Enter"){N.current=!1,k();return}if(M.key==="ArrowUp"||M.key==="ArrowDown"){M.preventDefault(),N.current=!1;const I=Qo(p)??a,S=M.key==="ArrowUp"?.5:-.5,b=gr(I+S,.5,30);g(b.toFixed(1)),u==null||u(b);return}(M.key.length===1||M.key==="Backspace"||M.key==="Delete")&&(N.current=!0)}})]}),m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:z.publish}}),"Publish Delta"]}),l?m.jsxs(m.Fragment,{children:[m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:"transparent",border:`2px solid ${j??"#94a3b8"}`}}),"Lease Time"]}),m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:j??"#94a3b8"}}),"User Span"]})]}):m.jsxs(m.Fragment,{children:[m.jsx("button",{type:"button",className:`timing-trace__legend-item timing-trace__legend-toggle ${O==="lease_time_ns"?"is-active":""}`,onClick:()=>A("lease_time_ns"),"aria-pressed":O==="lease_time_ns",children:"Lease Time"}),m.jsx("button",{type:"button",className:`timing-trace__legend-item timing-trace__legend-toggle ${O==="user_span_ns"?"is-active":""}`,onClick:()=>A("user_span_ns"),"aria-pressed":O==="user_span_ns",children:"User Span"})]})]}),m.jsxs("div",{className:"timing-trace__controls-right",children:[m.jsxs("label",{className:"timing-trace__axis-input timing-trace__axis-input--ymax",children:[m.jsx("span",{children:"Y max (ms)"}),m.jsx("input",{type:"number",min:Dr,step:"0.1",value:P,onChange:M=>L(M.target.value),onBlur:()=>{const M=Qo(P);if(M===null){L(`${js.toFixed(2)}`);return}const I=Math.max(Dr,M);L(I.toFixed(2))},disabled:y})]}),m.jsx("button",{type:"button",role:"switch","aria-checked":y,className:`timing-trace__mode-toggle ${y?"is-auto":"is-fixed"}`,onClick:T,title:y?"Switch to Fixed Y":"Switch to Auto Y",children:m.jsx("span",{className:"timing-trace__mode-toggle-label",children:y?"Auto":"Fixed"})})]})]}),m.jsx("canvas",{ref:d,className:"timing-trace__canvas"})]})}function $e(e){return e.split(":")[0]??e}function bl(e){const[t,...n]=e.split(":");return{topic:t??"",endpointToken:n.join(":")}}function H_(e){const{endpointToken:t}=bl(e);return t.length>0?t:null}function W_(e){const{topic:t,endpointToken:n}=bl(e);return{topic:t.length>0?t:null,endpointId:n.length>0?n:null}}function Sn(e){return typeof e=="object"&&e!==null}function V_(e){if("leaky"in e||"max_queue"in e)return"input";if("num_buffers"in e||"buf_size"in e||"force_tcp"in e||"host"in e||"port"in e)return"output";const r=typeof e.name=="string"?e.name.toUpperCase():"",s=typeof e.address=="string"?e.address.toUpperCase():"";return r.includes("INPUT")||s.includes("/INPUT")?"input":r.includes("OUTPUT")||s.includes("/OUTPUT")?"output":"unknown"}function G_(e){const t=typeof e.metadata_type=="string"?e.metadata_type:typeof e.__type__=="string"?e.__type__:typeof e.type=="string"?e.type:null;if(typeof t=="string"){if(t==="InputRelayMetadata"||t.endsWith(".InputRelayMetadata"))return"InputRelayMetadata";if(t==="OutputRelayMetadata"||t.endsWith(".OutputRelayMetadata"))return"OutputRelayMetadata";if(t==="RelayMetadata"||t.endsWith(".RelayMetadata"))return"RelayMetadata"}const n="leaky"in e||"max_queue"in e,r="num_buffers"in e||"buf_size"in e||"force_tcp"in e||"host"in e||"port"in e;return n&&!r?"InputRelayMetadata":r&&!n?"OutputRelayMetadata":n||r?"RelayMetadata":null}function ga(e,t=null){if(!e)return[];const n=[];for(const[r,s]of Object.entries(e)){if(!Sn(s)||typeof s.address!="string")continue;const o=t==="relay";n.push({name:r,address:s.address,direction:V_(s),msgType:typeof s.msg_type=="string"?s.msg_type:null,collectionKind:t,relayMetadataType:o?G_(s):null,relayGroup:o&&typeof s.relay_group=="string"?s.relay_group:null,relayInputTopic:o&&typeof s.relay_input_topic=="string"?s.relay_input_topic:null,relayOutputTopic:o&&typeof s.relay_output_topic=="string"?s.relay_output_topic:null})}return n.sort((r,s)=>r.address.localeCompare(s.address)),n}function Hc(e){const t=new Map;for(const s of Object.values(e.sessions)){const o=Sn(s.metadata)?s.metadata:null,i=o&&Sn(o.components)?o.components:null;if(i)for(const[l,a]of Object.entries(i))!Sn(a)||t.has(l)||t.set(l,a)}const n=new Map,r=new Map;for(const[s,o]of t.entries()){const i=typeof o.name=="string"?o.name:s,l=typeof o.component_type=="string"?o.component_type:"Component",a=ga(Sn(o.topics)?o.topics:null,"topic"),u=ga(Sn(o.relays)?o.relays:null,"relay"),c=Array.isArray(o.children)?o.children.filter(_=>typeof _=="string"):[];if(c.length>0||a.length>0||u.length>0){const _=new Map;for(const x of a)_.set(x.address,x);for(const x of u)_.set(x.address,x);r.set(s,{address:s,name:i,componentType:l,streams:Array.from(_.values()).sort((x,N)=>x.address.localeCompare(N.address)),children:c})}const d=Sn(o.streams)?o.streams:null;if(!d)continue;const h=(Array.isArray(o.tasks)?o.tasks:[]).filter(Sn).map(_=>{if(typeof _.name!="string")return null;const x=Array.isArray(_.publishes)?_.publishes.filter(N=>typeof N=="string"):[];return{name:_.name,subscribes:typeof _.subscribes=="string"?_.subscribes:null,publishes:x}}).filter(_=>_!==null).sort((_,x)=>_.name.localeCompare(x.name));n.set(s,{address:s,name:i,componentType:l,streams:ga(d),tasks:h})}return{units:n,collections:r}}function Zo(e,t,n){t&&(e.set(t,n),e.set($e(t),n))}function Pl(e){const t=new Map,n=new Map;for(const r of e.values())for(const s of r.streams)s.collectionKind==="relay"&&(Zo(t,s.relayInputTopic,s.address),Zo(t,s.relayOutputTopic,s.address),Zo(n,s.relayInputTopic,r.address),Zo(n,s.relayOutputTopic,r.address));return{endpointByInternalTopic:t,collectionByInternalTopic:n}}function Y_(e,t){const n=new Map;for(const s of e)n.set(s,0);const r=Math.max(1,e.length);for(let s=0;sa&&(n.set(i.to,u),o=!0)}if(!o)break}return n}function Iu(e,t,n){if(n){const o=t.get(n);return o?o.children.filter(i=>e.has(i)||t.has(i)):[]}const r=new Set;for(const o of t.values())for(const i of o.children)r.add(i);const s=[...Array.from(t.keys()),...Array.from(e.keys())].filter(o=>!r.has(o));return s.length>0?s:Array.from(e.keys())}function Al(e){const t=new Map;for(const[n,r]of e.entries())for(const s of r.children)t.has(s)||t.set(s,n);return t}function K_(e,t){if(!t||!e.has(t))return[];const n=Al(e),r=[],s=new Set;let o=t;for(;o&&!s.has(o);)s.add(o),r.push(o),o=n.get(o);return r.reverse()}function X_(e,t,n){const r=n.get(e);return r?r.children.some(s=>t.has(s)||n.has(s)):!1}function bu(e,t,n){if(e===t)return!0;const r=new Set;let s=e;for(;s&&!r.has(s);){r.add(s);const o=n.get(s);if(!o)return!1;if(o===t)return!0;s=o}return!1}function Q_(e,t,n,r){const s=Al(n),o=Pl(n),i=new Map,l=(u,c)=>{i.set(u,c),i.set($e(u),c)};for(const u of t.values())for(const c of u.streams)l(c.address,u.address);for(const u of n.values())for(const c of u.streams)l(c.address,u.address);for(const[u,c]of o.collectionByInternalTopic.entries())i.set(u,c);const a=new Set;for(const[u,c]of Object.entries(e.graph)){a.add(u);for(const d of c)a.add(d)}for(const u of a){const c=i.get(u);if(!c||!bu(c,r,s))return!0}return!1}const go=2,Z_=.5,q_=30,J_=new Set(["publish_delta_ns"]),e1=new Set(["lease_time_ns","user_span_ns"]);function Jn(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function t1(e){return`${e.toFixed(1)} Hz`}function n1(e){return!Number.isFinite(e)||e<=0?"":Math.abs(e-Math.round(e))<1e-6?`${Math.round(e)}s`:`${e.toFixed(1)}s`}function r1(e,t,n){return Math.min(n,Math.max(t,e))}function Pu(e){return!Number.isFinite(e)||e<=0?go:r1(e,Z_,q_)}function s1(e){if(!Number.isFinite(e)||e<=0)return go;const t=Math.max(go,Math.round(10/e));return Pu(t)}function o1(e,t=48){return e.length<=t?e:`${e.slice(0,t-1)}…`}function i1(e,t,n){return n!==null&&n>0&&t/n>.5?"backpressure":e>0?"active":"idle"}function If(e){return typeof e=="object"&&e!==null}function ls(e,t){return t.get(e)??t.get($e(e))??e}function Ym(e,t){const{topic:n,endpointToken:r}=bl(e);return n.length===0||r.length===0?e:`${ls(n,t)}:${r}`}function l1(e,t){if(!e)return[];const n=[];for(const[r,s]of Object.entries(e.data.batches)){if(!If(s))continue;const o=s.samples;if(Array.isArray(o))for(const i of o){if(!If(i))continue;const l=i.endpoint_id,a=i.topic,u=i.metric,c=i.value,d=i.timestamp,f=i.sample_seq;typeof l!="string"||typeof a!="string"||typeof u!="string"||typeof c!="number"||!Number.isFinite(c)||n.push({rowId:`${r}:${l}`,processId:r,endpointId:l,topic:ls(a,t),timestamp:typeof d=="number"&&Number.isFinite(d)?d:e.data.timestamp,metric:u,value:c,sampleSeq:typeof f=="number"&&Number.isFinite(f)?Math.trunc(f):null,channelKind:typeof i.channel_kind=="string"?i.channel_kind:null})}}return n}function a1(e,t,n,r,s){const o=ls(t.topic,s);return{id:`${e.process_id}:${t.endpoint_id}`,endpointId:t.endpoint_id,displayEndpointId:Ym(t.endpoint_id,s),topic:o,processId:e.process_id,pid:e.pid,host:e.host,messagesWindow:Jn(t.messages_received_window),channelKindLast:typeof t.channel_kind_last=="string"?t.channel_kind_last:"unknown",unitAddress:n.get(t.endpoint_id)??r.get(o)??null}}function Au(e,t,n){const r=ls(e,n),s=new Set([r]),o=new Set([e,r]);for(const i of o){const l=t==null?void 0:t.graph[i];if(Array.isArray(l))for(const a of l)typeof a=="string"&&s.add(ls(a,n))}return s}function bf(e,t){if(t.has(e))return!0;for(const n of t)if(e.startsWith(`${n}:`))return!0;return!1}function u1(e,t,n,r){const s=Au(e,n,r);return t.filter(o=>s.has(o.topic)).sort((o,i)=>{const l=o.topic.localeCompare(i.topic);if(l!==0)return l;const a=o.processId.localeCompare(i.processId);return a!==0?a:o.endpointId.localeCompare(i.endpointId)})}function c1(e,t,n,r,s,o,i){const l=`${e.process_id}:${t.endpoint_id}`,a=t.num_buffers,u=typeof a=="number"&&Number.isFinite(a)?Math.max(0,Math.trunc(a)):null,c=ls(t.topic,i);return{id:l,endpointId:t.endpoint_id,displayEndpointId:Ym(t.endpoint_id,i),topic:c,processId:e.process_id,pid:e.pid,host:e.host,windowSeconds:Jn(e.window_seconds),publishRateHzWindow:Jn(t.publish_rate_hz_window),messagesPublishedWindow:Jn(t.messages_published_window),inflightCurrent:Jn(t.inflight_messages_current),numBuffers:u,activityTone:i1(Jn(t.messages_published_window),Jn(t.inflight_messages_current),u),contributors:u1(c,n,r,i),unitAddress:s.get(t.endpoint_id)??o.get(c)??null}}function d1({graphSnapshot:e,profilingSnapshot:t,latestTraceEvent:n,setProfilingTraceControl:r,focusPublisherEndpointId:s=null,focusPublisherTopic:o=null,focusSubscriberEndpointId:i=null,focusActionId:l=0,hideFilters:a=!1,defaultTraceMetrics:u=["publish_delta_ns","lease_time_ns","user_span_ns"],traceDockHost:c=null,onTraceDockStateChange:d,traceCloseSignal:f=0,onPublisherSelect:h,onSubscriberSelect:_,darkMode:x=!1}){const[N,p]=E.useState(""),[g,y]=E.useState([]),[w,P]=E.useState([]),[L,O]=E.useState({}),[A,j]=E.useState({}),[z,U]=E.useState({}),[Z,D]=E.useState({}),[v,k]=E.useState({}),T=E.useRef(f),M=E.useRef(-1),I=E.useRef({}),S=E.useMemo(()=>t?Object.values(t):[],[t]),b=E.useMemo(()=>e?Hc(e):null,[e]),F=E.useMemo(()=>b?Pl(b.collections).endpointByInternalTopic:new Map,[b]),R=E.useMemo(()=>{const $=new Map;if(!b)return $;const G=(Y,se)=>{const le=H_(se);le&&!$.has(le)&&$.set(le,Y)};for(const Y of b.units.values())for(const se of Y.streams)G(Y.address,se.address);for(const Y of b.collections.values())for(const se of Y.streams)G(Y.address,se.address);return $},[b]),X=E.useMemo(()=>{const $=new Map;if(!b)return $;const G=(Y,se)=>{$.set(se,Y),$.set($e(se),Y)};for(const Y of b.units.values())for(const se of Y.streams)G(Y.address,se.address);for(const Y of b.collections.values())for(const se of Y.streams)G(Y.address,se.address);return $},[b]),Q=E.useMemo(()=>{const $=[];for(const Y of S)for(const se of Object.values(Y.subscribers))$.push(a1(Y,se,R,X,F));const G=[];for(const Y of S)for(const se of Object.values(Y.publishers))G.push(c1(Y,se,$,e,R,X,F));return G.sort((Y,se)=>{const le=Y.topic.localeCompare(se.topic);if(le!==0)return le;const we=Y.processId.localeCompare(se.processId);return we!==0?we:Y.endpointId.localeCompare(se.endpointId)})},[R,X,e,S,F]),re=E.useMemo(()=>{const $=N.trim().toLowerCase();return Q.filter(G=>$.length===0?!0:G.topic.toLowerCase().includes($)||G.endpointId.toLowerCase().includes($)||G.processId.toLowerCase().includes($))},[Q,N]),J=E.useMemo(()=>new Map(Q.map($=>[$.id,$])),[Q]);E.useEffect(()=>{if(l!==M.current){if(s){const $=Q.filter(G=>G.endpointId===s?!0:o?G.topic===o:!1).map(G=>G.id);if($.length===0)return;M.current=l,p(""),y($),k({}),window.requestAnimationFrame(()=>{var G;(G=I.current[$[0]])==null||G.scrollIntoView({block:"nearest",behavior:"smooth"})});return}if(i){const $=Q.filter(G=>G.contributors.some(Y=>Y.endpointId===i)).map(G=>G.id);if($.length===0)return;M.current=l,p(""),y($),k(G=>{const Y={...G};for(const se of $)Y[se]=i;return Y}),window.requestAnimationFrame(()=>{var G;(G=I.current[$[0]])==null||G.scrollIntoView({block:"nearest",behavior:"smooth"})});return}}},[s,o,i,l,Q]),E.useEffect(()=>{if(!n||w.length===0)return;const $=l1(n,F);if($.length===0)return;const G=new Set(w),Y=w.map(le=>J.get(le)).filter(le=>le!==void 0).map(le=>({row:le,topicScope:Au(le.topic,e,F)})),se=new Map(Y.map(le=>[le.row.id,le.topicScope]));O(le=>{let we=!1;const Ee={...le},be={};for(const ce of $){const he=new Set,xe=J.get(ce.rowId),ke=se.get(ce.rowId);if(xe&&G.has(ce.rowId)&&ke&&bf(ce.topic,ke)&&J_.has(ce.metric)&&he.add(ce.rowId),e1.has(ce.metric))for(const Fe of Y)bf(ce.topic,Fe.topicScope)&&he.add(Fe.row.id);for(const Fe of he){const ye=be[Fe];ye?ye.push(ce):be[Fe]=[ce]}}for(const[ce,he]of Object.entries(be))he.length!==0&&(Ee[ce]=he,we=!0);return we?Ee:le})},[w,e,n,F,J]);const fe=async($,G)=>{if(!A[$.id]){j(Y=>({...Y,[$.id]:!0})),U(Y=>({...Y,[$.id]:null})),G?(O(Y=>({...Y,[$.id]:[]})),D(Y=>Y[$.id]!==void 0?Y:{...Y,[$.id]:s1($.publishRateHzWindow)}),P([$.id])):P(Y=>Y.includes($.id)?Y.filter(se=>se!==$.id):Y);try{if(G){const Y=w.find(se=>se!==$.id);if(Y){const se=J.get(Y);se&&await r({process_id:se.processId,enabled:!1,publisher_endpoint_id:null,publisher_topic:null,subscriber_topic:null,metrics:null,sample_mod:1,ttl_seconds:null,timeout:2})}}await r({process_id:$.processId,enabled:G,publisher_endpoint_id:G?$.endpointId:null,publisher_topic:null,subscriber_topic:G?$.topic:null,metrics:G?u:null,sample_mod:1,ttl_seconds:null,timeout:2})}catch(Y){const se=Y instanceof Error?Y.message:"Trace control request failed.";U(le=>({...le,[$.id]:se})),P(le=>G?le.filter(we=>we!==$.id):le.includes($.id)?le:[...le,$.id])}finally{j(Y=>({...Y,[$.id]:!1}))}}},V=$=>{const G=!g.includes($.id);G&&(h==null||h({unitAddress:$.unitAddress,endpointId:$.endpointId,topic:$.topic})),y(Y=>Y.includes($.id)?Y.filter(se=>se!==$.id):[...Y,$.id]),G||k(Y=>({...Y,[$.id]:null})),!G&&w.includes($.id)&&fe($,!1)},me=($,G)=>{fe($,G)},K=a,C=w[0]??null,B=C?J.get(C)??null:null,te=C?L[C]??[]:[],q=C?!!A[C]:!1,ae=C?z[C]??null:null,pe=Pu(C?Z[C]??go:go),oe=B?Array.from(Au(B.topic,e,F)):[],ee=te.filter($=>$.metric==="lease_time_ns"||$.metric==="user_span_ns").map($=>$.endpointId),ge=wf([...(B==null?void 0:B.contributors.map($=>$.endpointId))??[],...ee]),de=C?v[C]??null:null;E.useEffect(()=>{if(f===T.current)return;T.current=f;const $=w[0];if(!$)return;const G=J.get($);if(!G){P([]);return}P([]),r({process_id:G.processId,enabled:!1,publisher_endpoint_id:null,publisher_topic:null,subscriber_topic:null,metrics:null,sample_mod:1,ttl_seconds:null,timeout:2})},[w,J,r,f]),E.useEffect(()=>{if(d){if(!B){d(null);return}d({active:!0,topic:B.topic,endpointId:B.endpointId,status:q?"applying":"capturing"})}},[q,B,d]);const H=c&&B?Wm.createPortal(m.jsxs("div",{className:"trace-dock-trace",children:[te.length===0?m.jsx("p",{className:"muted",children:"Waiting for trace samples on this publisher endpoint."}):m.jsx(U_,{samples:te,publisherProcessId:B.processId,publisherEndpointId:B.endpointId,nominalPublishRateHz:B.publishRateHzWindow,topic:B.topic,topicScope:oe,leaseColorMap:ge,selectedSubscriberEndpointId:de,windowSeconds:pe,darkMode:x,onWindowSecondsChange:$=>D(G=>({...G,[B.id]:Pu($)}))}),ae?m.jsx("p",{className:"patch-status err",children:ae}):null]}),c):null;return m.jsxs(el,{children:[Q.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No publishers snapshot entries available."})}):m.jsxs(m.Fragment,{children:[K?null:m.jsx("div",{className:"settings-search",children:m.jsx("input",{type:"search",placeholder:"Search topic, endpoint, or process",value:N,onChange:$=>p($.target.value)})}),re.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No publishers match the current filter."})}):m.jsx("div",{className:"publisher-list",children:re.map($=>{const G=g.includes($.id),Y=w.includes($.id),se=!!A[$.id],le=n1($.windowSeconds),we=wf($.contributors.map(ce=>ce.endpointId)),Ee=v[$.id]??null,be=$.contributors.some(ce=>ce.endpointId===Ee)?Ee:null;return m.jsxs("article",{ref:ce=>{I.current[$.id]=ce},className:`publisher-row activity-${$.activityTone}`,children:[m.jsxs("button",{type:"button",className:"publisher-row__toggle",onClick:()=>V($),"aria-expanded":G,children:[m.jsxs("div",{className:"publisher-row__top",children:[m.jsx("div",{className:"publisher-row__identity",children:m.jsx("div",{className:"publisher-row__identity-text",children:m.jsx("p",{className:"mono publisher-topic",title:$.topic,children:$.topic})})}),m.jsx("span",{className:"publisher-caret",children:G?"▾":"▸"})]}),m.jsxs("div",{className:"publisher-row__metrics",children:[m.jsxs("div",{children:[m.jsx("span",{children:"Rate"}),m.jsx("strong",{children:t1($.publishRateHzWindow)})]}),m.jsxs("div",{children:[m.jsx("span",{children:le?`Msgs (${le})`:"Msgs"}),m.jsx("strong",{children:$.messagesPublishedWindow})]}),m.jsxs("div",{children:[m.jsx("span",{children:"Inflight"}),m.jsx("strong",{children:$.numBuffers===null?`${$.inflightCurrent}`:`${$.inflightCurrent} / ${$.numBuffers}`})]}),m.jsxs("div",{children:[m.jsx("span",{children:"Subscribers"}),m.jsx("strong",{children:$.contributors.length})]})]})]}),G?m.jsxs("div",{className:"publisher-row__details",children:[m.jsxs("div",{className:"publisher-kpis",children:[m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Host"}),m.jsx("strong",{children:$.host})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"PID"}),m.jsx("strong",{children:$.pid})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Process"}),m.jsx("strong",{className:"mono",title:$.processId,children:$.processId.slice(0,8)})]})]}),m.jsx("div",{className:"publisher-detail-line",children:m.jsxs("div",{className:"publisher-endpoint",children:[m.jsx("span",{children:"Endpoint"}),m.jsx("code",{className:"mono",title:$.displayEndpointId,children:$.displayEndpointId})]})}),m.jsxs("div",{className:"panel-section",children:[m.jsxs("button",{type:"button",className:`publisher-trace-button ${Y?"is-stop":"is-start"}`,onClick:()=>me($,!Y),disabled:se,"aria-pressed":Y,children:[m.jsx("span",{"aria-hidden":"true",className:"publisher-trace-button__icon",children:Y?"■":"▶"}),m.jsx("span",{children:se?"Applying...":Y?"Stop Profiling Trace":"Start Profiling Trace"})]}),m.jsx("div",{className:"subscriber-section-header",children:m.jsx("h3",{children:"Subscribers"})}),$.contributors.length===0?m.jsx("p",{className:"muted",children:"No subscriber profiling data is available for this topic."}):m.jsx("div",{className:"subscriber-list",children:$.contributors.map(ce=>{const he=be===ce.endpointId;return m.jsxs("article",{className:`subscriber-item ${he?"is-expanded":""}`,children:[m.jsxs("button",{type:"button",className:"subscriber-item__summary",onClick:()=>{const xe=he?null:ce.endpointId;xe&&(_==null||_({unitAddress:ce.unitAddress,endpointId:ce.endpointId,topic:ce.topic})),k(ke=>({...ke,[$.id]:xe}))},children:[m.jsx("div",{className:"subscriber-item__identity",children:m.jsx("p",{className:"mono subscriber-topic-short",title:ce.topic,children:m.jsxs("span",{className:"subscriber-topic-with-color",children:[m.jsx("i",{className:"subscriber-trace-dot",style:{background:Qs(ce.endpointId,we)}}),m.jsx("span",{className:"subscriber-topic-label",children:o1(ce.topic,72)})]})})}),m.jsxs("div",{className:"subscriber-item__metrics",children:[m.jsxs("span",{children:[m.jsx("em",{children:le?`Msgs (${le})`:"Msgs"}),m.jsx("strong",{children:ce.messagesWindow})]}),m.jsxs("span",{children:[m.jsx("em",{children:"Channel"}),m.jsx("strong",{children:ce.channelKindLast})]})]})]}),he?m.jsx("div",{className:"subscriber-item__detail",children:m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"publisher-kpis",children:[m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Host"}),m.jsx("strong",{children:ce.host})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"PID"}),m.jsx("strong",{children:ce.pid})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Process"}),m.jsx("strong",{className:"mono",title:ce.processId,children:ce.processId.slice(0,8)})]})]}),m.jsx("div",{className:"publisher-detail-line",children:m.jsxs("div",{className:"publisher-endpoint",children:[m.jsx("span",{children:"Endpoint"}),m.jsx("code",{className:"mono",title:ce.displayEndpointId,children:ce.displayEndpointId})]})})]})}):null]},ce.id)})})]})]}):null]},$.id)})})]}),H]})}function f1(e){const t=e.field_type.toLowerCase();return Array.isArray(e.choices)&&e.choices.length>0?"choice":t.includes("bool")?"boolean":t.includes("int")||t.includes("float")||t.includes("double")||t.includes("number")?"number":t.includes("str")||t.includes("string")?"text":"json"}function p1(e){return typeof e=="boolean"?"boolean":typeof e=="number"?"number":typeof e=="string"?"text":"json"}function Pf(e,t){if(!e||typeof e!="object")return;const n=t.split(".").filter(s=>s.length>0);let r=e;for(const s of n){if(!r||typeof r!="object"||!(s in r))return;r=r[s]}return r}function Km(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Xm(e,t=""){if(!e||typeof e!="object"||Array.isArray(e))return t.length>0?[t]:[];const n=Object.entries(e);if(n.length===0)return t.length>0?[t]:[];const r=[];for(const[s,o]of n){const i=t.length>0?`${t}.${s}`:s,l=Xm(o,i);l.length===0?r.push(i):r.push(...l)}return r}function h1(e){if(e.mode==="boolean")return!!e.currentValue;if(e.mode==="choice"){const t=e.choices??[],n=Math.max(0,t.findIndex(r=>JSON.stringify(r)===JSON.stringify(e.currentValue)));return String(n)}return e.mode==="number"?typeof e.currentValue=="number"?String(e.currentValue):"":e.mode==="text"?typeof e.currentValue=="string"?e.currentValue:"":Km(e.currentValue)}function m1(e,t){const n=Object.keys(e),r=Object.keys(t);return n.length!==r.length?!1:n.every(s=>e[s]===t[s])}function g1({settings:e,patchSettingField:t,focusComponentAddress:n=null,focusActionId:r=0,onComponentSelect:s}){const o=E.useMemo(()=>e?Object.keys(e).sort():[],[e]),i=E.useMemo(()=>o.join("|"),[o]),l=E.useMemo(()=>new Set(o),[i]),[a,u]=E.useState(null),[c,d]=E.useState(""),[f,h]=E.useState({}),[_,x]=E.useState({}),[N,p]=E.useState({}),[g,y]=E.useState({}),w=E.useRef({}),P=E.useRef({}),L=E.useRef(null);E.useEffect(()=>{a&&!o.includes(a)&&u(null)},[o,a]),E.useEffect(()=>{!n||!l.has(n)||(d(""),u(n),window.requestAnimationFrame(()=>{var v;(v=w.current[n])==null||v.scrollIntoView({block:"nearest",behavior:"smooth"})}))},[l,r,n]);const O=a?e==null?void 0:e[a]:null,A=E.useMemo(()=>(O==null?void 0:O.structured_value)??(O==null?void 0:O.repr_value),[O]),j=E.useMemo(()=>{var M;if(!O)return[];const v=((M=O.settings_schema)==null?void 0:M.fields)??[];if(v.length>0)return v.map(I=>{const S=Pf(A,I.name);return{path:I.name,mode:f1(I),currentValue:S??I.default??null,description:I.description,bounds:I.bounds,choices:I.choices,isInteger:I.field_type.toLowerCase().includes("int")}});const k=Xm(A);return(k.length>0?k:["value"]).map(I=>{const S=I==="value"?A:Pf(A,I);return{path:I,mode:p1(S),currentValue:S,description:null,bounds:null,choices:null,isInteger:Number.isInteger(S)}})},[O,A]),z=!!(O!=null&&O.patchable),U=E.useMemo(()=>{const v=c.trim().toLowerCase();return v?o.filter(k=>{const T=e==null?void 0:e[k],M=typeof(T==null?void 0:T.component_name)=="string"?T.component_name:"",I=typeof(T==null?void 0:T.component_type)=="string"?T.component_type:"";return k.toLowerCase().includes(v)||M.toLowerCase().includes(v)||I.toLowerCase().includes(v)}):o},[o,c,e]);E.useEffect(()=>{const v={};for(const T of j)v[T.path]=h1(T);const k=L.current!==a;h(T=>{if(k)return v;const M={};for(const[I,S]of Object.entries(v)){const b=T[I],F=P.current[I];M[I]=b===void 0||b===F?S:b}return m1(T,M)?T:M}),k&&(x({}),p({}),y({})),P.current=v,L.current=a},[j,a]);const Z=v=>{const k=f[v.path];if(v.mode==="boolean")return!!k;if(v.mode==="choice"){const T=Number.parseInt(String(k),10),M=v.choices??[];if(!Number.isInteger(T)||T<0||T>=M.length)throw new Error("A valid choice must be selected.");return M[T]}if(v.mode==="number"){const T=Number.parseFloat(String(k));if(!Number.isFinite(T))throw new Error("Value must be a valid number.");return v.isInteger?Math.trunc(T):T}if(v.mode==="text")return String(k??"");try{return JSON.parse(String(k??""))}catch{throw new Error("Value must be valid JSON.")}},D=async v=>{if(!a||!z)return;let k;try{k=Z(v)}catch(T){p(M=>({...M,[v.path]:T instanceof Error?T.message:"Invalid field value."})),y(M=>({...M,[v.path]:null}));return}x(T=>({...T,[v.path]:!0})),p(T=>({...T,[v.path]:null})),y(T=>({...T,[v.path]:null}));try{const T=await t(a,v.path,k);y(M=>({...M,[v.path]:`Applied ${T.field_path}`}))}catch(T){p(M=>({...M,[v.path]:T instanceof Error?T.message:"Patch request failed."}))}finally{x(T=>({...T,[v.path]:!1}))}};return m.jsx(el,{children:o.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No settings snapshot entries available."})}):m.jsxs("div",{className:"settings-component-list",children:[m.jsx("div",{className:"settings-search",children:m.jsx("input",{type:"search",placeholder:"Search component, type, or address",value:c,onChange:v=>d(v.target.value)})}),U.map(v=>{const k=(e==null?void 0:e[v])??null,T=a===v,M=!!(k!=null&&k.patchable),I=typeof(k==null?void 0:k.component_name)=="string"&&k.component_name.length>0?k.component_name:v.split("/")[v.split("/").length-1]??v;return m.jsxs("article",{ref:S=>{w.current[v]=S},className:`settings-component-row ${T?"is-expanded":""}`,children:[m.jsxs("button",{type:"button",className:"settings-component-row__toggle","aria-expanded":T,onClick:()=>u(S=>{const b=S===v?null:v;return s==null||s(b),b}),children:[m.jsxs("div",{className:"settings-component-row__identity",children:[m.jsxs("div",{className:"settings-component-row__heading",children:[m.jsx("p",{className:"mono settings-component-title",title:I,children:I}),k!=null&&k.component_type?m.jsx("span",{className:"settings-type",title:k.component_type,children:k.component_type}):null]}),m.jsx("p",{className:"mono settings-component-address",title:v,children:v})]}),m.jsxs("div",{className:"settings-component-row__meta",children:[m.jsx("span",{className:`settings-access ${M?"is-patchable":"is-readonly"}`,children:M?"patchable":"read only"}),m.jsx("span",{className:"publisher-caret",children:T?"▾":"▸"})]})]}),T?m.jsx("section",{className:"settings-detail",children:j.length===0?m.jsx("p",{className:"muted",children:"No fields available for this component."}):m.jsx("div",{className:"settings-fields",children:j.map(S=>{var X,Q;const b=_[S.path]===!0,F=!z,R=f[S.path];return m.jsxs("div",{className:`settings-field-row ${F?"is-disabled":""}`,children:[m.jsxs("div",{className:"settings-field-row__meta",children:[m.jsx("label",{className:"mono",children:S.path}),S.description?m.jsx("p",{className:"muted",children:S.description}):null,S.bounds?m.jsxs("p",{className:"muted",children:["Bounds: [",S.bounds[0]??"-inf",", ",S.bounds[1]??"+inf","]"]}):null]}),m.jsxs("div",{className:`settings-field-row__control ${S.mode==="boolean"?"is-boolean":""}`,children:[S.mode==="boolean"?m.jsxs("label",{className:"patch-checkbox",children:[m.jsx("input",{type:"checkbox",checked:!!R,onChange:re=>h(J=>({...J,[S.path]:re.target.checked})),disabled:F||b}),m.jsx("span",{children:"Enabled"})]}):null,S.mode==="choice"?m.jsx("select",{value:String(R??"0"),onChange:re=>h(J=>({...J,[S.path]:re.target.value})),disabled:F||b,children:(S.choices??[]).map((re,J)=>m.jsx("option",{value:String(J),children:Km(re)},`${S.path}-${J}`))}):null,S.mode==="number"?m.jsx("input",{type:"number",value:String(R??""),min:((X=S.bounds)==null?void 0:X[0])??void 0,max:((Q=S.bounds)==null?void 0:Q[1])??void 0,step:"any",onChange:re=>h(J=>({...J,[S.path]:re.target.value})),disabled:F||b}):null,S.mode==="text"?m.jsx("input",{type:"text",value:String(R??""),onChange:re=>h(J=>({...J,[S.path]:re.target.value})),disabled:F||b}):null,S.mode==="json"?m.jsx("textarea",{value:String(R??""),rows:4,spellCheck:!1,className:"mono",onChange:re=>h(J=>({...J,[S.path]:re.target.value})),disabled:F||b}):null,m.jsx("button",{type:"button",onClick:()=>{D(S)},disabled:F||b,children:b?"Applying...":"Apply"})]}),g[S.path]?m.jsx("p",{className:"patch-status ok",children:g[S.path]}):null,N[S.path]?m.jsx("p",{className:"patch-status err",children:N[S.path]}):null]},S.path)})})}):null]},v)})]})})}function et(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?N1:E1;Jm.useSyncExternalStore=as.useSyncExternalStore!==void 0?as.useSyncExternalStore:T1;qm.exports=Jm;var k1=qm.exports;/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ml=E,C1=k1;function I1(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var b1=typeof Object.is=="function"?Object.is:I1,P1=C1.useSyncExternalStore,A1=Ml.useRef,M1=Ml.useEffect,R1=Ml.useMemo,O1=Ml.useDebugValue;Zm.useSyncExternalStoreWithSelector=function(e,t,n,r,s){var o=A1(null);if(o.current===null){var i={hasValue:!1,value:null};o.current=i}else i=o.current;o=R1(function(){function a(h){if(!u){if(u=!0,c=h,h=r(h),s!==void 0&&i.hasValue){var _=i.value;if(s(_,h))return d=_}return d=h}if(_=d,b1(c,h))return _;var x=r(h);return s!==void 0&&s(_,x)?(c=h,_):(c=h,d=x)}var u=!1,c,d,f=n===void 0?null:n;return[function(){return a(t())},f===null?void 0:function(){return a(f())}]},[t,n,r,s]);var l=P1(e,o[0],o[1]);return M1(function(){i.hasValue=!0,i.value=l},[l]),O1(l),l};Qm.exports=Zm;var L1=Qm.exports;const $1=Ap(L1),B1={},Af=e=>{let t;const n=new Set,r=(c,d)=>{const f=typeof c=="function"?c(t):c;if(!Object.is(f,t)){const h=t;t=d??(typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(_=>_(t,h))}},s=()=>t,a={setState:r,getState:s,getInitialState:()=>u,subscribe:c=>(n.add(c),()=>n.delete(c)),destroy:()=>{(B1?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},u=t=e(r,s,a);return a},j1=e=>e?Af(e):Af,{useDebugValue:F1}=W,{useSyncExternalStoreWithSelector:z1}=$1,D1=e=>e;function eg(e,t=D1,n){const r=z1(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return F1(r),r}const Mf=(e,t)=>{const n=j1(e),r=(s,o=t)=>eg(n,s,o);return Object.assign(r,n),r},U1=(e,t)=>e?Mf(e,t):Mf;function Qe(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,s]of e)if(!Object.is(s,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}var H1={value:()=>{}};function Rl(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(s+1),n=n.slice(0,s)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}Ti.prototype=Rl.prototype={constructor:Ti,on:function(e,t){var n=this._,r=W1(e+"",n),s,o=-1,i=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(s),r=0,s,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),Of.hasOwnProperty(t)?{space:Of[t],local:e}:e}function G1(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Mu&&t.documentElement.namespaceURI===Mu?t.createElement(e):t.createElementNS(n,e)}}function Y1(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function tg(e){var t=Ol(e);return(t.local?Y1:G1)(t)}function K1(){}function Wc(e){return e==null?K1:function(){return this.querySelector(e)}}function X1(e){typeof e!="function"&&(e=Wc(e));for(var t=this._groups,n=t.length,r=new Array(n),s=0;s=y&&(y=g+1);!(P=N[y])&&++y<_;);w._next=P||null}}return i=new Et(i,r),i._enter=l,i._exit=a,i}function mx(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function gx(){return new Et(this._exit||this._groups.map(og),this._parents)}function yx(e,t,n){var r=this.enter(),s=this,o=this.exit();return typeof e=="function"?(r=e(r),r&&(r=r.selection())):r=r.append(e+""),t!=null&&(s=t(s),s&&(s=s.selection())),n==null?o.remove():n(o),r&&s?r.merge(s).order():s}function vx(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,s=n.length,o=r.length,i=Math.min(s,o),l=new Array(s),a=0;a=0;)(i=r[s])&&(o&&i.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(i,o),o=i);return this}function xx(e){e||(e=wx);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,s=new Array(r),o=0;ot?1:e>=t?0:NaN}function Sx(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Ex(){return Array.from(this)}function Nx(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?Lx:typeof t=="function"?Bx:$x)(e,t,n??"")):us(this.node(),e)}function us(e,t){return e.style.getPropertyValue(t)||ig(e).getComputedStyle(e,null).getPropertyValue(t)}function Fx(e){return function(){delete this[e]}}function zx(e,t){return function(){this[e]=t}}function Dx(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Ux(e,t){return arguments.length>1?this.each((t==null?Fx:typeof t=="function"?Dx:zx)(e,t)):this.node()[e]}function lg(e){return e.trim().split(/^|\s+/)}function Vc(e){return e.classList||new ag(e)}function ag(e){this._node=e,this._names=lg(e.getAttribute("class")||"")}ag.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function ug(e,t){for(var n=Vc(e),r=-1,s=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function gw(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,s=t.length,o;n()=>e;function Ru(e,{sourceEvent:t,subject:n,target:r,identifier:s,active:o,x:i,y:l,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:s,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:i,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}Ru.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function kw(e){return!e.ctrlKey&&!e.button}function Cw(){return this.parentNode}function Iw(e,t){return t??{x:e.x,y:e.y}}function bw(){return navigator.maxTouchPoints||"ontouchstart"in this}function Pw(){var e=kw,t=Cw,n=Iw,r=bw,s={},o=Rl("start","drag","end"),i=0,l,a,u,c,d=0;function f(w){w.on("mousedown.drag",h).filter(r).on("touchstart.drag",N).on("touchmove.drag",p,Tw).on("touchend.drag touchcancel.drag",g).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(w,P){if(!(c||!e.call(this,w,P))){var L=y(this,t.call(this,w,P),w,P,"mouse");L&&(It(w.view).on("mousemove.drag",_,yo).on("mouseup.drag",x,yo),pg(w.view),va(w),u=!1,l=w.clientX,a=w.clientY,L("start",w))}}function _(w){if(Zr(w),!u){var P=w.clientX-l,L=w.clientY-a;u=P*P+L*L>d}s.mouse("drag",w)}function x(w){It(w.view).on("mousemove.drag mouseup.drag",null),hg(w.view,u),Zr(w),s.mouse("end",w)}function N(w,P){if(e.call(this,w,P)){var L=w.changedTouches,O=t.call(this,w,P),A=L.length,j,z;for(j=0;j>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Jo(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Jo(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Mw.exec(e))?new mt(t[1],t[2],t[3],1):(t=Rw.exec(e))?new mt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Ow.exec(e))?Jo(t[1],t[2],t[3],t[4]):(t=Lw.exec(e))?Jo(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=$w.exec(e))?Df(t[1],t[2]/100,t[3]/100,1):(t=Bw.exec(e))?Df(t[1],t[2]/100,t[3]/100,t[4]):Lf.hasOwnProperty(e)?jf(Lf[e]):e==="transparent"?new mt(NaN,NaN,NaN,0):null}function jf(e){return new mt(e>>16&255,e>>8&255,e&255,1)}function Jo(e,t,n,r){return r<=0&&(e=t=n=NaN),new mt(e,t,n,r)}function zw(e){return e instanceof Ao||(e=xo(e)),e?(e=e.rgb(),new mt(e.r,e.g,e.b,e.opacity)):new mt}function Ou(e,t,n,r){return arguments.length===1?zw(e):new mt(e,t,n,r??1)}function mt(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Gc(mt,Ou,mg(Ao,{brighter(e){return e=e==null?ol:Math.pow(ol,e),new mt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new mt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new mt(ur(this.r),ur(this.g),ur(this.b),il(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ff,formatHex:Ff,formatHex8:Dw,formatRgb:zf,toString:zf}));function Ff(){return`#${or(this.r)}${or(this.g)}${or(this.b)}`}function Dw(){return`#${or(this.r)}${or(this.g)}${or(this.b)}${or((isNaN(this.opacity)?1:this.opacity)*255)}`}function zf(){const e=il(this.opacity);return`${e===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${e===1?")":`, ${e})`}`}function il(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ur(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function or(e){return e=ur(e),(e<16?"0":"")+e.toString(16)}function Df(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new zt(e,t,n,r)}function gg(e){if(e instanceof zt)return new zt(e.h,e.s,e.l,e.opacity);if(e instanceof Ao||(e=xo(e)),!e)return new zt;if(e instanceof zt)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,s=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,l=o-s,a=(o+s)/2;return l?(t===o?i=(n-r)/l+(n0&&a<1?0:i,new zt(i,l,a,e.opacity)}function Uw(e,t,n,r){return arguments.length===1?gg(e):new zt(e,t,n,r??1)}function zt(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Gc(zt,Uw,mg(Ao,{brighter(e){return e=e==null?ol:Math.pow(ol,e),new zt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new zt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,s=2*n-r;return new mt(_a(e>=240?e-240:e+120,s,r),_a(e,s,r),_a(e<120?e+240:e-120,s,r),this.opacity)},clamp(){return new zt(Uf(this.h),ei(this.s),ei(this.l),il(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=il(this.opacity);return`${e===1?"hsl(":"hsla("}${Uf(this.h)}, ${ei(this.s)*100}%, ${ei(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Uf(e){return e=(e||0)%360,e<0?e+360:e}function ei(e){return Math.max(0,Math.min(1,e||0))}function _a(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const yg=e=>()=>e;function Hw(e,t){return function(n){return e+n*t}}function Ww(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Vw(e){return(e=+e)==1?vg:function(t,n){return n-t?Ww(t,n,e):yg(isNaN(t)?n:t)}}function vg(e,t){var n=t-e;return n?Hw(e,n):yg(isNaN(e)?t:e)}const Hf=function e(t){var n=Vw(t);function r(s,o){var i=n((s=Ou(s)).r,(o=Ou(o)).r),l=n(s.g,o.g),a=n(s.b,o.b),u=vg(s.opacity,o.opacity);return function(c){return s.r=i(c),s.g=l(c),s.b=a(c),s.opacity=u(c),s+""}}return r.gamma=e,r}(1);function kn(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Lu=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,xa=new RegExp(Lu.source,"g");function Gw(e){return function(){return e}}function Yw(e){return function(t){return e(t)+""}}function Kw(e,t){var n=Lu.lastIndex=xa.lastIndex=0,r,s,o,i=-1,l=[],a=[];for(e=e+"",t=t+"";(r=Lu.exec(e))&&(s=xa.exec(t));)(o=s.index)>n&&(o=t.slice(n,o),l[i]?l[i]+=o:l[++i]=o),(r=r[0])===(s=s[0])?l[i]?l[i]+=s:l[++i]=s:(l[++i]=null,a.push({i,x:kn(r,s)})),n=xa.lastIndex;return n180?c+=360:c-u>180&&(u+=360),f.push({i:d.push(s(d)+"rotate(",null,r)-2,x:kn(u,c)})):c&&d.push(s(d)+"rotate("+c+r)}function l(u,c,d,f){u!==c?f.push({i:d.push(s(d)+"skewX(",null,r)-2,x:kn(u,c)}):c&&d.push(s(d)+"skewX("+c+r)}function a(u,c,d,f,h,_){if(u!==d||c!==f){var x=h.push(s(h)+"scale(",null,",",null,")");_.push({i:x-4,x:kn(u,d)},{i:x-2,x:kn(c,f)})}else(d!==1||f!==1)&&h.push(s(h)+"scale("+d+","+f+")")}return function(u,c){var d=[],f=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,d,f),i(u.rotate,c.rotate,d,f),l(u.skewX,c.skewX,d,f),a(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,f),u=c=null,function(h){for(var _=-1,x=f.length,N;++_=0&&e._call.call(void 0,t),e=e._next;--cs}function Gf(){yr=(al=wo.now())+Ll,cs=Fs=0;try{sS()}finally{cs=0,iS(),yr=0}}function oS(){var e=wo.now(),t=e-al;t>wg&&(Ll-=t,al=e)}function iS(){for(var e,t=ll,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:ll=n);zs=e,Bu(r)}function Bu(e){if(!cs){Fs&&(Fs=clearTimeout(Fs));var t=e-yr;t>24?(e<1/0&&(Fs=setTimeout(Gf,e-wo.now()-Ll)),Ts&&(Ts=clearInterval(Ts))):(Ts||(al=wo.now(),Ts=setInterval(oS,wg)),cs=1,Sg(Gf))}}function Yf(e,t,n){var r=new ul;return t=t==null?0:+t,r.restart(s=>{r.stop(),e(s+t)},t,n),r}var lS=Rl("start","end","cancel","interrupt"),aS=[],Ng=0,Kf=1,ju=2,ki=3,Xf=4,Fu=5,Ci=6;function $l(e,t,n,r,s,o){var i=e.__transition;if(!i)e.__transition={};else if(n in i)return;uS(e,n,{name:t,index:r,group:s,on:lS,tween:aS,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Ng})}function Kc(e,t){var n=Gt(e,t);if(n.state>Ng)throw new Error("too late; already scheduled");return n}function en(e,t){var n=Gt(e,t);if(n.state>ki)throw new Error("too late; already running");return n}function Gt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function uS(e,t,n){var r=e.__transition,s;r[t]=n,n.timer=Eg(o,0,n.time);function o(u){n.state=Kf,n.timer.restart(i,n.delay,n.time),n.delay<=u&&i(u-n.delay)}function i(u){var c,d,f,h;if(n.state!==Kf)return a();for(c in r)if(h=r[c],h.name===n.name){if(h.state===ki)return Yf(i);h.state===Xf?(h.state=Ci,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[c]):+cju&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function FS(e,t,n){var r,s,o=jS(t)?Kc:en;return function(){var i=o(this,e),l=i.on;l!==r&&(s=(r=l).copy()).on(t,n),i.on=s}}function zS(e,t){var n=this._id;return arguments.length<2?Gt(this.node(),n).on.on(e):this.each(FS(n,e,t))}function DS(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function US(){return this.on("end.remove",DS(this._id))}function HS(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Wc(e));for(var r=this._groups,s=r.length,o=new Array(s),i=0;i()=>e;function hE(e,{sourceEvent:t,target:n,transform:r,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:s}})}function cn(e,t,n){this.k=e,this.x=t,this.y=n}cn.prototype={constructor:cn,scale:function(e){return e===1?this:new cn(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new cn(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fn=new cn(1,0,0);cn.prototype;function wa(e){e.stopImmediatePropagation()}function ks(e){e.preventDefault(),e.stopImmediatePropagation()}function mE(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function gE(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Qf(){return this.__zoom||fn}function yE(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function vE(){return navigator.maxTouchPoints||"ontouchstart"in this}function _E(e,t,n){var r=e.invertX(t[0][0])-n[0][0],s=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],i=e.invertY(t[1][1])-n[1][1];return e.translate(s>r?(r+s)/2:Math.min(0,r)||Math.max(0,s),i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i))}function Ig(){var e=mE,t=gE,n=_E,r=yE,s=vE,o=[0,1/0],i=[[-1/0,-1/0],[1/0,1/0]],l=250,a=nS,u=Rl("start","zoom","end"),c,d,f,h=500,_=150,x=0,N=10;function p(v){v.property("__zoom",Qf).on("wheel.zoom",A,{passive:!1}).on("mousedown.zoom",j).on("dblclick.zoom",z).filter(s).on("touchstart.zoom",U).on("touchmove.zoom",Z).on("touchend.zoom touchcancel.zoom",D).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}p.transform=function(v,k,T,M){var I=v.selection?v.selection():v;I.property("__zoom",Qf),v!==I?P(v,k,T,M):I.interrupt().each(function(){L(this,arguments).event(M).start().zoom(null,typeof k=="function"?k.apply(this,arguments):k).end()})},p.scaleBy=function(v,k,T,M){p.scaleTo(v,function(){var I=this.__zoom.k,S=typeof k=="function"?k.apply(this,arguments):k;return I*S},T,M)},p.scaleTo=function(v,k,T,M){p.transform(v,function(){var I=t.apply(this,arguments),S=this.__zoom,b=T==null?w(I):typeof T=="function"?T.apply(this,arguments):T,F=S.invert(b),R=typeof k=="function"?k.apply(this,arguments):k;return n(y(g(S,R),b,F),I,i)},T,M)},p.translateBy=function(v,k,T,M){p.transform(v,function(){return n(this.__zoom.translate(typeof k=="function"?k.apply(this,arguments):k,typeof T=="function"?T.apply(this,arguments):T),t.apply(this,arguments),i)},null,M)},p.translateTo=function(v,k,T,M,I){p.transform(v,function(){var S=t.apply(this,arguments),b=this.__zoom,F=M==null?w(S):typeof M=="function"?M.apply(this,arguments):M;return n(fn.translate(F[0],F[1]).scale(b.k).translate(typeof k=="function"?-k.apply(this,arguments):-k,typeof T=="function"?-T.apply(this,arguments):-T),S,i)},M,I)};function g(v,k){return k=Math.max(o[0],Math.min(o[1],k)),k===v.k?v:new cn(k,v.x,v.y)}function y(v,k,T){var M=k[0]-T[0]*v.k,I=k[1]-T[1]*v.k;return M===v.x&&I===v.y?v:new cn(v.k,M,I)}function w(v){return[(+v[0][0]+ +v[1][0])/2,(+v[0][1]+ +v[1][1])/2]}function P(v,k,T,M){v.on("start.zoom",function(){L(this,arguments).event(M).start()}).on("interrupt.zoom end.zoom",function(){L(this,arguments).event(M).end()}).tween("zoom",function(){var I=this,S=arguments,b=L(I,S).event(M),F=t.apply(I,S),R=T==null?w(F):typeof T=="function"?T.apply(I,S):T,X=Math.max(F[1][0]-F[0][0],F[1][1]-F[0][1]),Q=I.__zoom,re=typeof k=="function"?k.apply(I,S):k,J=a(Q.invert(R).concat(X/Q.k),re.invert(R).concat(X/re.k));return function(fe){if(fe===1)fe=re;else{var V=J(fe),me=X/V[2];fe=new cn(me,R[0]-V[0]*me,R[1]-V[1]*me)}b.zoom(null,fe)}})}function L(v,k,T){return!T&&v.__zooming||new O(v,k)}function O(v,k){this.that=v,this.args=k,this.active=0,this.sourceEvent=null,this.extent=t.apply(v,k),this.taps=0}O.prototype={event:function(v){return v&&(this.sourceEvent=v),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(v,k){return this.mouse&&v!=="mouse"&&(this.mouse[1]=k.invert(this.mouse[0])),this.touch0&&v!=="touch"&&(this.touch0[1]=k.invert(this.touch0[0])),this.touch1&&v!=="touch"&&(this.touch1[1]=k.invert(this.touch1[0])),this.that.__zoom=k,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(v){var k=It(this.that).datum();u.call(v,this.that,new hE(v,{sourceEvent:this.sourceEvent,target:p,transform:this.that.__zoom,dispatch:u}),k)}};function A(v,...k){if(!e.apply(this,arguments))return;var T=L(this,k).event(v),M=this.__zoom,I=Math.max(o[0],Math.min(o[1],M.k*Math.pow(2,r.apply(this,arguments)))),S=jt(v);if(T.wheel)(T.mouse[0][0]!==S[0]||T.mouse[0][1]!==S[1])&&(T.mouse[1]=M.invert(T.mouse[0]=S)),clearTimeout(T.wheel);else{if(M.k===I)return;T.mouse=[S,M.invert(S)],Ii(this),T.start()}ks(v),T.wheel=setTimeout(b,_),T.zoom("mouse",n(y(g(M,I),T.mouse[0],T.mouse[1]),T.extent,i));function b(){T.wheel=null,T.end()}}function j(v,...k){if(f||!e.apply(this,arguments))return;var T=v.currentTarget,M=L(this,k,!0).event(v),I=It(v.view).on("mousemove.zoom",R,!0).on("mouseup.zoom",X,!0),S=jt(v,T),b=v.clientX,F=v.clientY;pg(v.view),wa(v),M.mouse=[S,this.__zoom.invert(S)],Ii(this),M.start();function R(Q){if(ks(Q),!M.moved){var re=Q.clientX-b,J=Q.clientY-F;M.moved=re*re+J*J>x}M.event(Q).zoom("mouse",n(y(M.that.__zoom,M.mouse[0]=jt(Q,T),M.mouse[1]),M.extent,i))}function X(Q){I.on("mousemove.zoom mouseup.zoom",null),hg(Q.view,M.moved),ks(Q),M.event(Q).end()}}function z(v,...k){if(e.apply(this,arguments)){var T=this.__zoom,M=jt(v.changedTouches?v.changedTouches[0]:v,this),I=T.invert(M),S=T.k*(v.shiftKey?.5:2),b=n(y(g(T,S),M,I),t.apply(this,k),i);ks(v),l>0?It(this).transition().duration(l).call(P,b,M,v):It(this).call(p.transform,b,M,v)}}function U(v,...k){if(e.apply(this,arguments)){var T=v.touches,M=T.length,I=L(this,k,v.changedTouches.length===M).event(v),S,b,F,R;for(wa(v),b=0;b"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`},bg=vn.error001();function Ie(e,t){const n=E.useContext(Bl);if(n===null)throw new Error(bg);return eg(n,e,t)}const Ye=()=>{const e=E.useContext(Bl);if(e===null)throw new Error(bg);return E.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},wE=e=>e.userSelectionActive?"none":"all";function Qc({position:e,children:t,className:n,style:r,...s}){const o=Ie(wE),i=`${e}`.split("-");return W.createElement("div",{className:et(["react-flow__panel",n,...i]),style:{...r,pointerEvents:o},...s},t)}function SE({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:W.createElement(Qc,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro"},W.createElement("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution"},"React Flow"))}const EE=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:s=!0,labelBgStyle:o={},labelBgPadding:i=[2,4],labelBgBorderRadius:l=2,children:a,className:u,...c})=>{const d=E.useRef(null),[f,h]=E.useState({x:0,y:0,width:0,height:0}),_=et(["react-flow__edge-textwrapper",u]);return E.useEffect(()=>{if(d.current){const x=d.current.getBBox();h({x:x.x,y:x.y,width:x.width,height:x.height})}},[n]),typeof n>"u"||!n?null:W.createElement("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:_,visibility:f.width?"visible":"hidden",...c},s&&W.createElement("rect",{width:f.width+2*i[0],x:-i[0],y:-i[1],height:f.height+2*i[1],className:"react-flow__edge-textbg",style:o,rx:l,ry:l}),W.createElement("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r},n),a)};var NE=E.memo(EE);const Zc=e=>({width:e.offsetWidth,height:e.offsetHeight}),ds=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),qc=(e={x:0,y:0},t)=>({x:ds(e.x,t[0][0],t[1][0]),y:ds(e.y,t[0][1],t[1][1])}),Zf=(e,t,n)=>en?-ds(Math.abs(e-n),1,50)/50:0,Pg=(e,t)=>{const n=Zf(e.x,35,t.width-35)*20,r=Zf(e.y,35,t.height-35)*20;return[n,r]},Ag=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Mg=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),So=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),Rg=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),qf=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),TE=(e,t)=>Rg(Mg(So(e),So(t))),zu=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},kE=e=>Pt(e.width)&&Pt(e.height)&&Pt(e.x)&&Pt(e.y),Pt=e=>!isNaN(e)&&isFinite(e),De=Symbol.for("internals"),Og=["Enter"," ","Escape"],CE=(e,t)=>{},IE=e=>"nativeEvent"in e;function Du(e){var s,o;const t=IE(e)?e.nativeEvent:e,n=((o=(s=t.composedPath)==null?void 0:s.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const Lg=e=>"clientX"in e,Dn=(e,t)=>{var o,i;const n=Lg(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,s=n?e.clientY:(i=e.touches)==null?void 0:i[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:s-((t==null?void 0:t.top)??0)}},cl=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0},Mo=({id:e,path:t,labelX:n,labelY:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h=20})=>W.createElement(W.Fragment,null,W.createElement("path",{id:e,style:c,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&W.createElement("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),s&&Pt(n)&&Pt(r)?W.createElement(NE,{x:n,y:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u}):null);Mo.displayName="BaseEdge";function Cs(e,t,n){return n===void 0?n:r=>{const s=t().edges.find(o=>o.id===e);s&&n(r,{...s})}}function $g({sourceX:e,sourceY:t,targetX:n,targetY:r}){const s=Math.abs(n-e)/2,o=n{const[N,p,g]=jg({sourceX:e,sourceY:t,sourcePosition:s,targetX:n,targetY:r,targetPosition:o});return W.createElement(Mo,{path:N,labelX:p,labelY:g,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:_,interactionWidth:x})});Jc.displayName="SimpleBezierEdge";const ep={[ie.Left]:{x:-1,y:0},[ie.Right]:{x:1,y:0},[ie.Top]:{x:0,y:-1},[ie.Bottom]:{x:0,y:1}},bE=({source:e,sourcePosition:t=ie.Bottom,target:n})=>t===ie.Left||t===ie.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function PE({source:e,sourcePosition:t=ie.Bottom,target:n,targetPosition:r=ie.Top,center:s,offset:o}){const i=ep[t],l=ep[r],a={x:e.x+i.x*o,y:e.y+i.y*o},u={x:n.x+l.x*o,y:n.y+l.y*o},c=bE({source:a,sourcePosition:t,target:u}),d=c.x!==0?"x":"y",f=c[d];let h=[],_,x;const N={x:0,y:0},p={x:0,y:0},[g,y,w,P]=$g({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(i[d]*l[d]===-1){_=s.x??g,x=s.y??y;const O=[{x:_,y:a.y},{x:_,y:u.y}],A=[{x:a.x,y:x},{x:u.x,y:x}];i[d]===f?h=d==="x"?O:A:h=d==="x"?A:O}else{const O=[{x:a.x,y:u.y}],A=[{x:u.x,y:a.y}];if(d==="x"?h=i.x===f?A:O:h=i.y===f?O:A,t===r){const D=Math.abs(e[d]-n[d]);if(D<=o){const v=Math.min(o-1,o-D);i[d]===f?N[d]=(a[d]>e[d]?-1:1)*v:p[d]=(u[d]>n[d]?-1:1)*v}}if(t!==r){const D=d==="x"?"y":"x",v=i[d]===l[D],k=a[D]>u[D],T=a[D]=Z?(_=(j.x+z.x)/2,x=h[0].y):(_=h[0].x,x=(j.y+z.y)/2)}return[[e,{x:a.x+N.x,y:a.y+N.y},...h,{x:u.x+p.x,y:u.y+p.y},n],_,x,w,P]}function AE(e,t,n,r){const s=Math.min(tp(e,t)/2,tp(t,n)/2,r),{x:o,y:i}=t;if(e.x===o&&o===n.x||e.y===i&&i===n.y)return`L${o} ${i}`;if(e.y===i){const u=e.x{let y="";return g>0&&g{const[p,g,y]=Uu({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:x==null?void 0:x.borderRadius,offset:x==null?void 0:x.offset});return W.createElement(Mo,{path:p,labelX:g,labelY:y,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:h,markerStart:_,interactionWidth:N})});jl.displayName="SmoothStepEdge";const ed=E.memo(e=>{var t;return W.createElement(jl,{...e,pathOptions:E.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});ed.displayName="StepEdge";function ME({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[s,o,i,l]=$g({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,s,o,i,l]}const td=E.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[_,x,N]=ME({sourceX:e,sourceY:t,targetX:n,targetY:r});return W.createElement(Mo,{path:_,labelX:x,labelY:N,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})});td.displayName="StraightEdge";function ri(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function np({pos:e,x1:t,y1:n,x2:r,y2:s,c:o}){switch(e){case ie.Left:return[t-ri(t-r,o),n];case ie.Right:return[t+ri(r-t,o),n];case ie.Top:return[t,n-ri(n-s,o)];case ie.Bottom:return[t,n+ri(s-n,o)]}}function Fg({sourceX:e,sourceY:t,sourcePosition:n=ie.Bottom,targetX:r,targetY:s,targetPosition:o=ie.Top,curvature:i=.25}){const[l,a]=np({pos:n,x1:e,y1:t,x2:r,y2:s,c:i}),[u,c]=np({pos:o,x1:r,y1:s,x2:e,y2:t,c:i}),[d,f,h,_]=Bg({sourceX:e,sourceY:t,targetX:r,targetY:s,sourceControlX:l,sourceControlY:a,targetControlX:u,targetControlY:c});return[`M${e},${t} C${l},${a} ${u},${c} ${r},${s}`,d,f,h,_]}const dl=E.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:s=ie.Bottom,targetPosition:o=ie.Top,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:_,pathOptions:x,interactionWidth:N})=>{const[p,g,y]=Fg({sourceX:e,sourceY:t,sourcePosition:s,targetX:n,targetY:r,targetPosition:o,curvature:x==null?void 0:x.curvature});return W.createElement(Mo,{path:p,labelX:g,labelY:y,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:_,interactionWidth:N})});dl.displayName="BezierEdge";const nd=E.createContext(null),RE=nd.Provider;nd.Consumer;const OE=()=>E.useContext(nd),LE=e=>"id"in e&&"source"in e&&"target"in e,$E=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,Hu=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,BE=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),jE=(e,t)=>{if(!e.source||!e.target)return t;let n;return LE(e)?n={...e}:n={...e,id:$E(e)},BE(n,t)?t:t.concat(n)},Wu=({x:e,y:t},[n,r,s],o,[i,l])=>{const a={x:(e-n)/s,y:(t-r)/s};return o?{x:i*Math.round(a.x/i),y:l*Math.round(a.y/l)}:a},zg=({x:e,y:t},[n,r,s])=>({x:e*s+n,y:t*s+r}),cr=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],s={x:e.position.x-n,y:e.position.y-r};return{...s,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:s}},Fl=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,s)=>{const{x:o,y:i}=cr(s,t).positionAbsolute;return Mg(r,So({x:o,y:i,width:s.width||0,height:s.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Rg(n)},Dg=(e,t,[n,r,s]=[0,0,1],o=!1,i=!1,l=[0,0])=>{const a={x:(t.x-n)/s,y:(t.y-r)/s,width:t.width/s,height:t.height/s},u=[];return e.forEach(c=>{const{width:d,height:f,selectable:h=!0,hidden:_=!1}=c;if(i&&!h||_)return!1;const{positionAbsolute:x}=cr(c,l),N={x:x.x,y:x.y,width:d||0,height:f||0},p=zu(a,N),g=typeof d>"u"||typeof f>"u"||d===null||f===null,y=o&&p>0,w=(d||0)*(f||0);(g||y||p>=w||c.dragging)&&u.push(c)}),u},Ug=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},Hg=(e,t,n,r,s,o=.1)=>{const i=t/(e.width*(1+o)),l=n/(e.height*(1+o)),a=Math.min(i,l),u=ds(a,r,s),c=e.x+e.width/2,d=e.y+e.height/2,f=t/2-c*u,h=n/2-d*u;return{x:f,y:h,zoom:u}},er=(e,t=0)=>e.transition().duration(t);function rp(e,t,n,r){return(t[n]||[]).reduce((s,o)=>{var i,l;return`${e.id}-${o.id}-${n}`!==r&&s.push({id:o.id||null,type:n,nodeId:e.id,x:(((i=e.positionAbsolute)==null?void 0:i.x)??0)+o.x+o.width/2,y:(((l=e.positionAbsolute)==null?void 0:l.y)??0)+o.y+o.height/2}),s},[])}function FE(e,t,n,r,s,o){const{x:i,y:l}=Dn(e),u=t.elementsFromPoint(i,l).find(_=>_.classList.contains("react-flow__handle"));if(u){const _=u.getAttribute("data-nodeid");if(_){const x=rd(void 0,u),N=u.getAttribute("data-handleid"),p=o({nodeId:_,id:N,type:x});if(p){const g=s.find(y=>y.nodeId===_&&y.type===x&&y.id===N);return{handle:{id:N,type:x,nodeId:_,x:(g==null?void 0:g.x)||n.x,y:(g==null?void 0:g.y)||n.y},validHandleResult:p}}}}let c=[],d=1/0;if(s.forEach(_=>{const x=Math.sqrt((_.x-n.x)**2+(_.y-n.y)**2);if(x<=r){const N=o(_);x<=d&&(x_.isValid),h=c.some(({handle:_})=>_.type==="target");return c.find(({handle:_,validHandleResult:x})=>h?_.type==="target":f?x.isValid:!0)||c[0]}const zE={source:null,target:null,sourceHandle:null,targetHandle:null},Wg=()=>({handleDomNode:null,isValid:!1,connection:zE,endHandle:null});function Vg(e,t,n,r,s,o,i){const l=s==="target",a=i.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),u={...Wg(),handleDomNode:a};if(a){const c=rd(void 0,a),d=a.getAttribute("data-nodeid"),f=a.getAttribute("data-handleid"),h=a.classList.contains("connectable"),_=a.classList.contains("connectableend"),x={source:l?d:n,sourceHandle:l?f:r,target:l?n:d,targetHandle:l?r:f};u.connection=x,h&&_&&(t===vr.Strict?l&&c==="source"||!l&&c==="target":d!==n||f!==r)&&(u.endHandle={nodeId:d,handleId:f,type:c},u.isValid=o(x))}return u}function DE({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((s,o)=>{if(o[De]){const{handleBounds:i}=o[De];let l=[],a=[];i&&(l=rp(o,i,"source",`${t}-${n}-${r}`),a=rp(o,i,"target",`${t}-${n}-${r}`)),s.push(...l,...a)}return s},[])}function rd(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function Sa(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function UE(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Gg({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:s,getState:o,setState:i,isValidConnection:l,edgeUpdaterType:a,onReconnectEnd:u}){const c=Ag(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:_,onConnectStart:x,panBy:N,getNodes:p,cancelConnection:g}=o();let y=0,w;const{x:P,y:L}=Dn(e),O=c==null?void 0:c.elementFromPoint(P,L),A=rd(a,O),j=f==null?void 0:f.getBoundingClientRect();if(!j||!A)return;let z,U=Dn(e,j),Z=!1,D=null,v=!1,k=null;const T=DE({nodes:p(),nodeId:n,handleId:t,handleType:A}),M=()=>{if(!h)return;const[b,F]=Pg(U,j);N({x:b,y:F}),y=requestAnimationFrame(M)};i({connectionPosition:U,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:A,connectionStartHandle:{nodeId:n,handleId:t,type:A},connectionEndHandle:null}),x==null||x(e,{nodeId:n,handleId:t,handleType:A});function I(b){const{transform:F}=o();U=Dn(b,j);const{handle:R,validHandleResult:X}=FE(b,c,Wu(U,F,!1,[1,1]),_,T,Q=>Vg(Q,d,n,t,s?"target":"source",l,c));if(w=R,Z||(M(),Z=!0),k=X.handleDomNode,D=X.connection,v=X.isValid,i({connectionPosition:w&&v?zg({x:w.x,y:w.y},F):U,connectionStatus:UE(!!w,v),connectionEndHandle:X.endHandle}),!w&&!v&&!k)return Sa(z);D.source!==D.target&&k&&(Sa(z),z=k,k.classList.add("connecting","react-flow__handle-connecting"),k.classList.toggle("valid",v),k.classList.toggle("react-flow__handle-valid",v))}function S(b){var F,R;(w||k)&&D&&v&&(r==null||r(D)),(R=(F=o()).onConnectEnd)==null||R.call(F,b),a&&(u==null||u(b)),Sa(z),g(),cancelAnimationFrame(y),Z=!1,v=!1,D=null,k=null,c.removeEventListener("mousemove",I),c.removeEventListener("mouseup",S),c.removeEventListener("touchmove",I),c.removeEventListener("touchend",S)}c.addEventListener("mousemove",I),c.addEventListener("mouseup",S),c.addEventListener("touchmove",I),c.addEventListener("touchend",S)}const sp=()=>!0,HE=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),WE=(e,t,n)=>r=>{const{connectionStartHandle:s,connectionEndHandle:o,connectionClickStartHandle:i}=r;return{connecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n}},Yg=E.forwardRef(({type:e="source",position:t=ie.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:s=!0,isConnectableEnd:o=!0,id:i,onConnect:l,children:a,className:u,onMouseDown:c,onTouchStart:d,...f},h)=>{var j,z;const _=i||null,x=e==="target",N=Ye(),p=OE(),{connectOnClick:g,noPanClassName:y}=Ie(HE,Qe),{connecting:w,clickConnecting:P}=Ie(WE(p,_,e),Qe);p||(z=(j=N.getState()).onError)==null||z.call(j,"010",vn.error010());const L=U=>{const{defaultEdgeOptions:Z,onConnect:D,hasDefaultEdges:v}=N.getState(),k={...Z,...U};if(v){const{edges:T,setEdges:M}=N.getState();M(jE(k,T))}D==null||D(k),l==null||l(k)},O=U=>{if(!p)return;const Z=Lg(U);s&&(Z&&U.button===0||!Z)&&Gg({event:U,handleId:_,nodeId:p,onConnect:L,isTarget:x,getState:N.getState,setState:N.setState,isValidConnection:n||N.getState().isValidConnection||sp}),Z?c==null||c(U):d==null||d(U)},A=U=>{const{onClickConnectStart:Z,onClickConnectEnd:D,connectionClickStartHandle:v,connectionMode:k,isValidConnection:T}=N.getState();if(!p||!v&&!s)return;if(!v){Z==null||Z(U,{nodeId:p,handleId:_,handleType:e}),N.setState({connectionClickStartHandle:{nodeId:p,type:e,handleId:_}});return}const M=Ag(U.target),I=n||T||sp,{connection:S,isValid:b}=Vg({nodeId:p,id:_,type:e},k,v.nodeId,v.handleId||null,v.type,I,M);b&&L(S),D==null||D(U),N.setState({connectionClickStartHandle:null})};return W.createElement("div",{"data-handleid":_,"data-nodeid":p,"data-handlepos":t,"data-id":`${p}-${_}-${e}`,className:et(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",y,u,{source:!x,target:x,connectable:r,connectablestart:s,connectableend:o,connecting:P,connectionindicator:r&&(s&&!w||o&&w)}]),onMouseDown:O,onTouchStart:O,onClick:g?A:void 0,ref:h,...f},a)});Yg.displayName="Handle";var fl=E.memo(Yg);const Kg=({data:e,isConnectable:t,targetPosition:n=ie.Top,sourcePosition:r=ie.Bottom})=>W.createElement(W.Fragment,null,W.createElement(fl,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,W.createElement(fl,{type:"source",position:r,isConnectable:t}));Kg.displayName="DefaultNode";var Vu=E.memo(Kg);const Xg=({data:e,isConnectable:t,sourcePosition:n=ie.Bottom})=>W.createElement(W.Fragment,null,e==null?void 0:e.label,W.createElement(fl,{type:"source",position:n,isConnectable:t}));Xg.displayName="InputNode";var Qg=E.memo(Xg);const Zg=({data:e,isConnectable:t,targetPosition:n=ie.Top})=>W.createElement(W.Fragment,null,W.createElement(fl,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label);Zg.displayName="OutputNode";var qg=E.memo(Zg);const sd=()=>null;sd.displayName="GroupNode";const VE=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected).map(t=>({...t}))}),si=e=>e.id;function GE(e,t){return Qe(e.selectedNodes.map(si),t.selectedNodes.map(si))&&Qe(e.selectedEdges.map(si),t.selectedEdges.map(si))}const Jg=E.memo(({onSelectionChange:e})=>{const t=Ye(),{selectedNodes:n,selectedEdges:r}=Ie(VE,GE);return E.useEffect(()=>{const s={nodes:n,edges:r};e==null||e(s),t.getState().onSelectionChange.forEach(o=>o(s))},[n,r,e]),null});Jg.displayName="SelectionListener";const YE=e=>!!e.onSelectionChange;function KE({onSelectionChange:e}){const t=Ie(YE);return e||t?W.createElement(Jg,{onSelectionChange:e}):null}const XE=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function Er(e,t){E.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function ve(e,t,n){E.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const QE=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:s,onConnectStart:o,onConnectEnd:i,onClickConnectStart:l,onClickConnectEnd:a,nodesDraggable:u,nodesConnectable:c,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:_,minZoom:x,maxZoom:N,nodeExtent:p,onNodesChange:g,onEdgesChange:y,elementsSelectable:w,connectionMode:P,snapGrid:L,snapToGrid:O,translateExtent:A,connectOnClick:j,defaultEdgeOptions:z,fitView:U,fitViewOptions:Z,onNodesDelete:D,onEdgesDelete:v,onNodeDrag:k,onNodeDragStart:T,onNodeDragStop:M,onSelectionDrag:I,onSelectionDragStart:S,onSelectionDragStop:b,noPanClassName:F,nodeOrigin:R,rfId:X,autoPanOnConnect:Q,autoPanOnNodeDrag:re,onError:J,connectionRadius:fe,isValidConnection:V,nodeDragThreshold:me})=>{const{setNodes:K,setEdges:C,setDefaultNodesAndEdges:B,setMinZoom:te,setMaxZoom:q,setTranslateExtent:ae,setNodeExtent:pe,reset:oe}=Ie(XE,Qe),ee=Ye();return E.useEffect(()=>{const ge=r==null?void 0:r.map(de=>({...de,...z}));return B(n,ge),()=>{oe()}},[]),ve("defaultEdgeOptions",z,ee.setState),ve("connectionMode",P,ee.setState),ve("onConnect",s,ee.setState),ve("onConnectStart",o,ee.setState),ve("onConnectEnd",i,ee.setState),ve("onClickConnectStart",l,ee.setState),ve("onClickConnectEnd",a,ee.setState),ve("nodesDraggable",u,ee.setState),ve("nodesConnectable",c,ee.setState),ve("nodesFocusable",d,ee.setState),ve("edgesFocusable",f,ee.setState),ve("edgesUpdatable",h,ee.setState),ve("elementsSelectable",w,ee.setState),ve("elevateNodesOnSelect",_,ee.setState),ve("snapToGrid",O,ee.setState),ve("snapGrid",L,ee.setState),ve("onNodesChange",g,ee.setState),ve("onEdgesChange",y,ee.setState),ve("connectOnClick",j,ee.setState),ve("fitViewOnInit",U,ee.setState),ve("fitViewOnInitOptions",Z,ee.setState),ve("onNodesDelete",D,ee.setState),ve("onEdgesDelete",v,ee.setState),ve("onNodeDrag",k,ee.setState),ve("onNodeDragStart",T,ee.setState),ve("onNodeDragStop",M,ee.setState),ve("onSelectionDrag",I,ee.setState),ve("onSelectionDragStart",S,ee.setState),ve("onSelectionDragStop",b,ee.setState),ve("noPanClassName",F,ee.setState),ve("nodeOrigin",R,ee.setState),ve("rfId",X,ee.setState),ve("autoPanOnConnect",Q,ee.setState),ve("autoPanOnNodeDrag",re,ee.setState),ve("onError",J,ee.setState),ve("connectionRadius",fe,ee.setState),ve("isValidConnection",V,ee.setState),ve("nodeDragThreshold",me,ee.setState),Er(e,K),Er(t,C),Er(x,te),Er(N,q),Er(A,ae),Er(p,pe),null},op={display:"none"},ZE={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},e0="react-flow__node-desc",t0="react-flow__edge-desc",qE="react-flow__aria-live",JE=e=>e.ariaLiveMessage;function eN({rfId:e}){const t=Ie(JE);return W.createElement("div",{id:`${qE}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:ZE},t)}function tN({rfId:e,disableKeyboardA11y:t}){return W.createElement(W.Fragment,null,W.createElement("div",{id:`${e0}-${e}`,style:op},"Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),W.createElement("div",{id:`${t0}-${e}`,style:op},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!t&&W.createElement(eN,{rfId:e}))}var No=(e=null,t={actInsideInputWithModifier:!0})=>{const[n,r]=E.useState(!1),s=E.useRef(!1),o=E.useRef(new Set([])),[i,l]=E.useMemo(()=>{if(e!==null){const u=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),c=u.reduce((d,f)=>d.concat(...f),[]);return[u,c]}return[[],[]]},[e]);return E.useEffect(()=>{const a=typeof document<"u"?document:null,u=(t==null?void 0:t.target)||a;if(e!==null){const c=h=>{if(s.current=h.ctrlKey||h.metaKey||h.shiftKey,(!s.current||s.current&&!t.actInsideInputWithModifier)&&Du(h))return!1;const x=lp(h.code,l);o.current.add(h[x]),ip(i,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if((!s.current||s.current&&!t.actInsideInputWithModifier)&&Du(h))return!1;const x=lp(h.code,l);ip(i,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[x]),h.key==="Meta"&&o.current.clear(),s.current=!1},f=()=>{o.current.clear(),r(!1)};return u==null||u.addEventListener("keydown",c),u==null||u.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{u==null||u.removeEventListener("keydown",c),u==null||u.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function ip(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(s=>t.has(s)))}function lp(e,t){return t.includes(e)?"code":"key"}function n0(e,t,n,r){var l,a;const s=e.parentNode||e.parentId;if(!s)return n;const o=t.get(s),i=cr(o,r);return n0(o,t,{x:(n.x??0)+i.x,y:(n.y??0)+i.y,z:(((l=o[De])==null?void 0:l.z)??0)>(n.z??0)?((a=o[De])==null?void 0:a.z)??0:n.z??0},r)}function r0(e,t,n){e.forEach(r=>{var o;const s=r.parentNode||r.parentId;if(s&&!e.has(s))throw new Error(`Parent node ${s} not found`);if(s||n!=null&&n[r.id]){const{x:i,y:l,z:a}=n0(r,e,{...r.position,z:((o=r[De])==null?void 0:o.z)??0},t);r.positionAbsolute={x:i,y:l},r[De].z=a,n!=null&&n[r.id]&&(r[De].isParent=!0)}})}function Ea(e,t,n,r){const s=new Map,o={},i=r?1e3:0;return e.forEach(l=>{var h;const a=(Pt(l.zIndex)?l.zIndex:0)+(l.selected?i:0),u=t.get(l.id),c={...l,positionAbsolute:{x:l.position.x,y:l.position.y}},d=l.parentNode||l.parentId;d&&(o[d]=!0);const f=(u==null?void 0:u.type)&&(u==null?void 0:u.type)!==l.type;Object.defineProperty(c,De,{enumerable:!1,value:{handleBounds:f||(h=u==null?void 0:u[De])==null?void 0:h.handleBounds,z:a}}),s.set(l.id,c)}),r0(s,n,o),s}function s0(e,t={}){const{getNodes:n,width:r,height:s,minZoom:o,maxZoom:i,d3Zoom:l,d3Selection:a,fitViewOnInitDone:u,fitViewOnInit:c,nodeOrigin:d}=e(),f=t.initial&&!u&&c;if(l&&a&&(f||!t.initial)){const _=n().filter(N=>{var g;const p=t.includeHiddenNodes?N.width&&N.height:!N.hidden;return(g=t.nodes)!=null&&g.length?p&&t.nodes.some(y=>y.id===N.id):p}),x=_.every(N=>N.width&&N.height);if(_.length>0&&x){const N=Fl(_,d),{x:p,y:g,zoom:y}=Hg(N,r,s,t.minZoom??o,t.maxZoom??i,t.padding??.1),w=fn.translate(p,g).scale(y);return typeof t.duration=="number"&&t.duration>0?l.transform(er(a,t.duration),w):l.transform(a,w),!0}}return!1}function nN(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[De]:r[De],selected:n.selected})}),new Map(t)}function rN(e,t){return t.map(n=>{const r=e.find(s=>s.id===n.id);return r&&(n.selected=r.selected),n})}function oi({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:s,edges:o,onNodesChange:i,onEdgesChange:l,hasDefaultNodes:a,hasDefaultEdges:u}=n();e!=null&&e.length&&(a&&r({nodeInternals:nN(e,s)}),i==null||i(e)),t!=null&&t.length&&(u&&r({edges:rN(t,o)}),l==null||l(t))}const Nr=()=>{},sN={zoomIn:Nr,zoomOut:Nr,zoomTo:Nr,getZoom:()=>1,setViewport:Nr,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:Nr,fitBounds:Nr,project:e=>e,screenToFlowPosition:e=>e,flowToScreenPosition:e=>e,viewportInitialized:!1},oN=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),iN=()=>{const e=Ye(),{d3Zoom:t,d3Selection:n}=Ie(oN,Qe);return E.useMemo(()=>n&&t?{zoomIn:s=>t.scaleBy(er(n,s==null?void 0:s.duration),1.2),zoomOut:s=>t.scaleBy(er(n,s==null?void 0:s.duration),1/1.2),zoomTo:(s,o)=>t.scaleTo(er(n,o==null?void 0:o.duration),s),getZoom:()=>e.getState().transform[2],setViewport:(s,o)=>{const[i,l,a]=e.getState().transform,u=fn.translate(s.x??i,s.y??l).scale(s.zoom??a);t.transform(er(n,o==null?void 0:o.duration),u)},getViewport:()=>{const[s,o,i]=e.getState().transform;return{x:s,y:o,zoom:i}},fitView:s=>s0(e.getState,s),setCenter:(s,o,i)=>{const{width:l,height:a,maxZoom:u}=e.getState(),c=typeof(i==null?void 0:i.zoom)<"u"?i.zoom:u,d=l/2-s*c,f=a/2-o*c,h=fn.translate(d,f).scale(c);t.transform(er(n,i==null?void 0:i.duration),h)},fitBounds:(s,o)=>{const{width:i,height:l,minZoom:a,maxZoom:u}=e.getState(),{x:c,y:d,zoom:f}=Hg(s,i,l,a,u,(o==null?void 0:o.padding)??.1),h=fn.translate(c,d).scale(f);t.transform(er(n,o==null?void 0:o.duration),h)},project:s=>{const{transform:o,snapToGrid:i,snapGrid:l}=e.getState();return console.warn("[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position"),Wu(s,o,i,l)},screenToFlowPosition:s=>{const{transform:o,snapToGrid:i,snapGrid:l,domNode:a}=e.getState();if(!a)return s;const{x:u,y:c}=a.getBoundingClientRect(),d={x:s.x-u,y:s.y-c};return Wu(d,o,i,l)},flowToScreenPosition:s=>{const{transform:o,domNode:i}=e.getState();if(!i)return s;const{x:l,y:a}=i.getBoundingClientRect(),u=zg(s,o);return{x:u.x+l,y:u.y+a}},viewportInitialized:!0}:sN,[t,n])};function od(){const e=iN(),t=Ye(),n=E.useCallback(()=>t.getState().getNodes().map(x=>({...x})),[]),r=E.useCallback(x=>t.getState().nodeInternals.get(x),[]),s=E.useCallback(()=>{const{edges:x=[]}=t.getState();return x.map(N=>({...N}))},[]),o=E.useCallback(x=>{const{edges:N=[]}=t.getState();return N.find(p=>p.id===x)},[]),i=E.useCallback(x=>{const{getNodes:N,setNodes:p,hasDefaultNodes:g,onNodesChange:y}=t.getState(),w=N(),P=typeof x=="function"?x(w):x;if(g)p(P);else if(y){const L=P.length===0?w.map(O=>({type:"remove",id:O.id})):P.map(O=>({item:O,type:"reset"}));y(L)}},[]),l=E.useCallback(x=>{const{edges:N=[],setEdges:p,hasDefaultEdges:g,onEdgesChange:y}=t.getState(),w=typeof x=="function"?x(N):x;if(g)p(w);else if(y){const P=w.length===0?N.map(L=>({type:"remove",id:L.id})):w.map(L=>({item:L,type:"reset"}));y(P)}},[]),a=E.useCallback(x=>{const N=Array.isArray(x)?x:[x],{getNodes:p,setNodes:g,hasDefaultNodes:y,onNodesChange:w}=t.getState();if(y){const L=[...p(),...N];g(L)}else if(w){const P=N.map(L=>({item:L,type:"add"}));w(P)}},[]),u=E.useCallback(x=>{const N=Array.isArray(x)?x:[x],{edges:p=[],setEdges:g,hasDefaultEdges:y,onEdgesChange:w}=t.getState();if(y)g([...p,...N]);else if(w){const P=N.map(L=>({item:L,type:"add"}));w(P)}},[]),c=E.useCallback(()=>{const{getNodes:x,edges:N=[],transform:p}=t.getState(),[g,y,w]=p;return{nodes:x().map(P=>({...P})),edges:N.map(P=>({...P})),viewport:{x:g,y,zoom:w}}},[]),d=E.useCallback(({nodes:x,edges:N})=>{const{nodeInternals:p,getNodes:g,edges:y,hasDefaultNodes:w,hasDefaultEdges:P,onNodesDelete:L,onEdgesDelete:O,onNodesChange:A,onEdgesChange:j}=t.getState(),z=(x||[]).map(k=>k.id),U=(N||[]).map(k=>k.id),Z=g().reduce((k,T)=>{const M=T.parentNode||T.parentId,I=!z.includes(T.id)&&M&&k.find(b=>b.id===M);return(typeof T.deletable=="boolean"?T.deletable:!0)&&(z.includes(T.id)||I)&&k.push(T),k},[]),D=y.filter(k=>typeof k.deletable=="boolean"?k.deletable:!0),v=D.filter(k=>U.includes(k.id));if(Z||v){const k=Ug(Z,D),T=[...v,...k],M=T.reduce((I,S)=>(I.includes(S.id)||I.push(S.id),I),[]);if((P||w)&&(P&&t.setState({edges:y.filter(I=>!M.includes(I.id))}),w&&(Z.forEach(I=>{p.delete(I.id)}),t.setState({nodeInternals:new Map(p)}))),M.length>0&&(O==null||O(T),j&&j(M.map(I=>({id:I,type:"remove"})))),Z.length>0&&(L==null||L(Z),A)){const I=Z.map(S=>({id:S.id,type:"remove"}));A(I)}}},[]),f=E.useCallback(x=>{const N=kE(x),p=N?null:t.getState().nodeInternals.get(x.id);return!N&&!p?[null,null,N]:[N?x:qf(p),p,N]},[]),h=E.useCallback((x,N=!0,p)=>{const[g,y,w]=f(x);return g?(p||t.getState().getNodes()).filter(P=>{if(!w&&(P.id===y.id||!P.positionAbsolute))return!1;const L=qf(P),O=zu(L,g);return N&&O>0||O>=g.width*g.height}):[]},[]),_=E.useCallback((x,N,p=!0)=>{const[g]=f(x);if(!g)return!1;const y=zu(g,N);return p&&y>0||y>=g.width*g.height},[]);return E.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:s,getEdge:o,setNodes:i,setEdges:l,addNodes:a,addEdges:u,toObject:c,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:_}),[e,n,r,s,o,i,l,a,u,c,d,h,_])}const lN={actInsideInputWithModifier:!1};var aN=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Ye(),{deleteElements:r}=od(),s=No(e,lN),o=No(t);E.useEffect(()=>{if(s){const{edges:i,getNodes:l}=n.getState(),a=l().filter(c=>c.selected),u=i.filter(c=>c.selected);r({nodes:a,edges:u}),n.setState({nodesSelectionActive:!1})}},[s]),E.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function uN(e){const t=Ye();E.useEffect(()=>{let n;const r=()=>{var o,i;if(!e.current)return;const s=Zc(e.current);(s.height===0||s.width===0)&&((i=(o=t.getState()).onError)==null||i.call(o,"004",vn.error004())),t.setState({width:s.width||500,height:s.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const id={position:"absolute",width:"100%",height:"100%",top:0,left:0},cN=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,ii=e=>({x:e.x,y:e.y,zoom:e.k}),Tr=(e,t)=>e.target.closest(`.${t}`),ap=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),up=e=>{const t=e.ctrlKey&&cl()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t},dN=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),fN=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:s=!0,zoomOnPinch:o=!0,panOnScroll:i=!1,panOnScrollSpeed:l=.5,panOnScrollMode:a=ir.Free,zoomOnDoubleClick:u=!0,elementsSelectable:c,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:_,maxZoom:x,zoomActivationKeyCode:N,preventScrolling:p=!0,children:g,noWheelClassName:y,noPanClassName:w})=>{const P=E.useRef(),L=Ye(),O=E.useRef(!1),A=E.useRef(!1),j=E.useRef(null),z=E.useRef({x:0,y:0,zoom:0}),{d3Zoom:U,d3Selection:Z,d3ZoomHandler:D,userSelectionActive:v}=Ie(dN,Qe),k=No(N),T=E.useRef(0),M=E.useRef(!1),I=E.useRef();return uN(j),E.useEffect(()=>{if(j.current){const S=j.current.getBoundingClientRect(),b=Ig().scaleExtent([_,x]).translateExtent(h),F=It(j.current).call(b),R=fn.translate(f.x,f.y).scale(ds(f.zoom,_,x)),X=[[0,0],[S.width,S.height]],Q=b.constrain()(R,X,h);b.transform(F,Q),b.wheelDelta(up),L.setState({d3Zoom:b,d3Selection:F,d3ZoomHandler:F.on("wheel.zoom"),transform:[Q.x,Q.y,Q.k],domNode:j.current.closest(".react-flow")})}},[]),E.useEffect(()=>{Z&&U&&(i&&!k&&!v?Z.on("wheel.zoom",S=>{if(Tr(S,y))return!1;S.preventDefault(),S.stopImmediatePropagation();const b=Z.property("__zoom").k||1;if(S.ctrlKey&&o){const V=jt(S),me=up(S),K=b*Math.pow(2,me);U.scaleTo(Z,K,V,S);return}const F=S.deltaMode===1?20:1;let R=a===ir.Vertical?0:S.deltaX*F,X=a===ir.Horizontal?0:S.deltaY*F;!cl()&&S.shiftKey&&a!==ir.Vertical&&(R=S.deltaY*F,X=0),U.translateBy(Z,-(R/b)*l,-(X/b)*l,{internal:!0});const Q=ii(Z.property("__zoom")),{onViewportChangeStart:re,onViewportChange:J,onViewportChangeEnd:fe}=L.getState();clearTimeout(I.current),M.current||(M.current=!0,t==null||t(S,Q),re==null||re(Q)),M.current&&(e==null||e(S,Q),J==null||J(Q),I.current=setTimeout(()=>{n==null||n(S,Q),fe==null||fe(Q),M.current=!1},150))},{passive:!1}):typeof D<"u"&&Z.on("wheel.zoom",function(S,b){if(!p&&S.type==="wheel"&&!S.ctrlKey||Tr(S,y))return null;S.preventDefault(),D.call(this,S,b)},{passive:!1}))},[v,i,a,Z,U,D,k,o,p,y,t,e,n]),E.useEffect(()=>{U&&U.on("start",S=>{var R,X;if(!S.sourceEvent||S.sourceEvent.internal)return null;T.current=(R=S.sourceEvent)==null?void 0:R.button;const{onViewportChangeStart:b}=L.getState(),F=ii(S.transform);O.current=!0,z.current=F,((X=S.sourceEvent)==null?void 0:X.type)==="mousedown"&&L.setState({paneDragging:!0}),b==null||b(F),t==null||t(S.sourceEvent,F)})},[U,t]),E.useEffect(()=>{U&&(v&&!O.current?U.on("zoom",null):v||U.on("zoom",S=>{var F;const{onViewportChange:b}=L.getState();if(L.setState({transform:[S.transform.x,S.transform.y,S.transform.k]}),A.current=!!(r&&ap(d,T.current??0)),(e||b)&&!((F=S.sourceEvent)!=null&&F.internal)){const R=ii(S.transform);b==null||b(R),e==null||e(S.sourceEvent,R)}}))},[v,U,e,d,r]),E.useEffect(()=>{U&&U.on("end",S=>{if(!S.sourceEvent||S.sourceEvent.internal)return null;const{onViewportChangeEnd:b}=L.getState();if(O.current=!1,L.setState({paneDragging:!1}),r&&ap(d,T.current??0)&&!A.current&&r(S.sourceEvent),A.current=!1,(n||b)&&cN(z.current,S.transform)){const F=ii(S.transform);z.current=F,clearTimeout(P.current),P.current=setTimeout(()=>{b==null||b(F),n==null||n(S.sourceEvent,F)},i?150:0)}})},[U,i,d,n,r]),E.useEffect(()=>{U&&U.filter(S=>{const b=k||s,F=o&&S.ctrlKey;if((d===!0||Array.isArray(d)&&d.includes(1))&&S.button===1&&S.type==="mousedown"&&(Tr(S,"react-flow__node")||Tr(S,"react-flow__edge")))return!0;if(!d&&!b&&!i&&!u&&!o||v||!u&&S.type==="dblclick"||Tr(S,y)&&S.type==="wheel"||Tr(S,w)&&(S.type!=="wheel"||i&&S.type==="wheel"&&!k)||!o&&S.ctrlKey&&S.type==="wheel"||!b&&!i&&!F&&S.type==="wheel"||!d&&(S.type==="mousedown"||S.type==="touchstart")||Array.isArray(d)&&!d.includes(S.button)&&S.type==="mousedown")return!1;const R=Array.isArray(d)&&d.includes(S.button)||!S.button||S.button<=1;return(!S.ctrlKey||S.type==="wheel")&&R})},[v,U,s,o,i,u,d,c,k]),W.createElement("div",{className:"react-flow__renderer",ref:j,style:id},g)},pN=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function hN(){const{userSelectionActive:e,userSelectionRect:t}=Ie(pN,Qe);return e&&t?W.createElement("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function cp(e,t){const n=t.parentNode||t.parentId,r=e.find(s=>s.id===n);if(r){const s=t.position.x+t.width-r.width,o=t.position.y+t.height-r.height;if(s>0||o>0||t.position.x<0||t.position.y<0){if(r.style={...r.style},r.style.width=r.style.width??r.width,r.style.height=r.style.height??r.height,s>0&&(r.style.width+=s),o>0&&(r.style.height+=o),t.position.x<0){const i=Math.abs(t.position.x);r.position.x=r.position.x-i,r.style.width+=i,t.position.x=0}if(t.position.y<0){const i=Math.abs(t.position.y);r.position.y=r.position.y-i,r.style.height+=i,t.position.y=0}r.width=r.style.width,r.height=r.style.height}}}function mN(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,s)=>{const o=e.filter(l=>l.id===s.id);if(o.length===0)return r.push(s),r;const i={...s};for(const l of o)if(l)switch(l.type){case"select":{i.selected=l.selected;break}case"position":{typeof l.position<"u"&&(i.position=l.position),typeof l.positionAbsolute<"u"&&(i.positionAbsolute=l.positionAbsolute),typeof l.dragging<"u"&&(i.dragging=l.dragging),i.expandParent&&cp(r,i);break}case"dimensions":{typeof l.dimensions<"u"&&(i.width=l.dimensions.width,i.height=l.dimensions.height),typeof l.updateStyle<"u"&&(i.style={...i.style||{},...l.dimensions}),typeof l.resizing=="boolean"&&(i.resizing=l.resizing),i.expandParent&&cp(r,i);break}case"remove":return r}return r.push(i),r},n)}function gN(e,t){return mN(e,t)}const Cn=(e,t)=>({id:e,type:"select",selected:t});function Ur(e,t){return e.reduce((n,r)=>{const s=t.includes(r.id);return!r.selected&&s?(r.selected=!0,n.push(Cn(r.id,!0))):r.selected&&!s&&(r.selected=!1,n.push(Cn(r.id,!1))),n},[])}const Na=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},yN=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),o0=E.memo(({isSelecting:e,selectionMode:t=Eo.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:s,onPaneClick:o,onPaneContextMenu:i,onPaneScroll:l,onPaneMouseEnter:a,onPaneMouseMove:u,onPaneMouseLeave:c,children:d})=>{const f=E.useRef(null),h=Ye(),_=E.useRef(0),x=E.useRef(0),N=E.useRef(),{userSelectionActive:p,elementsSelectable:g,dragging:y}=Ie(yN,Qe),w=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),_.current=0,x.current=0},P=D=>{o==null||o(D),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},L=D=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){D.preventDefault();return}i==null||i(D)},O=l?D=>l(D):void 0,A=D=>{const{resetSelectedElements:v,domNode:k}=h.getState();if(N.current=k==null?void 0:k.getBoundingClientRect(),!g||!e||D.button!==0||D.target!==f.current||!N.current)return;const{x:T,y:M}=Dn(D,N.current);v(),h.setState({userSelectionRect:{width:0,height:0,startX:T,startY:M,x:T,y:M}}),r==null||r(D)},j=D=>{const{userSelectionRect:v,nodeInternals:k,edges:T,transform:M,onNodesChange:I,onEdgesChange:S,nodeOrigin:b,getNodes:F}=h.getState();if(!e||!N.current||!v)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const R=Dn(D,N.current),X=v.startX??0,Q=v.startY??0,re={...v,x:R.xK.id),me=fe.map(K=>K.id);if(_.current!==me.length){_.current=me.length;const K=Ur(J,me);K.length&&(I==null||I(K))}if(x.current!==V.length){x.current=V.length;const K=Ur(T,V);K.length&&(S==null||S(K))}h.setState({userSelectionRect:re})},z=D=>{if(D.button!==0)return;const{userSelectionRect:v}=h.getState();!p&&v&&D.target===f.current&&(P==null||P(D)),h.setState({nodesSelectionActive:_.current>0}),w(),s==null||s(D)},U=D=>{p&&(h.setState({nodesSelectionActive:_.current>0}),s==null||s(D)),w()},Z=g&&(e||p);return W.createElement("div",{className:et(["react-flow__pane",{dragging:y,selection:e}]),onClick:Z?void 0:Na(P,f),onContextMenu:Na(L,f),onWheel:Na(O,f),onMouseEnter:Z?void 0:a,onMouseDown:Z?A:void 0,onMouseMove:Z?j:u,onMouseUp:Z?z:void 0,onMouseLeave:Z?U:c,ref:f,style:id},d,W.createElement(hN,null))});o0.displayName="Pane";function i0(e,t){const n=e.parentNode||e.parentId;if(!n)return!1;const r=t.get(n);return r?r.selected?!0:i0(r,t):!1}function dp(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function vN(e,t,n,r){return Array.from(e.values()).filter(s=>(s.selected||s.id===r)&&(!s.parentNode||s.parentId||!i0(s,e))&&(s.draggable||t&&typeof s.draggable>"u")).map(s=>{var o,i;return{id:s.id,position:s.position||{x:0,y:0},positionAbsolute:s.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=s.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((i=s.positionAbsolute)==null?void 0:i.y)??0)},delta:{x:0,y:0},extent:s.extent,parentNode:s.parentNode||s.parentId,parentId:s.parentNode||s.parentId,width:s.width,height:s.height,expandParent:s.expandParent}})}function _N(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function l0(e,t,n,r,s=[0,0],o){const i=_N(e,e.extent||r);let l=i;const a=e.parentNode||e.parentId;if(e.extent==="parent"&&!e.expandParent)if(a&&e.width&&e.height){const d=n.get(a),{x:f,y:h}=cr(d,s).positionAbsolute;l=d&&Pt(f)&&Pt(h)&&Pt(d.width)&&Pt(d.height)?[[f+e.width*s[0],h+e.height*s[1]],[f+d.width-e.width+e.width*s[0],h+d.height-e.height+e.height*s[1]]]:l}else o==null||o("005",vn.error005()),l=i;else if(e.extent&&a&&e.extent!=="parent"){const d=n.get(a),{x:f,y:h}=cr(d,s).positionAbsolute;l=[[e.extent[0][0]+f,e.extent[0][1]+h],[e.extent[1][0]+f,e.extent[1][1]+h]]}let u={x:0,y:0};if(a){const d=n.get(a);u=cr(d,s).positionAbsolute}const c=l&&l!=="parent"?qc(t,l):t;return{position:{x:c.x-u.x,y:c.y-u.y},positionAbsolute:c}}function Ta({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(s=>({...n.get(s.id),position:s.position,positionAbsolute:s.positionAbsolute}));return[e?r.find(s=>s.id===e):r[0],r]}const fp=(e,t,n,r)=>{const s=t.querySelectorAll(e);if(!s||!s.length)return null;const o=Array.from(s),i=t.getBoundingClientRect(),l={x:i.width*r[0],y:i.height*r[1]};return o.map(a=>{const u=a.getBoundingClientRect();return{id:a.getAttribute("data-handleid"),position:a.getAttribute("data-handlepos"),x:(u.left-i.left-l.x)/n,y:(u.top-i.top-l.y)/n,...Zc(a)}})};function Is(e,t,n){return n===void 0?n:r=>{const s=t().nodeInternals.get(e);s&&n(r,{...s})}}function Gu({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:s,unselectNodesAndEdges:o,multiSelectionActive:i,nodeInternals:l,onError:a}=t.getState(),u=l.get(e);if(!u){a==null||a("012",vn.error012(e));return}t.setState({nodesSelectionActive:!1}),u.selected?(n||u.selected&&i)&&(o({nodes:[u],edges:[]}),requestAnimationFrame(()=>{var c;return(c=r==null?void 0:r.current)==null?void 0:c.blur()})):s([e])}function xN(){const e=Ye();return E.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:s,snapToGrid:o}=e.getState(),i=n.touches?n.touches[0].clientX:n.clientX,l=n.touches?n.touches[0].clientY:n.clientY,a={x:(i-r[0])/r[2],y:(l-r[1])/r[2]};return{xSnapped:o?s[0]*Math.round(a.x/s[0]):a.x,ySnapped:o?s[1]*Math.round(a.y/s[1]):a.y,...a}},[])}function ka(e){return(t,n,r)=>e==null?void 0:e(t,r)}function a0({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:s,isSelectable:o,selectNodesOnDrag:i}){const l=Ye(),[a,u]=E.useState(!1),c=E.useRef([]),d=E.useRef({x:null,y:null}),f=E.useRef(0),h=E.useRef(null),_=E.useRef({x:0,y:0}),x=E.useRef(null),N=E.useRef(!1),p=E.useRef(!1),g=E.useRef(!1),y=xN();return E.useEffect(()=>{if(e!=null&&e.current){const w=It(e.current),P=({x:A,y:j})=>{const{nodeInternals:z,onNodeDrag:U,onSelectionDrag:Z,updateNodePositions:D,nodeExtent:v,snapGrid:k,snapToGrid:T,nodeOrigin:M,onError:I}=l.getState();d.current={x:A,y:j};let S=!1,b={x:0,y:0,x2:0,y2:0};if(c.current.length>1&&v){const R=Fl(c.current,M);b=So(R)}if(c.current=c.current.map(R=>{const X={x:A-R.distance.x,y:j-R.distance.y};T&&(X.x=k[0]*Math.round(X.x/k[0]),X.y=k[1]*Math.round(X.y/k[1]));const Q=[[v[0][0],v[0][1]],[v[1][0],v[1][1]]];c.current.length>1&&v&&!R.extent&&(Q[0][0]=R.positionAbsolute.x-b.x+v[0][0],Q[1][0]=R.positionAbsolute.x+(R.width??0)-b.x2+v[1][0],Q[0][1]=R.positionAbsolute.y-b.y+v[0][1],Q[1][1]=R.positionAbsolute.y+(R.height??0)-b.y2+v[1][1]);const re=l0(R,X,z,Q,M,I);return S=S||R.position.x!==re.position.x||R.position.y!==re.position.y,R.position=re.position,R.positionAbsolute=re.positionAbsolute,R}),!S)return;D(c.current,!0,!0),u(!0);const F=s?U:ka(Z);if(F&&x.current){const[R,X]=Ta({nodeId:s,dragItems:c.current,nodeInternals:z});F(x.current,R,X)}},L=()=>{if(!h.current)return;const[A,j]=Pg(_.current,h.current);if(A!==0||j!==0){const{transform:z,panBy:U}=l.getState();d.current.x=(d.current.x??0)-A/z[2],d.current.y=(d.current.y??0)-j/z[2],U({x:A,y:j})&&P(d.current)}f.current=requestAnimationFrame(L)},O=A=>{var M;const{nodeInternals:j,multiSelectionActive:z,nodesDraggable:U,unselectNodesAndEdges:Z,onNodeDragStart:D,onSelectionDragStart:v}=l.getState();p.current=!0;const k=s?D:ka(v);(!i||!o)&&!z&&s&&((M=j.get(s))!=null&&M.selected||Z()),s&&o&&i&&Gu({id:s,store:l,nodeRef:e});const T=y(A);if(d.current=T,c.current=vN(j,U,T,s),k&&c.current){const[I,S]=Ta({nodeId:s,dragItems:c.current,nodeInternals:j});k(A.sourceEvent,I,S)}};if(t)w.on(".drag",null);else{const A=Pw().on("start",j=>{const{domNode:z,nodeDragThreshold:U}=l.getState();U===0&&O(j),g.current=!1;const Z=y(j);d.current=Z,h.current=(z==null?void 0:z.getBoundingClientRect())||null,_.current=Dn(j.sourceEvent,h.current)}).on("drag",j=>{var D,v;const z=y(j),{autoPanOnNodeDrag:U,nodeDragThreshold:Z}=l.getState();if(j.sourceEvent.type==="touchmove"&&j.sourceEvent.touches.length>1&&(g.current=!0),!g.current){if(!N.current&&p.current&&U&&(N.current=!0,L()),!p.current){const k=z.xSnapped-(((D=d==null?void 0:d.current)==null?void 0:D.x)??0),T=z.ySnapped-(((v=d==null?void 0:d.current)==null?void 0:v.y)??0);Math.sqrt(k*k+T*T)>Z&&O(j)}(d.current.x!==z.xSnapped||d.current.y!==z.ySnapped)&&c.current&&p.current&&(x.current=j.sourceEvent,_.current=Dn(j.sourceEvent,h.current),P(z))}}).on("end",j=>{if(!(!p.current||g.current)&&(u(!1),N.current=!1,p.current=!1,cancelAnimationFrame(f.current),c.current)){const{updateNodePositions:z,nodeInternals:U,onNodeDragStop:Z,onSelectionDragStop:D}=l.getState(),v=s?Z:ka(D);if(z(c.current,!1,!1),v){const[k,T]=Ta({nodeId:s,dragItems:c.current,nodeInternals:U});v(j.sourceEvent,k,T)}}}).filter(j=>{const z=j.target;return!j.button&&(!n||!dp(z,`.${n}`,e))&&(!r||dp(z,r,e))});return w.call(A),()=>{w.on(".drag",null)}}}},[e,t,n,r,o,l,s,i,y]),a}function u0(){const e=Ye();return E.useCallback(n=>{const{nodeInternals:r,nodeExtent:s,updateNodePositions:o,getNodes:i,snapToGrid:l,snapGrid:a,onError:u,nodesDraggable:c}=e.getState(),d=i().filter(g=>g.selected&&(g.draggable||c&&typeof g.draggable>"u")),f=l?a[0]:5,h=l?a[1]:5,_=n.isShiftPressed?4:1,x=n.x*f*_,N=n.y*h*_,p=d.map(g=>{if(g.positionAbsolute){const y={x:g.positionAbsolute.x+x,y:g.positionAbsolute.y+N};l&&(y.x=a[0]*Math.round(y.x/a[0]),y.y=a[1]*Math.round(y.y/a[1]));const{positionAbsolute:w,position:P}=l0(g,y,r,s,void 0,u);g.position=P,g.positionAbsolute=w}return g});o(p,!0,!1)},[])}const Jr={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var bs=e=>{const t=({id:n,type:r,data:s,xPos:o,yPos:i,xPosOrigin:l,yPosOrigin:a,selected:u,onClick:c,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:_,onDoubleClick:x,style:N,className:p,isDraggable:g,isSelectable:y,isConnectable:w,isFocusable:P,selectNodesOnDrag:L,sourcePosition:O,targetPosition:A,hidden:j,resizeObserver:z,dragHandle:U,zIndex:Z,isParent:D,noDragClassName:v,noPanClassName:k,initialized:T,disableKeyboardA11y:M,ariaLabel:I,rfId:S,hasHandleBounds:b})=>{const F=Ye(),R=E.useRef(null),X=E.useRef(null),Q=E.useRef(O),re=E.useRef(A),J=E.useRef(r),fe=y||g||c||d||f||h,V=u0(),me=Is(n,F.getState,d),K=Is(n,F.getState,f),C=Is(n,F.getState,h),B=Is(n,F.getState,_),te=Is(n,F.getState,x),q=oe=>{const{nodeDragThreshold:ee}=F.getState();if(y&&(!L||!g||ee>0)&&Gu({id:n,store:F,nodeRef:R}),c){const ge=F.getState().nodeInternals.get(n);ge&&c(oe,{...ge})}},ae=oe=>{if(!Du(oe)&&!M)if(Og.includes(oe.key)&&y){const ee=oe.key==="Escape";Gu({id:n,store:F,unselect:ee,nodeRef:R})}else g&&u&&Object.prototype.hasOwnProperty.call(Jr,oe.key)&&(F.setState({ariaLiveMessage:`Moved selected node ${oe.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~i}`}),V({x:Jr[oe.key].x,y:Jr[oe.key].y,isShiftPressed:oe.shiftKey}))};E.useEffect(()=>()=>{X.current&&(z==null||z.unobserve(X.current),X.current=null)},[]),E.useEffect(()=>{if(R.current&&!j){const oe=R.current;(!T||!b||X.current!==oe)&&(X.current&&(z==null||z.unobserve(X.current)),z==null||z.observe(oe),X.current=oe)}},[j,T,b]),E.useEffect(()=>{const oe=J.current!==r,ee=Q.current!==O,ge=re.current!==A;R.current&&(oe||ee||ge)&&(oe&&(J.current=r),ee&&(Q.current=O),ge&&(re.current=A),F.getState().updateNodeDimensions([{id:n,nodeElement:R.current,forceUpdate:!0}]))},[n,r,O,A]);const pe=a0({nodeRef:R,disabled:j||!g,noDragClassName:v,handleSelector:U,nodeId:n,isSelectable:y,selectNodesOnDrag:L});return j?null:W.createElement("div",{className:et(["react-flow__node",`react-flow__node-${r}`,{[k]:g},p,{selected:u,selectable:y,parent:D,dragging:pe}]),ref:R,style:{zIndex:Z,transform:`translate(${l}px,${a}px)`,pointerEvents:fe?"all":"none",visibility:T?"visible":"hidden",...N},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:me,onMouseMove:K,onMouseLeave:C,onContextMenu:B,onClick:q,onDoubleClick:te,onKeyDown:P?ae:void 0,tabIndex:P?0:void 0,role:P?"button":void 0,"aria-describedby":M?void 0:`${e0}-${S}`,"aria-label":I},W.createElement(RE,{value:n},W.createElement(e,{id:n,data:s,type:r,xPos:o,yPos:i,selected:u,isConnectable:w,sourcePosition:O,targetPosition:A,dragging:pe,dragHandle:U,zIndex:Z})))};return t.displayName="NodeWrapper",E.memo(t)};const wN=e=>{const t=e.getNodes().filter(n=>n.selected);return{...Fl(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function SN({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Ye(),{width:s,height:o,x:i,y:l,transformString:a,userSelectionActive:u}=Ie(wN,Qe),c=u0(),d=E.useRef(null);if(E.useEffect(()=>{var _;n||(_=d.current)==null||_.focus({preventScroll:!0})},[n]),a0({nodeRef:d}),u||!s||!o)return null;const f=e?_=>{const x=r.getState().getNodes().filter(N=>N.selected);e(_,x)}:void 0,h=_=>{Object.prototype.hasOwnProperty.call(Jr,_.key)&&c({x:Jr[_.key].x,y:Jr[_.key].y,isShiftPressed:_.shiftKey})};return W.createElement("div",{className:et(["react-flow__nodesselection","react-flow__container",t]),style:{transform:a}},W.createElement("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:s,height:o,top:l,left:i}}))}var EN=E.memo(SN);const NN=e=>e.nodesSelectionActive,c0=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:i,deleteKeyCode:l,onMove:a,onMoveStart:u,onMoveEnd:c,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:_,onSelectionEnd:x,multiSelectionKeyCode:N,panActivationKeyCode:p,zoomActivationKeyCode:g,elementsSelectable:y,zoomOnScroll:w,zoomOnPinch:P,panOnScroll:L,panOnScrollSpeed:O,panOnScrollMode:A,zoomOnDoubleClick:j,panOnDrag:z,defaultViewport:U,translateExtent:Z,minZoom:D,maxZoom:v,preventScrolling:k,onSelectionContextMenu:T,noWheelClassName:M,noPanClassName:I,disableKeyboardA11y:S})=>{const b=Ie(NN),F=No(d),R=No(p),X=R||z,Q=R||L,re=F||f&&X!==!0;return aN({deleteKeyCode:l,multiSelectionKeyCode:N}),W.createElement(fN,{onMove:a,onMoveStart:u,onMoveEnd:c,onPaneContextMenu:o,elementsSelectable:y,zoomOnScroll:w,zoomOnPinch:P,panOnScroll:Q,panOnScrollSpeed:O,panOnScrollMode:A,zoomOnDoubleClick:j,panOnDrag:!F&&X,defaultViewport:U,translateExtent:Z,minZoom:D,maxZoom:v,zoomActivationKeyCode:g,preventScrolling:k,noWheelClassName:M,noPanClassName:I},W.createElement(o0,{onSelectionStart:_,onSelectionEnd:x,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:i,panOnDrag:X,isSelecting:!!re,selectionMode:h},e,b&&W.createElement(EN,{onSelectionContextMenu:T,noPanClassName:I,disableKeyboardA11y:S})))};c0.displayName="FlowRenderer";var TN=E.memo(c0);function kN(e){return Ie(E.useCallback(n=>e?Dg(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}function CN(e){const t={input:bs(e.input||Qg),default:bs(e.default||Vu),output:bs(e.output||qg),group:bs(e.group||sd)},n={},r=Object.keys(e).filter(s=>!["input","default","output","group"].includes(s)).reduce((s,o)=>(s[o]=bs(e[o]||Vu),s),n);return{...t,...r}}const IN=({x:e,y:t,width:n,height:r,origin:s})=>!n||!r?{x:e,y:t}:s[0]<0||s[1]<0||s[0]>1||s[1]>1?{x:e,y:t}:{x:e-n*s[0],y:t-r*s[1]},bN=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),d0=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:s,updateNodeDimensions:o,onError:i}=Ie(bN,Qe),l=kN(e.onlyRenderVisibleElements),a=E.useRef(),u=E.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const c=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return a.current=c,c},[]);return E.useEffect(()=>()=>{var c;(c=a==null?void 0:a.current)==null||c.disconnect()},[]),W.createElement("div",{className:"react-flow__nodes",style:id},l.map(c=>{var P,L,O;let d=c.type||"default";e.nodeTypes[d]||(i==null||i("003",vn.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(c.draggable||t&&typeof c.draggable>"u"),_=!!(c.selectable||s&&typeof c.selectable>"u"),x=!!(c.connectable||n&&typeof c.connectable>"u"),N=!!(c.focusable||r&&typeof c.focusable>"u"),p=e.nodeExtent?qc(c.positionAbsolute,e.nodeExtent):c.positionAbsolute,g=(p==null?void 0:p.x)??0,y=(p==null?void 0:p.y)??0,w=IN({x:g,y,width:c.width??0,height:c.height??0,origin:e.nodeOrigin});return W.createElement(f,{key:c.id,id:c.id,className:c.className,style:c.style,type:d,data:c.data,sourcePosition:c.sourcePosition||ie.Bottom,targetPosition:c.targetPosition||ie.Top,hidden:c.hidden,xPos:g,yPos:y,xPosOrigin:w.x,yPosOrigin:w.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!c.selected,isDraggable:h,isSelectable:_,isConnectable:x,isFocusable:N,resizeObserver:u,dragHandle:c.dragHandle,zIndex:((P=c[De])==null?void 0:P.z)??0,isParent:!!((L=c[De])!=null&&L.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!c.width&&!!c.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:c.ariaLabel,hasHandleBounds:!!((O=c[De])!=null&&O.handleBounds)})}))};d0.displayName="NodeRenderer";var PN=E.memo(d0);const AN=(e,t,n)=>n===ie.Left?e-t:n===ie.Right?e+t:e,MN=(e,t,n)=>n===ie.Top?e-t:n===ie.Bottom?e+t:e,pp="react-flow__edgeupdater",hp=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:s,onMouseEnter:o,onMouseOut:i,type:l})=>W.createElement("circle",{onMouseDown:s,onMouseEnter:o,onMouseOut:i,className:et([pp,`${pp}-${l}`]),cx:AN(t,r,e),cy:MN(n,r,e),r,stroke:"transparent",fill:"transparent"}),RN=()=>!0;var kr=e=>{const t=({id:n,className:r,type:s,data:o,onClick:i,onEdgeDoubleClick:l,selected:a,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:_,labelBgBorderRadius:x,style:N,source:p,target:g,sourceX:y,sourceY:w,targetX:P,targetY:L,sourcePosition:O,targetPosition:A,elementsSelectable:j,hidden:z,sourceHandleId:U,targetHandleId:Z,onContextMenu:D,onMouseEnter:v,onMouseMove:k,onMouseLeave:T,reconnectRadius:M,onReconnect:I,onReconnectStart:S,onReconnectEnd:b,markerEnd:F,markerStart:R,rfId:X,ariaLabel:Q,isFocusable:re,isReconnectable:J,pathOptions:fe,interactionWidth:V,disableKeyboardA11y:me})=>{const K=E.useRef(null),[C,B]=E.useState(!1),[te,q]=E.useState(!1),ae=Ye(),pe=E.useMemo(()=>`url('#${Hu(R,X)}')`,[R,X]),oe=E.useMemo(()=>`url('#${Hu(F,X)}')`,[F,X]);if(z)return null;const ee=he=>{var Me;const{edges:xe,addSelectedEdges:ke,unselectNodesAndEdges:Fe,multiSelectionActive:ye}=ae.getState(),tt=xe.find(ms=>ms.id===n);tt&&(j&&(ae.setState({nodesSelectionActive:!1}),tt.selected&&ye?(Fe({nodes:[],edges:[tt]}),(Me=K.current)==null||Me.blur()):ke([n])),i&&i(he,tt))},ge=Cs(n,ae.getState,l),de=Cs(n,ae.getState,D),H=Cs(n,ae.getState,v),$=Cs(n,ae.getState,k),G=Cs(n,ae.getState,T),Y=(he,xe)=>{if(he.button!==0)return;const{edges:ke,isValidConnection:Fe}=ae.getState(),ye=xe?g:p,tt=(xe?Z:U)||null,Me=xe?"target":"source",ms=Fe||RN,zl=xe,gs=ke.find(Yn=>Yn.id===n);q(!0),S==null||S(he,gs,Me);const Dl=Yn=>{q(!1),b==null||b(Yn,gs,Me)};Gg({event:he,handleId:tt,nodeId:ye,onConnect:Yn=>I==null?void 0:I(gs,Yn),isTarget:zl,getState:ae.getState,setState:ae.setState,isValidConnection:ms,edgeUpdaterType:Me,onReconnectEnd:Dl})},se=he=>Y(he,!0),le=he=>Y(he,!1),we=()=>B(!0),Ee=()=>B(!1),be=!j&&!i,ce=he=>{var xe;if(!me&&Og.includes(he.key)&&j){const{unselectNodesAndEdges:ke,addSelectedEdges:Fe,edges:ye}=ae.getState();he.key==="Escape"?((xe=K.current)==null||xe.blur(),ke({edges:[ye.find(Me=>Me.id===n)]})):Fe([n])}};return W.createElement("g",{className:et(["react-flow__edge",`react-flow__edge-${s}`,r,{selected:a,animated:u,inactive:be,updating:C}]),onClick:ee,onDoubleClick:ge,onContextMenu:de,onMouseEnter:H,onMouseMove:$,onMouseLeave:G,onKeyDown:re?ce:void 0,tabIndex:re?0:void 0,role:re?"button":"img","data-testid":`rf__edge-${n}`,"aria-label":Q===null?void 0:Q||`Edge from ${p} to ${g}`,"aria-describedby":re?`${t0}-${X}`:void 0,ref:K},!te&&W.createElement(e,{id:n,source:p,target:g,selected:a,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:_,labelBgBorderRadius:x,data:o,style:N,sourceX:y,sourceY:w,targetX:P,targetY:L,sourcePosition:O,targetPosition:A,sourceHandleId:U,targetHandleId:Z,markerStart:pe,markerEnd:oe,pathOptions:fe,interactionWidth:V}),J&&W.createElement(W.Fragment,null,(J==="source"||J===!0)&&W.createElement(hp,{position:O,centerX:y,centerY:w,radius:M,onMouseDown:se,onMouseEnter:we,onMouseOut:Ee,type:"source"}),(J==="target"||J===!0)&&W.createElement(hp,{position:A,centerX:P,centerY:L,radius:M,onMouseDown:le,onMouseEnter:we,onMouseOut:Ee,type:"target"})))};return t.displayName="EdgeWrapper",E.memo(t)};function ON(e){const t={default:kr(e.default||dl),straight:kr(e.bezier||td),step:kr(e.step||ed),smoothstep:kr(e.step||jl),simplebezier:kr(e.simplebezier||Jc)},n={},r=Object.keys(e).filter(s=>!["default","bezier"].includes(s)).reduce((s,o)=>(s[o]=kr(e[o]||dl),s),n);return{...t,...r}}function mp(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,s=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,i=(n==null?void 0:n.height)||t.height;switch(e){case ie.Top:return{x:r+o/2,y:s};case ie.Right:return{x:r+o,y:s+i/2};case ie.Bottom:return{x:r+o/2,y:s+i};case ie.Left:return{x:r,y:s+i/2}}}function gp(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const LN=(e,t,n,r,s,o)=>{const i=mp(n,e,t),l=mp(o,r,s);return{sourceX:i.x,sourceY:i.y,targetX:l.x,targetY:l.y}};function $N({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:s,targetHeight:o,width:i,height:l,transform:a}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+s),y2:Math.max(e.y+r,t.y+o)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=So({x:(0-a[0])/a[2],y:(0-a[1])/a[2],width:i/a[2],height:l/a[2]}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),f=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*f)>0}function yp(e){var r,s,o,i,l;const t=((r=e==null?void 0:e[De])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)||0,y:((l=e==null?void 0:e.positionAbsolute)==null?void 0:l.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}const BN=[{level:0,isMaxLevel:!0,edges:[]}];function jN(e,t,n=!1){let r=-1;const s=e.reduce((i,l)=>{var c,d;const a=Pt(l.zIndex);let u=a?l.zIndex:0;if(n){const f=t.get(l.target),h=t.get(l.source),_=l.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),x=Math.max(((c=h==null?void 0:h[De])==null?void 0:c.z)||0,((d=f==null?void 0:f[De])==null?void 0:d.z)||0,1e3);u=(a?l.zIndex:0)+(_?x:0)}return i[u]?i[u].push(l):i[u]=[l],r=u>r?u:r,i},{}),o=Object.entries(s).map(([i,l])=>{const a=+i;return{edges:l,level:a,isMaxLevel:a===r}});return o.length===0?BN:o}function FN(e,t,n){const r=Ie(E.useCallback(s=>e?s.edges.filter(o=>{const i=t.get(o.source),l=t.get(o.target);return(i==null?void 0:i.width)&&(i==null?void 0:i.height)&&(l==null?void 0:l.width)&&(l==null?void 0:l.height)&&$N({sourcePos:i.positionAbsolute||{x:0,y:0},targetPos:l.positionAbsolute||{x:0,y:0},sourceWidth:i.width,sourceHeight:i.height,targetWidth:l.width,targetHeight:l.height,width:s.width,height:s.height,transform:s.transform})}):s.edges,[e,t]));return jN(r,t,n)}const zN=({color:e="none",strokeWidth:t=1})=>W.createElement("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),DN=({color:e="none",strokeWidth:t=1})=>W.createElement("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),vp={[_r.Arrow]:zN,[_r.ArrowClosed]:DN};function UN(e){const t=Ye();return E.useMemo(()=>{var s,o;return Object.prototype.hasOwnProperty.call(vp,e)?vp[e]:((o=(s=t.getState()).onError)==null||o.call(s,"009",vn.error009(e)),null)},[e])}const HN=({id:e,type:t,color:n,width:r=12.5,height:s=12.5,markerUnits:o="strokeWidth",strokeWidth:i,orient:l="auto-start-reverse"})=>{const a=UN(t);return a?W.createElement("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${s}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:l,refX:"0",refY:"0"},W.createElement(a,{color:n,strokeWidth:i})):null},WN=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((s,o)=>([o.markerStart,o.markerEnd].forEach(i=>{if(i&&typeof i=="object"){const l=Hu(i,t);r.includes(l)||(s.push({id:l,color:i.color||e,...i}),r.push(l))}}),s),[]).sort((s,o)=>s.id.localeCompare(o.id))},f0=({defaultColor:e,rfId:t})=>{const n=Ie(E.useCallback(WN({defaultColor:e,rfId:t}),[e,t]),(r,s)=>!(r.length!==s.length||r.some((o,i)=>o.id!==s[i].id)));return W.createElement("defs",null,n.map(r=>W.createElement(HN,{id:r.id,key:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient})))};f0.displayName="MarkerDefinitions";var VN=E.memo(f0);const GN=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),p0=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:s,noPanClassName:o,onEdgeContextMenu:i,onEdgeMouseEnter:l,onEdgeMouseMove:a,onEdgeMouseLeave:u,onEdgeClick:c,onEdgeDoubleClick:d,onReconnect:f,onReconnectStart:h,onReconnectEnd:_,reconnectRadius:x,children:N,disableKeyboardA11y:p})=>{const{edgesFocusable:g,edgesUpdatable:y,elementsSelectable:w,width:P,height:L,connectionMode:O,nodeInternals:A,onError:j}=Ie(GN,Qe),z=FN(t,A,n);return P?W.createElement(W.Fragment,null,z.map(({level:U,edges:Z,isMaxLevel:D})=>W.createElement("svg",{key:U,style:{zIndex:U},width:P,height:L,className:"react-flow__edges react-flow__container"},D&&W.createElement(VN,{defaultColor:e,rfId:r}),W.createElement("g",null,Z.map(v=>{const[k,T,M]=yp(A.get(v.source)),[I,S,b]=yp(A.get(v.target));if(!M||!b)return null;let F=v.type||"default";s[F]||(j==null||j("011",vn.error011(F)),F="default");const R=s[F]||s.default,X=O===vr.Strict?S.target:(S.target??[]).concat(S.source??[]),Q=gp(T.source,v.sourceHandle),re=gp(X,v.targetHandle),J=(Q==null?void 0:Q.position)||ie.Bottom,fe=(re==null?void 0:re.position)||ie.Top,V=!!(v.focusable||g&&typeof v.focusable>"u"),me=v.reconnectable||v.updatable,K=typeof f<"u"&&(me||y&&typeof me>"u");if(!Q||!re)return j==null||j("008",vn.error008(Q,v)),null;const{sourceX:C,sourceY:B,targetX:te,targetY:q}=LN(k,Q,J,I,re,fe);return W.createElement(R,{key:v.id,id:v.id,className:et([v.className,o]),type:F,data:v.data,selected:!!v.selected,animated:!!v.animated,hidden:!!v.hidden,label:v.label,labelStyle:v.labelStyle,labelShowBg:v.labelShowBg,labelBgStyle:v.labelBgStyle,labelBgPadding:v.labelBgPadding,labelBgBorderRadius:v.labelBgBorderRadius,style:v.style,source:v.source,target:v.target,sourceHandleId:v.sourceHandle,targetHandleId:v.targetHandle,markerEnd:v.markerEnd,markerStart:v.markerStart,sourceX:C,sourceY:B,targetX:te,targetY:q,sourcePosition:J,targetPosition:fe,elementsSelectable:w,onContextMenu:i,onMouseEnter:l,onMouseMove:a,onMouseLeave:u,onClick:c,onEdgeDoubleClick:d,onReconnect:f,onReconnectStart:h,onReconnectEnd:_,reconnectRadius:x,rfId:r,ariaLabel:v.ariaLabel,isFocusable:V,isReconnectable:K,pathOptions:"pathOptions"in v?v.pathOptions:void 0,interactionWidth:v.interactionWidth,disableKeyboardA11y:p})})))),N):null};p0.displayName="EdgeRenderer";var YN=E.memo(p0);const KN=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function XN({children:e}){const t=Ie(KN);return W.createElement("div",{className:"react-flow__viewport react-flow__container",style:{transform:t}},e)}function QN(e){const t=od(),n=E.useRef(!1);E.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const ZN={[ie.Left]:ie.Right,[ie.Right]:ie.Left,[ie.Top]:ie.Bottom,[ie.Bottom]:ie.Top},h0=({nodeId:e,handleType:t,style:n,type:r=Pn.Bezier,CustomComponent:s,connectionStatus:o})=>{var L,O,A;const{fromNode:i,handleId:l,toX:a,toY:u,connectionMode:c}=Ie(E.useCallback(j=>({fromNode:j.nodeInternals.get(e),handleId:j.connectionHandleId,toX:(j.connectionPosition.x-j.transform[0])/j.transform[2],toY:(j.connectionPosition.y-j.transform[1])/j.transform[2],connectionMode:j.connectionMode}),[e]),Qe),d=(L=i==null?void 0:i[De])==null?void 0:L.handleBounds;let f=d==null?void 0:d[t];if(c===vr.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!i||!f)return null;const h=l?f.find(j=>j.id===l):f[0],_=h?h.x+h.width/2:(i.width??0)/2,x=h?h.y+h.height/2:i.height??0,N=(((O=i.positionAbsolute)==null?void 0:O.x)??0)+_,p=(((A=i.positionAbsolute)==null?void 0:A.y)??0)+x,g=h==null?void 0:h.position,y=g?ZN[g]:null;if(!g||!y)return null;if(s)return W.createElement(s,{connectionLineType:r,connectionLineStyle:n,fromNode:i,fromHandle:h,fromX:N,fromY:p,toX:a,toY:u,fromPosition:g,toPosition:y,connectionStatus:o});let w="";const P={sourceX:N,sourceY:p,sourcePosition:g,targetX:a,targetY:u,targetPosition:y};return r===Pn.Bezier?[w]=Fg(P):r===Pn.Step?[w]=Uu({...P,borderRadius:0}):r===Pn.SmoothStep?[w]=Uu(P):r===Pn.SimpleBezier?[w]=jg(P):w=`M${N},${p} ${a},${u}`,W.createElement("path",{d:w,fill:"none",className:"react-flow__connection-path",style:n})};h0.displayName="ConnectionLine";const qN=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function JN({containerStyle:e,style:t,type:n,component:r}){const{nodeId:s,handleType:o,nodesConnectable:i,width:l,height:a,connectionStatus:u}=Ie(qN,Qe);return!(s&&o&&l&&i)?null:W.createElement("svg",{style:e,width:l,height:a,className:"react-flow__edges react-flow__connectionline react-flow__container"},W.createElement("g",{className:et(["react-flow__connection",u])},W.createElement(h0,{nodeId:s,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:u})))}function _p(e,t){return E.useRef(null),Ye(),E.useMemo(()=>t(e),[e])}const m0=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:s,onInit:o,onNodeClick:i,onEdgeClick:l,onNodeDoubleClick:a,onEdgeDoubleClick:u,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:_,onSelectionStart:x,onSelectionEnd:N,connectionLineType:p,connectionLineStyle:g,connectionLineComponent:y,connectionLineContainerStyle:w,selectionKeyCode:P,selectionOnDrag:L,selectionMode:O,multiSelectionKeyCode:A,panActivationKeyCode:j,zoomActivationKeyCode:z,deleteKeyCode:U,onlyRenderVisibleElements:Z,elementsSelectable:D,selectNodesOnDrag:v,defaultViewport:k,translateExtent:T,minZoom:M,maxZoom:I,preventScrolling:S,defaultMarkerColor:b,zoomOnScroll:F,zoomOnPinch:R,panOnScroll:X,panOnScrollSpeed:Q,panOnScrollMode:re,zoomOnDoubleClick:J,panOnDrag:fe,onPaneClick:V,onPaneMouseEnter:me,onPaneMouseMove:K,onPaneMouseLeave:C,onPaneScroll:B,onPaneContextMenu:te,onEdgeContextMenu:q,onEdgeMouseEnter:ae,onEdgeMouseMove:pe,onEdgeMouseLeave:oe,onReconnect:ee,onReconnectStart:ge,onReconnectEnd:de,reconnectRadius:H,noDragClassName:$,noWheelClassName:G,noPanClassName:Y,elevateEdgesOnSelect:se,disableKeyboardA11y:le,nodeOrigin:we,nodeExtent:Ee,rfId:be})=>{const ce=_p(e,CN),he=_p(t,ON);return QN(o),W.createElement(TN,{onPaneClick:V,onPaneMouseEnter:me,onPaneMouseMove:K,onPaneMouseLeave:C,onPaneContextMenu:te,onPaneScroll:B,deleteKeyCode:U,selectionKeyCode:P,selectionOnDrag:L,selectionMode:O,onSelectionStart:x,onSelectionEnd:N,multiSelectionKeyCode:A,panActivationKeyCode:j,zoomActivationKeyCode:z,elementsSelectable:D,onMove:n,onMoveStart:r,onMoveEnd:s,zoomOnScroll:F,zoomOnPinch:R,zoomOnDoubleClick:J,panOnScroll:X,panOnScrollSpeed:Q,panOnScrollMode:re,panOnDrag:fe,defaultViewport:k,translateExtent:T,minZoom:M,maxZoom:I,onSelectionContextMenu:_,preventScrolling:S,noDragClassName:$,noWheelClassName:G,noPanClassName:Y,disableKeyboardA11y:le},W.createElement(XN,null,W.createElement(YN,{edgeTypes:he,onEdgeClick:l,onEdgeDoubleClick:u,onlyRenderVisibleElements:Z,onEdgeContextMenu:q,onEdgeMouseEnter:ae,onEdgeMouseMove:pe,onEdgeMouseLeave:oe,onReconnect:ee,onReconnectStart:ge,onReconnectEnd:de,reconnectRadius:H,defaultMarkerColor:b,noPanClassName:Y,elevateEdgesOnSelect:!!se,disableKeyboardA11y:le,rfId:be},W.createElement(JN,{style:g,type:p,component:y,containerStyle:w})),W.createElement("div",{className:"react-flow__edgelabel-renderer"}),W.createElement(PN,{nodeTypes:ce,onNodeClick:i,onNodeDoubleClick:a,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:v,onlyRenderVisibleElements:Z,noPanClassName:Y,noDragClassName:$,disableKeyboardA11y:le,nodeOrigin:we,nodeExtent:Ee,rfId:be})))};m0.displayName="GraphView";var eT=E.memo(m0);const Yu=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],wn={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:Yu,nodeExtent:Yu,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:vr.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],nodeDragThreshold:0,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,onSelectionChange:[],multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:CE,isValidConnection:void 0},tT=()=>U1((e,t)=>({...wn,setNodes:n=>{const{nodeInternals:r,nodeOrigin:s,elevateNodesOnSelect:o}=t();e({nodeInternals:Ea(n,r,s,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(s=>({...r,...s}))})},setDefaultNodesAndEdges:(n,r)=>{const s=typeof n<"u",o=typeof r<"u",i=s?Ea(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:i,edges:o?r:[],hasDefaultNodes:s,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:s,fitViewOnInit:o,fitViewOnInitDone:i,fitViewOnInitOptions:l,domNode:a,nodeOrigin:u}=t(),c=a==null?void 0:a.querySelector(".react-flow__viewport");if(!c)return;const d=window.getComputedStyle(c),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((x,N)=>{const p=s.get(N.id);if(p!=null&&p.hidden)s.set(p.id,{...p,[De]:{...p[De],handleBounds:void 0}});else if(p){const g=Zc(N.nodeElement);!!(g.width&&g.height&&(p.width!==g.width||p.height!==g.height||N.forceUpdate))&&(s.set(p.id,{...p,[De]:{...p[De],handleBounds:{source:fp(".source",N.nodeElement,f,u),target:fp(".target",N.nodeElement,f,u)}},...g}),x.push({id:p.id,type:"dimensions",dimensions:g}))}return x},[]);r0(s,u);const _=i||o&&!i&&s0(t,{initial:!0,...l});e({nodeInternals:new Map(s),fitViewOnInitDone:_}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,s=!1)=>{const{triggerNodeChanges:o}=t(),i=n.map(l=>{const a={id:l.id,type:"position",dragging:s};return r&&(a.positionAbsolute=l.positionAbsolute,a.position=l.position),a});o(i)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:s,hasDefaultNodes:o,nodeOrigin:i,getNodes:l,elevateNodesOnSelect:a}=t();if(n!=null&&n.length){if(o){const u=gN(n,l()),c=Ea(u,s,i,a);e({nodeInternals:c})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:s,getNodes:o}=t();let i,l=null;r?i=n.map(a=>Cn(a,!0)):(i=Ur(o(),n),l=Ur(s,[])),oi({changedNodes:i,changedEdges:l,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:s,getNodes:o}=t();let i,l=null;r?i=n.map(a=>Cn(a,!0)):(i=Ur(s,n),l=Ur(o(),[])),oi({changedNodes:l,changedEdges:i,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:s,getNodes:o}=t(),i=n||o(),l=r||s,a=i.map(c=>(c.selected=!1,Cn(c.id,!1))),u=l.map(c=>Cn(c.id,!1));oi({changedNodes:a,changedEdges:u,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:s}=t();r==null||r.scaleExtent([n,s]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:s}=t();r==null||r.scaleExtent([s,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(l=>l.selected).map(l=>Cn(l.id,!1)),i=n.filter(l=>l.selected).map(l=>Cn(l.id,!1));oi({changedNodes:o,changedEdges:i,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(s=>{s.positionAbsolute=qc(s.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:s,height:o,d3Zoom:i,d3Selection:l,translateExtent:a}=t();if(!i||!l||!n.x&&!n.y)return!1;const u=fn.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),c=[[0,0],[s,o]],d=i==null?void 0:i.constrain()(u,c,a);return i.transform(l,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:wn.connectionNodeId,connectionHandleId:wn.connectionHandleId,connectionHandleType:wn.connectionHandleType,connectionStatus:wn.connectionStatus,connectionStartHandle:wn.connectionStartHandle,connectionEndHandle:wn.connectionEndHandle}),reset:()=>e({...wn})}),Object.is),g0=({children:e})=>{const t=E.useRef(null);return t.current||(t.current=tT()),W.createElement(xE,{value:t.current},e)};g0.displayName="ReactFlowProvider";const y0=({children:e})=>E.useContext(Bl)?W.createElement(W.Fragment,null,e):W.createElement(g0,null,e);y0.displayName="ReactFlowWrapper";const nT={input:Qg,default:Vu,output:qg,group:sd},rT={default:dl,straight:td,step:ed,smoothstep:jl,simplebezier:Jc},sT=[0,0],oT=[15,15],iT={x:0,y:0,zoom:1},lT={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},v0=E.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:s,nodeTypes:o=nT,edgeTypes:i=rT,onNodeClick:l,onEdgeClick:a,onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:_,onConnectEnd:x,onClickConnectStart:N,onClickConnectEnd:p,onNodeMouseEnter:g,onNodeMouseMove:y,onNodeMouseLeave:w,onNodeContextMenu:P,onNodeDoubleClick:L,onNodeDragStart:O,onNodeDrag:A,onNodeDragStop:j,onNodesDelete:z,onEdgesDelete:U,onSelectionChange:Z,onSelectionDragStart:D,onSelectionDrag:v,onSelectionDragStop:k,onSelectionContextMenu:T,onSelectionStart:M,onSelectionEnd:I,connectionMode:S=vr.Strict,connectionLineType:b=Pn.Bezier,connectionLineStyle:F,connectionLineComponent:R,connectionLineContainerStyle:X,deleteKeyCode:Q="Backspace",selectionKeyCode:re="Shift",selectionOnDrag:J=!1,selectionMode:fe=Eo.Full,panActivationKeyCode:V="Space",multiSelectionKeyCode:me=cl()?"Meta":"Control",zoomActivationKeyCode:K=cl()?"Meta":"Control",snapToGrid:C=!1,snapGrid:B=oT,onlyRenderVisibleElements:te=!1,selectNodesOnDrag:q=!0,nodesDraggable:ae,nodesConnectable:pe,nodesFocusable:oe,nodeOrigin:ee=sT,edgesFocusable:ge,edgesUpdatable:de,elementsSelectable:H,defaultViewport:$=iT,minZoom:G=.5,maxZoom:Y=2,translateExtent:se=Yu,preventScrolling:le=!0,nodeExtent:we,defaultMarkerColor:Ee="#b1b1b7",zoomOnScroll:be=!0,zoomOnPinch:ce=!0,panOnScroll:he=!1,panOnScrollSpeed:xe=.5,panOnScrollMode:ke=ir.Free,zoomOnDoubleClick:Fe=!0,panOnDrag:ye=!0,onPaneClick:tt,onPaneMouseEnter:Me,onPaneMouseMove:ms,onPaneMouseLeave:zl,onPaneScroll:gs,onPaneContextMenu:Dl,children:ld,onEdgeContextMenu:Yn,onEdgeDoubleClick:E0,onEdgeMouseEnter:N0,onEdgeMouseMove:T0,onEdgeMouseLeave:k0,onEdgeUpdate:C0,onEdgeUpdateStart:I0,onEdgeUpdateEnd:b0,onReconnect:P0,onReconnectStart:A0,onReconnectEnd:M0,reconnectRadius:R0=10,edgeUpdaterRadius:O0=10,onNodesChange:L0,onEdgesChange:$0,noDragClassName:B0="nodrag",noWheelClassName:j0="nowheel",noPanClassName:ad="nopan",fitView:F0=!1,fitViewOptions:z0,connectOnClick:D0=!0,attributionPosition:U0,proOptions:H0,defaultEdgeOptions:W0,elevateNodesOnSelect:V0=!0,elevateEdgesOnSelect:G0=!1,disableKeyboardA11y:ud=!1,autoPanOnConnect:Y0=!0,autoPanOnNodeDrag:K0=!0,connectionRadius:X0=20,isValidConnection:Q0,onError:Z0,style:q0,id:cd,nodeDragThreshold:J0,...ey},ty)=>{const Ul=cd||"1";return W.createElement("div",{...ey,style:{...q0,...lT},ref:ty,className:et(["react-flow",s]),"data-testid":"rf__wrapper",id:cd},W.createElement(y0,null,W.createElement(eT,{onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onNodeClick:l,onEdgeClick:a,onNodeMouseEnter:g,onNodeMouseMove:y,onNodeMouseLeave:w,onNodeContextMenu:P,onNodeDoubleClick:L,nodeTypes:o,edgeTypes:i,connectionLineType:b,connectionLineStyle:F,connectionLineComponent:R,connectionLineContainerStyle:X,selectionKeyCode:re,selectionOnDrag:J,selectionMode:fe,deleteKeyCode:Q,multiSelectionKeyCode:me,panActivationKeyCode:V,zoomActivationKeyCode:K,onlyRenderVisibleElements:te,selectNodesOnDrag:q,defaultViewport:$,translateExtent:se,minZoom:G,maxZoom:Y,preventScrolling:le,zoomOnScroll:be,zoomOnPinch:ce,zoomOnDoubleClick:Fe,panOnScroll:he,panOnScrollSpeed:xe,panOnScrollMode:ke,panOnDrag:ye,onPaneClick:tt,onPaneMouseEnter:Me,onPaneMouseMove:ms,onPaneMouseLeave:zl,onPaneScroll:gs,onPaneContextMenu:Dl,onSelectionContextMenu:T,onSelectionStart:M,onSelectionEnd:I,onEdgeContextMenu:Yn,onEdgeDoubleClick:E0,onEdgeMouseEnter:N0,onEdgeMouseMove:T0,onEdgeMouseLeave:k0,onReconnect:P0??C0,onReconnectStart:A0??I0,onReconnectEnd:M0??b0,reconnectRadius:R0??O0,defaultMarkerColor:Ee,noDragClassName:B0,noWheelClassName:j0,noPanClassName:ad,elevateEdgesOnSelect:G0,rfId:Ul,disableKeyboardA11y:ud,nodeOrigin:ee,nodeExtent:we}),W.createElement(QE,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:_,onConnectEnd:x,onClickConnectStart:N,onClickConnectEnd:p,nodesDraggable:ae,nodesConnectable:pe,nodesFocusable:oe,edgesFocusable:ge,edgesUpdatable:de,elementsSelectable:H,elevateNodesOnSelect:V0,minZoom:G,maxZoom:Y,nodeExtent:we,onNodesChange:L0,onEdgesChange:$0,snapToGrid:C,snapGrid:B,connectionMode:S,translateExtent:se,connectOnClick:D0,defaultEdgeOptions:W0,fitView:F0,fitViewOptions:z0,onNodesDelete:z,onEdgesDelete:U,onNodeDragStart:O,onNodeDrag:A,onNodeDragStop:j,onSelectionDrag:v,onSelectionDragStart:D,onSelectionDragStop:k,noPanClassName:ad,nodeOrigin:ee,rfId:Ul,autoPanOnConnect:Y0,autoPanOnNodeDrag:K0,onError:Z0,connectionRadius:X0,isValidConnection:Q0,nodeDragThreshold:J0}),W.createElement(KE,{onSelectionChange:Z}),ld,W.createElement(SE,{proOptions:H0,position:U0}),W.createElement(tN,{rfId:Ul,disableKeyboardA11y:ud})))});v0.displayName="ReactFlow";const _0=({id:e,x:t,y:n,width:r,height:s,style:o,color:i,strokeColor:l,strokeWidth:a,className:u,borderRadius:c,shapeRendering:d,onClick:f,selected:h})=>{const{background:_,backgroundColor:x}=o||{},N=i||_||x;return W.createElement("rect",{className:et(["react-flow__minimap-node",{selected:h},u]),x:t,y:n,rx:c,ry:c,width:r,height:s,fill:N,stroke:l,strokeWidth:a,shapeRendering:d,onClick:f?p=>f(p,e):void 0})};_0.displayName="MiniMapNode";var aT=E.memo(_0);const uT=e=>e.nodeOrigin,cT=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),Ca=e=>e instanceof Function?e:()=>e;function dT({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:s=2,nodeComponent:o=aT,onClick:i}){const l=Ie(cT,Qe),a=Ie(uT),u=Ca(t),c=Ca(e),d=Ca(n),f=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return W.createElement(W.Fragment,null,l.map(h=>{const{x:_,y:x}=cr(h,a).positionAbsolute;return W.createElement(o,{key:h.id,x:_,y:x,width:h.width,height:h.height,style:h.style,selected:h.selected,className:d(h),color:u(h),borderRadius:r,strokeColor:c(h),strokeWidth:s,shapeRendering:f,onClick:i,id:h.id})}))}var fT=E.memo(dT);const pT=200,hT=150,mT=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?TE(Fl(t,e.nodeOrigin),n):n,rfId:e.rfId}},gT="react-flow__minimap-desc";function x0({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:s="",nodeBorderRadius:o=5,nodeStrokeWidth:i=2,nodeComponent:l,maskColor:a="rgb(240, 240, 240, 0.6)",maskStrokeColor:u="none",maskStrokeWidth:c=1,position:d="bottom-right",onClick:f,onNodeClick:h,pannable:_=!1,zoomable:x=!1,ariaLabel:N="React Flow mini map",inversePan:p=!1,zoomStep:g=10,offsetScale:y=5}){const w=Ye(),P=E.useRef(null),{boundingRect:L,viewBB:O,rfId:A}=Ie(mT,Qe),j=(e==null?void 0:e.width)??pT,z=(e==null?void 0:e.height)??hT,U=L.width/j,Z=L.height/z,D=Math.max(U,Z),v=D*j,k=D*z,T=y*D,M=L.x-(v-L.width)/2-T,I=L.y-(k-L.height)/2-T,S=v+T*2,b=k+T*2,F=`${gT}-${A}`,R=E.useRef(0);R.current=D,E.useEffect(()=>{if(P.current){const re=It(P.current),J=me=>{const{transform:K,d3Selection:C,d3Zoom:B}=w.getState();if(me.sourceEvent.type!=="wheel"||!C||!B)return;const te=-me.sourceEvent.deltaY*(me.sourceEvent.deltaMode===1?.05:me.sourceEvent.deltaMode?1:.002)*g,q=K[2]*Math.pow(2,te);B.scaleTo(C,q)},fe=me=>{const{transform:K,d3Selection:C,d3Zoom:B,translateExtent:te,width:q,height:ae}=w.getState();if(me.sourceEvent.type!=="mousemove"||!C||!B)return;const pe=R.current*Math.max(1,K[2])*(p?-1:1),oe={x:K[0]-me.sourceEvent.movementX*pe,y:K[1]-me.sourceEvent.movementY*pe},ee=[[0,0],[q,ae]],ge=fn.translate(oe.x,oe.y).scale(K[2]),de=B.constrain()(ge,ee,te);B.transform(C,de)},V=Ig().on("zoom",_?fe:null).on("zoom.wheel",x?J:null);return re.call(V),()=>{re.on("zoom",null)}}},[_,x,p,g]);const X=f?re=>{const J=jt(re);f(re,{x:J[0],y:J[1]})}:void 0,Q=h?(re,J)=>{const fe=w.getState().nodeInternals.get(J);h(re,fe)}:void 0;return W.createElement(Qc,{position:d,style:e,className:et(["react-flow__minimap",t]),"data-testid":"rf__minimap"},W.createElement("svg",{width:j,height:z,viewBox:`${M} ${I} ${S} ${b}`,role:"img","aria-labelledby":F,ref:P,onClick:X},N&&W.createElement("title",{id:F},N),W.createElement(fT,{onClick:Q,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:s,nodeStrokeWidth:i,nodeComponent:l}),W.createElement("path",{className:"react-flow__minimap-mask",d:`M${M-T},${I-T}h${S+T*2}v${b+T*2}h${-S-T*2}z + M${O.x},${O.y}h${O.width}v${O.height}h${-O.width}z`,fill:a,fillRule:"evenodd",stroke:u,strokeWidth:c,pointerEvents:"none"})))}x0.displayName="MiniMap";var yT=E.memo(x0);function vT(){return W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32"},W.createElement("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"}))}function _T(){return W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5"},W.createElement("path",{d:"M0 0h32v4.2H0z"}))}function xT(){return W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30"},W.createElement("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"}))}function wT(){return W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},W.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"}))}function ST(){return W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},W.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"}))}const Hr=({children:e,className:t,...n})=>W.createElement("button",{type:"button",className:et(["react-flow__controls-button",t]),...n},e);Hr.displayName="ControlButton";const ET=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom}),w0=({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:s,onZoomIn:o,onZoomOut:i,onFitView:l,onInteractiveChange:a,className:u,children:c,position:d="bottom-left"})=>{const f=Ye(),[h,_]=E.useState(!1),{isInteractive:x,minZoomReached:N,maxZoomReached:p}=Ie(ET,Qe),{zoomIn:g,zoomOut:y,fitView:w}=od();if(E.useEffect(()=>{_(!0)},[]),!h)return null;const P=()=>{g(),o==null||o()},L=()=>{y(),i==null||i()},O=()=>{w(s),l==null||l()},A=()=>{f.setState({nodesDraggable:!x,nodesConnectable:!x,elementsSelectable:!x}),a==null||a(!x)};return W.createElement(Qc,{className:et(["react-flow__controls",u]),position:d,style:e,"data-testid":"rf__controls"},t&&W.createElement(W.Fragment,null,W.createElement(Hr,{onClick:P,className:"react-flow__controls-zoomin",title:"zoom in","aria-label":"zoom in",disabled:p},W.createElement(vT,null)),W.createElement(Hr,{onClick:L,className:"react-flow__controls-zoomout",title:"zoom out","aria-label":"zoom out",disabled:N},W.createElement(_T,null))),n&&W.createElement(Hr,{className:"react-flow__controls-fitview",onClick:O,title:"fit view","aria-label":"fit view"},W.createElement(xT,null)),r&&W.createElement(Hr,{className:"react-flow__controls-interactive",onClick:A,title:"toggle interactivity","aria-label":"toggle interactivity"},x?W.createElement(ST,null):W.createElement(wT,null)),c)};w0.displayName="Controls";var NT=E.memo(w0),Wt;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Wt||(Wt={}));function TT({color:e,dimensions:t,lineWidth:n}){return W.createElement("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function kT({color:e,radius:t}){return W.createElement("circle",{cx:t,cy:t,r:t,fill:e})}const CT={[Wt.Dots]:"#91919a",[Wt.Lines]:"#eee",[Wt.Cross]:"#e2e2e2"},IT={[Wt.Dots]:1,[Wt.Lines]:1,[Wt.Cross]:6},bT=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function S0({id:e,variant:t=Wt.Dots,gap:n=20,size:r,lineWidth:s=1,offset:o=2,color:i,style:l,className:a}){const u=E.useRef(null),{transform:c,patternId:d}=Ie(bT,Qe),f=i||CT[t],h=r||IT[t],_=t===Wt.Dots,x=t===Wt.Cross,N=Array.isArray(n)?n:[n,n],p=[N[0]*c[2]||1,N[1]*c[2]||1],g=h*c[2],y=x?[g,g]:p,w=_?[g/o,g/o]:[y[0]/o,y[1]/o];return W.createElement("svg",{className:et(["react-flow__background",a]),style:{...l,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:u,"data-testid":"rf__background"},W.createElement("pattern",{id:d+e,x:c[0]%p[0],y:c[1]%p[1],width:p[0],height:p[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${w[0]},-${w[1]})`},_?W.createElement(kT,{color:f,radius:g/o}):W.createElement(TT,{dimensions:y,color:f,lineWidth:s})),W.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${d+e})`}))}S0.displayName="Background";var PT=E.memo(S0);const Ia=320,ba=120,xp=["#94a3b8","#60a5fa","#22d3ee","#34d399"],AT=["rgba(226, 232, 240, 0.28)","rgba(219, 234, 254, 0.28)","rgba(207, 250, 254, 0.28)","rgba(209, 250, 229, 0.24)"],MT=88,RT=120,OT=72,LT=58,st=100,Ne=30,tr=96,Pa=22,Aa=6,wp=10,$T=20,Sp=240,li=300,Ma=168,Ra=74,Ep=58,Ps=48,BT=87,jT=26,FT=30,zT=.36,DT=240,UT=.35,HT=1.8,WT=st*2+tr+60;function VT(e,t,n){const r=Math.min(176,Math.max(104,e.length*7.4)),s=Math.min(112,Math.max(66,n(t).length*6.1+14));return r+s+BT+jT}function GT(e,t,n){const r=Math.min(220,Math.max(96,e.length*8)),s=Math.min(122,Math.max(66,n(t).length*6.1+14));return r+s+FT}function ai(e,t,n,r){return e<=0?r:e*t+Math.max(0,e-1)*n+r}function ui(e,t=40){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}…`}function Ku(e){const t=$e(e),n=t.split("/");return n.length<=3?t:`${n[n.length-2]}/${n[n.length-1]}`}function As(e){const t=e.split(".");return t[t.length-1]||e}function En(e,t){const n=e.trim().length>0?e.trim():Ku(t),r=n.split("/");return r.length>0?r[r.length-1]??n:n}function ft(e){if(!e)return null;const t=e.replace(/^builtins\./,""),n=t.split("."),r=n.length>0?n[n.length-1]:t;return r.length<=16?r:`${r.slice(0,15)}…`}function bi(e){const t=e.split("/");return t.length<=2?e:t.slice(Math.max(0,t.length-3)).join("/")}function Oa(e,t,n){return[e,t,n].join(` +`)}function Kn(e,t){const n=[e.address];return e.msgType&&n.push(`Message Type: ${e.msgType}`),t==="collection"&&e.collectionKind==="topic"&&n.push("Collection Topic"),t==="collection"&&e.collectionKind==="relay"&&n.push("Collection Relay"),n.join(` +`)}function Ms(e,t,n){return n==="collection"&&e.collectionKind?"mono topology-stream-label is-collection":`mono topology-stream-label ${t}`}function Rs(e,t,n,r){return n==="collection"&&e.collectionKind?e.collectionKind==="topic"?t==="is-output"?{border:r?"1px solid #fb923c":"1px solid #f28e2b",background:r?"#2e1f10":"#fff1dd",color:r?"#fed7aa":"#8a4f10",borderRadius:999}:t==="is-input"?{border:r?"1px solid #f59e0b":"1px solid #f6a44d",background:r?"#2a2115":"#fff8ef",color:r?"#fdba74":"#8a4f10",borderRadius:999}:{border:r?"1px solid #fb923c":"1px solid #f8b66f",background:r?"#2a2115":"#fff8ef",color:r?"#fdba74":"#8a4f10",borderRadius:10}:t==="is-output"?{border:r?"1px solid #d8b4fe":"1px solid #b07aa1",background:r?"#2a1d3a":"#f8eef5",color:r?"#e9d5ff":"#6f3f66",borderRadius:999}:t==="is-input"?{border:r?"1px solid #c084fc":"1px solid #c194b7",background:r?"#251b33":"#fbf3f8",color:r?"#e9d5ff":"#6f3f66",borderRadius:999}:{border:r?"1px solid #c084fc":"1px solid #d3accb",background:r?"#251b33":"#fbf3f8",color:r?"#e9d5ff":"#6f3f66",borderRadius:10}:{border:t==="is-input"?r?"1px solid #818cf8":"1px solid #c7d2fe":t==="is-output"?r?"1px solid #22d3ee":"1px solid #7dd3fc":r?"1px solid #4b5563":"1px solid #cbd5e1",background:t==="is-input"?r?"#1d2644":"#eef2ff":t==="is-output"?r?"#0f2e37":"#ecfeff":r?"#182235":"#f8fafc",color:r?"#dbeafe":"#1e293b",borderRadius:t==="is-unknown"?8:999}}function Wr(e){return e.trim().toUpperCase().replace(/^INPUT_/,"").replace(/^OUTPUT_/,"").replace(/^TOPIC_/,"")}function YT(e){const t=new Set,n=new Map,r=new Map;for(const s of e){t.add(s.address);const o=$e(s.address);n.set(o,s.address),r.set(Wr(s.name),s.address),r.set(Wr(En(s.name,s.address)),s.address),r.set(Wr(o),s.address);const i=o.split("/").pop();i&&r.set(Wr(i),s.address)}return{addressSet:t,withoutEndpointMap:n,normalizedNameMap:r}}function KT(e,t,n,r,s,o,i){const l=s+8,a=s+o,u=Math.max(l,Math.min(i-Ne-10,a-Ne-8)),c=Math.max(l,Math.min(u,Math.floor((i-Ne)/2))),d=e.map(N=>{const p=t.get(N),g=n.get(N);if(!p||!g)return null;const y=p.y-r;return{top:y,bottom:y+g.height}}).filter(N=>N!==null).sort((N,p)=>N.top-p.top);if(d.length===0)return c;let f=c,h=-1,_=l;for(const N of d){const p=N.top-_;p>=Ne+8&&p>h&&(h=p,f=_+Math.floor((p-Ne)/2)),_=Math.max(_,N.bottom)}const x=a-_;return x>=Ne+8&&x>h&&(f=_+Math.floor((x-Ne)/2)),Math.max(l,Math.min(u,f))}function ci(e,t){if(!e)return null;if(t.addressSet.has(e))return e;if(t.withoutEndpointMap.has(e))return t.withoutEndpointMap.get(e)??null;const n=e.split(":")[0];if(t.withoutEndpointMap.has(n))return t.withoutEndpointMap.get(n)??null;const r=Wr(e);if(t.normalizedNameMap.has(r))return t.normalizedNameMap.get(r)??null;const s=Wr(n.split("/").pop()??"");if(t.normalizedNameMap.has(s))return t.normalizedNameMap.get(s)??null;for(const o of t.addressSet)if(o.startsWith(`${e}:`)||o.startsWith(`${n}:`))return o;return null}function XT(e){return typeof e=="object"&&e!==null&&typeof e.x=="number"&&Number.isFinite(e.x)&&typeof e.y=="number"&&Number.isFinite(e.y)}function QT(e){if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return!1;const t=new Set;for(const n of e.nodes)if(!n||typeof n.id!="string"||n.id.length===0||t.has(n.id)||(t.add(n.id),!XT(n.position)))return!1;for(const n of e.nodes)if(typeof n.parentNode=="string"&&!t.has(n.parentNode))return!1;for(const n of e.edges)if(!n||typeof n.source!="string"||typeof n.target!="string"||!t.has(n.source)||!t.has(n.target))return!1;return!0}function ZT(e,t,n,r,s,o){var me,K;const i=r==="orthogonal"?"step":r==="smooth"?"smoothstep":"default",{units:l,collections:a}=Hc(e),u=Pl(a),c=Iu(l,a,n),d=new Map,f=new Map;for(const C of c){const B=l.get(C);if(B){d.set(C,B);continue}const te=a.get(C);te&&f.set(C,te)}const h=new Set(d.keys()),_=new Set(f.keys()),x=Al(a),N=n?a.get(n)??null:null,p=N?`scope:${N.address}`:null,g=new Map,y=new Map;for(const C of l.values())for(const B of C.streams)g.set(B.address,C.address),g.set($e(B.address),C.address);for(const C of a.values())for(const B of C.streams)y.set(B.address,C.address),y.set($e(B.address),C.address);for(const[C,B]of u.collectionByInternalTopic.entries())y.set(C,B);const w=new Map;for(const C of l.values())for(const B of C.streams)w.set(B.address,B.address),w.set($e(B.address),B.address);for(const C of a.values())for(const B of C.streams)w.set(B.address,B.address),w.set($e(B.address),B.address);for(const[C,B]of u.endpointByInternalTopic.entries())w.set(C,B);const P=C=>w.get(C)??w.get($e(C))??C,L=[];for(const[C,B]of Object.entries(e.graph))for(const te of B){const q=P(C),ae=P(te);q!==ae&&L.push({from:q,to:ae})}const O=new Map,A=(C,B)=>{O.set(C,B),O.set($e(C),B)};for(const C of d.values())for(const B of C.streams)A(B.address,{ownerId:`unit:${C.address}`,ownerKind:"unit"});for(const C of f.values())for(const B of C.streams)A(B.address,{ownerId:`collection:${C.address}`,ownerKind:"collection"});const j=new Set(O.keys()),z=L.filter(C=>j.has(C.from)||j.has(C.to)),U=new Set(j);for(const C of z)U.add(C.from),U.add(C.to);const Z=new Set,D=new Map;for(const C of d.values()){const B=`unit:${C.address}`;Z.add(B),D.set(B,C.name)}for(const C of f.values()){const B=`collection:${C.address}`;Z.add(B),D.set(B,C.name)}for(const C of U){if(O.has(C))continue;const B=y.get(C),te=g.get(C);if(B&&_.has(B)){A(C,{ownerId:`collection:${B}`,ownerKind:"collection"});continue}if(te&&h.has(te)){A(C,{ownerId:`unit:${te}`,ownerKind:"unit"});continue}if(N&&p&&(B&&bu(B,N.address,x)||te&&bu(te,N.address,x))){A(C,{ownerId:p,ownerKind:"scope_collection"});continue}const q=te??B??null;if(q){let pe=x.get(q)??null;for(;pe;){if(_.has(pe)){A(C,{ownerId:`collection:${pe}`,ownerKind:"collection_proxy"});break}pe=x.get(pe)??null}if(O.has(C))continue}const ae=`orphan:${C}`;A(C,{ownerId:ae,ownerKind:"orphan"}),Z.add(ae),D.set(ae,Ku(C))}const v=[],k=new Set;for(const C of z){const B=(me=O.get(C.from))==null?void 0:me.ownerId,te=(K=O.get(C.to))==null?void 0:K.ownerId;if(!B||!te||B===te||!Z.has(B)||!Z.has(te))continue;const q=`${B}->${te}`;k.has(q)||(k.add(q),v.push({from:B,to:te}))}const T=Array.from(Z).sort((C,B)=>{const te=D.get(C)??C,q=D.get(B)??B;return te.localeCompare(q)}),M=Y_(T,v),I=new Map;for(const C of T){const B=M.get(C)??0,te=I.get(B);te?te.push(C):I.set(B,[C])}const S=new Map;for(const C of d.values()){const B=C.streams.filter(G=>G.direction==="input").length,te=C.streams.filter(G=>G.direction==="output").length,q=C.streams.filter(G=>G.direction==="unknown").length,ae=C.tasks.length,pe=Math.max(1,B,te,ae,q),oe=GT(C.name,C.componentType,As),ee=ai(pe,st,Aa,22),ge=ai(ae,tr,wp,$T),de=t==="lr"?Math.max(WT,oe):Math.max(220,oe,ee,ge);if(t==="lr"){const G=Math.max(1,B,te,ae),Y=Math.max(126,Ps+16+G*30+(q>0?Ne+12:0)+12);S.set(`unit:${C.address}`,{width:de,height:Y});continue}const H=Math.max(1,(B>0?1:0)+(ae>0?1:0)+(q>0?1:0)+(te>0?1:0)),$=Math.max(216,Ps+18+H*Ne+Math.max(0,H-1)*12+16);S.set(`unit:${C.address}`,{width:de,height:$})}for(const C of f.values()){const B=C.streams.filter(de=>de.direction==="input").length,te=C.streams.filter(de=>de.direction==="output").length,q=C.streams.filter(de=>de.direction==="unknown").length,ae=Math.max(1,B,te,q),pe=Math.max(t==="lr"?li:300,ai(ae,st,Aa,22)),oe=VT(C.name,C.componentType,As),ee=Math.max(pe,oe),ge=t==="lr"?Math.max(124,Ra+16+Math.max(1,B,te)*30+(q>0?Ne+12:0)+12):Math.max(176,Ra+14+Math.max(1,(B>0?1:0)+(q>0?1:0)+(te>0?1:0))*Ne+12);S.set(`collection:${C.address}`,{width:ee,height:ge})}for(const C of T)S.has(C)||S.set(C,{width:Sp,height:74});const b=new Map,F=Array.from(I.keys()).sort((C,B)=>C-B);if(t==="tb"){let C=28;for(const B of F){const te=I.get(B)??[];let q=24,ae=0;for(const pe of te){const oe=S.get(pe)??{width:Ia,height:ba};b.set(pe,{x:q,y:C}),q+=oe.width+OT,ae=Math.max(ae,oe.height)}C+=ae+MT}}else{let C=24;for(const B of F){const te=I.get(B)??[];let q=28,ae=0;for(const pe of te){const oe=S.get(pe)??{width:Ia,height:ba};b.set(pe,{x:C,y:q}),q+=oe.height+LT,ae=Math.max(ae,oe.width)}C+=ae+RT}}const R=[],X=[],Q={stroke:s?"#8fa3bc":"#475569",strokeWidth:1.5},re={type:_r.ArrowClosed,width:12,height:12,color:s?"#8fa3bc":"#475569"};function J(C,B,te,q,ae,pe,oe,ee){if(te.length===0)return;const ge=B.width-22,de=te.length*st,H=te.length>1?Math.max(6,Math.min(16,Math.floor((ge-de)/(te.length-1)))):0,$=de+H*Math.max(0,te.length-1),G=11+Math.max(0,Math.floor((ge-$)/2));te.forEach((Y,se)=>{const le=Rs(Y,ae,pe,s),we=G+se*(st+H);ee.push({id:`stream:${Y.address}`,parentNode:C,extent:"parent",draggable:!1,data:{label:m.jsxs("span",{className:Ms(Y,ae,pe),title:Kn(Y,pe),children:[m.jsx("span",{className:"topology-stream-name",children:En(Y.name,Y.address)}),ft(Y.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(Y.msgType),"]"]}):null]})},position:{x:we,y:q},sourcePosition:oe==="tb"?ie.Bottom:ie.Right,targetPosition:oe==="tb"?ie.Top:ie.Left,style:{width:st,height:Ne,borderRadius:le.borderRadius,border:le.border,background:le.background,color:le.color,fontSize:8,padding:"0 6px"}})})}if(N&&p){const C=T.filter(he=>he.startsWith("unit:")||he.startsWith("collection:"));let B=24,te=32,q=24+li,ae=32+Ma;if(C.length>0){B=Number.POSITIVE_INFINITY,te=Number.POSITIVE_INFINITY,q=Number.NEGATIVE_INFINITY,ae=Number.NEGATIVE_INFINITY;for(const he of C){const xe=b.get(he),ke=S.get(he);!xe||!ke||(B=Math.min(B,xe.x),te=Math.min(te,xe.y),q=Math.max(q,xe.x+ke.width),ae=Math.max(ae,xe.y+ke.height))}(!Number.isFinite(B)||!Number.isFinite(te))&&(B=24,te=32,q=24+li,ae=32+Ma)}const pe=N.streams.filter(he=>he.direction==="input"),oe=N.streams.filter(he=>he.direction==="output"),ee=N.streams.filter(he=>he.direction==="unknown"),ge=Math.max(1,pe.length,oe.length,ee.length),de=ai(ge,st,Aa,24),H=pe.length>0,$=oe.length>0,G=t==="lr"?72:76,Y=t==="lr"?108:64,se=28,le=t==="lr"?Math.max(Y,G+Math.max(1,pe.length,oe.length)*30+(ee.length>0?Ne+10:0)+8):H?Math.max(Y,G+Ne+8):Y,we=t==="tb"?$?Math.max(Ep,Ne+20):20:Ep,Ee=Math.max(0,ae-te),be={x:B-se,y:te-le},ce={width:Math.max(360,q-B+se*2,de+se*2),height:Math.max(180,Ee+le+we)};if(C.length>0){const he=(B+q)/2,xe=be.x+se,ke=be.x+ce.width-se,Fe=(xe+ke)/2,ye=Math.round(Fe-he);if(ye!==0)for(const tt of C){const Me=b.get(tt);Me&&b.set(tt,{x:Me.x+ye,y:Me.y})}}if(R.push({id:p,position:be,sourcePosition:t==="tb"?ie.Bottom:ie.Right,targetPosition:t==="tb"?ie.Top:ie.Left,data:{label:m.jsxs("div",{className:"topology-collection-label topology-collection-label--scope",title:Oa(N.name,N.address,N.componentType),children:[m.jsxs("span",{className:"topology-title-row topology-title-row--collection",children:[m.jsxs("span",{className:"topology-title-row",children:[m.jsx("strong",{children:N.name}),m.jsx("span",{className:"topology-unit-type",title:N.componentType,children:As(N.componentType)})]}),m.jsx("button",{type:"button","data-scope-up":"true",className:"topology-collection-scope-up-btn nodrag nopan",title:"Go up one scope","aria-label":`Go up from ${N.name}`,onPointerDown:he=>{he.stopPropagation()},onMouseDown:he=>{he.stopPropagation()},onClick:he=>{var xe;he.stopPropagation(),(xe=o==null?void 0:o.goUpFromScope)==null||xe.call(o,N.address)},children:"↑ Up"})]}),m.jsx("span",{className:"mono",children:bi(N.address)})]})},style:{width:ce.width,height:ce.height,border:`2px dashed ${s?"#4b647e":xp[0]}`,borderRadius:14,background:s?"rgba(15, 23, 42, 0.45)":"rgba(226, 232, 240, 0.24)",color:s?"#e2e8f0":"#0f172a",padding:10,zIndex:-1},draggable:!1,selectable:!1}),t==="lr"){const ke=Math.max(1,pe.length,oe.length)*30,Fe=Math.max(G,le-ke-8);pe.forEach((ye,tt)=>{const Me=Rs(ye,"is-input","collection",s);R.push({id:`stream:${ye.address}`,parentNode:p,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:Ms(ye,"is-input","collection"),title:Kn(ye,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(ye.name,ye.address)}),ft(ye.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(ye.msgType),"]"]}):null]})},position:{x:12,y:Fe+tt*30},style:{width:st,height:Ne,borderRadius:Me.borderRadius,border:Me.border,background:Me.background,color:Me.color,padding:"0 6px"}})}),oe.forEach((ye,tt)=>{const Me=Rs(ye,"is-output","collection",s);R.push({id:`stream:${ye.address}`,parentNode:p,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:Ms(ye,"is-output","collection"),title:Kn(ye,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(ye.name,ye.address)}),ft(ye.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(ye.msgType),"]"]}):null]})},position:{x:ce.width-st-12,y:Fe+tt*30},style:{width:st,height:Ne,borderRadius:Me.borderRadius,border:Me.border,background:Me.background,color:Me.color,padding:"0 6px"}})}),ee.length>0&&J(p,ce,ee,56+Math.max(pe.length,oe.length)*30+4,"is-unknown","collection",t,R)}else{const he=Math.max(G,le-Ne-8),xe=le+Ee,ke=Math.min(ce.height-Ne-10,xe+Math.max(6,Math.floor((we-Ne)/2)));if(J(p,ce,pe,he,"is-input","collection",t,R),J(p,ce,oe,ke,"is-output","collection",t,R),ee.length>0){const Fe=KT(C,b,S,be.y,le,Ee,ce.height);J(p,ce,ee,Fe,"is-unknown","collection",t,R)}}}for(const C of f.values()){const B=`collection:${C.address}`,te=b.get(B)??{x:0,y:0},q=S.get(B)??{width:li,height:Ma};R.push({id:B,position:te,sourcePosition:t==="tb"?ie.Bottom:ie.Right,targetPosition:t==="tb"?ie.Top:ie.Left,data:{label:m.jsxs("div",{className:"topology-collection-label",title:Oa(C.name,C.address,C.componentType),children:[m.jsxs("span",{className:"topology-title-row topology-title-row--collection",children:[m.jsxs("span",{className:"topology-title-row",children:[m.jsx("strong",{children:C.name}),m.jsx("span",{className:"topology-unit-type",title:C.componentType,children:As(C.componentType)})]}),m.jsx("button",{type:"button","data-open-collection":"true",className:"topology-collection-open-btn nodrag nopan",title:"Open collection scope","aria-label":`Open ${C.name} scope`,onPointerDown:ee=>{ee.stopPropagation()},onMouseDown:ee=>{ee.stopPropagation()},onClick:ee=>{var ge;ee.stopPropagation(),(ge=o==null?void 0:o.openCollectionScope)==null||ge.call(o,C.address)},children:"Open"})]}),m.jsx("span",{className:"mono",children:bi(C.address)})]})},style:{width:q.width,height:q.height,border:`2px dashed ${s?"#4f8ccf":xp[1]}`,borderRadius:12,background:s?"rgba(30, 58, 95, 0.34)":AT[1],color:s?"#e2e8f0":"#0f172a",padding:10}});const ae=C.streams.filter(ee=>ee.direction==="input"),pe=C.streams.filter(ee=>ee.direction==="output"),oe=C.streams.filter(ee=>ee.direction==="unknown");if(t==="lr"){const ge=Ra+6;ae.forEach((de,H)=>{const $=Rs(de,"is-input","collection",s);R.push({id:`stream:${de.address}`,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:Ms(de,"is-input","collection"),title:Kn(de,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(de.name,de.address)}),ft(de.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(de.msgType),"]"]}):null]})},position:{x:10,y:ge+H*30},style:{width:st,height:Ne,borderRadius:$.borderRadius,border:$.border,background:$.background,color:$.color,padding:"0 6px"}})}),pe.forEach((de,H)=>{const $=Rs(de,"is-output","collection",s);R.push({id:`stream:${de.address}`,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:Ms(de,"is-output","collection"),title:Kn(de,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(de.name,de.address)}),ft(de.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(de.msgType),"]"]}):null]})},position:{x:q.width-st-10,y:ge+H*30},style:{width:st,height:Ne,borderRadius:$.borderRadius,border:$.border,background:$.background,color:$.color,padding:"0 6px"}})}),oe.length>0&&J(B,q,oe,q.height-Ne-10,"is-unknown","collection",t,R)}else{const ge=Math.max(86+Ne+10,q.height-Ne-12);J(B,q,ae,86,"is-input","collection",t,R),J(B,q,pe,ge,"is-output","collection",t,R),oe.length>0&&J(B,q,oe,Math.floor((q.height-Ne)/2)+14,"is-unknown","collection",t,R)}}for(const C of d.values()){const B=`unit:${C.address}`,te=b.get(B)??{x:0,y:0},q=S.get(B)??{width:Ia,height:ba},ae=C.streams.filter(de=>de.direction==="input"),pe=C.streams.filter(de=>de.direction==="output"),oe=C.streams.filter(de=>de.direction==="unknown"),ee=new Set(C.streams.map(de=>de.address)),ge=YT(C.streams);if(R.push({id:B,position:te,data:{label:m.jsxs("div",{className:"topology-unit-label",children:[m.jsxs("span",{className:"topology-title-row",title:Oa(C.name,C.address,C.componentType),children:[m.jsx("strong",{children:C.name}),m.jsx("span",{className:"topology-unit-type",title:C.componentType,children:As(C.componentType)})]}),m.jsx("span",{className:"mono topology-unit-address",title:C.address,children:ui(bi(C.address),34)})]})},style:{width:q.width,height:q.height,border:s?"1px solid #3b82f6":"1px solid #93c5fd",borderRadius:12,background:s?"#0f1f35":"#f8fbff",padding:10}}),t==="lr"){const de=Ps+6;ae.forEach((H,$)=>{R.push({id:`stream:${H.address}`,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:"mono topology-stream-label is-input",title:Kn(H,"unit"),children:[m.jsx("span",{className:"topology-stream-name",children:En(H.name,H.address)}),ft(H.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(H.msgType),"]"]}):null]})},position:{x:10,y:de+$*30},style:{width:st,height:Ne,borderRadius:999,border:s?"1px solid #818cf8":"1px solid #c7d2fe",background:s?"#1d2644":"#eef2ff",padding:"0 6px"}})}),pe.forEach((H,$)=>{R.push({id:`stream:${H.address}`,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsxs("span",{className:"mono topology-stream-label is-output",title:Kn(H,"unit"),children:[m.jsx("span",{className:"topology-stream-name",children:En(H.name,H.address)}),ft(H.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ft(H.msgType),"]"]}):null]})},position:{x:q.width-st-10,y:de+$*30},style:{width:st,height:Ne,borderRadius:999,border:s?"1px solid #22d3ee":"1px solid #7dd3fc",background:s?"#0f2e37":"#ecfeff",padding:"0 6px"}})}),C.tasks.forEach((H,$)=>{const G=`task:${C.address}:${H.name}`,Y=ci(H.subscribes,ge),se=Array.from(new Set(H.publishes.map(le=>ci(le,ge)).filter(le=>le!==null)));R.push({id:G,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Right,targetPosition:ie.Left,data:{label:m.jsx("span",{className:"mono topology-task-label",title:H.name,children:ui(H.name,15)})},position:{x:Math.floor((q.width-tr)/2),y:de+$*30+4},style:{width:tr,height:Pa,borderRadius:999,border:s?"1px solid #41536c":"1px solid #dbe2ea",background:s?"#1a273a":"#f1f5f9",padding:"0 6px"}}),Y&&ee.has(Y)&&X.push({id:`edge:internal:${C.address}:${H.name}:sub`,source:`stream:${Y}`,target:G,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:re,style:Q});for(const le of se)ee.has(le)&&X.push({id:`edge:internal:${C.address}:${H.name}:${le}`,source:G,target:`stream:${le}`,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:re,style:Q})}),oe.length>0&&J(B,q,oe,q.height-Ne-8,"is-unknown","unit",t,R)}else{const de=Ps+Ne+12,H=q.height-Ne-12,$=H-8,G=de+Math.max(0,Math.floor(($-de-Pa)/2));J(B,q,ae,Ps+2,"is-input","unit",t,R),J(B,q,pe,H,"is-output","unit",t,R),oe.length>0&&J(B,q,oe,G+28,"is-unknown","unit",t,R);const Y=C.tasks.length,se=q.width-20,le=Y*tr,we=Y>1?Math.max(wp,Math.min(22,Math.floor((se-le)/(Y-1)))):0,Ee=le+we*Math.max(0,Y-1),be=10+Math.max(0,Math.floor((se-Ee)/2));C.tasks.forEach((ce,he)=>{const xe=`task:${C.address}:${ce.name}`,ke=ci(ce.subscribes,ge),Fe=Array.from(new Set(ce.publishes.map(ye=>ci(ye,ge)).filter(ye=>ye!==null)));R.push({id:xe,parentNode:B,extent:"parent",draggable:!1,sourcePosition:ie.Bottom,targetPosition:ie.Top,data:{label:m.jsx("span",{className:"mono topology-task-label",title:ce.name,children:ui(ce.name,15)})},position:{x:be+he*(tr+we),y:G},style:{width:tr,height:Pa,borderRadius:999,border:s?"1px solid #41536c":"1px solid #dbe2ea",background:s?"#1a273a":"#f1f5f9",padding:"0 6px"}}),ke&&ee.has(ke)&&X.push({id:`edge:internal:${C.address}:tb:${ce.name}:sub`,source:`stream:${ke}`,target:xe,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:re,style:Q});for(const ye of Fe)ee.has(ye)&&X.push({id:`edge:internal:${C.address}:tb:${ce.name}:${ye}`,source:xe,target:`stream:${ye}`,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:re,style:Q})})}}for(const C of U){const B=O.get(C);if(B&&B.ownerKind!=="orphan")continue;const te=`orphan:${C}`,q=b.get(te)??{x:0,y:0};R.push({id:`stream:${C}`,position:q,sourcePosition:t==="tb"?ie.Bottom:ie.Right,targetPosition:t==="tb"?ie.Top:ie.Left,data:{label:m.jsxs("div",{className:"mono topology-orphan-label",children:[m.jsx("strong",{children:Ku(C)}),m.jsx("span",{children:ui(C,54)})]})},style:{width:Sp,border:s?"1px solid #41536c":"1px solid #dbe2ea",borderRadius:10,background:s?"#111c2e":"#ffffff",padding:6}})}const fe=C=>{const B=O.get(C);return B?B.ownerKind==="unit"||B.ownerKind==="collection"||B.ownerKind==="scope_collection"||B.ownerKind==="orphan"?`stream:${C}`:B.ownerId:`stream:${C}`},V=C=>{var B;return((B=O.get(C))==null?void 0:B.ownerId)??null};for(const C of z){const B=fe(C.from),te=fe(C.to);if(B===te)continue;const q=V(C.from),ae=V(C.to);if(!(q&&ae&&q===ae&&q.startsWith("scope:"))&&!(q&&ae&&q===ae&&q.startsWith("collection:"))){if(q&&ae&&q===ae&&q.startsWith("unit:")){const pe=d.get(q.slice(5));if(pe&&pe.tasks.length>0)continue}X.push({id:`edge:${C.from}->${C.to}`,source:B,target:te,type:i,zIndex:1,markerEnd:{type:_r.ArrowClosed,width:12,height:12,color:s?"#8fa3bc":"#64748b"},style:{stroke:s?"#8fa3bc":"#64748b",strokeWidth:1.2}})}}return{nodes:R,edges:X}}function qT(e){const t=new Map;if(!e)return t;for(const r of e.units.values())for(const s of r.streams)t.set(s.address,s.address),t.set($e(s.address),s.address);for(const r of e.collections.values())for(const s of r.streams)t.set(s.address,s.address),t.set($e(s.address),s.address);const n=Pl(e.collections);for(const[r,s]of n.endpointByInternalTopic.entries())t.set(r,s);return t}function JT(e,t){const n=new Set;for(const r of e){const s=t.get(r)??t.get($e(r))??null;s&&(n.add(s),n.add($e(s)))}return n}function e2(e,t,n){if(!e||t.size===0)return t;const r=new Map;for(const[l,a]of Object.entries(e.graph)){const u=n.get(l)??n.get($e(l))??l,c=r.get(u)??[];for(const d of a){const f=n.get(d)??n.get($e(d))??d;c.push(f)}r.set(u,c)}const s=new Set,o=Array.from(t);for(;o.length>0;){const l=o.shift();if(!l||s.has(l))continue;s.add(l);const a=r.get(l)??[];for(const u of a)s.has(u)||o.push(u)}const i=new Set;for(const l of s)i.add(l),i.add($e(l));return i}function t2(e,t){if(t.size===0||e.edges.length===0)return e;const n=a=>{if(!a)return!1;const u=$e(a);return t.has(a)||t.has(u)},r=new Map;e.edges.forEach((a,u)=>{const c=r.get(a.source);c?c.push(u):r.set(a.source,[u])});const s=new Set,o=new Set,i=[],l=a=>{o.has(a)||(o.add(a),i.push(a))};for(e.edges.forEach((a,u)=>{const c=a.source.startsWith("stream:")?a.source.slice(7):null,d=n2(a.id);n(c??d)&&(s.add(u),l(a.target))});i.length>0;){const a=i.shift();if(!a)continue;const u=r.get(a);if(!(!u||u.length===0))for(const c of u)s.has(c)||(s.add(c),l(e.edges[c].target))}return s.size===0?e:{nodes:e.nodes,edges:e.edges.map((a,u)=>{if(!s.has(u)||typeof a.className=="string"&&a.className.includes("topology-internal-edge"))return a;const d=typeof a.markerEnd=="object"&&a.markerEnd!==null?{...a.markerEnd,color:"#2563eb"}:{type:_r.ArrowClosed,width:12,height:12,color:"#2563eb"};return{...a,animated:!0,markerEnd:d,style:{...a.style??{},stroke:"#2563eb",strokeWidth:1.7}}})}}function n2(e){if(!e.startsWith("edge:")||e.startsWith("edge:internal:"))return null;const t=e.slice(5),n=t.indexOf("->");if(n<=0)return null;const r=t.slice(0,n);return r.length>0?r:null}function r2(e){const t=new Map;if(!e)return t;for(const n of e.units.values())for(const r of n.streams){const s={direction:r.direction,unitAddress:n.address};t.set(r.address,s),t.set($e(r.address),s)}return t}function s2(e){const t=new Map;if(!e)return t;const n=(r,s)=>{const o=s.split(":").slice(1).join(":");o.length>0&&!t.has(o)&&t.set(o,r)};for(const r of e.units.values())for(const s of r.streams)n(r.address,s.address);for(const r of e.collections.values())for(const s of r.streams)n(r.address,s.address);return t}function o2(e,t,n){if(!e)return null;const{topic:r,endpointToken:s}=bl(n);let o=-1,i=null;const l=(a,u,c)=>{const d=i2(t,u,c,r,s);d>o&&(o=d,i=a)};for(const a of e.units.values())for(const u of a.streams)l(a.address,u.address,u.direction);for(const a of e.collections.values())for(const u of a.streams)l(a.address,u.address,u.direction);return o>0?i:null}function i2(e,t,n,r,s){if(e==="publisher"&&n!=="output"||e==="subscriber"&&n!=="input")return-1;let o=0;const i=$e(t);return r.length>0&&(i===r?o+=12:t.startsWith(`${r}:`)?o+=8:t.includes(r)&&(o+=2)),s.length>0&&(t.endsWith(`:${s}`)?o+=14:t.includes(s)&&(o+=7)),o}function l2(e,t,n){if(e.kind!=="publisher"&&e.kind!=="subscriber")return null;const r=e.streamAddress.split(":").slice(1).join(":");return e.unitAddress??t.get(r)??n(e.kind,e.streamAddress)??null}function a2(e,t,n,r){if(e.kind==="unit")return`unit:${e.unitAddress}`;if(e.kind==="collection")return`collection:${e.collectionAddress}`;if(t&&(r!=null&&r.units.has(t)))return`unit:${t}`;if(t&&(r!=null&&r.collections.has(t)))return`collection:${t}`;const s=e.streamAddress;if(!s)return null;const o=s.split(":").slice(1).join(":"),i=s.split(":")[0]??"",l=n.nodes.find(a=>{if(!a.id.startsWith("stream:"))return!1;const u=a.id.slice(7);return u.includes(o)||u.startsWith(i)});return(l==null?void 0:l.id)??null}function u2({autoFocusOnSelection:e,focusSelection:t,focusRequestId:n,flowInitTick:r,flowInstanceRef:s,flowData:o,topologyComponents:i,activeScope:l,parentCollectionByAddress:a,componentAddressByEndpointId:u,componentAddressByStreamSelection:c,setScopeCollectionAddress:d}){const f=E.useRef(0),h=E.useRef(null),_=E.useRef(null);E.useEffect(()=>{if(!e||!t||n<=0||f.current===n||!s.current)return;const N=l2(t,u,c),p=t.kind==="unit"?t.unitAddress:t.kind==="collection"?t.collectionAddress:N;if(p&&i){const P=a.get(p)??null;if(P!==l){h.current=n,d(P);return}}const g=a2(t,N,o,i);if(!g||!o.nodes.some(P=>P.id===g))return;const y=()=>{const P=s.current;if(!P){_.current=null;return}P.fitView({nodes:[{id:g}],padding:zT,duration:DT,minZoom:UT,maxZoom:HT}),f.current=n,h.current=null,_.current=null};if(h.current===n){if(_.current===n)return;_.current=n,requestAnimationFrame(()=>{requestAnimationFrame(y)});return}y()},[l,e,u,c,o,r,n,t,s,a,d,i])}function c2(e){return Object.values(e).reduce((t,n)=>t+n.length,0)}function d2({graphSnapshot:e,profilingSnapshot:t=null,recentEvents:n,immersive:r=!1,showLegend:s=!0,showMiniMap:o=!0,darkMode:i=!1,defaultLayout:l="tb",edgeConnectorStyle:a="curved",autoFitOnLayoutScopeChange:u=!0,autoFocusOnSelection:c=!0,focusSelection:d=null,focusRequestId:f=0,onEntitySelect:h}){var de;const _=E.useRef(null),x=E.useRef(null),N=E.useRef(new Map),p=E.useRef(""),g=E.useRef(null),y=E.useRef(new Map),[w,P]=E.useState(!1),[L,O]=E.useState(0),[A,j]=E.useState(null),[z,U]=E.useState([]),Z=l;E.useEffect(()=>{if(!t){y.current=new Map,U([]);return}const H=y.current,$=new Map,G=new Set;for(const le of Object.values(t)){const we=le.process_id;for(const Ee of Object.values(le.publishers)){const be=typeof Ee.messages_published_total=="number"&&Number.isFinite(Ee.messages_published_total)?Ee.messages_published_total:0,ce=`${we}:${Ee.endpoint_id}`,he=H.get(ce);he!==void 0&&be>he&&G.add(`${Ee.topic}:${Ee.endpoint_id}`),$.set(ce,be)}}y.current=$;const Y=Array.from(G).sort(),se=Y.join("|");se!==p.current&&(p.current=se,U(Y))},[t]);const D=E.useMemo(()=>e?Hc(e):null,[e]),v=E.useMemo(()=>D?Al(D.collections):new Map,[D]),k=E.useMemo(()=>D?K_(D.collections,A):[],[D,A]),T=E.useMemo(()=>r2(D),[D]),M=E.useMemo(()=>s2(D),[D]),I=E.useMemo(()=>(H,$)=>o2(D,H,$),[D]),S=E.useMemo(()=>qT(D),[D]),b=E.useMemo(()=>JT(z,S),[z,S]),F=E.useMemo(()=>e2(e,b,S),[b,S,e]),R=k.length>0?k[k.length-1]:null,X=E.useCallback(H=>{D!=null&&D.collections.has(H)&&j(H)},[D]),Q=E.useCallback(H=>{j(v.get(H)??null)},[v]),re=`${Z}:${R??"root"}`,J=E.useMemo(()=>e?ZT(e,Z,R,a,i,{openCollectionScope:X,goUpFromScope:Q}):{nodes:[],edges:[]},[e,Z,R,a,i,X,Q]),fe=E.useMemo(()=>{if(J.nodes.length>0&&QT(J))return N.current.set(re,J),J;const H=N.current.get(re);return H&&H.nodes.length>0?H:J},[J,re]),V=E.useMemo(()=>t2(fe,F),[F,fe]),me=H=>{H.startsWith("collection:")&&X(H.slice(11))},K=H=>{if(H.startsWith("unit:")){h==null||h({kind:"unit",unitAddress:H.slice(5)});return}if(H.startsWith("collection:")){h==null||h({kind:"collection",collectionAddress:H.slice(11)});return}if(H.startsWith("stream:")){const $=H.slice(7),G=T.get($)??T.get($e($));if(!G){h==null||h(null);return}if(G.direction==="output"){h==null||h({kind:"publisher",streamAddress:$,unitAddress:G.unitAddress});return}if(G.direction==="input"){h==null||h({kind:"subscriber",streamAddress:$,unitAddress:G.unitAddress});return}}h==null||h(null)};if(E.useEffect(()=>{!D||!A||D.collections.has(A)||j(null)},[A,D]),E.useEffect(()=>{if(!D||!e){g.current=null;return}const H=Iu(D.units,D.collections,null),$=H.length===1?H[0]:null,G=$!==null&&Q_(e,D.units,D.collections,$),Y=$!==null&&D.collections.has($)&&X_($,D.units,D.collections)&&!G,se=`${H.slice().sort().join("|")}::${Y?"ready":"wait"}`;g.current!==se&&(g.current=se,A===null&&(!Y||!$||j($)))},[e,A,D]),E.useEffect(()=>{if(!D||!A)return;Iu(D.units,D.collections,A).length===0&&j(null)},[A,D]),u2({autoFocusOnSelection:c,focusSelection:d,focusRequestId:f,flowInitTick:L,flowInstanceRef:x,flowData:fe,topologyComponents:D,activeScope:R,parentCollectionByAddress:v,componentAddressByEndpointId:M,componentAddressByStreamSelection:I,setScopeCollectionAddress:j}),E.useEffect(()=>{const H=()=>{var Y;const $=((Y=_.current)==null?void 0:Y.closest(".dashboard-layout"))??_.current,G=document.fullscreenElement;if(!$||!G){P(!1);return}P(G===$||G.contains($))};return document.addEventListener("fullscreenchange",H),()=>{document.removeEventListener("fullscreenchange",H)}},[]),!e)return r?m.jsx("section",{className:"topology-immersive",children:m.jsx("div",{className:"topology-empty-state",children:m.jsx("p",{children:"Waiting for initial snapshot..."})})}):m.jsx(el,{title:"Topology",subtitle:"Live graph, process ownership, and edge changes",children:m.jsx("div",{className:"placeholder",children:m.jsx("p",{children:"Waiting for initial snapshot..."})})});const C=Object.keys(e.graph).length,B=c2(e.graph),te=Object.keys(e.sessions).length,q=Object.values(e.processes),ae=((de=_.current)==null?void 0:de.closest(".dashboard-layout"))??_.current??document.documentElement,pe=async()=>{if(ae)try{document.fullscreenElement?await document.exitFullscreen():await ae.requestFullscreen()}catch{}},oe=m.jsxs("div",{className:"topology-flow-toolbar",children:[m.jsx("span",{className:"topology-flow-toolbar__label",children:"Scope"}),m.jsx("button",{type:"button",className:`topology-layout-btn ${R?"":"is-active"}`,onClick:()=>j(null),children:"Root"}),m.jsx("button",{type:"button",className:"topology-layout-btn",disabled:!R,onClick:()=>{R&&j(v.get(R)??null)},children:"Up"}),k.length>0?m.jsx("span",{className:"topology-scope-sep",children:"|"}):null,k.length>0?m.jsx("span",{className:"topology-scope-trail",children:k.map((H,$)=>{const G=D==null?void 0:D.collections.get(H),Y=(G==null?void 0:G.name)??bi(H),se=G?[G.name,G.address,G.componentType].join(` +`):H,le=$===k.length-1;return m.jsxs("span",{className:"topology-scope-segment",children:[le?m.jsx("span",{className:"topology-scope-tail",title:se,children:Y}):m.jsx("button",{type:"button",className:"topology-scope-chip",title:se,onClick:()=>j(H),children:Y}),le?null:m.jsx("span",{className:"topology-scope-slash",children:"/"})]},`scope-${H}`)})}):null]}),ee=m.jsxs("div",{className:"topology-viewport-legend","aria-label":"Topology legend",children:[m.jsx("span",{className:"topology-viewport-legend__title",children:"Legend"}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-collection"}),"Collection"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-input"}),"Subscriber"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-output"}),"Publisher"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-topic"}),"Collection Topic"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-relay"}),"Collection Relay"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-task"}),"Task"]})]}),ge=m.jsxs(m.Fragment,{children:[r?null:oe,m.jsxs("div",{className:`topology-flow-shell ${r?"is-immersive":""} ${i?"is-dark":""}`,ref:_,children:[r?m.jsx("div",{className:"topology-viewport-top-controls",children:oe}):null,r&&s?m.jsx("div",{className:"topology-viewport-bottom-dock",children:ee}):null,r||!s?null:ee,m.jsxs(v0,{nodes:V.nodes,edges:V.edges,fitView:!0,fitViewOptions:{padding:.18,minZoom:.4},minZoom:.2,maxZoom:2.4,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,onInit:H=>{x.current=H,O($=>$+1)},onPaneClick:()=>h==null?void 0:h(null),onNodeClick:(H,$)=>{if($.id.startsWith("scope:")){const G=H.target,Y=G==null?void 0:G.closest('[data-scope-up="true"]');if(Y){if(!Y.disabled){const se=$.id.slice(6);Q(se)}return}}if($.id.startsWith("collection:")){const G=H.target;if(G!=null&&G.closest('[data-open-collection="true"]')){me($.id);return}h==null||h({kind:"collection",collectionAddress:$.id.slice(11)});return}K($.id)},proOptions:{hideAttribution:!0},children:[m.jsx(PT,{color:i?"#243244":"#d5deea",gap:24}),o?m.jsx(yT,{pannable:!0,zoomable:!0,maskColor:i?"rgba(2, 6, 23, 0.72)":"rgba(15, 23, 42, 0.10)",style:{background:i?"#0e1728":"#f8fafc",border:i?"1px solid #334155":"1px solid #dbe2ea",borderRadius:8},nodeColor:H=>H.id.startsWith("collection:")?i?"#1d4f79":"#dbeafe":H.id.startsWith("unit:")?i?"#1e3a62":"#bfdbfe":i?"#334155":"#cbd5e1"}):null,m.jsx(NT,{showFitView:!1,showInteractive:!1,children:m.jsx(Hr,{className:"topology-control-btn",title:w?"Exit fullscreen":"Enter fullscreen","aria-label":w?"Exit fullscreen":"Enter fullscreen",onClick:()=>{pe()},children:"⛶"})})]},u?`topology-flow-${Z}-${R??"root"}`:"topology-flow-stable")]})]});return r?m.jsx("section",{className:"topology-immersive",children:ge}):m.jsxs(el,{title:"Topology",subtitle:"Low-level publisher/subscriber wiring with optional metadata overlays",children:[m.jsxs("div",{className:"stats-grid",children:[m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Topics"}),m.jsx("strong",{children:C})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Edges"}),m.jsx("strong",{children:B})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Sessions"}),m.jsx("strong",{children:te})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Processes"}),m.jsx("strong",{children:q.length})]})]}),ge,m.jsxs("div",{className:"panel-section",children:[m.jsx("h3",{children:"Process Ownership"}),q.length===0?m.jsx("p",{className:"muted",children:"No process ownership in current snapshot."}):m.jsxs("table",{className:"data-table",children:[m.jsx("thead",{children:m.jsxs("tr",{children:[m.jsx("th",{children:"Process ID"}),m.jsx("th",{children:"PID"}),m.jsx("th",{children:"Host"}),m.jsx("th",{children:"Units"})]})}),m.jsx("tbody",{children:q.map(H=>m.jsxs("tr",{children:[m.jsx("td",{className:"mono",children:H.process_id.slice(0,8)}),m.jsx("td",{children:H.pid??"-"}),m.jsx("td",{children:H.host??"-"}),m.jsx("td",{children:H.units.length})]},H.process_id))})]})]}),m.jsxs("div",{className:"panel-section",children:[m.jsx("h3",{children:"Recent Topology Changes"}),n.length===0?m.jsx("p",{className:"muted",children:"No topology events received yet."}):m.jsx("ul",{className:"event-list",children:n.slice(0,8).map(H=>m.jsxs("li",{className:"event-item",children:[m.jsx("span",{className:"event-pill",children:H.data.event_type}),m.jsxs("span",{className:"mono",children:["seq ",H.data.seq]}),m.jsx("span",{children:H.data.changed_topics.length>0?H.data.changed_topics.join(", "):"No topic list"})]},`topo-${H.data.seq}`))})]})]})}function We(e,t,n,r=!0){return{repr_value:n,structured_value:n,settings_schema:null,serialized_present:!0,patchable:r,patch_error:null,component_type:t,component_name:e}}function tn(e,t,n,r={},s={}){return{process_id:e,pid:t,host:"fixture-host",window_seconds:2,timestamp:1711111111,publishers:r,subscribers:s}}function Np(e,t,n){return{endpoint_id:e,topic:t,messages_published_total:n.messagesPublishedTotal??n.messagesPublishedWindow*10,messages_published_window:n.messagesPublishedWindow,publish_rate_hz_window:n.publishRateHzWindow,inflight_messages_current:n.inflightCurrent??0,num_buffers:n.numBuffers??8,timestamp:n.timestamp??1711111111}}function Tp(e,t,n){return{endpoint_id:e,topic:t,messages_received_total:n.messagesReceivedTotal??n.messagesReceivedWindow*10,messages_received_window:n.messagesReceivedWindow,channel_kind_last:n.channelKindLast??"fifo",timestamp:n.timestamp??1711111111}}function Dt(e,t="builtins.str"){return{address:e,msg_type:t,leaky:!1}}function Qt(e,t,n="builtins.str"){return{address:e,msg_type:n,host:"127.0.0.1",port:t}}function at(e,t,n){return{name:e,subscribes:t,publishes:n}}function Le(e){return String(e).padStart(2,"0")}const nn={name:"root-scope-navigation",health:{status:"ok",graph_session_active:!0,graph_address:"127.0.0.1:25978"},snapshot:{snapshot:{graph:{"SYSTEM/PING_TOPIC":["GLOBAL_PING_TOPIC"]},edge_owners:[],sessions:{"fixture-session":{edges:[{from_topic:"SYSTEM/PING_TOPIC",to_topic:"GLOBAL_PING_TOPIC"}],metadata:{components:{SYSTEM:{name:"SYSTEM",component_type:"fixture.TestSystem",children:["SYSTEM/PING"],topics:{PING:{address:"SYSTEM/PING_TOPIC",msg_type:"builtins.str"}}},"SYSTEM/PING":{name:"PING",component_type:"fixture.MessageGenerator",streams:{OUTPUT:{address:"SYSTEM/PING_TOPIC:ping-output-endpoint",msg_type:"builtins.str",host:"127.0.0.1",port:9001}},tasks:[{name:"emit",subscribes:null,publishes:["SYSTEM/PING_TOPIC"]}]}}}}},processes:{"fixture-process":{process_id:"fixture-process",pid:4201,host:"fixture-host",units:["SYSTEM/PING"]}}},settings:{SYSTEM:We("SYSTEM","fixture.TestSystem",{enabled:!0}),"SYSTEM/PING":We("PING","fixture.MessageGenerator",{rate_hz:10,message:"ping"})},profiling:{"fixture-process":tn("fixture-process",4201,["SYSTEM/PING"],{"SYSTEM/PING_TOPIC:ping-output-endpoint":{endpoint_id:"ping-output-endpoint",topic:"SYSTEM/PING_TOPIC",messages_published_total:120,messages_published_window:20,publish_rate_hz_window:10,inflight_messages_current:1,num_buffers:8,timestamp:1711111111}})}}},f2={name:"wide-fanout",health:nn.health,snapshot:{snapshot:{graph:{"STRESS/SOURCE_A":["STRESS/FANOUT_1","STRESS/FANOUT_2","STRESS/FANOUT_3","STRESS/FANOUT_4","STRESS/FANOUT_5","STRESS/FANOUT_6"],"STRESS/SOURCE_B":["STRESS/FANOUT_1","STRESS/FANOUT_2"],"STRESS/FANOUT_1":["STRESS/SINK_1"],"STRESS/FANOUT_2":["STRESS/SINK_2"],"STRESS/FANOUT_3":["STRESS/SINK_3"],"STRESS/FANOUT_4":["STRESS/SINK_4"],"STRESS/FANOUT_5":["STRESS/SINK_5"],"STRESS/FANOUT_6":["STRESS/SINK_6"]},edge_owners:[],sessions:{"wide-session":{edges:[],metadata:{components:{STRESS:{name:"STRESS",component_type:"fixture.StressCollection",children:["STRESS/AGGREGATOR","STRESS/SINK_1","STRESS/SINK_2","STRESS/SINK_3","STRESS/SINK_4","STRESS/SINK_5","STRESS/SINK_6"]},"STRESS/AGGREGATOR":{name:"AGGREGATOR",component_type:"fixture.AggregatorUnit",streams:{INPUT_ALPHA:{address:"STRESS/SOURCE_A:input-alpha",msg_type:"builtins.str",leaky:!1},INPUT_BETA:{address:"STRESS/SOURCE_B:input-beta",msg_type:"builtins.str",leaky:!1},OUTPUT_1:{address:"STRESS/FANOUT_1:fanout-1",msg_type:"builtins.str",host:"127.0.0.1",port:9101},OUTPUT_2:{address:"STRESS/FANOUT_2:fanout-2",msg_type:"builtins.str",host:"127.0.0.1",port:9102},OUTPUT_3:{address:"STRESS/FANOUT_3:fanout-3",msg_type:"builtins.str",host:"127.0.0.1",port:9103},OUTPUT_4:{address:"STRESS/FANOUT_4:fanout-4",msg_type:"builtins.str",host:"127.0.0.1",port:9104},OUTPUT_5:{address:"STRESS/FANOUT_5:fanout-5",msg_type:"builtins.str",host:"127.0.0.1",port:9105},OUTPUT_6:{address:"STRESS/FANOUT_6:fanout-6",msg_type:"builtins.str",host:"127.0.0.1",port:9106}},tasks:[{name:"normalize_payload",subscribes:"STRESS/SOURCE_A",publishes:["STRESS/FANOUT_1","STRESS/FANOUT_2"]},{name:"deduplicate_messages",subscribes:"STRESS/SOURCE_B",publishes:["STRESS/FANOUT_3","STRESS/FANOUT_4"]},{name:"route_priority_messages",subscribes:"STRESS/SOURCE_A",publishes:["STRESS/FANOUT_5","STRESS/FANOUT_6"]}]},...Object.fromEntries(Array.from({length:6},(e,t)=>{const n=t+1;return[`STRESS/SINK_${n}`,{name:`SINK_${n}`,component_type:"fixture.DebugOutput",streams:{INPUT:{address:`STRESS/FANOUT_${n}:sink-${n}`,msg_type:"builtins.str",leaky:!1}},tasks:[{name:"on_message",subscribes:`STRESS/FANOUT_${n}`,publishes:[]}]}]}))}}}},processes:{"wide-process":{process_id:"wide-process",pid:4301,host:"fixture-host",units:["STRESS/AGGREGATOR","STRESS/SINK_1","STRESS/SINK_2","STRESS/SINK_3","STRESS/SINK_4","STRESS/SINK_5","STRESS/SINK_6"]}}},settings:{STRESS:We("STRESS","fixture.StressCollection",{mode:"stress"}),"STRESS/AGGREGATOR":We("AGGREGATOR","fixture.AggregatorUnit",{batch_size:64,strategy:"spread"})},profiling:{"wide-process":tn("wide-process",4301)}}},p2={name:"long-labels",health:nn.health,snapshot:{snapshot:{graph:{"LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME":["LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME"]},edge_owners:[],sessions:{"long-session":{edges:[],metadata:{components:{LONG_SCOPE:{name:"EXTRAORDINARILY_VERBOSE_COLLECTION_NAME_FOR_LAYOUT_TESTING",component_type:"fixture.deep.namespace.ExtremelyLongCollectionComponentType",children:["LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME"]},"LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME":{name:"COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME",component_type:"fixture.deep.namespace.componenttypes.ExceptionallyLongComponentTypeName",streams:{OUTPUT_WITH_A_LONG_NAME:{address:"LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME:publisher-endpoint-with-a-very-long-token",msg_type:"fixtures.messages.ReallyLongStructuredMessageTypeName",host:"127.0.0.1",port:9201},INPUT_WITH_A_LONG_NAME:{address:"LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME:subscriber-endpoint-with-a-very-long-token",msg_type:"fixtures.messages.ReallyLongStructuredMessageTypeName",leaky:!1}},tasks:[{name:"task_with_a_surprisingly_long_name_for_a_single_render_chip",subscribes:"LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME",publishes:["LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME"]}]}}}}},processes:{"long-process":{process_id:"long-process",pid:4401,host:"fixture-host",units:["LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME"]}}},settings:{LONG_SCOPE:We("EXTRAORDINARILY_VERBOSE_COLLECTION_NAME_FOR_LAYOUT_TESTING","fixture.deep.namespace.ExtremelyLongCollectionComponentType",{debug_mode_enabled:!0}),"LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME":We("COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME","fixture.deep.namespace.componenttypes.ExceptionallyLongComponentTypeName",{default_payload:"the_quick_brown_fox_jumps_over_the_lazy_dog_repeatedly_to_stress_text_overflow"})},profiling:{"long-process":tn("long-process",4401)}}},h2={name:"semantic-stream-names",health:nn.health,snapshot:{snapshot:{graph:{"SIN/OUTPUT_SIGNAL_TOPIC":["SIN/WAVEFORM_TOPIC"]},edge_owners:[],sessions:{"semantic-stream-session":{edges:[],metadata:{components:{SIN:{name:"SIN",component_type:"fixture.LFO",streams:{INPUT_SIGNAL:Dt("SIN/INPUT_SIGNAL_TOPIC:sin-input-signal","fixtures.array.AxisArray"),INPUT_SETTINGS:Dt("SIN/INPUT_SETTINGS_TOPIC:sin-input-settings","fixtures.config.LFOSettings"),OUTPUT_SIGNAL:Qt("SIN/OUTPUT_SIGNAL_TOPIC:sin-output-signal",9211,"fixtures.array.AxisArray")},tasks:[at("on_signal","SIN/INPUT_SIGNAL_TOPIC",[]),at("on_settings","SIN/INPUT_SETTINGS_TOPIC",[]),at("generate",null,["SIN/OUTPUT_SIGNAL_TOPIC"])]}}}}},processes:{"semantic-stream-process":{process_id:"semantic-stream-process",pid:4451,host:"fixture-host",units:["SIN"]}}},settings:{SIN:We("SIN","fixture.LFO",{freq:1.5,update_rate:60})},profiling:{"semantic-stream-process":tn("semantic-stream-process",4451)}}},Xn=Array.from({length:6},(e,t)=>`TRACE_LAB/SPARSE_SUB_${Le(t+1)}`),Qn=Array.from({length:8},(e,t)=>`TRACE_LAB/DENSE_SUB_${Le(t+1)}`),m2={name:"profiling-trace-rates",health:nn.health,snapshot:{snapshot:{graph:Object.fromEntries([["TRACE_LAB/SPARSE_TOPIC",Xn.map((e,t)=>`TRACE_LAB/SPARSE_SUB_${Le(t+1)}_TOPIC`)],["TRACE_LAB/DENSE_TOPIC",Qn.map((e,t)=>`TRACE_LAB/DENSE_SUB_${Le(t+1)}_TOPIC`)]]),edge_owners:[],sessions:{"trace-session":{edges:[],metadata:{components:{TRACE_LAB:{name:"TRACE_LAB",component_type:"fixture.TraceLabCollection",children:["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn]},"TRACE_LAB/SPARSE_PUB":{name:"SPARSE_PUB",component_type:"fixture.TracePublisherUnit",streams:{OUTPUT:Qt("TRACE_LAB/SPARSE_TOPIC:sparse-publisher-endpoint",9901)},tasks:[at("publish_sparse",null,["TRACE_LAB/SPARSE_TOPIC"])]},"TRACE_LAB/DENSE_PUB":{name:"DENSE_PUB",component_type:"fixture.TracePublisherUnit",streams:{OUTPUT:Qt("TRACE_LAB/DENSE_TOPIC:dense-publisher-endpoint",9902)},tasks:[at("publish_dense",null,["TRACE_LAB/DENSE_TOPIC"])]},...Object.fromEntries(Xn.map((e,t)=>{const n=Le(t+1);return[e,{name:`SPARSE_SUB_${n}`,component_type:"fixture.TraceSubscriberUnit",streams:{INPUT:Dt(`TRACE_LAB/SPARSE_SUB_${n}_TOPIC:sparse-subscriber-${n}`)},tasks:[at(`consume_sparse_${n}`,`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,[])]}]})),...Object.fromEntries(Qn.map((e,t)=>{const n=Le(t+1);return[e,{name:`DENSE_SUB_${n}`,component_type:"fixture.TraceSubscriberUnit",streams:{INPUT:Dt(`TRACE_LAB/DENSE_SUB_${n}_TOPIC:dense-subscriber-${n}`)},tasks:[at(`consume_dense_${n}`,`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,[])]}]}))}}}},processes:{"trace-process":{process_id:"trace-process",pid:5001,host:"fixture-host",units:["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn]}}},settings:{TRACE_LAB:We("TRACE_LAB","fixture.TraceLabCollection",{trace_enabled:!0}),"TRACE_LAB/SPARSE_PUB":We("SPARSE_PUB","fixture.TracePublisherUnit",{publish_rate_hz:1}),"TRACE_LAB/DENSE_PUB":We("DENSE_PUB","fixture.TracePublisherUnit",{publish_rate_hz:60})},profiling:{"trace-process":tn("trace-process",5001,["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn],{"TRACE_LAB/SPARSE_TOPIC:sparse-publisher-endpoint":Np("sparse-publisher-endpoint","TRACE_LAB/SPARSE_TOPIC",{messagesPublishedWindow:2,publishRateHzWindow:1,numBuffers:4}),"TRACE_LAB/DENSE_TOPIC:dense-publisher-endpoint":Np("dense-publisher-endpoint","TRACE_LAB/DENSE_TOPIC",{messagesPublishedWindow:120,publishRateHzWindow:60,inflightCurrent:2,numBuffers:16})},{...Object.fromEntries(Xn.map((e,t)=>{const n=Le(t+1);return[`TRACE_LAB/SPARSE_SUB_${n}_TOPIC:sparse-subscriber-${n}`,Tp(`sparse-subscriber-${n}`,`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,{messagesReceivedWindow:2,channelKindLast:t%2===0?"fifo":"shared_memory"})]})),...Object.fromEntries(Qn.map((e,t)=>{const n=Le(t+1);return[`TRACE_LAB/DENSE_SUB_${n}_TOPIC:dense-subscriber-${n}`,Tp(`dense-subscriber-${n}`,`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,{messagesReceivedWindow:120,channelKindLast:t<3?"tcp":t%2===0?"fifo":"shared_memory"})]}))})}},traceScenarios:[{processId:"trace-process",publisherEndpointId:"sparse-publisher-endpoint",publisherTopic:"TRACE_LAB/SPARSE_TOPIC",eventIntervalMs:140,samplesPerTick:1,timestampStepNs:1e9,publishDeltaNsBase:94e7,publishDeltaNsJitter:12e7,subscribers:Xn.map((e,t)=>{const n=Le(t+1);return{endpointId:`sparse-subscriber-${n}`,topic:`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,leaseTimeNsBase:7e6+t*8e5,userSpanNsBase:25e5+t*24e4}})},{processId:"trace-process",publisherEndpointId:"dense-publisher-endpoint",publisherTopic:"TRACE_LAB/DENSE_TOPIC",eventIntervalMs:100,samplesPerTick:12,timestampStepNs:16666667,publishDeltaNsBase:164e5,publishDeltaNsJitter:24e5,subscribers:Qn.map((e,t)=>{const n=Le(t+1);return{endpointId:`dense-subscriber-${n}`,topic:`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,leaseTimeNsBase:13e5+t*14e4,userSpanNsBase:92e4+t*11e4}})}]},g2={name:"nested-collections",health:nn.health,snapshot:{snapshot:{graph:{"LAB/PIPELINE/ROOT_TOPIC":["LAB/PIPELINE/INNER/INNER_TOPIC"],"LAB/PIPELINE/INNER/INNER_TOPIC":["LAB/PIPELINE/LEAF_TOPIC"]},edge_owners:[],sessions:{"nested-session":{edges:[],metadata:{components:{LAB:{name:"LAB",component_type:"fixture.RootCollection",children:["LAB/PIPELINE"]},"LAB/PIPELINE":{name:"PIPELINE",component_type:"fixture.PipelineCollection",children:["LAB/PIPELINE/SOURCE","LAB/PIPELINE/INNER"],topics:{ROOT_TOPIC:{address:"LAB/PIPELINE/ROOT_TOPIC",msg_type:"builtins.str"}}},"LAB/PIPELINE/INNER":{name:"INNER",component_type:"fixture.InnerCollection",children:["LAB/PIPELINE/INNER/SINK"],topics:{INNER_TOPIC:{address:"LAB/PIPELINE/INNER/INNER_TOPIC",msg_type:"builtins.str"}}},"LAB/PIPELINE/SOURCE":{name:"SOURCE",component_type:"fixture.SourceUnit",streams:{OUTPUT:{address:"LAB/PIPELINE/ROOT_TOPIC:source-output",msg_type:"builtins.str",host:"127.0.0.1",port:9301}},tasks:[{name:"emit_root_topic",subscribes:null,publishes:["LAB/PIPELINE/ROOT_TOPIC"]}]},"LAB/PIPELINE/INNER/SINK":{name:"SINK",component_type:"fixture.SinkUnit",streams:{INPUT:{address:"LAB/PIPELINE/INNER/INNER_TOPIC:inner-input",msg_type:"builtins.str",leaky:!1},OUTPUT:{address:"LAB/PIPELINE/LEAF_TOPIC:leaf-output",msg_type:"builtins.str",host:"127.0.0.1",port:9302}},tasks:[{name:"relay_nested_topic",subscribes:"LAB/PIPELINE/INNER/INNER_TOPIC",publishes:["LAB/PIPELINE/LEAF_TOPIC"]}]},"CONTROL/PROBE":{name:"PROBE",component_type:"fixture.RootProbe",streams:{OUTPUT:{address:"CONTROL/PROBE_TOPIC:probe-output",msg_type:"builtins.str",host:"127.0.0.1",port:9303}},tasks:[{name:"probe_root_scope",subscribes:null,publishes:["CONTROL/PROBE_TOPIC"]}]}}}}},processes:{"nested-process":{process_id:"nested-process",pid:4501,host:"fixture-host",units:["LAB/PIPELINE/SOURCE","LAB/PIPELINE/INNER/SINK","CONTROL/PROBE"]}}},settings:{LAB:We("LAB","fixture.RootCollection",{enabled:!0}),"LAB/PIPELINE":We("PIPELINE","fixture.PipelineCollection",{stage_count:2}),"LAB/PIPELINE/INNER":We("INNER","fixture.InnerCollection",{nested:!0})},profiling:{"nested-process":tn("nested-process",4501)}}},y2={name:"orphan-streams",health:nn.health,snapshot:{snapshot:{graph:{"ORPHAN/INPUT_TOPIC":["SYSTEM/PROCESS_TOPIC"],"SYSTEM/PROCESS_TOPIC":["ORPHAN/OUTPUT_TOPIC"]},edge_owners:[],sessions:{"orphan-session":{edges:[],metadata:{components:{"SYSTEM/PROCESSOR":{name:"PROCESSOR",component_type:"fixture.ProcessorUnit",streams:{INPUT:{address:"SYSTEM/PROCESS_TOPIC:processor-input",msg_type:"builtins.str",leaky:!1},OUTPUT:{address:"SYSTEM/PROCESS_TOPIC:processor-output",msg_type:"builtins.str",host:"127.0.0.1",port:9401}},tasks:[{name:"transform_orphan_stream",subscribes:"SYSTEM/PROCESS_TOPIC",publishes:["SYSTEM/PROCESS_TOPIC"]}]}}}}},processes:{"orphan-process":{process_id:"orphan-process",pid:4601,host:"fixture-host",units:["SYSTEM/PROCESSOR"]}}},settings:{"SYSTEM/PROCESSOR":We("PROCESSOR","fixture.ProcessorUnit",{amplify:2})},profiling:{"orphan-process":tn("orphan-process",4601)}}},Cr=12,v2={name:"dense-unit-layout",health:nn.health,snapshot:{snapshot:{graph:Object.fromEntries(Array.from({length:Cr},(e,t)=>{const n=Le(t+1);return[`MATRIX/IN_${n}_TOPIC`,[`MATRIX/OUT_${n}_TOPIC`]]})),edge_owners:[],sessions:{"dense-unit-session":{edges:[],metadata:{components:{MATRIX:{name:"MATRIX",component_type:"fixture.MatrixCollection",children:["MATRIX/ROUTER"]},"MATRIX/ROUTER":{name:"ROUTER",component_type:"fixture.DenseRouter",streams:Object.fromEntries([...Array.from({length:Cr},(e,t)=>{const n=Le(t+1);return[`INPUT_${n}`,Dt(`MATRIX/IN_${n}_TOPIC:router-input-${n}`)]}),...Array.from({length:Cr},(e,t)=>{const n=Le(t+1);return[`OUTPUT_${n}`,Qt(`MATRIX/OUT_${n}_TOPIC:router-output-${n}`,9500+t)]})]),tasks:Array.from({length:Cr},(e,t)=>{const n=Le(t+1);return at(`route_lane_${n}`,`MATRIX/IN_${n}_TOPIC`,[`MATRIX/OUT_${n}_TOPIC`])})}}}}},processes:{"dense-unit-process":{process_id:"dense-unit-process",pid:4701,host:"fixture-host",units:["MATRIX/ROUTER"]}}},settings:{MATRIX:We("MATRIX","fixture.MatrixCollection",{lanes:Cr}),"MATRIX/ROUTER":We("ROUTER","fixture.DenseRouter",{lanes:Cr,parallelism:4})},profiling:{"dense-unit-process":tn("dense-unit-process",4701)}}},on=12,di=Array.from({length:on},(e,t)=>`MEGA/SRC_${Le(t+1)}`),fi=Array.from({length:on},(e,t)=>`MEGA/SINK_${Le(t+1)}`),_2={name:"massive-fanout",health:nn.health,snapshot:{snapshot:{graph:Object.fromEntries([...Array.from({length:on},(e,t)=>{const n=Le(t+1);return[`MEGA/SRC_${n}_TOPIC`,[`MEGA/HUB_IN_${n}_TOPIC`]]}),...Array.from({length:on},(e,t)=>{const n=Le(t+1);return[`MEGA/HUB_OUT_${n}_TOPIC`,[`MEGA/SINK_${n}_IN_TOPIC`]]})]),edge_owners:[],sessions:{"mega-session":{edges:[],metadata:{components:{MEGA:{name:"MEGA",component_type:"fixture.MegaScope",children:[...di,"MEGA/HUB",...fi]},...Object.fromEntries(di.map((e,t)=>{const n=Le(t+1);return[e,{name:`SRC_${n}`,component_type:"fixture.SourceUnit",streams:{OUTPUT:Qt(`MEGA/SRC_${n}_TOPIC:source-output-${n}`,9600+t)},tasks:[at(`emit_lane_${n}`,null,[`MEGA/SRC_${n}_TOPIC`])]}]})),"MEGA/HUB":{name:"HUB",component_type:"fixture.HubRouter",streams:Object.fromEntries([...Array.from({length:on},(e,t)=>{const n=Le(t+1);return[`INPUT_${n}`,Dt(`MEGA/HUB_IN_${n}_TOPIC:hub-input-${n}`)]}),...Array.from({length:on},(e,t)=>{const n=Le(t+1);return[`OUTPUT_${n}`,Qt(`MEGA/HUB_OUT_${n}_TOPIC:hub-output-${n}`,9700+t)]})]),tasks:Array.from({length:on},(e,t)=>{const n=Le(t+1);return at(`fanout_lane_${n}`,`MEGA/HUB_IN_${n}_TOPIC`,[`MEGA/HUB_OUT_${n}_TOPIC`])})},...Object.fromEntries(fi.map((e,t)=>{const n=Le(t+1);return[e,{name:`SINK_${n}`,component_type:"fixture.SinkUnit",streams:{INPUT:Dt(`MEGA/SINK_${n}_IN_TOPIC:sink-input-${n}`)},tasks:[at(`consume_lane_${n}`,`MEGA/SINK_${n}_IN_TOPIC`,[])]}]}))}}}},processes:{"mega-process":{process_id:"mega-process",pid:4801,host:"fixture-host",units:[...di,"MEGA/HUB",...fi]}}},settings:{MEGA:We("MEGA","fixture.MegaScope",{lanes:on}),"MEGA/HUB":We("HUB","fixture.HubRouter",{lanes:on,fanout_mode:"parallel"})},profiling:{"mega-process":tn("mega-process",4801,[...di,"MEGA/HUB",...fi])}}},x2={name:"cyclic-feedback",health:nn.health,snapshot:{snapshot:{graph:{"ALPHA/OUT_TOPIC":["BETA/IN_TOPIC"],"BETA/OUT_TOPIC":["GAMMA/IN_TOPIC"],"GAMMA/OUT_TOPIC":["ALPHA/IN_TOPIC"],"GAMMA/AUDIT_TOPIC":["MONITOR/IN_TOPIC"]},edge_owners:[],sessions:{"cycle-session":{edges:[],metadata:{components:{ALPHA:{name:"ALPHA",component_type:"fixture.FeedbackStage",streams:{INPUT:Dt("ALPHA/IN_TOPIC:alpha-input"),OUTPUT:Qt("ALPHA/OUT_TOPIC:alpha-output",9801)},tasks:[at("forward_alpha","ALPHA/IN_TOPIC",["ALPHA/OUT_TOPIC"])]},BETA:{name:"BETA",component_type:"fixture.FeedbackStage",streams:{INPUT:Dt("BETA/IN_TOPIC:beta-input"),OUTPUT:Qt("BETA/OUT_TOPIC:beta-output",9802)},tasks:[at("forward_beta","BETA/IN_TOPIC",["BETA/OUT_TOPIC"])]},GAMMA:{name:"GAMMA",component_type:"fixture.FeedbackStage",streams:{INPUT:Dt("GAMMA/IN_TOPIC:gamma-input"),OUTPUT:Qt("GAMMA/OUT_TOPIC:gamma-output",9803),OUTPUT_AUDIT:Qt("GAMMA/AUDIT_TOPIC:gamma-audit",9804)},tasks:[at("fanout_gamma","GAMMA/IN_TOPIC",["GAMMA/OUT_TOPIC","GAMMA/AUDIT_TOPIC"])]},MONITOR:{name:"MONITOR",component_type:"fixture.MonitorUnit",streams:{INPUT:Dt("MONITOR/IN_TOPIC:monitor-input")},tasks:[at("observe_cycle","MONITOR/IN_TOPIC",[])]}}}}},processes:{"cycle-process":{process_id:"cycle-process",pid:4901,host:"fixture-host",units:["ALPHA","BETA","GAMMA","MONITOR"]}}},settings:{ALPHA:We("ALPHA","fixture.FeedbackStage",{gain:1}),GAMMA:We("GAMMA","fixture.FeedbackStage",{audit_enabled:!0})},profiling:{"cycle-process":tn("cycle-process",4901)}}},w2={"root-scope-navigation":nn,"wide-fanout":f2,"long-labels":p2,"semantic-stream-names":h2,"profiling-trace-rates":m2,"nested-collections":g2,"orphan-streams":y2,"dense-unit-layout":v2,"massive-fanout":_2,"cyclic-feedback":x2};function S2(e){return e?w2[e]??null:null}const E2=120,N2=250,T2=1e3,k2=.05,C2=5e3,I2=60;function Ir(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function b2(){return typeof window>"u"?null:new URLSearchParams(window.location.search).get("fixture")}function P2(e,t,n){const r=t.split(".").filter(i=>i.length>0);if(r.length===0)return n;const s=e&&typeof e=="object"&&!Array.isArray(e)?Ir(e):{};let o=s;return r.forEach((i,l)=>{if(l===r.length-1){o[i]=n;return}const u=o[i],c=u&&typeof u=="object"&&!Array.isArray(u)?{...u}:{};o[i]=c,o=c}),s}function kp(e,t){return t}function A2(e,t,n){return Math.min(n,Math.max(t,e))}function M2(e){const t=kp(void 0,k2),n=Math.max(1,Math.trunc(kp(void 0,C2))),r=new URLSearchParams({profiling_interval:t.toString(),profiling_max_samples:n.toString()}).toString(),s=e.includes("?")?"&":"?";return`${e}${s}${r}`}function R2(){const e=window.location.protocol==="https:"?"wss":"ws";return M2(`${e}://${window.location.host}/ws/events`)}async function Cp(e){const t=e.includes("?")?"&":"?",n=`${e}${t}_ts=${Date.now()}`,r=await fetch(n,{cache:"no-store",headers:{"Cache-Control":"no-cache",Pragma:"no-cache"}});if(!r.ok)throw new Error(`${e} failed (${r.status})`);return await r.json()}async function Ip(e,t){const n=e.includes("?")?"&":"?",r=`${e}${n}_ts=${Date.now()}`,s=await fetch(r,{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json","Cache-Control":"no-cache",Pragma:"no-cache"},body:JSON.stringify(t)});if(!s.ok){let o=`${e} failed (${s.status})`;try{const i=await s.json();typeof i.detail=="string"&&i.detail.length>0&&(o=i.detail)}catch{}throw new Error(o)}return await s.json()}function bp(e){return typeof e=="object"&&e!==null}function O2(e){return bp(e)?typeof e.kind=="string"&&bp(e.data):!1}function L2(e){const[t,n]=E.useState(null),[r,s]=E.useState(null),[o,i]=E.useState(null),[l,a]=E.useState([]),[u,c]=E.useState("connecting"),[d,f]=E.useState(null),[h,_]=E.useState(null),x=Math.round(A2(((e==null?void 0:e.snapshotPollSeconds)??2)*1e3,500,3e4)),N=E.useMemo(()=>S2(b2()),[]),p=E.useRef(null),g=E.useRef(null),y=E.useRef(new Map),w=E.useRef(new Map),P=E.useRef(new Map),L=E.useCallback(k=>{const T=y.current.get(k);T!==void 0&&(window.clearInterval(T),y.current.delete(k))},[]),O=E.useCallback(()=>{for(const k of y.current.values())window.clearInterval(k);y.current.clear(),w.current.clear(),P.current.clear()},[]),A=E.useCallback(async()=>{if(N){const T=Ir(N.snapshot);s(T),_(Date.now());return}const k=await Cp("/api/snapshot");s(k),_(Date.now())},[N]),j=E.useCallback(async()=>{if(N){n(Ir(N.health));return}const k=await Cp("/api/health");n(k)},[N]);E.useEffect(()=>{if(N)return O(),n(Ir(N.health)),s(Ir(N.snapshot)),i(null),a([]),c("open"),f(null),_(Date.now()),()=>{O()}},[O,N]);const z=E.useCallback(()=>{p.current!==null&&window.clearTimeout(p.current),p.current=window.setTimeout(()=>{A().catch(k=>{const T=k instanceof Error?k.message:"Snapshot refresh failed.";f(T)}),p.current=null},N2)},[A]);E.useEffect(()=>{N||(j().catch(k=>{const T=k instanceof Error?k.message:"Health check failed.";f(T)}),A().catch(k=>{const T=k instanceof Error?k.message:"Initial snapshot failed.";f(T)}))},[N,j,A]),E.useEffect(()=>{if(N)return;const k=window.setInterval(()=>{A().catch(T=>{const M=T instanceof Error?T.message:"Snapshot poll failed.";f(M)})},x);return()=>{window.clearInterval(k)}},[N,A,x]),E.useEffect(()=>{if(N)return;let k=!1,T=null;const M=()=>{k||(c("connecting"),T=new WebSocket(R2()),T.onopen=()=>{k||(c("open"),f(null))},T.onmessage=I=>{let S=null;try{S=JSON.parse(I.data)}catch{return}if(!O2(S))return;const b=S;a(F=>[b,...F].slice(0,E2)),b.kind==="topology.changed"&&z(),b.kind==="settings.changed"&&s(F=>{if(!F)return F;const R=b,X=F.settings[R.data.component_address]??null,Q={...F.settings,[R.data.component_address]:{...R.data.value,patchable:(X==null?void 0:X.patchable)??!1,patch_error:(X==null?void 0:X.patch_error)??null,component_type:(X==null?void 0:X.component_type)??null,component_name:(X==null?void 0:X.component_name)??null}};return{...F,settings:Q}}),b.kind==="profiling.trace"&&i(b),b.kind==="system.error"&&f(b.data.message)},T.onerror=()=>{k||c("closed")},T.onclose=()=>{k||(c("closed"),g.current=window.setTimeout(()=>{M()},T2))})};return M(),()=>{k=!0,T!==null&&T.close(),g.current!==null&&window.clearTimeout(g.current),p.current!==null&&window.clearTimeout(p.current)}},[N,z]);const U=E.useMemo(()=>l.filter(k=>k.kind==="topology.changed"),[l]),Z=E.useCallback(async()=>{try{await A()}catch(k){const T=k instanceof Error?k.message:"Snapshot refresh failed.";f(T)}},[A]),D=E.useCallback(async(k,T,M,I=2)=>{if(N){let F=null;return s(R=>{if(!R)return R;const X=R.settings[k];if(!X)return R;const Q=X.structured_value??X.repr_value,re=P2(Q,T,M);return F={...X,structured_value:re,repr_value:re},{...R,settings:{...R.settings,[k]:F}}}),_(Date.now()),{component_address:k,field_path:T,updated_value:F??Ir(N.snapshot.settings[k])}}const S=encodeURIComponent(k),b=await Ip(`/api/settings/${S}/field`,{field_path:T,value:M,timeout:I});return s(F=>{if(!F)return F;const R=F.settings[b.component_address]??null;return{...F,settings:{...F.settings,[b.component_address]:{...b.updated_value,patchable:(R==null?void 0:R.patchable)??!0,patch_error:(R==null?void 0:R.patch_error)??null,component_type:(R==null?void 0:R.component_type)??null,component_name:(R==null?void 0:R.component_name)??null}}}}),_(Date.now()),b},[N]),v=E.useCallback(async k=>{if(N){const T=`${k.process_id}:${k.publisher_endpoint_id??"*"}`;if(!k.enabled){if(k.publisher_endpoint_id)L(T);else for(const I of Array.from(y.current.keys()))I.startsWith(`${k.process_id}:`)&&L(I);return{process_id:k.process_id,unit_address:"",enabled:!1,control:{fixture:!0,metrics:k.metrics??[]}}}const M=(N.traceScenarios??[]).find(I=>I.processId===k.process_id&&I.publisherEndpointId===k.publisher_endpoint_id&&I.publisherTopic===k.publisher_topic);if(M){L(T),P.current.has(T)||P.current.set(T,Date.now()*1e6),w.current.has(T)||w.current.set(T,0);const I=()=>{const b=P.current.get(T)??Date.now()*1e6,F=w.current.get(T)??0,R=[],X=new Set(k.metrics??[]),Q=X.size===0||X.has("publish_delta_ns"),re=X.size===0||X.has("lease_time_ns"),J=X.size===0||X.has("user_span_ns");for(let fe=0;fe=9466848e5&&e<=41024448e5?e:e>=946684800&&e<=4102444800?e*1e3:null}function H2(e){return e.toLowerCase().includes("collection")}function W2(e){if(e.kind==="unit")return{kind:"unit",unitAddress:e.unitAddress};if(e.kind==="collection")return{kind:"collection",collectionAddress:e.collectionAddress};const t=W_(e.streamAddress);return{kind:e.kind,unitAddress:e.unitAddress,endpointId:t.endpointId,topic:t.topic}}function V2(e,t){var r;const n=((r=t==null?void 0:t[e])==null?void 0:r.component_type)??"";return H2(n)?{kind:"collection",collectionAddress:e}:{kind:"unit",unitAddress:e}}function G2(e){return(e==null?void 0:e.kind)==="unit"?e.unitAddress:(e==null?void 0:e.kind)==="collection"?e.collectionAddress:null}function Y2(e){if(!e||typeof e!="object")return Lt;const t=e,n=typeof t.snapshotPollSeconds=="number"&&Number.isFinite(t.snapshotPollSeconds)?Math.min(30,Math.max(.5,t.snapshotPollSeconds)):Lt.snapshotPollSeconds,r=typeof t.inspectorWidthPx=="number"&&Number.isFinite(t.inspectorWidthPx)?Math.min(900,Math.max(360,Math.round(t.inspectorWidthPx))):Lt.inspectorWidthPx,s=t.traceMetricsPreset==="publish+lease"||t.traceMetricsPreset==="publish"||t.traceMetricsPreset==="publish+lease+user"?t.traceMetricsPreset:Lt.traceMetricsPreset,o=t.edgeConnectorStyle==="orthogonal"||t.edgeConnectorStyle==="smooth"||t.edgeConnectorStyle==="curved"?t.edgeConnectorStyle:Lt.edgeConnectorStyle;return{snapshotPollSeconds:n,themeMode:t.themeMode==="dark"?"dark":"light",topologyDefaultLayout:t.topologyDefaultLayout==="lr"?"lr":"tb",edgeConnectorStyle:o,showLegend:typeof t.showLegend=="boolean"?t.showLegend:Lt.showLegend,showMiniMap:typeof t.showMiniMap=="boolean"?t.showMiniMap:Lt.showMiniMap,traceMetricsPreset:s,autoFitOnLayoutScopeChange:typeof t.autoFitOnLayoutScopeChange=="boolean"?t.autoFitOnLayoutScopeChange:Lt.autoFitOnLayoutScopeChange,autoFocusOnInspectorSelection:typeof t.autoFocusOnInspectorSelection=="boolean"?t.autoFocusOnInspectorSelection:Lt.autoFocusOnInspectorSelection,inspectorWidthPx:r}}function K2(e,t,n){const r=[],s=[];return e==="closed"?r.push("WebSocket disconnected"):e==="connecting"&&s.push("WebSocket connecting"),t===null?s.push("Graph health pending"):t||r.push("Graph session inactive"),n&&r.push(n),r.length>0?{tone:"err",tooltip:r.join(" · ")}:s.length>0?{tone:"warn",tooltip:s.join(" · ")}:{tone:"ok",tooltip:"Connected: GraphServer reachable, WebSocket open, session active."}}function X2(){const[e,t]=E.useState(null),[n,r]=E.useState(!1),[s,o]=E.useState(0),[i,l]=E.useState(0),[a,u]=E.useState(!1),[c,d]=E.useState(!0),[f,h]=E.useState(!1),[_,x]=E.useState(null),[N,p]=E.useState(0),[g,y]=E.useState(null),[w,P]=E.useState(null),[L,O]=E.useState(0),[A,j]=E.useState(()=>{try{const K=window.localStorage.getItem(Pp);return K?Y2(JSON.parse(K)):Lt}catch{return Lt}});E.useEffect(()=>{window.localStorage.setItem(Pp,JSON.stringify(A))},[A]);const{health:z,snapshot:U,latestTraceEvent:Z,connectionState:D,error:v,lastSnapshotUpdateMs:k,topologyEvents:T,patchSettingField:M,setProfilingTraceControl:I}=L2({snapshotPollSeconds:A.snapshotPollSeconds}),S=E.useMemo(()=>{let K=0;for(const C of Object.values((U==null?void 0:U.profiling)??{}))if(typeof C.timestamp=="number"&&Number.isFinite(C.timestamp)){const B=U2(C.timestamp);B!==null&&(K=Math.max(K,B))}return K<=0?k:K},[k,U==null?void 0:U.profiling]),b=z!=null&&z.graph_address&&z.graph_address.length>0?z.graph_address:D2,F=S?new Date(S).toLocaleTimeString():"n/a",R=E.useMemo(()=>K2(D,(z==null?void 0:z.graph_session_active)??null,v),[D,z==null?void 0:z.graph_session_active,v]),X=E.useMemo(()=>A.traceMetricsPreset==="publish"?["publish_delta_ns"]:A.traceMetricsPreset==="publish+lease"?["publish_delta_ns","lease_time_ns"]:["publish_delta_ns","lease_time_ns","user_span_ns"],[A.traceMetricsPreset]),Q=E.useMemo(()=>({"--inspector-width":`${A.inspectorWidthPx}px`}),[A.inspectorWidthPx]),re=K=>{if(P(null),!K){t(null);return}h(!1);const C=W2(K);C.kind==="unit"||C.kind==="collection"?(d(!1),l(B=>B+1)):(u(!1),o(B=>B+1)),t(C)},J=K=>{P(K),O(C=>C+1)},fe=()=>{p(K=>K+1),x(null)},V=()=>{if(a){u(!1);return}if(c){u(!0),d(!1);return}u(!0)},me=()=>{if(c){d(!1);return}if(a){d(!0),u(!1);return}d(!0)};return m.jsxs("div",{className:`dashboard-layout is-comfortable ${f?"is-inspector-collapsed ":""}${A.themeMode==="dark"?"is-dark":""}`,style:Q,children:[m.jsx("aside",{className:"dashboard-inspector dashboard-inspector--pinned",children:m.jsxs("div",{className:`dashboard-inspector__body ${a?"is-publishers-collapsed ":""}${c?"is-settings-collapsed":""}`,children:[m.jsxs("section",{className:"inspector-section inspector-section--split",children:[m.jsxs("header",{className:"inspector-section__header",children:[m.jsx("span",{children:"Publishers"}),m.jsx("button",{type:"button",className:"inspector-section__collapse-btn",onClick:V,children:a?"Expand":"Collapse"})]}),a?null:m.jsx("div",{className:"inspector-section__content inspector-section__content--scroll",children:m.jsx(d1,{graphSnapshot:(U==null?void 0:U.snapshot)??null,profilingSnapshot:(U==null?void 0:U.profiling)??null,latestTraceEvent:Z,setProfilingTraceControl:I,darkMode:A.themeMode==="dark",focusPublisherEndpointId:(e==null?void 0:e.kind)==="publisher"?e.endpointId:null,focusPublisherTopic:(e==null?void 0:e.kind)==="publisher"?e.topic:null,focusSubscriberEndpointId:(e==null?void 0:e.kind)==="subscriber"?e.endpointId:null,focusActionId:s,hideFilters:!1,defaultTraceMetrics:X,traceDockHost:g,onTraceDockStateChange:x,traceCloseSignal:N,onPublisherSelect:K=>{t({kind:"publisher",unitAddress:K.unitAddress,endpointId:K.endpointId,topic:K.topic}),J({kind:"publisher",streamAddress:`${K.topic}:${K.endpointId}`,unitAddress:K.unitAddress})},onSubscriberSelect:K=>{t({kind:"subscriber",unitAddress:K.unitAddress,endpointId:K.endpointId,topic:K.topic}),J({kind:"subscriber",streamAddress:`${K.topic}:${K.endpointId}`,unitAddress:K.unitAddress})}})})]}),m.jsxs("section",{className:"inspector-section inspector-section--split",children:[m.jsxs("header",{className:"inspector-section__header",children:[m.jsx("span",{children:"Settings"}),m.jsx("button",{type:"button",className:"inspector-section__collapse-btn",onClick:me,children:c?"Expand":"Collapse"})]}),c?null:m.jsx("div",{className:"inspector-section__content inspector-section__content--scroll",children:m.jsx(g1,{settings:(U==null?void 0:U.settings)??null,patchSettingField:M,focusComponentAddress:G2(e),focusActionId:i,onComponentSelect:K=>{if(!K){t(null);return}l(B=>B+1);const C=V2(K,U==null?void 0:U.settings);t(C),J(C.kind==="collection"?{kind:"collection",collectionAddress:C.collectionAddress}:{kind:"unit",unitAddress:C.unitAddress})}})})]})]})}),m.jsxs("div",{className:"dashboard-main",children:[m.jsxs("div",{className:"dashboard-viewport",children:[m.jsx(d2,{graphSnapshot:(U==null?void 0:U.snapshot)??null,profilingSnapshot:(U==null?void 0:U.profiling)??null,recentEvents:T,immersive:!0,showLegend:A.showLegend,showMiniMap:A.showMiniMap,darkMode:A.themeMode==="dark",defaultLayout:A.topologyDefaultLayout,edgeConnectorStyle:A.edgeConnectorStyle,autoFitOnLayoutScopeChange:A.autoFitOnLayoutScopeChange,autoFocusOnSelection:A.autoFocusOnInspectorSelection,focusSelection:w,focusRequestId:L,onEntitySelect:re}),m.jsxs("section",{className:"dashboard-brand-card",children:[m.jsx("span",{className:`dashboard-health-dot is-${R.tone}`,title:R.tooltip,"aria-label":R.tooltip}),m.jsx("img",{src:$2,alt:"ezmsg",className:"dashboard-brand-logo-image"}),m.jsx("div",{className:"dashboard-brand-card__title-row",children:m.jsx("h1",{className:"mono",children:"ezmsg-dashboard"})}),m.jsxs("p",{className:"dashboard-brand-card__meta-line",children:[m.jsxs("span",{className:"mono",children:["GraphServer ",b]}),m.jsx("span",{children:"·"}),m.jsxs("span",{className:"mono",children:["Snapshot ",F]})]})]}),m.jsxs("div",{className:"dashboard-floating-control-dock","aria-label":"Viewport shortcuts",children:[m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-shortcut-btn",onClick:()=>j(K=>({...K,topologyDefaultLayout:K.topologyDefaultLayout==="lr"?"tb":"lr"})),title:A.topologyDefaultLayout==="lr"?"Topology layout: left-to-right":"Topology layout: top-to-bottom","aria-label":A.topologyDefaultLayout==="lr"?"Topology layout left-to-right":"Topology layout top-to-bottom",children:A.topologyDefaultLayout==="lr"?m.jsx(z2,{}):m.jsx(F2,{})}),m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-shortcut-btn",onClick:()=>j(K=>({...K,themeMode:K.themeMode==="dark"?"light":"dark"})),title:A.themeMode==="dark"?"Theme: dark":"Theme: light","aria-label":A.themeMode==="dark"?"Theme dark":"Theme light",children:A.themeMode==="dark"?m.jsx(j2,{}):m.jsx(B2,{})}),m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-gear-btn",onClick:()=>r(!0),title:"Global Settings","aria-label":"Global Settings",children:"⚙"})]}),m.jsx("button",{type:"button",className:`topology-layout-btn dashboard-floating-inspector-btn ${f?"is-collapsed":""}`.trim(),onClick:()=>h(K=>!K),title:f?"Show Inspector":"Hide Inspector","aria-label":f?"Show Inspector":"Hide Inspector",children:f?"«":"»"}),n?m.jsx("div",{className:"dashboard-modal-backdrop",onClick:()=>r(!1),children:m.jsxs("section",{className:"dashboard-modal",onClick:K=>K.stopPropagation(),children:[m.jsxs("header",{className:"dashboard-modal__header",children:[m.jsx("h2",{children:"Global Settings"}),m.jsx("button",{type:"button",className:"topology-layout-btn",onClick:()=>r(!1),children:"Close"})]}),m.jsxs("div",{className:"dashboard-modal__body",children:[m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Snapshot Poll Frequency (seconds)"}),m.jsx("input",{type:"number",min:.5,max:30,step:.5,value:A.snapshotPollSeconds,onChange:K=>{const C=Number.parseFloat(K.target.value);Number.isFinite(C)&&j(B=>({...B,snapshotPollSeconds:Math.max(.5,Math.min(30,C))}))}})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Theme"}),m.jsxs("select",{value:A.themeMode,onChange:K=>j(C=>({...C,themeMode:K.target.value==="dark"?"dark":"light"})),children:[m.jsx("option",{value:"light",children:"Light"}),m.jsx("option",{value:"dark",children:"Dark"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Default Topology Layout"}),m.jsxs("select",{value:A.topologyDefaultLayout,onChange:K=>j(C=>({...C,topologyDefaultLayout:K.target.value==="lr"?"lr":"tb"})),children:[m.jsx("option",{value:"tb",children:"Top to Bottom"}),m.jsx("option",{value:"lr",children:"Left to Right"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Edge Connector Type"}),m.jsxs("select",{value:A.edgeConnectorStyle,onChange:K=>j(C=>({...C,edgeConnectorStyle:K.target.value==="orthogonal"||K.target.value==="smooth"?K.target.value:"curved"})),children:[m.jsx("option",{value:"curved",children:"Curved (Bezier)"}),m.jsx("option",{value:"orthogonal",children:"Orthogonal (Step)"}),m.jsx("option",{value:"smooth",children:"Smooth Step"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Default Trace Metrics"}),m.jsxs("select",{value:A.traceMetricsPreset,onChange:K=>j(C=>({...C,traceMetricsPreset:K.target.value==="publish"||K.target.value==="publish+lease"?K.target.value:"publish+lease+user"})),children:[m.jsx("option",{value:"publish+lease+user",children:"Publish + Lease + User"}),m.jsx("option",{value:"publish+lease",children:"Publish + Lease"}),m.jsx("option",{value:"publish",children:"Publish Only"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Inspector Width (px)"}),m.jsx("input",{type:"number",min:360,max:900,step:10,value:A.inspectorWidthPx,onChange:K=>{const C=Number.parseInt(K.target.value,10);Number.isFinite(C)&&j(B=>({...B,inspectorWidthPx:Math.max(360,Math.min(900,C))}))}})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:A.autoFocusOnInspectorSelection,onChange:K=>j(C=>({...C,autoFocusOnInspectorSelection:K.target.checked}))}),m.jsx("span",{children:"Auto-focus topology on inspector selection"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:A.autoFitOnLayoutScopeChange,onChange:K=>j(C=>({...C,autoFitOnLayoutScopeChange:K.target.checked}))}),m.jsx("span",{children:"Auto-fit on layout/scope change"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:A.showLegend,onChange:K=>j(C=>({...C,showLegend:K.target.checked}))}),m.jsx("span",{children:"Show legend"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:A.showMiniMap,onChange:K=>j(C=>({...C,showMiniMap:K.target.checked}))}),m.jsx("span",{children:"Show minimap"})]})]})]})}):null]}),_!=null&&_.active?m.jsxs("section",{className:"trace-dock",children:[m.jsxs("header",{className:"trace-dock__header",children:[m.jsx("div",{className:"trace-dock__title-wrap",children:m.jsx("h3",{children:"Realtime Profiling Trace"})}),m.jsxs("div",{className:"trace-dock__actions",children:[m.jsx("span",{className:`trace-status ${_.status==="capturing"?"is-live":""}`,children:_.status}),m.jsx("button",{type:"button",className:"topology-layout-btn trace-dock__close-btn",onClick:fe,title:"Close trace","aria-label":"Close trace",children:"✕"})]})]}),m.jsx("div",{className:"trace-dock__body",children:m.jsx("div",{className:"trace-dock__host",ref:y})})]}):null]})]})}La.createRoot(document.getElementById("root")).render(m.jsx(W.StrictMode,{children:m.jsx(X2,{})})); diff --git a/src/ezmsg/dashboard/_web/assets/index-KcK4UZ3i.js b/src/ezmsg/dashboard/_web/assets/index-KcK4UZ3i.js deleted file mode 100644 index 58565e2..0000000 --- a/src/ezmsg/dashboard/_web/assets/index-KcK4UZ3i.js +++ /dev/null @@ -1,60 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(s){if(s.ep)return;s.ep=!0;const o=n(s);fetch(s.href,o)}})();function Cp(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ip={exports:{}},fl={},bp={exports:{}},_e={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var To=Symbol.for("react.element"),q0=Symbol.for("react.portal"),J0=Symbol.for("react.fragment"),ey=Symbol.for("react.strict_mode"),ty=Symbol.for("react.profiler"),ny=Symbol.for("react.provider"),ry=Symbol.for("react.context"),sy=Symbol.for("react.forward_ref"),oy=Symbol.for("react.suspense"),iy=Symbol.for("react.memo"),ly=Symbol.for("react.lazy"),ad=Symbol.iterator;function ay(e){return e===null||typeof e!="object"?null:(e=ad&&e[ad]||e["@@iterator"],typeof e=="function"?e:null)}var Pp={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ap=Object.assign,Rp={};function fs(e,t,n){this.props=e,this.context=t,this.refs=Rp,this.updater=n||Pp}fs.prototype.isReactComponent={};fs.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};fs.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Mp(){}Mp.prototype=fs.prototype;function Gu(e,t,n){this.props=e,this.context=t,this.refs=Rp,this.updater=n||Pp}var Yu=Gu.prototype=new Mp;Yu.constructor=Gu;Ap(Yu,fs.prototype);Yu.isPureReactComponent=!0;var ud=Array.isArray,Op=Object.prototype.hasOwnProperty,Ku={current:null},Lp={key:!0,ref:!0,__self:!0,__source:!0};function $p(e,t,n){var r,s={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Op.call(t,r)&&!Lp.hasOwnProperty(r)&&(s[r]=t[r]);var l=arguments.length-2;if(l===1)s.children=n;else if(1>>1,j=C[B];if(0>>1;Bs(ne,b))ses(fe,ne)?(C[B]=fe,C[se]=b,B=se):(C[B]=ne,C[Q]=b,B=Q);else if(ses(fe,b))C[B]=fe,C[se]=b,B=se;else break e}}return S}function s(C,S){var b=C.sortIndex-S.sortIndex;return b!==0?b:C.id-S.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,l=i.now();e.unstable_now=function(){return i.now()-l}}var a=[],u=[],c=1,d=null,f=3,h=!1,x=!1,_=!1,T=typeof setTimeout=="function"?setTimeout:null,p=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(C){for(var S=n(u);S!==null;){if(S.callback===null)r(u);else if(S.startTime<=C)r(u),S.sortIndex=S.expirationTime,t(a,S);else break;S=n(u)}}function w(C){if(_=!1,y(C),!x)if(n(a)!==null)x=!0,N(P);else{var S=n(u);S!==null&&M(w,S.startTime-C)}}function P(C,S){x=!1,_&&(_=!1,p(R),R=-1),h=!0;var b=f;try{for(y(S),d=n(a);d!==null&&(!(d.expirationTime>S)||C&&!H());){var B=d.callback;if(typeof B=="function"){d.callback=null,f=d.priorityLevel;var j=B(d.expirationTime<=S);S=e.unstable_now(),typeof j=="function"?d.callback=j:d===n(a)&&r(a),y(S)}else r(a);d=n(a)}if(d!==null)var Y=!0;else{var Q=n(u);Q!==null&&M(w,Q.startTime-S),Y=!1}return Y}finally{d=null,f=b,h=!1}}var O=!1,L=null,R=-1,F=5,D=-1;function H(){return!(e.unstable_now()-DC||125B?(C.sortIndex=b,t(u,C),n(a)===null&&C===n(u)&&(_?(p(R),R=-1):_=!0,M(w,b-B))):(C.sortIndex=j,t(a,C),x||h||(x=!0,N(P))),C},e.unstable_shouldYield=H,e.unstable_wrapCallback=function(C){var S=f;return function(){var b=f;f=S;try{return C.apply(this,arguments)}finally{f=b}}}})(Dp);zp.exports=Dp;var _y=zp.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var xy=E,xt=_y;function J(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ma=Object.prototype.hasOwnProperty,wy=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,dd={},fd={};function Sy(e){return Ma.call(fd,e)?!0:Ma.call(dd,e)?!1:wy.test(e)?fd[e]=!0:(dd[e]=!0,!1)}function Ey(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Ny(e,t,n,r){if(t===null||typeof t>"u"||Ey(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function at(e,t,n,r,s,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var Ze={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ze[e]=new at(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ze[t]=new at(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ze[e]=new at(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ze[e]=new at(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ze[e]=new at(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ze[e]=new at(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ze[e]=new at(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ze[e]=new at(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ze[e]=new at(e,5,!1,e.toLowerCase(),null,!1,!1)});var Qu=/[\-:]([a-z])/g;function Zu(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Qu,Zu);Ze[t]=new at(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Qu,Zu);Ze[t]=new at(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Qu,Zu);Ze[t]=new at(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ze[e]=new at(e,1,!1,e.toLowerCase(),null,!1,!1)});Ze.xlinkHref=new at("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ze[e]=new at(e,1,!1,e.toLowerCase(),null,!0,!0)});function qu(e,t,n,r){var s=Ze.hasOwnProperty(t)?Ze[t]:null;(s!==null?s.type!==0:r||!(2l||s[i]!==o[l]){var a=` -`+s[i].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=i&&0<=l);break}}}finally{Ul=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Os(e):""}function Ty(e){switch(e.tag){case 5:return Os(e.type);case 16:return Os("Lazy");case 13:return Os("Suspense");case 19:return Os("SuspenseList");case 0:case 2:case 15:return e=Hl(e.type,!1),e;case 11:return e=Hl(e.type.render,!1),e;case 1:return e=Hl(e.type,!0),e;default:return""}}function Ba(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ar:return"Fragment";case Pr:return"Portal";case Oa:return"Profiler";case Ju:return"StrictMode";case La:return"Suspense";case $a:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Wp:return(e.displayName||"Context")+".Consumer";case Hp:return(e._context.displayName||"Context")+".Provider";case ec:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case tc:return t=e.displayName||null,t!==null?t:Ba(e.type)||"Memo";case Nn:t=e._payload,e=e._init;try{return Ba(e(t))}catch{}}return null}function ky(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ba(t);case 8:return t===Ju?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Un(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Gp(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Cy(e){var t=Gp(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Lo(e){e._valueTracker||(e._valueTracker=Cy(e))}function Yp(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Gp(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function bi(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ja(e,t){var n=t.checked;return Le({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function hd(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Un(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Kp(e,t){t=t.checked,t!=null&&qu(e,"checked",t,!1)}function Fa(e,t){Kp(e,t);var n=Un(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?za(e,t.type,n):t.hasOwnProperty("defaultValue")&&za(e,t.type,Un(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function md(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function za(e,t,n){(t!=="number"||bi(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ls=Array.isArray;function Gr(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=$o.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function qs(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ds={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Iy=["Webkit","ms","Moz","O"];Object.keys(Ds).forEach(function(e){Iy.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ds[t]=Ds[e]})});function qp(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ds.hasOwnProperty(e)&&Ds[e]?(""+t).trim():t+"px"}function Jp(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=qp(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var by=Le({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ha(e,t){if(t){if(by[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(J(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(J(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(J(61))}if(t.style!=null&&typeof t.style!="object")throw Error(J(62))}}function Wa(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Va=null;function nc(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ga=null,Yr=null,Kr=null;function vd(e){if(e=Io(e)){if(typeof Ga!="function")throw Error(J(280));var t=e.stateNode;t&&(t=yl(t),Ga(e.stateNode,e.type,t))}}function eh(e){Yr?Kr?Kr.push(e):Kr=[e]:Yr=e}function th(){if(Yr){var e=Yr,t=Kr;if(Kr=Yr=null,vd(e),t)for(e=0;e>>=0,e===0?32:31-(zy(e)/Dy|0)|0}var Bo=64,jo=4194304;function $s(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Mi(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var l=i&~s;l!==0?r=$s(l):(o&=i,o!==0&&(r=$s(o)))}else i=n&~s,i!==0?r=$s(i):o!==0&&(r=$s(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,o=t&-t,s>=o||s===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ko(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-zt(t),e[t]=n}function Vy(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Hs),Cd=" ",Id=!1;function wh(e,t){switch(e){case"keyup":return _v.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Sh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Rr=!1;function wv(e,t){switch(e){case"compositionend":return Sh(t);case"keypress":return t.which!==32?null:(Id=!0,Cd);case"textInput":return e=t.data,e===Cd&&Id?null:e;default:return null}}function Sv(e,t){if(Rr)return e==="compositionend"||!cc&&wh(e,t)?(e=_h(),mi=lc=An=null,Rr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Rd(n)}}function kh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ch(){for(var e=window,t=bi();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=bi(e.document)}return t}function dc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Av(e){var t=Ch(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&kh(n.ownerDocument.documentElement,n)){if(r!==null&&dc(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,o=Math.min(r.start,s);r=r.end===void 0?o:Math.min(r.end,s),!e.extend&&o>r&&(s=r,r=o,o=s),s=Md(n,o);var i=Md(n,r);s&&i&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Mr=null,qa=null,Vs=null,Ja=!1;function Od(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ja||Mr==null||Mr!==bi(r)||(r=Mr,"selectionStart"in r&&dc(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Vs&&so(Vs,r)||(Vs=r,r=$i(qa,"onSelect"),0$r||(e.current=ou[$r],ou[$r]=null,$r--)}function ke(e,t){$r++,ou[$r]=e.current,e.current=t}var Hn={},rt=Vn(Hn),ht=Vn(!1),fr=Hn;function ns(e,t){var n=e.type.contextTypes;if(!n)return Hn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},o;for(o in n)s[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function mt(e){return e=e.childContextTypes,e!=null}function ji(){be(ht),be(rt)}function Dd(e,t,n){if(rt.current!==Hn)throw Error(J(168));ke(rt,t),ke(ht,n)}function $h(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(J(108,ky(e)||"Unknown",s));return Le({},n,r)}function Fi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Hn,fr=rt.current,ke(rt,e),ke(ht,ht.current),!0}function Ud(e,t,n){var r=e.stateNode;if(!r)throw Error(J(169));n?(e=$h(e,t,fr),r.__reactInternalMemoizedMergedChildContext=e,be(ht),be(rt),ke(rt,e)):be(ht),ke(ht,n)}var ln=null,vl=!1,ra=!1;function Bh(e){ln===null?ln=[e]:ln.push(e)}function Hv(e){vl=!0,Bh(e)}function Gn(){if(!ra&&ln!==null){ra=!0;var e=0,t=Te;try{var n=ln;for(Te=1;e>=i,s-=i,an=1<<32-zt(t)+s|n<R?(F=L,L=null):F=L.sibling;var D=f(p,L,y[R],w);if(D===null){L===null&&(L=F);break}e&&L&&D.alternate===null&&t(p,L),g=o(D,g,R),O===null?P=D:O.sibling=D,O=D,L=F}if(R===y.length)return n(p,L),Pe&&Zn(p,R),P;if(L===null){for(;RR?(F=L,L=null):F=L.sibling;var H=f(p,L,D.value,w);if(H===null){L===null&&(L=F);break}e&&L&&H.alternate===null&&t(p,L),g=o(H,g,R),O===null?P=H:O.sibling=H,O=H,L=F}if(D.done)return n(p,L),Pe&&Zn(p,R),P;if(L===null){for(;!D.done;R++,D=y.next())D=d(p,D.value,w),D!==null&&(g=o(D,g,R),O===null?P=D:O.sibling=D,O=D);return Pe&&Zn(p,R),P}for(L=r(p,L);!D.done;R++,D=y.next())D=h(L,p,R,D.value,w),D!==null&&(e&&D.alternate!==null&&L.delete(D.key===null?R:D.key),g=o(D,g,R),O===null?P=D:O.sibling=D,O=D);return e&&L.forEach(function(Z){return t(p,Z)}),Pe&&Zn(p,R),P}function T(p,g,y,w){if(typeof y=="object"&&y!==null&&y.type===Ar&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Oo:e:{for(var P=y.key,O=g;O!==null;){if(O.key===P){if(P=y.type,P===Ar){if(O.tag===7){n(p,O.sibling),g=s(O,y.props.children),g.return=p,p=g;break e}}else if(O.elementType===P||typeof P=="object"&&P!==null&&P.$$typeof===Nn&&Vd(P)===O.type){n(p,O.sibling),g=s(O,y.props),g.ref=Ss(p,O,y),g.return=p,p=g;break e}n(p,O);break}else t(p,O);O=O.sibling}y.type===Ar?(g=ur(y.props.children,p.mode,w,y.key),g.return=p,p=g):(w=Ei(y.type,y.key,y.props,null,p.mode,w),w.ref=Ss(p,g,y),w.return=p,p=w)}return i(p);case Pr:e:{for(O=y.key;g!==null;){if(g.key===O)if(g.tag===4&&g.stateNode.containerInfo===y.containerInfo&&g.stateNode.implementation===y.implementation){n(p,g.sibling),g=s(g,y.children||[]),g.return=p,p=g;break e}else{n(p,g);break}else t(p,g);g=g.sibling}g=da(y,p.mode,w),g.return=p,p=g}return i(p);case Nn:return O=y._init,T(p,g,O(y._payload),w)}if(Ls(y))return x(p,g,y,w);if(ys(y))return _(p,g,y,w);Vo(p,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,g!==null&&g.tag===6?(n(p,g.sibling),g=s(g,y),g.return=p,p=g):(n(p,g),g=ca(y,p.mode,w),g.return=p,p=g),i(p)):n(p,g)}return T}var ss=Dh(!0),Uh=Dh(!1),Ui=Vn(null),Hi=null,Fr=null,mc=null;function gc(){mc=Fr=Hi=null}function yc(e){var t=Ui.current;be(Ui),e._currentValue=t}function au(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Qr(e,t){Hi=e,mc=Fr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ft=!0),e.firstContext=null)}function Pt(e){var t=e._currentValue;if(mc!==e)if(e={context:e,memoizedValue:t,next:null},Fr===null){if(Hi===null)throw Error(J(308));Fr=e,Hi.dependencies={lanes:0,firstContext:e}}else Fr=Fr.next=e;return t}var sr=null;function vc(e){sr===null?sr=[e]:sr.push(e)}function Hh(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,vc(t)):(n.next=s.next,s.next=n),t.interleaved=n,mn(e,r)}function mn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Tn=!1;function _c(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Wh(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function dn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Bn(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Se&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,mn(e,n)}return s=r.interleaved,s===null?(t.next=t,vc(r)):(t.next=s.next,s.next=t),r.interleaved=t,mn(e,n)}function yi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,sc(e,n)}}function Gd(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?s=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?s=o=t:o=o.next=t}else s=o=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Wi(e,t,n,r){var s=e.updateQueue;Tn=!1;var o=s.firstBaseUpdate,i=s.lastBaseUpdate,l=s.shared.pending;if(l!==null){s.shared.pending=null;var a=l,u=a.next;a.next=null,i===null?o=u:i.next=u,i=a;var c=e.alternate;c!==null&&(c=c.updateQueue,l=c.lastBaseUpdate,l!==i&&(l===null?c.firstBaseUpdate=u:l.next=u,c.lastBaseUpdate=a))}if(o!==null){var d=s.baseState;i=0,c=u=a=null,l=o;do{var f=l.lane,h=l.eventTime;if((r&f)===f){c!==null&&(c=c.next={eventTime:h,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var x=e,_=l;switch(f=t,h=n,_.tag){case 1:if(x=_.payload,typeof x=="function"){d=x.call(h,d,f);break e}d=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=_.payload,f=typeof x=="function"?x.call(h,d,f):x,f==null)break e;d=Le({},d,f);break e;case 2:Tn=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,f=s.effects,f===null?s.effects=[l]:f.push(l))}else h={eventTime:h,lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},c===null?(u=c=h,a=d):c=c.next=h,i|=f;if(l=l.next,l===null){if(l=s.shared.pending,l===null)break;f=l,l=f.next,f.next=null,s.lastBaseUpdate=f,s.shared.pending=null}}while(!0);if(c===null&&(a=d),s.baseState=a,s.firstBaseUpdate=u,s.lastBaseUpdate=c,t=s.shared.interleaved,t!==null){s=t;do i|=s.lane,s=s.next;while(s!==t)}else o===null&&(s.shared.lanes=0);mr|=i,e.lanes=i,e.memoizedState=d}}function Yd(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=oa.transition;oa.transition={};try{e(!1),t()}finally{Te=n,oa.transition=r}}function lm(){return At().memoizedState}function Yv(e,t,n){var r=Fn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},am(e))um(t,n);else if(n=Hh(e,t,n,r),n!==null){var s=it();Dt(n,e,r,s),cm(n,t,r)}}function Kv(e,t,n){var r=Fn(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(am(e))um(t,s);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,l=o(i,n);if(s.hasEagerState=!0,s.eagerState=l,Ht(l,i)){var a=t.interleaved;a===null?(s.next=s,vc(t)):(s.next=a.next,a.next=s),t.interleaved=s;return}}catch{}finally{}n=Hh(e,t,s,r),n!==null&&(s=it(),Dt(n,e,r,s),cm(n,t,r))}}function am(e){var t=e.alternate;return e===Oe||t!==null&&t===Oe}function um(e,t){Gs=Gi=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function cm(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,sc(e,n)}}var Yi={readContext:Pt,useCallback:Je,useContext:Je,useEffect:Je,useImperativeHandle:Je,useInsertionEffect:Je,useLayoutEffect:Je,useMemo:Je,useReducer:Je,useRef:Je,useState:Je,useDebugValue:Je,useDeferredValue:Je,useTransition:Je,useMutableSource:Je,useSyncExternalStore:Je,useId:Je,unstable_isNewReconciler:!1},Xv={readContext:Pt,useCallback:function(e,t){return Yt().memoizedState=[e,t===void 0?null:t],e},useContext:Pt,useEffect:Xd,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,_i(4194308,4,nm.bind(null,t,e),n)},useLayoutEffect:function(e,t){return _i(4194308,4,e,t)},useInsertionEffect:function(e,t){return _i(4,2,e,t)},useMemo:function(e,t){var n=Yt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Yt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Yv.bind(null,Oe,e),[r.memoizedState,e]},useRef:function(e){var t=Yt();return e={current:e},t.memoizedState=e},useState:Kd,useDebugValue:Cc,useDeferredValue:function(e){return Yt().memoizedState=e},useTransition:function(){var e=Kd(!1),t=e[0];return e=Gv.bind(null,e[1]),Yt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Oe,s=Yt();if(Pe){if(n===void 0)throw Error(J(407));n=n()}else{if(n=t(),Ye===null)throw Error(J(349));hr&30||Kh(r,t,n)}s.memoizedState=n;var o={value:n,getSnapshot:t};return s.queue=o,Xd(Qh.bind(null,r,o,e),[e]),r.flags|=2048,po(9,Xh.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Yt(),t=Ye.identifierPrefix;if(Pe){var n=un,r=an;n=(r&~(1<<32-zt(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=co++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Kt]=t,e[lo]=r,xm(e,t,!1,!1),t.stateNode=e;e:{switch(i=Wa(n,r),n){case"dialog":Ie("cancel",e),Ie("close",e),s=r;break;case"iframe":case"object":case"embed":Ie("load",e),s=r;break;case"video":case"audio":for(s=0;sls&&(t.flags|=128,r=!0,Es(o,!1),t.lanes=4194304)}else{if(!r)if(e=Vi(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Es(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!Pe)return et(t),null}else 2*Fe()-o.renderingStartTime>ls&&n!==1073741824&&(t.flags|=128,r=!0,Es(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Fe(),t.sibling=null,n=Re.current,ke(Re,r?n&1|2:n&1),t):(et(t),null);case 22:case 23:return Mc(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?yt&1073741824&&(et(t),t.subtreeFlags&6&&(t.flags|=8192)):et(t),null;case 24:return null;case 25:return null}throw Error(J(156,t.tag))}function r_(e,t){switch(pc(t),t.tag){case 1:return mt(t.type)&&ji(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return os(),be(ht),be(rt),Sc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return wc(t),null;case 13:if(be(Re),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(J(340));rs()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return be(Re),null;case 4:return os(),null;case 10:return yc(t.type._context),null;case 22:case 23:return Mc(),null;case 24:return null;default:return null}}var Yo=!1,nt=!1,s_=typeof WeakSet=="function"?WeakSet:Set,ue=null;function zr(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){$e(e,t,r)}else n.current=null}function yu(e,t,n){try{n()}catch(r){$e(e,t,r)}}var lf=!1;function o_(e,t){if(eu=Oi,e=Ch(),dc(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,l=-1,a=-1,u=0,c=0,d=e,f=null;t:for(;;){for(var h;d!==n||s!==0&&d.nodeType!==3||(l=i+s),d!==o||r!==0&&d.nodeType!==3||(a=i+r),d.nodeType===3&&(i+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++u===s&&(l=i),f===o&&++c===r&&(a=i),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=l===-1||a===-1?null:{start:l,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(tu={focusedElem:e,selectionRange:n},Oi=!1,ue=t;ue!==null;)if(t=ue,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ue=e;else for(;ue!==null;){t=ue;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var _=x.memoizedProps,T=x.memoizedState,p=t.stateNode,g=p.getSnapshotBeforeUpdate(t.elementType===t.type?_:Ot(t.type,_),T);p.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(J(163))}}catch(w){$e(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,ue=e;break}ue=t.return}return x=lf,lf=!1,x}function Ys(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var o=s.destroy;s.destroy=void 0,o!==void 0&&yu(t,n,o)}s=s.next}while(s!==r)}}function wl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function vu(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Em(e){var t=e.alternate;t!==null&&(e.alternate=null,Em(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Kt],delete t[lo],delete t[su],delete t[Dv],delete t[Uv])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Nm(e){return e.tag===5||e.tag===3||e.tag===4}function af(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Nm(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function _u(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Bi));else if(r!==4&&(e=e.child,e!==null))for(_u(e,t,n),e=e.sibling;e!==null;)_u(e,t,n),e=e.sibling}function xu(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(xu(e,t,n),e=e.sibling;e!==null;)xu(e,t,n),e=e.sibling}var Xe=null,Lt=!1;function xn(e,t,n){for(n=n.child;n!==null;)Tm(e,t,n),n=n.sibling}function Tm(e,t,n){if(Qt&&typeof Qt.onCommitFiberUnmount=="function")try{Qt.onCommitFiberUnmount(pl,n)}catch{}switch(n.tag){case 5:nt||zr(n,t);case 6:var r=Xe,s=Lt;Xe=null,xn(e,t,n),Xe=r,Lt=s,Xe!==null&&(Lt?(e=Xe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Xe.removeChild(n.stateNode));break;case 18:Xe!==null&&(Lt?(e=Xe,n=n.stateNode,e.nodeType===8?na(e.parentNode,n):e.nodeType===1&&na(e,n),no(e)):na(Xe,n.stateNode));break;case 4:r=Xe,s=Lt,Xe=n.stateNode.containerInfo,Lt=!0,xn(e,t,n),Xe=r,Lt=s;break;case 0:case 11:case 14:case 15:if(!nt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var o=s,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&yu(n,t,i),s=s.next}while(s!==r)}xn(e,t,n);break;case 1:if(!nt&&(zr(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(l){$e(n,t,l)}xn(e,t,n);break;case 21:xn(e,t,n);break;case 22:n.mode&1?(nt=(r=nt)||n.memoizedState!==null,xn(e,t,n),nt=r):xn(e,t,n);break;default:xn(e,t,n)}}function uf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new s_),t.forEach(function(r){var s=h_.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function Rt(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=i),r&=~o}if(r=s,r=Fe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*l_(r/1960))-r,10e?16:e,Rn===null)var r=!1;else{if(e=Rn,Rn=null,Qi=0,Se&6)throw Error(J(331));var s=Se;for(Se|=4,ue=e.current;ue!==null;){var o=ue,i=o.child;if(ue.flags&16){var l=o.deletions;if(l!==null){for(var a=0;aFe()-Ac?ar(e,0):Pc|=n),gt(e,t)}function Mm(e,t){t===0&&(e.mode&1?(t=jo,jo<<=1,!(jo&130023424)&&(jo=4194304)):t=1);var n=it();e=mn(e,t),e!==null&&(ko(e,t,n),gt(e,n))}function p_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Mm(e,n)}function h_(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(J(314))}r!==null&&r.delete(t),Mm(e,n)}var Om;Om=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ht.current)ft=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ft=!1,t_(e,t,n);ft=!!(e.flags&131072)}else ft=!1,Pe&&t.flags&1048576&&jh(t,Di,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;xi(e,t),e=t.pendingProps;var s=ns(t,rt.current);Qr(t,n),s=Nc(null,t,r,e,s,n);var o=Tc();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,mt(r)?(o=!0,Fi(t)):o=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,_c(t),s.updater=xl,t.stateNode=s,s._reactInternals=t,cu(t,r,e,n),t=pu(null,t,r,!0,o,n)):(t.tag=0,Pe&&o&&fc(t),st(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(xi(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=g_(r),e=Ot(r,e),s){case 0:t=fu(null,t,r,e,n);break e;case 1:t=rf(null,t,r,e,n);break e;case 11:t=tf(null,t,r,e,n);break e;case 14:t=nf(null,t,r,Ot(r.type,e),n);break e}throw Error(J(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:Ot(r,s),fu(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:Ot(r,s),rf(e,t,r,s,n);case 3:e:{if(ym(t),e===null)throw Error(J(387));r=t.pendingProps,o=t.memoizedState,s=o.element,Wh(e,t),Wi(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){s=is(Error(J(423)),t),t=sf(e,t,r,n,s);break e}else if(r!==s){s=is(Error(J(424)),t),t=sf(e,t,r,n,s);break e}else for(vt=$n(t.stateNode.containerInfo.firstChild),_t=t,Pe=!0,Bt=null,n=Uh(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(rs(),r===s){t=gn(e,t,n);break e}st(e,t,r,n)}t=t.child}return t;case 5:return Vh(t),e===null&&lu(t),r=t.type,s=t.pendingProps,o=e!==null?e.memoizedProps:null,i=s.children,nu(r,s)?i=null:o!==null&&nu(r,o)&&(t.flags|=32),gm(e,t),st(e,t,i,n),t.child;case 6:return e===null&&lu(t),null;case 13:return vm(e,t,n);case 4:return xc(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ss(t,null,r,n):st(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:Ot(r,s),tf(e,t,r,s,n);case 7:return st(e,t,t.pendingProps,n),t.child;case 8:return st(e,t,t.pendingProps.children,n),t.child;case 12:return st(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,o=t.memoizedProps,i=s.value,ke(Ui,r._currentValue),r._currentValue=i,o!==null)if(Ht(o.value,i)){if(o.children===s.children&&!ht.current){t=gn(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var l=o.dependencies;if(l!==null){i=o.child;for(var a=l.firstContext;a!==null;){if(a.context===r){if(o.tag===1){a=dn(-1,n&-n),a.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?a.next=a:(a.next=c.next,c.next=a),u.pending=a}}o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),au(o.return,n,t),l.lanes|=n;break}a=a.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(J(341));i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),au(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}st(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Qr(t,n),s=Pt(s),r=r(s),t.flags|=1,st(e,t,r,n),t.child;case 14:return r=t.type,s=Ot(r,t.pendingProps),s=Ot(r.type,s),nf(e,t,r,s,n);case 15:return hm(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:Ot(r,s),xi(e,t),t.tag=1,mt(r)?(e=!0,Fi(t)):e=!1,Qr(t,n),dm(t,r,s),cu(t,r,s,n),pu(null,t,r,!0,e,n);case 19:return _m(e,t,n);case 22:return mm(e,t,n)}throw Error(J(156,t.tag))};function Lm(e,t){return ah(e,t)}function m_(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ct(e,t,n,r){return new m_(e,t,n,r)}function Lc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function g_(e){if(typeof e=="function")return Lc(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ec)return 11;if(e===tc)return 14}return 2}function zn(e,t){var n=e.alternate;return n===null?(n=Ct(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ei(e,t,n,r,s,o){var i=2;if(r=e,typeof e=="function")Lc(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Ar:return ur(n.children,s,o,t);case Ju:i=8,s|=8;break;case Oa:return e=Ct(12,n,t,s|2),e.elementType=Oa,e.lanes=o,e;case La:return e=Ct(13,n,t,s),e.elementType=La,e.lanes=o,e;case $a:return e=Ct(19,n,t,s),e.elementType=$a,e.lanes=o,e;case Vp:return El(n,s,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Hp:i=10;break e;case Wp:i=9;break e;case ec:i=11;break e;case tc:i=14;break e;case Nn:i=16,r=null;break e}throw Error(J(130,e==null?e:typeof e,""))}return t=Ct(i,n,t,s),t.elementType=e,t.type=r,t.lanes=o,t}function ur(e,t,n,r){return e=Ct(7,e,r,t),e.lanes=n,e}function El(e,t,n,r){return e=Ct(22,e,r,t),e.elementType=Vp,e.lanes=n,e.stateNode={isHidden:!1},e}function ca(e,t,n){return e=Ct(6,e,null,t),e.lanes=n,e}function da(e,t,n){return t=Ct(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function y_(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Vl(0),this.expirationTimes=Vl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Vl(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function $c(e,t,n,r,s,o,i,l,a){return e=new y_(e,t,n,l,a),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ct(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},_c(o),e}function v_(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Fm)}catch(e){console.error(e)}}Fm(),Fp.exports=St;var zm=Fp.exports,yf=zm;Ra.createRoot=yf.createRoot,Ra.hydrateRoot=yf.hydrateRoot;function Ji({title:e,subtitle:t,children:n}){const r=!!e||!!t;return m.jsxs("section",{className:`panel ${r?"":"panel--headerless"}`.trim(),children:[r?m.jsxs("header",{className:"panel__header",children:[e?m.jsx("h2",{children:e}):null,t?m.jsx("p",{children:t}):null]}):null,m.jsx("div",{className:"panel__body",children:n})]})}const el=["#93c5fd","#a78bfa","#f9a8d4","#86efac","#fdba74","#67e8f9","#fca5a5","#c4b5fd","#fde68a","#6ee7b7","#fda4af","#5eead4","#ddd6fe","#bef264","#fbcfe8","#bae6fd"];function E_(e){let t=0;for(let n=0;n>>0;return t}function N_(e){return`hsl(${(e*137.508%360).toFixed(1)} 75% 68%)`}function vf(e){const t=[...new Set(e)].sort(),n={};for(let r=0;re.layout.cols){R_(e);for(let o=0;ol+a+1||(e.beginPath(),e.moveTo(c,t.top),e.lineTo(c,t.top+t.plotHeight),e.stroke())}for(let u=0;u<=t.yTicks;u+=1){const c=t.plotBottom-u/t.yTicks*(t.plotBottom-t.plotTop);e.beginPath(),e.moveTo(l,c),e.lineTo(l+a,c),e.stroke()}e.strokeStyle=s.axis,e.beginPath(),e.moveTo(l,t.plotBottom),e.lineTo(l+a,t.plotBottom),e.stroke()}function nl(e,t,{color:n,lineWidth:r,alpha:s=1,lineDash:o=[],startCol:i,endCol:l,yMaxMs:a,layout:u}){const c=Math.max(0,i-1),d=Math.min(u.cols-1,l+1);e.strokeStyle=n,e.lineWidth=r,e.globalAlpha=s,e.setLineDash(o),e.beginPath();const f=[];let h=null,x=Number.NaN,_=!1;for(let T=c-1;T>=0;T-=1){const p=t[T];if(Number.isFinite(p)){h=T,x=p,_=p>a;break}}for(let T=c;T<=d;T+=1){const p=t[T];if(!Number.isFinite(p))continue;const g=p>a;if(g&&!_&&f.push(T),h!==null&&Number.isFinite(x)){const y=x>a;if(!(y&&g)){const w=u.left+h+.5,P=y?u.plotTop:mo(x,a,u),O=u.left+T+.5,L=g?u.plotTop:mo(p,a,u);e.moveTo(w,P),e.lineTo(O,L)}}h=T,x=p,_=g}if(e.stroke(),e.setLineDash([]),e.globalAlpha=1,f.length>0){e.fillStyle=n,e.globalAlpha=Math.min(1,s+.1);for(const T of f){const p=u.left+T;e.fillRect(p,u.plotTop,1,3)}e.globalAlpha=1}}function xf(e,t,n,{color:r,alpha:s,lineDash:o=[],startCol:i,endCol:l,yMaxMs:a,layout:u}){e.strokeStyle=r,e.lineWidth=1,e.globalAlpha=s,e.setLineDash(o);for(let c=i;c<=l;c+=1){const d=t[c],f=n[c];if(!Number.isFinite(d)||!Number.isFinite(f)||f<=d)continue;const h=u.left+c+.5,x=d>a?u.plotTop:mo(d,a,u),_=f>a?u.plotTop:mo(f,a,u);e.beginPath(),e.moveTo(h,x),e.lineTo(h,_),e.stroke()}e.setLineDash([]),e.globalAlpha=1}function wf(e,t,{color:n,alpha:r,startCol:s,endCol:o,yMaxMs:i,layout:l}){const a=Math.max(0,s-1),u=Math.min(l.cols-1,o+1);let c=null,d=null;for(let f=a;f<=u;f+=1){const h=t[f];!Number.isFinite(h)||h<=0||(c===null&&(c=f),d=f)}if(!(c===null||d===null)){e.fillStyle=n,e.globalAlpha=r,e.beginPath(),e.moveTo(l.left+c+.5,l.plotBottom);for(let f=c;f<=d;f+=1){const h=t[f];if(!Number.isFinite(h)||h<=0)continue;const x=Math.min(h,i),_=l.left+f+.5,T=mo(x,i,l);e.lineTo(_,T)}e.lineTo(l.left+d+.5,l.plotBottom),e.closePath(),e.fill(),e.globalAlpha=1}}function L_(e,{leaseBins:t,userBins:n,color:r,startCol:s,endCol:o,yMaxMs:i,layout:l}){if(wf(e,t,{color:r,alpha:.18,startCol:s,endCol:o,yMaxMs:i,layout:l}),n!==null){const a=new Float32Array(n.length);a.fill(Number.NaN);for(let u=s;u<=o&&u9&&(n*=10,r=1),Math.max(Ur,r*n)}function Ef(e){if(!Number.isFinite(e)||e<=0)return js;const t=1e3/e;return B_(t*1.25)}function Nf(e,t,n,r,s,o,i){let l=e.get(o),a=t.get(o),u=n.get(o),c=r.get(o),d=s.get(o);return l||(l=tl(i),e.set(o,l)),a||(a=tl(i),t.set(o,a)),u||(u=new Float64Array(i),n.set(o,u)),c||(c=new Uint16Array(i),r.set(o,c)),d||(d=new Int32Array(i),d.fill(-2147483648),s.set(o,d)),{bins:l,peakBins:a,sumBins:u,countBins:c,cycleBins:d}}function j_({samples:e,publisherProcessId:t,publisherEndpointId:n,nominalPublishRateHz:r,topic:s,topicScope:o,leaseColorMap:i,selectedSubscriberEndpointId:l=null,windowSeconds:a,onWindowSecondsChange:u,darkMode:c=!1}){const d=E.useRef(null),f=E.useRef(null),h=E.useRef(null),x=E.useRef(null),_=E.useRef(!0),T=E.useRef(!1),[p,g]=E.useState(()=>a.toFixed(1)),[y,w]=E.useState(!0),[P,O]=E.useState(`${js.toFixed(2)}`),[L,R]=E.useState("lease_time_ns"),F=E.useMemo(()=>l?Qs(l,i):null,[i,l]),D=c?Dm:T_,H=E.useMemo(()=>Qo(P),[P]),Z=E.useMemo(()=>o&&o.length>0?o:[s],[s,o]),U=E.useMemo(()=>[...Z].sort().join("|"),[Z]),v=`${t}|${n}`,k=M=>{const C=Qo(M??p);if(C===null||!u){g(a.toFixed(1));return}const S=yr(C,.5,30);u(S),g(S.toFixed(1))},N=()=>{var M;if(y){const C=((M=h.current)==null?void 0:M.yMaxMs)??Ef(r);O(C.toFixed(2)),w(!1);return}w(!0)};return E.useEffect(()=>{g(a.toFixed(1))},[a]),E.useEffect(()=>{const M=d.current;if(!M)return;const C=M.getContext("2d");if(!C)return;const S=Math.max(1,window.devicePixelRatio||1),b=I_(M,a),B=Math.floor(b.width*S),j=Math.floor(b.height*S),Y=f.current,Q=!Y||Y.width!==B||Y.height!==j;Q&&(M.width=B,M.height=j,f.current={width:B,height:j}),C.setTransform(S,0,0,S,0,0);const ne=Math.max(1,a*1e9),se=Ef(r),fe=y?se:Math.max(Ur,H??js);let W=h.current;const A=W===null||Q||W.layout.cols!==b.cols||W.layout.width!==b.width||W.windowNs!==ne||W.scopeSignature!==U||W.publisherSignature!==v;if(A&&(W=b_(b,ne,U,v,fe),h.current=W,x.current=null,C.fillStyle=D.background,C.fillRect(0,0,b.width,b.height)),W===null)return;const I=new Set;let G=W.lastTimestamp,X=!1,ie=W.lastWipeCycle,le=null;W.originNs!==null&&Number.isFinite(W.lastTimestamp)&&(le=fa(W.lastTimestamp,W.originNs,W.windowNs,W.layout.cols));const ce=e!==x.current?e:[];e!==x.current&&(x.current=e);for(const oe of ce){if(!Number.isFinite(oe.timestamp)||!Number.isFinite(oe.value)||!P_(oe.topic,Z))continue;const K=oe.metric==="publish_delta_ns"&&oe.processId===t&&oe.endpointId===n,z=oe.metric==="lease_time_ns",ee=oe.metric==="user_span_ns";if(!K&&!z&&!ee||(W.originNs===null&&(W.originNs=oe.timestamp),W.originNs===null||oe.timestamp0&&(M_(W,le,ae,I),le=ae):le=ae,K){q>W.publishCycle[$]&&(W.publishCycle[$]=q,W.publishBins[$]=Number.NaN,W.publishPeakBins[$]=Number.NaN,W.publishSumBins[$]=0,W.publishCountBins[$]=0,I.add($));const pe=Math.min(65535,W.publishCountBins[$]+1);W.publishCountBins[$]=pe,W.publishSumBins[$]+=te;const we=W.publishSumBins[$]/pe,de=W.publishBins[$];(!Number.isFinite(de)||Math.abs(we-de)>1e-6)&&(W.publishBins[$]=we,I.add($));const me=W.publishPeakBins[$];(!Number.isFinite(me)||te>me)&&(W.publishPeakBins[$]=te,I.add($))}else{const pe=z?Nf(W.leaseBinsByEndpoint,W.leasePeakBinsByEndpoint,W.leaseSumByEndpoint,W.leaseCountByEndpoint,W.leaseCycleByEndpoint,oe.endpointId,W.layout.cols):Nf(W.userBinsByEndpoint,W.userPeakBinsByEndpoint,W.userSumByEndpoint,W.userCountByEndpoint,W.userCycleByEndpoint,oe.endpointId,W.layout.cols);q>pe.cycleBins[$]&&(pe.cycleBins[$]=q,pe.bins[$]=Number.NaN,pe.peakBins[$]=Number.NaN,pe.sumBins[$]=0,pe.countBins[$]=0,I.add($));const we=Math.min(65535,pe.countBins[$]+1);pe.countBins[$]=we,pe.sumBins[$]+=te;const de=pe.sumBins[$]/we,me=pe.bins[$];(!Number.isFinite(me)||Math.abs(de-me)>1e-6)&&(pe.bins[$]=de,I.add($));const ge=pe.peakBins[$];(!Number.isFinite(ge)||te>ge)&&(pe.peakBins[$]=te,I.add($))}G=Math.max(G,oe.timestamp),X=!0}const he=y&&!_.current;if(_.current=y,y?he?W.yMaxMs=se:ie>W.lastWipeCycle&&(W.lastWipeCycle=ie,W.yMaxMs=se):W.yMaxMs=Math.max(Ur,H??js),y){const oe=W.yMaxMs.toFixed(2);P!==oe&&O(oe)}if(X&&W.originNs!==null){const oe=fa(G,W.originNs,W.windowNs,W.layout.cols);I.add(oe.col),W.lastCursorCol!==null&&_f(I,W.lastCursorCol,W.layout.cols);const K=(oe.col+k_)%W.layout.cols;_f(I,K,W.layout.cols),W.lastCursorCol=K,W.lastTimestamp=G}if((A||I.size>0)&&(C.fillStyle=D.background,C.fillRect(0,0,W.layout.width,W.layout.height),$_(C,W,0,W.layout.cols-1,L,l,i,D)),W.lastTimestamp<=0){C.fillStyle=D.background,C.fillRect(0,0,W.layout.width,W.layout.height),C.fillStyle=D.waitingText,C.font='12px "Avenir Next", sans-serif',C.fillText("Waiting for trace samples...",W.layout.left,26),Sf(C,W,a,D);return}Sf(C,W,a,D)},[y,c,Z,i,H,r,n,t,v,l,e,L,U,a,D]),m.jsxs("div",{className:"timing-trace",children:[m.jsxs("div",{className:"timing-trace__controls",children:[m.jsxs("div",{className:"timing-trace__controls-left",children:[m.jsxs("label",{className:"timing-trace__axis-input",children:[m.jsx("span",{children:"Window (s)"}),m.jsx("input",{type:"number",min:.5,max:30,step:"0.5",value:p,onChange:M=>{const C=M.target.value;g(C),T.current||k(C)},onMouseDown:()=>{T.current=!1},onBlur:()=>{T.current=!1,k()},onKeyDown:M=>{if(M.key==="Enter"){T.current=!1,k();return}if(M.key==="ArrowUp"||M.key==="ArrowDown"){M.preventDefault(),T.current=!1;const C=Qo(p)??a,S=M.key==="ArrowUp"?.5:-.5,b=yr(C+S,.5,30);g(b.toFixed(1)),u==null||u(b);return}(M.key.length===1||M.key==="Backspace"||M.key==="Delete")&&(T.current=!0)}})]}),m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:D.publish}}),"Publish Delta"]}),l?m.jsxs(m.Fragment,{children:[m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:"transparent",border:`2px solid ${F??"#94a3b8"}`}}),"Lease Time"]}),m.jsxs("span",{className:"timing-trace__legend-item is-static",children:[m.jsx("i",{style:{background:F??"#94a3b8"}}),"User Span"]})]}):m.jsxs(m.Fragment,{children:[m.jsx("button",{type:"button",className:`timing-trace__legend-item timing-trace__legend-toggle ${L==="lease_time_ns"?"is-active":""}`,onClick:()=>R("lease_time_ns"),"aria-pressed":L==="lease_time_ns",children:"Lease Time"}),m.jsx("button",{type:"button",className:`timing-trace__legend-item timing-trace__legend-toggle ${L==="user_span_ns"?"is-active":""}`,onClick:()=>R("user_span_ns"),"aria-pressed":L==="user_span_ns",children:"User Span"})]})]}),m.jsxs("div",{className:"timing-trace__controls-right",children:[m.jsxs("label",{className:"timing-trace__axis-input timing-trace__axis-input--ymax",children:[m.jsx("span",{children:"Y max (ms)"}),m.jsx("input",{type:"number",min:Ur,step:"0.1",value:P,onChange:M=>O(M.target.value),onBlur:()=>{const M=Qo(P);if(M===null){O(`${js.toFixed(2)}`);return}const C=Math.max(Ur,M);O(C.toFixed(2))},disabled:y})]}),m.jsx("button",{type:"button",role:"switch","aria-checked":y,className:`timing-trace__mode-toggle ${y?"is-auto":"is-fixed"}`,onClick:N,title:y?"Switch to Fixed Y":"Switch to Auto Y",children:m.jsx("span",{className:"timing-trace__mode-toggle-label",children:y?"Auto":"Fixed"})})]})]}),m.jsx("canvas",{ref:d,className:"timing-trace__canvas"})]})}function He(e){return e.split(":")[0]??e}function zc(e){const[t,...n]=e.split(":");return{topic:t??"",endpointToken:n.join(":")}}function F_(e){const{endpointToken:t}=zc(e);return t.length>0?t:null}function z_(e){const{topic:t,endpointToken:n}=zc(e);return{topic:t.length>0?t:null,endpointId:n.length>0?n:null}}const go=2,D_=.5,U_=30,H_=new Set(["publish_delta_ns"]),W_=new Set(["lease_time_ns","user_span_ns"]);function Jn(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function V_(e){return`${e.toFixed(1)} Hz`}function G_(e){return!Number.isFinite(e)||e<=0?"":Math.abs(e-Math.round(e))<1e-6?`${Math.round(e)}s`:`${e.toFixed(1)}s`}function Y_(e,t,n){return Math.min(n,Math.max(t,e))}function Tu(e){return!Number.isFinite(e)||e<=0?go:Y_(e,D_,U_)}function K_(e){if(!Number.isFinite(e)||e<=0)return go;const t=Math.max(go,Math.round(10/e));return Tu(t)}function X_(e,t=48){return e.length<=t?e:`${e.slice(0,t-1)}…`}function Q_(e,t,n){return n!==null&&n>0&&t/n>.5?"backpressure":e>0?"active":"idle"}function nr(e){return typeof e=="object"&&e!==null}function Z_(e){if(!e)return[];const t=[];for(const[n,r]of Object.entries(e.data.batches)){if(!nr(r))continue;const s=r.samples;if(Array.isArray(s))for(const o of s){if(!nr(o))continue;const i=o.endpoint_id,l=o.topic,a=o.metric,u=o.value,c=o.timestamp,d=o.sample_seq;typeof i!="string"||typeof l!="string"||typeof a!="string"||typeof u!="number"||!Number.isFinite(u)||t.push({rowId:`${n}:${i}`,processId:n,endpointId:i,topic:l,timestamp:typeof c=="number"&&Number.isFinite(c)?c:e.data.timestamp,metric:a,value:u,sampleSeq:typeof d=="number"&&Number.isFinite(d)?Math.trunc(d):null,channelKind:typeof o.channel_kind=="string"?o.channel_kind:null})}}return t}function q_(e,t,n){return{id:`${e.process_id}:${t.endpoint_id}`,endpointId:t.endpoint_id,topic:t.topic,processId:e.process_id,pid:e.pid,host:e.host,messagesWindow:Jn(t.messages_received_window),channelKindLast:typeof t.channel_kind_last=="string"?t.channel_kind_last:"unknown",unitAddress:n.get(t.endpoint_id)??null}}function ku(e,t){const n=new Set([e]),r=t==null?void 0:t.graph[e];if(Array.isArray(r))for(const s of r)typeof s=="string"&&n.add(s);return n}function Tf(e,t){if(t.has(e))return!0;for(const n of t)if(e.startsWith(`${n}:`))return!0;return!1}function J_(e,t,n){const r=ku(e,n);return t.filter(s=>r.has(s.topic)).sort((s,o)=>{const i=s.topic.localeCompare(o.topic);if(i!==0)return i;const l=s.processId.localeCompare(o.processId);return l!==0?l:s.endpointId.localeCompare(o.endpointId)})}function e1(e,t,n,r,s){const o=`${e.process_id}:${t.endpoint_id}`,i=t.num_buffers,l=typeof i=="number"&&Number.isFinite(i)?Math.max(0,Math.trunc(i)):null;return{id:o,endpointId:t.endpoint_id,topic:t.topic,processId:e.process_id,pid:e.pid,host:e.host,windowSeconds:Jn(e.window_seconds),publishRateHzWindow:Jn(t.publish_rate_hz_window),messagesPublishedWindow:Jn(t.messages_published_window),inflightCurrent:Jn(t.inflight_messages_current),numBuffers:l,activityTone:Q_(Jn(t.messages_published_window),Jn(t.inflight_messages_current),l),contributors:J_(t.topic,n,r),unitAddress:s.get(t.endpoint_id)??null}}function t1({graphSnapshot:e,profilingSnapshot:t,latestTraceEvent:n,setProfilingTraceControl:r,focusPublisherEndpointId:s=null,focusPublisherTopic:o=null,focusSubscriberEndpointId:i=null,focusActionId:l=0,hideFilters:a=!1,defaultTraceMetrics:u=["publish_delta_ns","lease_time_ns","user_span_ns"],traceDockHost:c=null,onTraceDockStateChange:d,traceCloseSignal:f=0,onPublisherSelect:h,onSubscriberSelect:x,darkMode:_=!1}){const[T,p]=E.useState(""),[g,y]=E.useState([]),[w,P]=E.useState([]),[O,L]=E.useState({}),[R,F]=E.useState({}),[D,H]=E.useState({}),[Z,U]=E.useState({}),[v,k]=E.useState({}),N=E.useRef(f),M=E.useRef(-1),C=E.useRef({}),S=E.useMemo(()=>t?Object.values(t):[],[t]),b=E.useMemo(()=>{const z=new Map;if(!e)return z;for(const ee of Object.values(e.sessions)){const $=nr(ee.metadata)?ee.metadata:null,q=$&&nr($.components)?$.components:null;if(q){for(const[te,ae]of Object.entries(q))if(!(!nr(ae)||!nr(ae.streams)))for(const pe of Object.values(ae.streams)){if(!nr(pe)||typeof pe.address!="string")continue;const we=F_(pe.address);we&&!z.has(we)&&z.set(we,te)}}}return z},[e]),B=E.useMemo(()=>{const z=[];for(const $ of S)for(const q of Object.values($.subscribers))z.push(q_($,q,b));const ee=[];for(const $ of S)for(const q of Object.values($.publishers))ee.push(e1($,q,z,e,b));return ee.sort(($,q)=>{const te=$.topic.localeCompare(q.topic);if(te!==0)return te;const ae=$.processId.localeCompare(q.processId);return ae!==0?ae:$.endpointId.localeCompare(q.endpointId)})},[b,e,S]),j=E.useMemo(()=>{const z=T.trim().toLowerCase();return B.filter(ee=>z.length===0?!0:ee.topic.toLowerCase().includes(z)||ee.endpointId.toLowerCase().includes(z)||ee.processId.toLowerCase().includes(z))},[B,T]),Y=E.useMemo(()=>new Map(B.map(z=>[z.id,z])),[B]);E.useEffect(()=>{if(l!==M.current){if(s){const z=B.filter(ee=>ee.endpointId===s?!0:o?ee.topic===o:!1).map(ee=>ee.id);if(z.length===0)return;M.current=l,p(""),y(z),k({}),window.requestAnimationFrame(()=>{var ee;(ee=C.current[z[0]])==null||ee.scrollIntoView({block:"nearest",behavior:"smooth"})});return}if(i){const z=B.filter(ee=>ee.contributors.some($=>$.endpointId===i)).map(ee=>ee.id);if(z.length===0)return;M.current=l,p(""),y(z),k(ee=>{const $={...ee};for(const q of z)$[q]=i;return $}),window.requestAnimationFrame(()=>{var ee;(ee=C.current[z[0]])==null||ee.scrollIntoView({block:"nearest",behavior:"smooth"})});return}}},[s,o,i,l,B]),E.useEffect(()=>{if(!n||w.length===0)return;const z=Z_(n);if(z.length===0)return;const ee=new Set(w),$=w.map(te=>Y.get(te)).filter(te=>te!==void 0).map(te=>({row:te,topicScope:ku(te.topic,e)})),q=new Map($.map(te=>[te.row.id,te.topicScope]));L(te=>{let ae=!1;const pe={...te},we={};for(const de of z){const me=new Set,ge=Y.get(de.rowId),Ee=q.get(de.rowId);if(ge&&ee.has(de.rowId)&&Ee&&Tf(de.topic,Ee)&&H_.has(de.metric)&&me.add(de.rowId),W_.has(de.metric))for(const ye of $)Tf(de.topic,ye.topicScope)&&me.add(ye.row.id);for(const ye of me){const Ae=we[ye];Ae?Ae.push(de):we[ye]=[de]}}for(const[de,me]of Object.entries(we))me.length!==0&&(pe[de]=me,ae=!0);return ae?pe:te})},[w,e,n,Y]);const Q=async(z,ee)=>{if(!R[z.id]){F($=>({...$,[z.id]:!0})),H($=>({...$,[z.id]:null})),ee?(L($=>({...$,[z.id]:[]})),U($=>$[z.id]!==void 0?$:{...$,[z.id]:K_(z.publishRateHzWindow)}),P([z.id])):P($=>$.includes(z.id)?$.filter(q=>q!==z.id):$);try{if(ee){const $=w.find(q=>q!==z.id);if($){const q=Y.get($);q&&await r({process_id:q.processId,enabled:!1,publisher_endpoint_id:null,publisher_topic:null,subscriber_topic:null,metrics:null,sample_mod:1,ttl_seconds:null,timeout:2})}}await r({process_id:z.processId,enabled:ee,publisher_endpoint_id:ee?z.endpointId:null,publisher_topic:ee?z.topic:null,subscriber_topic:null,metrics:ee?u:null,sample_mod:1,ttl_seconds:null,timeout:2})}catch($){const q=$ instanceof Error?$.message:"Trace control request failed.";H(te=>({...te,[z.id]:q})),P(te=>ee?te.filter(ae=>ae!==z.id):te.includes(z.id)?te:[...te,z.id])}finally{F($=>({...$,[z.id]:!1}))}}},ne=z=>{const ee=!g.includes(z.id);ee&&(h==null||h({unitAddress:z.unitAddress,endpointId:z.endpointId,topic:z.topic})),y($=>$.includes(z.id)?$.filter(q=>q!==z.id):[...$,z.id]),ee||k($=>({...$,[z.id]:null})),!ee&&w.includes(z.id)&&Q(z,!1)},se=(z,ee)=>{Q(z,ee)},fe=a,W=w[0]??null,A=W?Y.get(W)??null:null,I=W?O[W]??[]:[],G=W?!!R[W]:!1,X=W?D[W]??null:null,ie=Tu(W?Z[W]??go:go),le=A?Array.from(ku(A.topic,e)):[],ce=I.filter(z=>z.metric==="lease_time_ns"||z.metric==="user_span_ns").map(z=>z.endpointId),he=vf([...(A==null?void 0:A.contributors.map(z=>z.endpointId))??[],...ce]),oe=W?v[W]??null:null;E.useEffect(()=>{if(f===N.current)return;N.current=f;const z=w[0];if(!z)return;const ee=Y.get(z);if(!ee){P([]);return}P([]),r({process_id:ee.processId,enabled:!1,publisher_endpoint_id:null,publisher_topic:null,subscriber_topic:null,metrics:null,sample_mod:1,ttl_seconds:null,timeout:2})},[w,Y,r,f]),E.useEffect(()=>{if(d){if(!A){d(null);return}d({active:!0,topic:A.topic,endpointId:A.endpointId,status:G?"applying":"capturing"})}},[G,A,d]);const K=c&&A?zm.createPortal(m.jsxs("div",{className:"trace-dock-trace",children:[I.length===0?m.jsx("p",{className:"muted",children:"Waiting for trace samples on this publisher endpoint."}):m.jsx(j_,{samples:I,publisherProcessId:A.processId,publisherEndpointId:A.endpointId,nominalPublishRateHz:A.publishRateHzWindow,topic:A.topic,topicScope:le,leaseColorMap:he,selectedSubscriberEndpointId:oe,windowSeconds:ie,darkMode:_,onWindowSecondsChange:z=>U(ee=>({...ee,[A.id]:Tu(z)}))}),X?m.jsx("p",{className:"patch-status err",children:X}):null]}),c):null;return m.jsxs(Ji,{children:[B.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No publishers snapshot entries available."})}):m.jsxs(m.Fragment,{children:[fe?null:m.jsx("div",{className:"settings-search",children:m.jsx("input",{type:"search",placeholder:"Search topic, endpoint, or process",value:T,onChange:z=>p(z.target.value)})}),j.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No publishers match the current filter."})}):m.jsx("div",{className:"publisher-list",children:j.map(z=>{const ee=g.includes(z.id),$=w.includes(z.id),q=!!R[z.id],te=G_(z.windowSeconds),ae=vf(z.contributors.map(de=>de.endpointId)),pe=v[z.id]??null,we=z.contributors.some(de=>de.endpointId===pe)?pe:null;return m.jsxs("article",{ref:de=>{C.current[z.id]=de},className:`publisher-row activity-${z.activityTone}`,children:[m.jsxs("button",{type:"button",className:"publisher-row__toggle",onClick:()=>ne(z),"aria-expanded":ee,children:[m.jsxs("div",{className:"publisher-row__top",children:[m.jsx("div",{className:"publisher-row__identity",children:m.jsx("div",{className:"publisher-row__identity-text",children:m.jsx("p",{className:"mono publisher-topic",title:z.topic,children:z.topic})})}),m.jsx("span",{className:"publisher-caret",children:ee?"▾":"▸"})]}),m.jsxs("div",{className:"publisher-row__metrics",children:[m.jsxs("div",{children:[m.jsx("span",{children:"Rate"}),m.jsx("strong",{children:V_(z.publishRateHzWindow)})]}),m.jsxs("div",{children:[m.jsx("span",{children:te?`Msgs (${te})`:"Msgs"}),m.jsx("strong",{children:z.messagesPublishedWindow})]}),m.jsxs("div",{children:[m.jsx("span",{children:"Inflight"}),m.jsx("strong",{children:z.numBuffers===null?`${z.inflightCurrent}`:`${z.inflightCurrent} / ${z.numBuffers}`})]}),m.jsxs("div",{children:[m.jsx("span",{children:"Subscribers"}),m.jsx("strong",{children:z.contributors.length})]})]})]}),ee?m.jsxs("div",{className:"publisher-row__details",children:[m.jsxs("div",{className:"publisher-kpis",children:[m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Host"}),m.jsx("strong",{children:z.host})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"PID"}),m.jsx("strong",{children:z.pid})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Process"}),m.jsx("strong",{className:"mono",title:z.processId,children:z.processId.slice(0,8)})]})]}),m.jsx("div",{className:"publisher-detail-line",children:m.jsxs("div",{className:"publisher-endpoint",children:[m.jsx("span",{children:"Endpoint"}),m.jsx("code",{className:"mono",title:z.endpointId,children:z.endpointId})]})}),m.jsxs("div",{className:"panel-section",children:[m.jsxs("button",{type:"button",className:`publisher-trace-button ${$?"is-stop":"is-start"}`,onClick:()=>se(z,!$),disabled:q,"aria-pressed":$,children:[m.jsx("span",{"aria-hidden":"true",className:"publisher-trace-button__icon",children:$?"■":"▶"}),m.jsx("span",{children:q?"Applying...":$?"Stop Profiling Trace":"Start Profiling Trace"})]}),m.jsx("div",{className:"subscriber-section-header",children:m.jsx("h3",{children:"Subscribers"})}),z.contributors.length===0?m.jsx("p",{className:"muted",children:"No subscriber profiling data is available for this topic."}):m.jsx("div",{className:"subscriber-list",children:z.contributors.map(de=>{const me=we===de.endpointId;return m.jsxs("article",{className:`subscriber-item ${me?"is-expanded":""}`,children:[m.jsxs("button",{type:"button",className:"subscriber-item__summary",onClick:()=>{const ge=me?null:de.endpointId;ge&&(x==null||x({unitAddress:de.unitAddress,endpointId:de.endpointId,topic:de.topic})),k(Ee=>({...Ee,[z.id]:ge}))},children:[m.jsx("div",{className:"subscriber-item__identity",children:m.jsx("p",{className:"mono subscriber-topic-short",title:de.topic,children:m.jsxs("span",{className:"subscriber-topic-with-color",children:[m.jsx("i",{className:"subscriber-trace-dot",style:{background:Qs(de.endpointId,ae)}}),m.jsx("span",{className:"subscriber-topic-label",children:X_(de.topic,72)})]})})}),m.jsxs("div",{className:"subscriber-item__metrics",children:[m.jsxs("span",{children:[m.jsx("em",{children:te?`Msgs (${te})`:"Msgs"}),m.jsx("strong",{children:de.messagesWindow})]}),m.jsxs("span",{children:[m.jsx("em",{children:"Channel"}),m.jsx("strong",{children:de.channelKindLast})]})]})]}),me?m.jsx("div",{className:"subscriber-item__detail",children:m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"publisher-kpis",children:[m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Host"}),m.jsx("strong",{children:de.host})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"PID"}),m.jsx("strong",{children:de.pid})]}),m.jsxs("article",{className:"mini-kpi",children:[m.jsx("span",{children:"Process"}),m.jsx("strong",{className:"mono",title:de.processId,children:de.processId.slice(0,8)})]})]}),m.jsx("div",{className:"publisher-detail-line",children:m.jsxs("div",{className:"publisher-endpoint",children:[m.jsx("span",{children:"Endpoint"}),m.jsx("code",{className:"mono",title:de.endpointId,children:de.endpointId})]})})]})}):null]},de.id)})})]})]}):null]},z.id)})})]}),K]})}function n1(e){const t=e.field_type.toLowerCase();return Array.isArray(e.choices)&&e.choices.length>0?"choice":t.includes("bool")?"boolean":t.includes("int")||t.includes("float")||t.includes("double")||t.includes("number")?"number":t.includes("str")||t.includes("string")?"text":"json"}function r1(e){return typeof e=="boolean"?"boolean":typeof e=="number"?"number":typeof e=="string"?"text":"json"}function kf(e,t){if(!e||typeof e!="object")return;const n=t.split(".").filter(s=>s.length>0);let r=e;for(const s of n){if(!r||typeof r!="object"||!(s in r))return;r=r[s]}return r}function Hm(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Wm(e,t=""){if(!e||typeof e!="object"||Array.isArray(e))return t.length>0?[t]:[];const n=Object.entries(e);if(n.length===0)return t.length>0?[t]:[];const r=[];for(const[s,o]of n){const i=t.length>0?`${t}.${s}`:s,l=Wm(o,i);l.length===0?r.push(i):r.push(...l)}return r}function s1(e){if(e.mode==="boolean")return!!e.currentValue;if(e.mode==="choice"){const t=e.choices??[],n=Math.max(0,t.findIndex(r=>JSON.stringify(r)===JSON.stringify(e.currentValue)));return String(n)}return e.mode==="number"?typeof e.currentValue=="number"?String(e.currentValue):"":e.mode==="text"?typeof e.currentValue=="string"?e.currentValue:"":Hm(e.currentValue)}function o1(e,t){const n=Object.keys(e),r=Object.keys(t);return n.length!==r.length?!1:n.every(s=>e[s]===t[s])}function i1({settings:e,patchSettingField:t,focusComponentAddress:n=null,focusActionId:r=0,onComponentSelect:s}){const o=E.useMemo(()=>e?Object.keys(e).sort():[],[e]),i=E.useMemo(()=>o.join("|"),[o]),l=E.useMemo(()=>new Set(o),[i]),[a,u]=E.useState(null),[c,d]=E.useState(""),[f,h]=E.useState({}),[x,_]=E.useState({}),[T,p]=E.useState({}),[g,y]=E.useState({}),w=E.useRef({}),P=E.useRef({}),O=E.useRef(null);E.useEffect(()=>{a&&!o.includes(a)&&u(null)},[o,a]),E.useEffect(()=>{!n||!l.has(n)||(d(""),u(n),window.requestAnimationFrame(()=>{var v;(v=w.current[n])==null||v.scrollIntoView({block:"nearest",behavior:"smooth"})}))},[l,r,n]);const L=a?e==null?void 0:e[a]:null,R=E.useMemo(()=>(L==null?void 0:L.structured_value)??(L==null?void 0:L.repr_value),[L]),F=E.useMemo(()=>{var M;if(!L)return[];const v=((M=L.settings_schema)==null?void 0:M.fields)??[];if(v.length>0)return v.map(C=>{const S=kf(R,C.name);return{path:C.name,mode:n1(C),currentValue:S??C.default??null,description:C.description,bounds:C.bounds,choices:C.choices,isInteger:C.field_type.toLowerCase().includes("int")}});const k=Wm(R);return(k.length>0?k:["value"]).map(C=>{const S=C==="value"?R:kf(R,C);return{path:C,mode:r1(S),currentValue:S,description:null,bounds:null,choices:null,isInteger:Number.isInteger(S)}})},[L,R]),D=!!(L!=null&&L.patchable),H=E.useMemo(()=>{const v=c.trim().toLowerCase();return v?o.filter(k=>{const N=e==null?void 0:e[k],M=typeof(N==null?void 0:N.component_name)=="string"?N.component_name:"",C=typeof(N==null?void 0:N.component_type)=="string"?N.component_type:"";return k.toLowerCase().includes(v)||M.toLowerCase().includes(v)||C.toLowerCase().includes(v)}):o},[o,c,e]);E.useEffect(()=>{const v={};for(const N of F)v[N.path]=s1(N);const k=O.current!==a;h(N=>{if(k)return v;const M={};for(const[C,S]of Object.entries(v)){const b=N[C],B=P.current[C];M[C]=b===void 0||b===B?S:b}return o1(N,M)?N:M}),k&&(_({}),p({}),y({})),P.current=v,O.current=a},[F,a]);const Z=v=>{const k=f[v.path];if(v.mode==="boolean")return!!k;if(v.mode==="choice"){const N=Number.parseInt(String(k),10),M=v.choices??[];if(!Number.isInteger(N)||N<0||N>=M.length)throw new Error("A valid choice must be selected.");return M[N]}if(v.mode==="number"){const N=Number.parseFloat(String(k));if(!Number.isFinite(N))throw new Error("Value must be a valid number.");return v.isInteger?Math.trunc(N):N}if(v.mode==="text")return String(k??"");try{return JSON.parse(String(k??""))}catch{throw new Error("Value must be valid JSON.")}},U=async v=>{if(!a||!D)return;let k;try{k=Z(v)}catch(N){p(M=>({...M,[v.path]:N instanceof Error?N.message:"Invalid field value."})),y(M=>({...M,[v.path]:null}));return}_(N=>({...N,[v.path]:!0})),p(N=>({...N,[v.path]:null})),y(N=>({...N,[v.path]:null}));try{const N=await t(a,v.path,k);y(M=>({...M,[v.path]:`Applied ${N.field_path}`}))}catch(N){p(M=>({...M,[v.path]:N instanceof Error?N.message:"Patch request failed."}))}finally{_(N=>({...N,[v.path]:!1}))}};return m.jsx(Ji,{children:o.length===0?m.jsx("div",{className:"panel-section",children:m.jsx("p",{className:"muted",children:"No settings snapshot entries available."})}):m.jsxs("div",{className:"settings-component-list",children:[m.jsx("div",{className:"settings-search",children:m.jsx("input",{type:"search",placeholder:"Search component, type, or address",value:c,onChange:v=>d(v.target.value)})}),H.map(v=>{const k=(e==null?void 0:e[v])??null,N=a===v,M=!!(k!=null&&k.patchable),C=typeof(k==null?void 0:k.component_name)=="string"&&k.component_name.length>0?k.component_name:v.split("/")[v.split("/").length-1]??v;return m.jsxs("article",{ref:S=>{w.current[v]=S},className:`settings-component-row ${N?"is-expanded":""}`,children:[m.jsxs("button",{type:"button",className:"settings-component-row__toggle","aria-expanded":N,onClick:()=>u(S=>{const b=S===v?null:v;return s==null||s(b),b}),children:[m.jsxs("div",{className:"settings-component-row__identity",children:[m.jsxs("div",{className:"settings-component-row__heading",children:[m.jsx("p",{className:"mono settings-component-title",title:C,children:C}),k!=null&&k.component_type?m.jsx("span",{className:"settings-type",title:k.component_type,children:k.component_type}):null]}),m.jsx("p",{className:"mono settings-component-address",title:v,children:v})]}),m.jsxs("div",{className:"settings-component-row__meta",children:[m.jsx("span",{className:`settings-access ${M?"is-patchable":"is-readonly"}`,children:M?"patchable":"read only"}),m.jsx("span",{className:"publisher-caret",children:N?"▾":"▸"})]})]}),N?m.jsx("section",{className:"settings-detail",children:F.length===0?m.jsx("p",{className:"muted",children:"No fields available for this component."}):m.jsx("div",{className:"settings-fields",children:F.map(S=>{var Y,Q;const b=x[S.path]===!0,B=!D,j=f[S.path];return m.jsxs("div",{className:`settings-field-row ${B?"is-disabled":""}`,children:[m.jsxs("div",{className:"settings-field-row__meta",children:[m.jsx("label",{className:"mono",children:S.path}),S.description?m.jsx("p",{className:"muted",children:S.description}):null,S.bounds?m.jsxs("p",{className:"muted",children:["Bounds: [",S.bounds[0]??"-inf",", ",S.bounds[1]??"+inf","]"]}):null]}),m.jsxs("div",{className:`settings-field-row__control ${S.mode==="boolean"?"is-boolean":""}`,children:[S.mode==="boolean"?m.jsxs("label",{className:"patch-checkbox",children:[m.jsx("input",{type:"checkbox",checked:!!j,onChange:ne=>h(se=>({...se,[S.path]:ne.target.checked})),disabled:B||b}),m.jsx("span",{children:"Enabled"})]}):null,S.mode==="choice"?m.jsx("select",{value:String(j??"0"),onChange:ne=>h(se=>({...se,[S.path]:ne.target.value})),disabled:B||b,children:(S.choices??[]).map((ne,se)=>m.jsx("option",{value:String(se),children:Hm(ne)},`${S.path}-${se}`))}):null,S.mode==="number"?m.jsx("input",{type:"number",value:String(j??""),min:((Y=S.bounds)==null?void 0:Y[0])??void 0,max:((Q=S.bounds)==null?void 0:Q[1])??void 0,step:"any",onChange:ne=>h(se=>({...se,[S.path]:ne.target.value})),disabled:B||b}):null,S.mode==="text"?m.jsx("input",{type:"text",value:String(j??""),onChange:ne=>h(se=>({...se,[S.path]:ne.target.value})),disabled:B||b}):null,S.mode==="json"?m.jsx("textarea",{value:String(j??""),rows:4,spellCheck:!1,className:"mono",onChange:ne=>h(se=>({...se,[S.path]:ne.target.value})),disabled:B||b}):null,m.jsx("button",{type:"button",onClick:()=>{U(S)},disabled:B||b,children:b?"Applying...":"Apply"})]}),g[S.path]?m.jsx("p",{className:"patch-status ok",children:g[S.path]}):null,T[S.path]?m.jsx("p",{className:"patch-status err",children:T[S.path]}):null]},S.path)})})}):null]},v)})]})})}function qe(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h1:p1;Km.useSyncExternalStore=as.useSyncExternalStore!==void 0?as.useSyncExternalStore:m1;Ym.exports=Km;var g1=Ym.exports;/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Il=E,y1=g1;function v1(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var _1=typeof Object.is=="function"?Object.is:v1,x1=y1.useSyncExternalStore,w1=Il.useRef,S1=Il.useEffect,E1=Il.useMemo,N1=Il.useDebugValue;Gm.useSyncExternalStoreWithSelector=function(e,t,n,r,s){var o=w1(null);if(o.current===null){var i={hasValue:!1,value:null};o.current=i}else i=o.current;o=E1(function(){function a(h){if(!u){if(u=!0,c=h,h=r(h),s!==void 0&&i.hasValue){var x=i.value;if(s(x,h))return d=x}return d=h}if(x=d,_1(c,h))return x;var _=r(h);return s!==void 0&&s(x,_)?(c=h,x):(c=h,d=_)}var u=!1,c,d,f=n===void 0?null:n;return[function(){return a(t())},f===null?void 0:function(){return a(f())}]},[t,n,r,s]);var l=x1(e,o[0],o[1]);return S1(function(){i.hasValue=!0,i.value=l},[l]),N1(l),l};Vm.exports=Gm;var T1=Vm.exports;const k1=Cp(T1),C1={},Cf=e=>{let t;const n=new Set,r=(c,d)=>{const f=typeof c=="function"?c(t):c;if(!Object.is(f,t)){const h=t;t=d??(typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(x=>x(t,h))}},s=()=>t,a={setState:r,getState:s,getInitialState:()=>u,subscribe:c=>(n.add(c),()=>n.delete(c)),destroy:()=>{(C1?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},u=t=e(r,s,a);return a},I1=e=>e?Cf(e):Cf,{useDebugValue:b1}=V,{useSyncExternalStoreWithSelector:P1}=k1,A1=e=>e;function Xm(e,t=A1,n){const r=P1(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return b1(r),r}const If=(e,t)=>{const n=I1(e),r=(s,o=t)=>Xm(n,s,o);return Object.assign(r,n),r},R1=(e,t)=>e?If(e,t):If;function Ke(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,s]of e)if(!Object.is(s,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}var M1={value:()=>{}};function bl(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(s+1),n=n.slice(0,s)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}Ni.prototype=bl.prototype={constructor:Ni,on:function(e,t){var n=this._,r=O1(e+"",n),s,o=-1,i=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(s),r=0,s,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),Pf.hasOwnProperty(t)?{space:Pf[t],local:e}:e}function $1(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Cu&&t.documentElement.namespaceURI===Cu?t.createElement(e):t.createElementNS(n,e)}}function B1(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Qm(e){var t=Pl(e);return(t.local?B1:$1)(t)}function j1(){}function Dc(e){return e==null?j1:function(){return this.querySelector(e)}}function F1(e){typeof e!="function"&&(e=Dc(e));for(var t=this._groups,n=t.length,r=new Array(n),s=0;s=y&&(y=g+1);!(P=T[y])&&++y=0;)(i=r[s])&&(o&&i.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(i,o),o=i);return this}function cx(e){e||(e=dx);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,s=new Array(r),o=0;ot?1:e>=t?0:NaN}function fx(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function px(){return Array.from(this)}function hx(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?Tx:typeof t=="function"?Cx:kx)(e,t,n??"")):us(this.node(),e)}function us(e,t){return e.style.getPropertyValue(t)||tg(e).getComputedStyle(e,null).getPropertyValue(t)}function bx(e){return function(){delete this[e]}}function Px(e,t){return function(){this[e]=t}}function Ax(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Rx(e,t){return arguments.length>1?this.each((t==null?bx:typeof t=="function"?Ax:Px)(e,t)):this.node()[e]}function ng(e){return e.trim().split(/^|\s+/)}function Uc(e){return e.classList||new rg(e)}function rg(e){this._node=e,this._names=ng(e.getAttribute("class")||"")}rg.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function sg(e,t){for(var n=Uc(e),r=-1,s=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function iw(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,s=t.length,o;n()=>e;function Iu(e,{sourceEvent:t,subject:n,target:r,identifier:s,active:o,x:i,y:l,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:s,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:i,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}Iu.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function gw(e){return!e.ctrlKey&&!e.button}function yw(){return this.parentNode}function vw(e,t){return t??{x:e.x,y:e.y}}function _w(){return navigator.maxTouchPoints||"ontouchstart"in this}function xw(){var e=gw,t=yw,n=vw,r=_w,s={},o=bl("start","drag","end"),i=0,l,a,u,c,d=0;function f(w){w.on("mousedown.drag",h).filter(r).on("touchstart.drag",T).on("touchmove.drag",p,mw).on("touchend.drag touchcancel.drag",g).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(w,P){if(!(c||!e.call(this,w,P))){var O=y(this,t.call(this,w,P),w,P,"mouse");O&&(kt(w.view).on("mousemove.drag",x,yo).on("mouseup.drag",_,yo),ag(w.view),ha(w),u=!1,l=w.clientX,a=w.clientY,O("start",w))}}function x(w){if(qr(w),!u){var P=w.clientX-l,O=w.clientY-a;u=P*P+O*O>d}s.mouse("drag",w)}function _(w){kt(w.view).on("mousemove.drag mouseup.drag",null),ug(w.view,u),qr(w),s.mouse("end",w)}function T(w,P){if(e.call(this,w,P)){var O=w.changedTouches,L=t.call(this,w,P),R=O.length,F,D;for(F=0;F>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?qo(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?qo(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Sw.exec(e))?new pt(t[1],t[2],t[3],1):(t=Ew.exec(e))?new pt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Nw.exec(e))?qo(t[1],t[2],t[3],t[4]):(t=Tw.exec(e))?qo(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=kw.exec(e))?Bf(t[1],t[2]/100,t[3]/100,1):(t=Cw.exec(e))?Bf(t[1],t[2]/100,t[3]/100,t[4]):Af.hasOwnProperty(e)?Of(Af[e]):e==="transparent"?new pt(NaN,NaN,NaN,0):null}function Of(e){return new pt(e>>16&255,e>>8&255,e&255,1)}function qo(e,t,n,r){return r<=0&&(e=t=n=NaN),new pt(e,t,n,r)}function Pw(e){return e instanceof Ao||(e=xo(e)),e?(e=e.rgb(),new pt(e.r,e.g,e.b,e.opacity)):new pt}function bu(e,t,n,r){return arguments.length===1?Pw(e):new pt(e,t,n,r??1)}function pt(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Hc(pt,bu,cg(Ao,{brighter(e){return e=e==null?sl:Math.pow(sl,e),new pt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new pt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new pt(cr(this.r),cr(this.g),cr(this.b),ol(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Lf,formatHex:Lf,formatHex8:Aw,formatRgb:$f,toString:$f}));function Lf(){return`#${ir(this.r)}${ir(this.g)}${ir(this.b)}`}function Aw(){return`#${ir(this.r)}${ir(this.g)}${ir(this.b)}${ir((isNaN(this.opacity)?1:this.opacity)*255)}`}function $f(){const e=ol(this.opacity);return`${e===1?"rgb(":"rgba("}${cr(this.r)}, ${cr(this.g)}, ${cr(this.b)}${e===1?")":`, ${e})`}`}function ol(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function cr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ir(e){return e=cr(e),(e<16?"0":"")+e.toString(16)}function Bf(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new jt(e,t,n,r)}function dg(e){if(e instanceof jt)return new jt(e.h,e.s,e.l,e.opacity);if(e instanceof Ao||(e=xo(e)),!e)return new jt;if(e instanceof jt)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,s=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,l=o-s,a=(o+s)/2;return l?(t===o?i=(n-r)/l+(n0&&a<1?0:i,new jt(i,l,a,e.opacity)}function Rw(e,t,n,r){return arguments.length===1?dg(e):new jt(e,t,n,r??1)}function jt(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Hc(jt,Rw,cg(Ao,{brighter(e){return e=e==null?sl:Math.pow(sl,e),new jt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new jt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,s=2*n-r;return new pt(ma(e>=240?e-240:e+120,s,r),ma(e,s,r),ma(e<120?e+240:e-120,s,r),this.opacity)},clamp(){return new jt(jf(this.h),Jo(this.s),Jo(this.l),ol(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ol(this.opacity);return`${e===1?"hsl(":"hsla("}${jf(this.h)}, ${Jo(this.s)*100}%, ${Jo(this.l)*100}%${e===1?")":`, ${e})`}`}}));function jf(e){return e=(e||0)%360,e<0?e+360:e}function Jo(e){return Math.max(0,Math.min(1,e||0))}function ma(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const fg=e=>()=>e;function Mw(e,t){return function(n){return e+n*t}}function Ow(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Lw(e){return(e=+e)==1?pg:function(t,n){return n-t?Ow(t,n,e):fg(isNaN(t)?n:t)}}function pg(e,t){var n=t-e;return n?Mw(e,n):fg(isNaN(e)?t:e)}const Ff=function e(t){var n=Lw(t);function r(s,o){var i=n((s=bu(s)).r,(o=bu(o)).r),l=n(s.g,o.g),a=n(s.b,o.b),u=pg(s.opacity,o.opacity);return function(c){return s.r=i(c),s.g=l(c),s.b=a(c),s.opacity=u(c),s+""}}return r.gamma=e,r}(1);function kn(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Pu=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ga=new RegExp(Pu.source,"g");function $w(e){return function(){return e}}function Bw(e){return function(t){return e(t)+""}}function jw(e,t){var n=Pu.lastIndex=ga.lastIndex=0,r,s,o,i=-1,l=[],a=[];for(e=e+"",t=t+"";(r=Pu.exec(e))&&(s=ga.exec(t));)(o=s.index)>n&&(o=t.slice(n,o),l[i]?l[i]+=o:l[++i]=o),(r=r[0])===(s=s[0])?l[i]?l[i]+=s:l[++i]=s:(l[++i]=null,a.push({i,x:kn(r,s)})),n=ga.lastIndex;return n180?c+=360:c-u>180&&(u+=360),f.push({i:d.push(s(d)+"rotate(",null,r)-2,x:kn(u,c)})):c&&d.push(s(d)+"rotate("+c+r)}function l(u,c,d,f){u!==c?f.push({i:d.push(s(d)+"skewX(",null,r)-2,x:kn(u,c)}):c&&d.push(s(d)+"skewX("+c+r)}function a(u,c,d,f,h,x){if(u!==d||c!==f){var _=h.push(s(h)+"scale(",null,",",null,")");x.push({i:_-4,x:kn(u,d)},{i:_-2,x:kn(c,f)})}else(d!==1||f!==1)&&h.push(s(h)+"scale("+d+","+f+")")}return function(u,c){var d=[],f=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,d,f),i(u.rotate,c.rotate,d,f),l(u.skewX,c.skewX,d,f),a(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,f),u=c=null,function(h){for(var x=-1,_=f.length,T;++x<_;)d[(T=f[x]).i]=T.x(h);return d.join("")}}}var Dw=mg(Fw,"px, ","px)","deg)"),Uw=mg(zw,", ",")",")"),Hw=1e-12;function Df(e){return((e=Math.exp(e))+1/e)/2}function Ww(e){return((e=Math.exp(e))-1/e)/2}function Vw(e){return((e=Math.exp(2*e))-1)/(e+1)}const Gw=function e(t,n,r){function s(o,i){var l=o[0],a=o[1],u=o[2],c=i[0],d=i[1],f=i[2],h=c-l,x=d-a,_=h*h+x*x,T,p;if(_=0&&e._call.call(void 0,t),e=e._next;--cs}function Uf(){vr=(ll=wo.now())+Al,cs=Fs=0;try{Kw()}finally{cs=0,Qw(),vr=0}}function Xw(){var e=wo.now(),t=e-ll;t>gg&&(Al-=t,ll=e)}function Qw(){for(var e,t=il,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:il=n);zs=e,Ru(r)}function Ru(e){if(!cs){Fs&&(Fs=clearTimeout(Fs));var t=e-vr;t>24?(e<1/0&&(Fs=setTimeout(Uf,e-wo.now()-Al)),Ts&&(Ts=clearInterval(Ts))):(Ts||(ll=wo.now(),Ts=setInterval(Xw,gg)),cs=1,yg(Uf))}}function Hf(e,t,n){var r=new al;return t=t==null?0:+t,r.restart(s=>{r.stop(),e(s+t)},t,n),r}var Zw=bl("start","end","cancel","interrupt"),qw=[],_g=0,Wf=1,Mu=2,Ti=3,Vf=4,Ou=5,ki=6;function Rl(e,t,n,r,s,o){var i=e.__transition;if(!i)e.__transition={};else if(n in i)return;Jw(e,n,{name:t,index:r,group:s,on:Zw,tween:qw,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:_g})}function Vc(e,t){var n=Wt(e,t);if(n.state>_g)throw new Error("too late; already scheduled");return n}function Jt(e,t){var n=Wt(e,t);if(n.state>Ti)throw new Error("too late; already running");return n}function Wt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Jw(e,t,n){var r=e.__transition,s;r[t]=n,n.timer=vg(o,0,n.time);function o(u){n.state=Wf,n.timer.restart(i,n.delay,n.time),n.delay<=u&&i(u-n.delay)}function i(u){var c,d,f,h;if(n.state!==Wf)return a();for(c in r)if(h=r[c],h.name===n.name){if(h.state===Ti)return Hf(i);h.state===Vf?(h.state=ki,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[c]):+cMu&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function bS(e,t,n){var r,s,o=IS(t)?Vc:Jt;return function(){var i=o(this,e),l=i.on;l!==r&&(s=(r=l).copy()).on(t,n),i.on=s}}function PS(e,t){var n=this._id;return arguments.length<2?Wt(this.node(),n).on.on(e):this.each(bS(n,e,t))}function AS(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function RS(){return this.on("end.remove",AS(this._id))}function MS(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Dc(e));for(var r=this._groups,s=r.length,o=new Array(s),i=0;i()=>e;function sE(e,{sourceEvent:t,target:n,transform:r,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:s}})}function cn(e,t,n){this.k=e,this.x=t,this.y=n}cn.prototype={constructor:cn,scale:function(e){return e===1?this:new cn(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new cn(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fn=new cn(1,0,0);cn.prototype;function ya(e){e.stopImmediatePropagation()}function ks(e){e.preventDefault(),e.stopImmediatePropagation()}function oE(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function iE(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Gf(){return this.__zoom||fn}function lE(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function aE(){return navigator.maxTouchPoints||"ontouchstart"in this}function uE(e,t,n){var r=e.invertX(t[0][0])-n[0][0],s=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],i=e.invertY(t[1][1])-n[1][1];return e.translate(s>r?(r+s)/2:Math.min(0,r)||Math.max(0,s),i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i))}function Eg(){var e=oE,t=iE,n=uE,r=lE,s=aE,o=[0,1/0],i=[[-1/0,-1/0],[1/0,1/0]],l=250,a=Gw,u=bl("start","zoom","end"),c,d,f,h=500,x=150,_=0,T=10;function p(v){v.property("__zoom",Gf).on("wheel.zoom",R,{passive:!1}).on("mousedown.zoom",F).on("dblclick.zoom",D).filter(s).on("touchstart.zoom",H).on("touchmove.zoom",Z).on("touchend.zoom touchcancel.zoom",U).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}p.transform=function(v,k,N,M){var C=v.selection?v.selection():v;C.property("__zoom",Gf),v!==C?P(v,k,N,M):C.interrupt().each(function(){O(this,arguments).event(M).start().zoom(null,typeof k=="function"?k.apply(this,arguments):k).end()})},p.scaleBy=function(v,k,N,M){p.scaleTo(v,function(){var C=this.__zoom.k,S=typeof k=="function"?k.apply(this,arguments):k;return C*S},N,M)},p.scaleTo=function(v,k,N,M){p.transform(v,function(){var C=t.apply(this,arguments),S=this.__zoom,b=N==null?w(C):typeof N=="function"?N.apply(this,arguments):N,B=S.invert(b),j=typeof k=="function"?k.apply(this,arguments):k;return n(y(g(S,j),b,B),C,i)},N,M)},p.translateBy=function(v,k,N,M){p.transform(v,function(){return n(this.__zoom.translate(typeof k=="function"?k.apply(this,arguments):k,typeof N=="function"?N.apply(this,arguments):N),t.apply(this,arguments),i)},null,M)},p.translateTo=function(v,k,N,M,C){p.transform(v,function(){var S=t.apply(this,arguments),b=this.__zoom,B=M==null?w(S):typeof M=="function"?M.apply(this,arguments):M;return n(fn.translate(B[0],B[1]).scale(b.k).translate(typeof k=="function"?-k.apply(this,arguments):-k,typeof N=="function"?-N.apply(this,arguments):-N),S,i)},M,C)};function g(v,k){return k=Math.max(o[0],Math.min(o[1],k)),k===v.k?v:new cn(k,v.x,v.y)}function y(v,k,N){var M=k[0]-N[0]*v.k,C=k[1]-N[1]*v.k;return M===v.x&&C===v.y?v:new cn(v.k,M,C)}function w(v){return[(+v[0][0]+ +v[1][0])/2,(+v[0][1]+ +v[1][1])/2]}function P(v,k,N,M){v.on("start.zoom",function(){O(this,arguments).event(M).start()}).on("interrupt.zoom end.zoom",function(){O(this,arguments).event(M).end()}).tween("zoom",function(){var C=this,S=arguments,b=O(C,S).event(M),B=t.apply(C,S),j=N==null?w(B):typeof N=="function"?N.apply(C,S):N,Y=Math.max(B[1][0]-B[0][0],B[1][1]-B[0][1]),Q=C.__zoom,ne=typeof k=="function"?k.apply(C,S):k,se=a(Q.invert(j).concat(Y/Q.k),ne.invert(j).concat(Y/ne.k));return function(fe){if(fe===1)fe=ne;else{var W=se(fe),A=Y/W[2];fe=new cn(A,j[0]-W[0]*A,j[1]-W[1]*A)}b.zoom(null,fe)}})}function O(v,k,N){return!N&&v.__zooming||new L(v,k)}function L(v,k){this.that=v,this.args=k,this.active=0,this.sourceEvent=null,this.extent=t.apply(v,k),this.taps=0}L.prototype={event:function(v){return v&&(this.sourceEvent=v),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(v,k){return this.mouse&&v!=="mouse"&&(this.mouse[1]=k.invert(this.mouse[0])),this.touch0&&v!=="touch"&&(this.touch0[1]=k.invert(this.touch0[0])),this.touch1&&v!=="touch"&&(this.touch1[1]=k.invert(this.touch1[0])),this.that.__zoom=k,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(v){var k=kt(this.that).datum();u.call(v,this.that,new sE(v,{sourceEvent:this.sourceEvent,target:p,transform:this.that.__zoom,dispatch:u}),k)}};function R(v,...k){if(!e.apply(this,arguments))return;var N=O(this,k).event(v),M=this.__zoom,C=Math.max(o[0],Math.min(o[1],M.k*Math.pow(2,r.apply(this,arguments)))),S=$t(v);if(N.wheel)(N.mouse[0][0]!==S[0]||N.mouse[0][1]!==S[1])&&(N.mouse[1]=M.invert(N.mouse[0]=S)),clearTimeout(N.wheel);else{if(M.k===C)return;N.mouse=[S,M.invert(S)],Ci(this),N.start()}ks(v),N.wheel=setTimeout(b,x),N.zoom("mouse",n(y(g(M,C),N.mouse[0],N.mouse[1]),N.extent,i));function b(){N.wheel=null,N.end()}}function F(v,...k){if(f||!e.apply(this,arguments))return;var N=v.currentTarget,M=O(this,k,!0).event(v),C=kt(v.view).on("mousemove.zoom",j,!0).on("mouseup.zoom",Y,!0),S=$t(v,N),b=v.clientX,B=v.clientY;ag(v.view),ya(v),M.mouse=[S,this.__zoom.invert(S)],Ci(this),M.start();function j(Q){if(ks(Q),!M.moved){var ne=Q.clientX-b,se=Q.clientY-B;M.moved=ne*ne+se*se>_}M.event(Q).zoom("mouse",n(y(M.that.__zoom,M.mouse[0]=$t(Q,N),M.mouse[1]),M.extent,i))}function Y(Q){C.on("mousemove.zoom mouseup.zoom",null),ug(Q.view,M.moved),ks(Q),M.event(Q).end()}}function D(v,...k){if(e.apply(this,arguments)){var N=this.__zoom,M=$t(v.changedTouches?v.changedTouches[0]:v,this),C=N.invert(M),S=N.k*(v.shiftKey?.5:2),b=n(y(g(N,S),M,C),t.apply(this,k),i);ks(v),l>0?kt(this).transition().duration(l).call(P,b,M,v):kt(this).call(p.transform,b,M,v)}}function H(v,...k){if(e.apply(this,arguments)){var N=v.touches,M=N.length,C=O(this,k,v.changedTouches.length===M).event(v),S,b,B,j;for(ya(v),b=0;b"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`},Ng=vn.error001();function Ce(e,t){const n=E.useContext(Ml);if(n===null)throw new Error(Ng);return Xm(n,e,t)}const Ve=()=>{const e=E.useContext(Ml);if(e===null)throw new Error(Ng);return E.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},dE=e=>e.userSelectionActive?"none":"all";function Yc({position:e,children:t,className:n,style:r,...s}){const o=Ce(dE),i=`${e}`.split("-");return V.createElement("div",{className:qe(["react-flow__panel",n,...i]),style:{...r,pointerEvents:o},...s},t)}function fE({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:V.createElement(Yc,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro"},V.createElement("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution"},"React Flow"))}const pE=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:s=!0,labelBgStyle:o={},labelBgPadding:i=[2,4],labelBgBorderRadius:l=2,children:a,className:u,...c})=>{const d=E.useRef(null),[f,h]=E.useState({x:0,y:0,width:0,height:0}),x=qe(["react-flow__edge-textwrapper",u]);return E.useEffect(()=>{if(d.current){const _=d.current.getBBox();h({x:_.x,y:_.y,width:_.width,height:_.height})}},[n]),typeof n>"u"||!n?null:V.createElement("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:x,visibility:f.width?"visible":"hidden",...c},s&&V.createElement("rect",{width:f.width+2*i[0],x:-i[0],y:-i[1],height:f.height+2*i[1],className:"react-flow__edge-textbg",style:o,rx:l,ry:l}),V.createElement("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r},n),a)};var hE=E.memo(pE);const Kc=e=>({width:e.offsetWidth,height:e.offsetHeight}),ds=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),Xc=(e={x:0,y:0},t)=>({x:ds(e.x,t[0][0],t[1][0]),y:ds(e.y,t[0][1],t[1][1])}),Yf=(e,t,n)=>en?-ds(Math.abs(e-n),1,50)/50:0,Tg=(e,t)=>{const n=Yf(e.x,35,t.width-35)*20,r=Yf(e.y,35,t.height-35)*20;return[n,r]},kg=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Cg=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),So=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),Ig=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),Kf=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),mE=(e,t)=>Ig(Cg(So(e),So(t))),Lu=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},gE=e=>It(e.width)&&It(e.height)&&It(e.x)&&It(e.y),It=e=>!isNaN(e)&&isFinite(e),Be=Symbol.for("internals"),bg=["Enter"," ","Escape"],yE=(e,t)=>{},vE=e=>"nativeEvent"in e;function $u(e){var s,o;const t=vE(e)?e.nativeEvent:e,n=((o=(s=t.composedPath)==null?void 0:s.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const Pg=e=>"clientX"in e,Dn=(e,t)=>{var o,i;const n=Pg(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,s=n?e.clientY:(i=e.touches)==null?void 0:i[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:s-((t==null?void 0:t.top)??0)}},ul=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0},Ro=({id:e,path:t,labelX:n,labelY:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h=20})=>V.createElement(V.Fragment,null,V.createElement("path",{id:e,style:c,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&V.createElement("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),s&&It(n)&&It(r)?V.createElement(hE,{x:n,y:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u}):null);Ro.displayName="BaseEdge";function Cs(e,t,n){return n===void 0?n:r=>{const s=t().edges.find(o=>o.id===e);s&&n(r,{...s})}}function Ag({sourceX:e,sourceY:t,targetX:n,targetY:r}){const s=Math.abs(n-e)/2,o=n{const[T,p,g]=Mg({sourceX:e,sourceY:t,sourcePosition:s,targetX:n,targetY:r,targetPosition:o});return V.createElement(Ro,{path:T,labelX:p,labelY:g,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:x,interactionWidth:_})});Qc.displayName="SimpleBezierEdge";const Qf={[re.Left]:{x:-1,y:0},[re.Right]:{x:1,y:0},[re.Top]:{x:0,y:-1},[re.Bottom]:{x:0,y:1}},_E=({source:e,sourcePosition:t=re.Bottom,target:n})=>t===re.Left||t===re.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function xE({source:e,sourcePosition:t=re.Bottom,target:n,targetPosition:r=re.Top,center:s,offset:o}){const i=Qf[t],l=Qf[r],a={x:e.x+i.x*o,y:e.y+i.y*o},u={x:n.x+l.x*o,y:n.y+l.y*o},c=_E({source:a,sourcePosition:t,target:u}),d=c.x!==0?"x":"y",f=c[d];let h=[],x,_;const T={x:0,y:0},p={x:0,y:0},[g,y,w,P]=Ag({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(i[d]*l[d]===-1){x=s.x??g,_=s.y??y;const L=[{x,y:a.y},{x,y:u.y}],R=[{x:a.x,y:_},{x:u.x,y:_}];i[d]===f?h=d==="x"?L:R:h=d==="x"?R:L}else{const L=[{x:a.x,y:u.y}],R=[{x:u.x,y:a.y}];if(d==="x"?h=i.x===f?R:L:h=i.y===f?L:R,t===r){const U=Math.abs(e[d]-n[d]);if(U<=o){const v=Math.min(o-1,o-U);i[d]===f?T[d]=(a[d]>e[d]?-1:1)*v:p[d]=(u[d]>n[d]?-1:1)*v}}if(t!==r){const U=d==="x"?"y":"x",v=i[d]===l[U],k=a[U]>u[U],N=a[U]=Z?(x=(F.x+D.x)/2,_=h[0].y):(x=h[0].x,_=(F.y+D.y)/2)}return[[e,{x:a.x+T.x,y:a.y+T.y},...h,{x:u.x+p.x,y:u.y+p.y},n],x,_,w,P]}function wE(e,t,n,r){const s=Math.min(Zf(e,t)/2,Zf(t,n)/2,r),{x:o,y:i}=t;if(e.x===o&&o===n.x||e.y===i&&i===n.y)return`L${o} ${i}`;if(e.y===i){const u=e.x{let y="";return g>0&&g{const[p,g,y]=Bu({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:_==null?void 0:_.borderRadius,offset:_==null?void 0:_.offset});return V.createElement(Ro,{path:p,labelX:g,labelY:y,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:h,markerStart:x,interactionWidth:T})});Ol.displayName="SmoothStepEdge";const Zc=E.memo(e=>{var t;return V.createElement(Ol,{...e,pathOptions:E.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});Zc.displayName="StepEdge";function SE({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[s,o,i,l]=Ag({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,s,o,i,l]}const qc=E.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[x,_,T]=SE({sourceX:e,sourceY:t,targetX:n,targetY:r});return V.createElement(Ro,{path:x,labelX:_,labelY:T,label:s,labelStyle:o,labelShowBg:i,labelBgStyle:l,labelBgPadding:a,labelBgBorderRadius:u,style:c,markerEnd:d,markerStart:f,interactionWidth:h})});qc.displayName="StraightEdge";function ni(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function qf({pos:e,x1:t,y1:n,x2:r,y2:s,c:o}){switch(e){case re.Left:return[t-ni(t-r,o),n];case re.Right:return[t+ni(r-t,o),n];case re.Top:return[t,n-ni(n-s,o)];case re.Bottom:return[t,n+ni(s-n,o)]}}function Og({sourceX:e,sourceY:t,sourcePosition:n=re.Bottom,targetX:r,targetY:s,targetPosition:o=re.Top,curvature:i=.25}){const[l,a]=qf({pos:n,x1:e,y1:t,x2:r,y2:s,c:i}),[u,c]=qf({pos:o,x1:r,y1:s,x2:e,y2:t,c:i}),[d,f,h,x]=Rg({sourceX:e,sourceY:t,targetX:r,targetY:s,sourceControlX:l,sourceControlY:a,targetControlX:u,targetControlY:c});return[`M${e},${t} C${l},${a} ${u},${c} ${r},${s}`,d,f,h,x]}const cl=E.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:s=re.Bottom,targetPosition:o=re.Top,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:x,pathOptions:_,interactionWidth:T})=>{const[p,g,y]=Og({sourceX:e,sourceY:t,sourcePosition:s,targetX:n,targetY:r,targetPosition:o,curvature:_==null?void 0:_.curvature});return V.createElement(Ro,{path:p,labelX:g,labelY:y,label:i,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:x,interactionWidth:T})});cl.displayName="BezierEdge";const Jc=E.createContext(null),EE=Jc.Provider;Jc.Consumer;const NE=()=>E.useContext(Jc),TE=e=>"id"in e&&"source"in e&&"target"in e,kE=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,ju=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,CE=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),IE=(e,t)=>{if(!e.source||!e.target)return t;let n;return TE(e)?n={...e}:n={...e,id:kE(e)},CE(n,t)?t:t.concat(n)},Fu=({x:e,y:t},[n,r,s],o,[i,l])=>{const a={x:(e-n)/s,y:(t-r)/s};return o?{x:i*Math.round(a.x/i),y:l*Math.round(a.y/l)}:a},Lg=({x:e,y:t},[n,r,s])=>({x:e*s+n,y:t*s+r}),dr=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],s={x:e.position.x-n,y:e.position.y-r};return{...s,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:s}},Ll=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,s)=>{const{x:o,y:i}=dr(s,t).positionAbsolute;return Cg(r,So({x:o,y:i,width:s.width||0,height:s.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Ig(n)},$g=(e,t,[n,r,s]=[0,0,1],o=!1,i=!1,l=[0,0])=>{const a={x:(t.x-n)/s,y:(t.y-r)/s,width:t.width/s,height:t.height/s},u=[];return e.forEach(c=>{const{width:d,height:f,selectable:h=!0,hidden:x=!1}=c;if(i&&!h||x)return!1;const{positionAbsolute:_}=dr(c,l),T={x:_.x,y:_.y,width:d||0,height:f||0},p=Lu(a,T),g=typeof d>"u"||typeof f>"u"||d===null||f===null,y=o&&p>0,w=(d||0)*(f||0);(g||y||p>=w||c.dragging)&&u.push(c)}),u},Bg=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},jg=(e,t,n,r,s,o=.1)=>{const i=t/(e.width*(1+o)),l=n/(e.height*(1+o)),a=Math.min(i,l),u=ds(a,r,s),c=e.x+e.width/2,d=e.y+e.height/2,f=t/2-c*u,h=n/2-d*u;return{x:f,y:h,zoom:u}},er=(e,t=0)=>e.transition().duration(t);function Jf(e,t,n,r){return(t[n]||[]).reduce((s,o)=>{var i,l;return`${e.id}-${o.id}-${n}`!==r&&s.push({id:o.id||null,type:n,nodeId:e.id,x:(((i=e.positionAbsolute)==null?void 0:i.x)??0)+o.x+o.width/2,y:(((l=e.positionAbsolute)==null?void 0:l.y)??0)+o.y+o.height/2}),s},[])}function bE(e,t,n,r,s,o){const{x:i,y:l}=Dn(e),u=t.elementsFromPoint(i,l).find(x=>x.classList.contains("react-flow__handle"));if(u){const x=u.getAttribute("data-nodeid");if(x){const _=ed(void 0,u),T=u.getAttribute("data-handleid"),p=o({nodeId:x,id:T,type:_});if(p){const g=s.find(y=>y.nodeId===x&&y.type===_&&y.id===T);return{handle:{id:T,type:_,nodeId:x,x:(g==null?void 0:g.x)||n.x,y:(g==null?void 0:g.y)||n.y},validHandleResult:p}}}}let c=[],d=1/0;if(s.forEach(x=>{const _=Math.sqrt((x.x-n.x)**2+(x.y-n.y)**2);if(_<=r){const T=o(x);_<=d&&(_x.isValid),h=c.some(({handle:x})=>x.type==="target");return c.find(({handle:x,validHandleResult:_})=>h?x.type==="target":f?_.isValid:!0)||c[0]}const PE={source:null,target:null,sourceHandle:null,targetHandle:null},Fg=()=>({handleDomNode:null,isValid:!1,connection:PE,endHandle:null});function zg(e,t,n,r,s,o,i){const l=s==="target",a=i.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),u={...Fg(),handleDomNode:a};if(a){const c=ed(void 0,a),d=a.getAttribute("data-nodeid"),f=a.getAttribute("data-handleid"),h=a.classList.contains("connectable"),x=a.classList.contains("connectableend"),_={source:l?d:n,sourceHandle:l?f:r,target:l?n:d,targetHandle:l?r:f};u.connection=_,h&&x&&(t===_r.Strict?l&&c==="source"||!l&&c==="target":d!==n||f!==r)&&(u.endHandle={nodeId:d,handleId:f,type:c},u.isValid=o(_))}return u}function AE({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((s,o)=>{if(o[Be]){const{handleBounds:i}=o[Be];let l=[],a=[];i&&(l=Jf(o,i,"source",`${t}-${n}-${r}`),a=Jf(o,i,"target",`${t}-${n}-${r}`)),s.push(...l,...a)}return s},[])}function ed(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function va(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function RE(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Dg({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:s,getState:o,setState:i,isValidConnection:l,edgeUpdaterType:a,onReconnectEnd:u}){const c=kg(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:x,onConnectStart:_,panBy:T,getNodes:p,cancelConnection:g}=o();let y=0,w;const{x:P,y:O}=Dn(e),L=c==null?void 0:c.elementFromPoint(P,O),R=ed(a,L),F=f==null?void 0:f.getBoundingClientRect();if(!F||!R)return;let D,H=Dn(e,F),Z=!1,U=null,v=!1,k=null;const N=AE({nodes:p(),nodeId:n,handleId:t,handleType:R}),M=()=>{if(!h)return;const[b,B]=Tg(H,F);T({x:b,y:B}),y=requestAnimationFrame(M)};i({connectionPosition:H,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:R,connectionStartHandle:{nodeId:n,handleId:t,type:R},connectionEndHandle:null}),_==null||_(e,{nodeId:n,handleId:t,handleType:R});function C(b){const{transform:B}=o();H=Dn(b,F);const{handle:j,validHandleResult:Y}=bE(b,c,Fu(H,B,!1,[1,1]),x,N,Q=>zg(Q,d,n,t,s?"target":"source",l,c));if(w=j,Z||(M(),Z=!0),k=Y.handleDomNode,U=Y.connection,v=Y.isValid,i({connectionPosition:w&&v?Lg({x:w.x,y:w.y},B):H,connectionStatus:RE(!!w,v),connectionEndHandle:Y.endHandle}),!w&&!v&&!k)return va(D);U.source!==U.target&&k&&(va(D),D=k,k.classList.add("connecting","react-flow__handle-connecting"),k.classList.toggle("valid",v),k.classList.toggle("react-flow__handle-valid",v))}function S(b){var B,j;(w||k)&&U&&v&&(r==null||r(U)),(j=(B=o()).onConnectEnd)==null||j.call(B,b),a&&(u==null||u(b)),va(D),g(),cancelAnimationFrame(y),Z=!1,v=!1,U=null,k=null,c.removeEventListener("mousemove",C),c.removeEventListener("mouseup",S),c.removeEventListener("touchmove",C),c.removeEventListener("touchend",S)}c.addEventListener("mousemove",C),c.addEventListener("mouseup",S),c.addEventListener("touchmove",C),c.addEventListener("touchend",S)}const ep=()=>!0,ME=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),OE=(e,t,n)=>r=>{const{connectionStartHandle:s,connectionEndHandle:o,connectionClickStartHandle:i}=r;return{connecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n}},Ug=E.forwardRef(({type:e="source",position:t=re.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:s=!0,isConnectableEnd:o=!0,id:i,onConnect:l,children:a,className:u,onMouseDown:c,onTouchStart:d,...f},h)=>{var F,D;const x=i||null,_=e==="target",T=Ve(),p=NE(),{connectOnClick:g,noPanClassName:y}=Ce(ME,Ke),{connecting:w,clickConnecting:P}=Ce(OE(p,x,e),Ke);p||(D=(F=T.getState()).onError)==null||D.call(F,"010",vn.error010());const O=H=>{const{defaultEdgeOptions:Z,onConnect:U,hasDefaultEdges:v}=T.getState(),k={...Z,...H};if(v){const{edges:N,setEdges:M}=T.getState();M(IE(k,N))}U==null||U(k),l==null||l(k)},L=H=>{if(!p)return;const Z=Pg(H);s&&(Z&&H.button===0||!Z)&&Dg({event:H,handleId:x,nodeId:p,onConnect:O,isTarget:_,getState:T.getState,setState:T.setState,isValidConnection:n||T.getState().isValidConnection||ep}),Z?c==null||c(H):d==null||d(H)},R=H=>{const{onClickConnectStart:Z,onClickConnectEnd:U,connectionClickStartHandle:v,connectionMode:k,isValidConnection:N}=T.getState();if(!p||!v&&!s)return;if(!v){Z==null||Z(H,{nodeId:p,handleId:x,handleType:e}),T.setState({connectionClickStartHandle:{nodeId:p,type:e,handleId:x}});return}const M=kg(H.target),C=n||N||ep,{connection:S,isValid:b}=zg({nodeId:p,id:x,type:e},k,v.nodeId,v.handleId||null,v.type,C,M);b&&O(S),U==null||U(H),T.setState({connectionClickStartHandle:null})};return V.createElement("div",{"data-handleid":x,"data-nodeid":p,"data-handlepos":t,"data-id":`${p}-${x}-${e}`,className:qe(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",y,u,{source:!_,target:_,connectable:r,connectablestart:s,connectableend:o,connecting:P,connectionindicator:r&&(s&&!w||o&&w)}]),onMouseDown:L,onTouchStart:L,onClick:g?R:void 0,ref:h,...f},a)});Ug.displayName="Handle";var dl=E.memo(Ug);const Hg=({data:e,isConnectable:t,targetPosition:n=re.Top,sourcePosition:r=re.Bottom})=>V.createElement(V.Fragment,null,V.createElement(dl,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,V.createElement(dl,{type:"source",position:r,isConnectable:t}));Hg.displayName="DefaultNode";var zu=E.memo(Hg);const Wg=({data:e,isConnectable:t,sourcePosition:n=re.Bottom})=>V.createElement(V.Fragment,null,e==null?void 0:e.label,V.createElement(dl,{type:"source",position:n,isConnectable:t}));Wg.displayName="InputNode";var Vg=E.memo(Wg);const Gg=({data:e,isConnectable:t,targetPosition:n=re.Top})=>V.createElement(V.Fragment,null,V.createElement(dl,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label);Gg.displayName="OutputNode";var Yg=E.memo(Gg);const td=()=>null;td.displayName="GroupNode";const LE=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected).map(t=>({...t}))}),ri=e=>e.id;function $E(e,t){return Ke(e.selectedNodes.map(ri),t.selectedNodes.map(ri))&&Ke(e.selectedEdges.map(ri),t.selectedEdges.map(ri))}const Kg=E.memo(({onSelectionChange:e})=>{const t=Ve(),{selectedNodes:n,selectedEdges:r}=Ce(LE,$E);return E.useEffect(()=>{const s={nodes:n,edges:r};e==null||e(s),t.getState().onSelectionChange.forEach(o=>o(s))},[n,r,e]),null});Kg.displayName="SelectionListener";const BE=e=>!!e.onSelectionChange;function jE({onSelectionChange:e}){const t=Ce(BE);return e||t?V.createElement(Kg,{onSelectionChange:e}):null}const FE=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function Nr(e,t){E.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function ve(e,t,n){E.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const zE=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:s,onConnectStart:o,onConnectEnd:i,onClickConnectStart:l,onClickConnectEnd:a,nodesDraggable:u,nodesConnectable:c,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:x,minZoom:_,maxZoom:T,nodeExtent:p,onNodesChange:g,onEdgesChange:y,elementsSelectable:w,connectionMode:P,snapGrid:O,snapToGrid:L,translateExtent:R,connectOnClick:F,defaultEdgeOptions:D,fitView:H,fitViewOptions:Z,onNodesDelete:U,onEdgesDelete:v,onNodeDrag:k,onNodeDragStart:N,onNodeDragStop:M,onSelectionDrag:C,onSelectionDragStart:S,onSelectionDragStop:b,noPanClassName:B,nodeOrigin:j,rfId:Y,autoPanOnConnect:Q,autoPanOnNodeDrag:ne,onError:se,connectionRadius:fe,isValidConnection:W,nodeDragThreshold:A})=>{const{setNodes:I,setEdges:G,setDefaultNodesAndEdges:X,setMinZoom:ie,setMaxZoom:le,setTranslateExtent:ce,setNodeExtent:he,reset:oe}=Ce(FE,Ke),K=Ve();return E.useEffect(()=>{const z=r==null?void 0:r.map(ee=>({...ee,...D}));return X(n,z),()=>{oe()}},[]),ve("defaultEdgeOptions",D,K.setState),ve("connectionMode",P,K.setState),ve("onConnect",s,K.setState),ve("onConnectStart",o,K.setState),ve("onConnectEnd",i,K.setState),ve("onClickConnectStart",l,K.setState),ve("onClickConnectEnd",a,K.setState),ve("nodesDraggable",u,K.setState),ve("nodesConnectable",c,K.setState),ve("nodesFocusable",d,K.setState),ve("edgesFocusable",f,K.setState),ve("edgesUpdatable",h,K.setState),ve("elementsSelectable",w,K.setState),ve("elevateNodesOnSelect",x,K.setState),ve("snapToGrid",L,K.setState),ve("snapGrid",O,K.setState),ve("onNodesChange",g,K.setState),ve("onEdgesChange",y,K.setState),ve("connectOnClick",F,K.setState),ve("fitViewOnInit",H,K.setState),ve("fitViewOnInitOptions",Z,K.setState),ve("onNodesDelete",U,K.setState),ve("onEdgesDelete",v,K.setState),ve("onNodeDrag",k,K.setState),ve("onNodeDragStart",N,K.setState),ve("onNodeDragStop",M,K.setState),ve("onSelectionDrag",C,K.setState),ve("onSelectionDragStart",S,K.setState),ve("onSelectionDragStop",b,K.setState),ve("noPanClassName",B,K.setState),ve("nodeOrigin",j,K.setState),ve("rfId",Y,K.setState),ve("autoPanOnConnect",Q,K.setState),ve("autoPanOnNodeDrag",ne,K.setState),ve("onError",se,K.setState),ve("connectionRadius",fe,K.setState),ve("isValidConnection",W,K.setState),ve("nodeDragThreshold",A,K.setState),Nr(e,I),Nr(t,G),Nr(_,ie),Nr(T,le),Nr(R,ce),Nr(p,he),null},tp={display:"none"},DE={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},Xg="react-flow__node-desc",Qg="react-flow__edge-desc",UE="react-flow__aria-live",HE=e=>e.ariaLiveMessage;function WE({rfId:e}){const t=Ce(HE);return V.createElement("div",{id:`${UE}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:DE},t)}function VE({rfId:e,disableKeyboardA11y:t}){return V.createElement(V.Fragment,null,V.createElement("div",{id:`${Xg}-${e}`,style:tp},"Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),V.createElement("div",{id:`${Qg}-${e}`,style:tp},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!t&&V.createElement(WE,{rfId:e}))}var No=(e=null,t={actInsideInputWithModifier:!0})=>{const[n,r]=E.useState(!1),s=E.useRef(!1),o=E.useRef(new Set([])),[i,l]=E.useMemo(()=>{if(e!==null){const u=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),c=u.reduce((d,f)=>d.concat(...f),[]);return[u,c]}return[[],[]]},[e]);return E.useEffect(()=>{const a=typeof document<"u"?document:null,u=(t==null?void 0:t.target)||a;if(e!==null){const c=h=>{if(s.current=h.ctrlKey||h.metaKey||h.shiftKey,(!s.current||s.current&&!t.actInsideInputWithModifier)&&$u(h))return!1;const _=rp(h.code,l);o.current.add(h[_]),np(i,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if((!s.current||s.current&&!t.actInsideInputWithModifier)&&$u(h))return!1;const _=rp(h.code,l);np(i,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[_]),h.key==="Meta"&&o.current.clear(),s.current=!1},f=()=>{o.current.clear(),r(!1)};return u==null||u.addEventListener("keydown",c),u==null||u.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{u==null||u.removeEventListener("keydown",c),u==null||u.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function np(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(s=>t.has(s)))}function rp(e,t){return t.includes(e)?"code":"key"}function Zg(e,t,n,r){var l,a;const s=e.parentNode||e.parentId;if(!s)return n;const o=t.get(s),i=dr(o,r);return Zg(o,t,{x:(n.x??0)+i.x,y:(n.y??0)+i.y,z:(((l=o[Be])==null?void 0:l.z)??0)>(n.z??0)?((a=o[Be])==null?void 0:a.z)??0:n.z??0},r)}function qg(e,t,n){e.forEach(r=>{var o;const s=r.parentNode||r.parentId;if(s&&!e.has(s))throw new Error(`Parent node ${s} not found`);if(s||n!=null&&n[r.id]){const{x:i,y:l,z:a}=Zg(r,e,{...r.position,z:((o=r[Be])==null?void 0:o.z)??0},t);r.positionAbsolute={x:i,y:l},r[Be].z=a,n!=null&&n[r.id]&&(r[Be].isParent=!0)}})}function _a(e,t,n,r){const s=new Map,o={},i=r?1e3:0;return e.forEach(l=>{var h;const a=(It(l.zIndex)?l.zIndex:0)+(l.selected?i:0),u=t.get(l.id),c={...l,positionAbsolute:{x:l.position.x,y:l.position.y}},d=l.parentNode||l.parentId;d&&(o[d]=!0);const f=(u==null?void 0:u.type)&&(u==null?void 0:u.type)!==l.type;Object.defineProperty(c,Be,{enumerable:!1,value:{handleBounds:f||(h=u==null?void 0:u[Be])==null?void 0:h.handleBounds,z:a}}),s.set(l.id,c)}),qg(s,n,o),s}function Jg(e,t={}){const{getNodes:n,width:r,height:s,minZoom:o,maxZoom:i,d3Zoom:l,d3Selection:a,fitViewOnInitDone:u,fitViewOnInit:c,nodeOrigin:d}=e(),f=t.initial&&!u&&c;if(l&&a&&(f||!t.initial)){const x=n().filter(T=>{var g;const p=t.includeHiddenNodes?T.width&&T.height:!T.hidden;return(g=t.nodes)!=null&&g.length?p&&t.nodes.some(y=>y.id===T.id):p}),_=x.every(T=>T.width&&T.height);if(x.length>0&&_){const T=Ll(x,d),{x:p,y:g,zoom:y}=jg(T,r,s,t.minZoom??o,t.maxZoom??i,t.padding??.1),w=fn.translate(p,g).scale(y);return typeof t.duration=="number"&&t.duration>0?l.transform(er(a,t.duration),w):l.transform(a,w),!0}}return!1}function GE(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[Be]:r[Be],selected:n.selected})}),new Map(t)}function YE(e,t){return t.map(n=>{const r=e.find(s=>s.id===n.id);return r&&(n.selected=r.selected),n})}function si({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:s,edges:o,onNodesChange:i,onEdgesChange:l,hasDefaultNodes:a,hasDefaultEdges:u}=n();e!=null&&e.length&&(a&&r({nodeInternals:GE(e,s)}),i==null||i(e)),t!=null&&t.length&&(u&&r({edges:YE(t,o)}),l==null||l(t))}const Tr=()=>{},KE={zoomIn:Tr,zoomOut:Tr,zoomTo:Tr,getZoom:()=>1,setViewport:Tr,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:Tr,fitBounds:Tr,project:e=>e,screenToFlowPosition:e=>e,flowToScreenPosition:e=>e,viewportInitialized:!1},XE=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),QE=()=>{const e=Ve(),{d3Zoom:t,d3Selection:n}=Ce(XE,Ke);return E.useMemo(()=>n&&t?{zoomIn:s=>t.scaleBy(er(n,s==null?void 0:s.duration),1.2),zoomOut:s=>t.scaleBy(er(n,s==null?void 0:s.duration),1/1.2),zoomTo:(s,o)=>t.scaleTo(er(n,o==null?void 0:o.duration),s),getZoom:()=>e.getState().transform[2],setViewport:(s,o)=>{const[i,l,a]=e.getState().transform,u=fn.translate(s.x??i,s.y??l).scale(s.zoom??a);t.transform(er(n,o==null?void 0:o.duration),u)},getViewport:()=>{const[s,o,i]=e.getState().transform;return{x:s,y:o,zoom:i}},fitView:s=>Jg(e.getState,s),setCenter:(s,o,i)=>{const{width:l,height:a,maxZoom:u}=e.getState(),c=typeof(i==null?void 0:i.zoom)<"u"?i.zoom:u,d=l/2-s*c,f=a/2-o*c,h=fn.translate(d,f).scale(c);t.transform(er(n,i==null?void 0:i.duration),h)},fitBounds:(s,o)=>{const{width:i,height:l,minZoom:a,maxZoom:u}=e.getState(),{x:c,y:d,zoom:f}=jg(s,i,l,a,u,(o==null?void 0:o.padding)??.1),h=fn.translate(c,d).scale(f);t.transform(er(n,o==null?void 0:o.duration),h)},project:s=>{const{transform:o,snapToGrid:i,snapGrid:l}=e.getState();return console.warn("[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position"),Fu(s,o,i,l)},screenToFlowPosition:s=>{const{transform:o,snapToGrid:i,snapGrid:l,domNode:a}=e.getState();if(!a)return s;const{x:u,y:c}=a.getBoundingClientRect(),d={x:s.x-u,y:s.y-c};return Fu(d,o,i,l)},flowToScreenPosition:s=>{const{transform:o,domNode:i}=e.getState();if(!i)return s;const{x:l,y:a}=i.getBoundingClientRect(),u=Lg(s,o);return{x:u.x+l,y:u.y+a}},viewportInitialized:!0}:KE,[t,n])};function nd(){const e=QE(),t=Ve(),n=E.useCallback(()=>t.getState().getNodes().map(_=>({..._})),[]),r=E.useCallback(_=>t.getState().nodeInternals.get(_),[]),s=E.useCallback(()=>{const{edges:_=[]}=t.getState();return _.map(T=>({...T}))},[]),o=E.useCallback(_=>{const{edges:T=[]}=t.getState();return T.find(p=>p.id===_)},[]),i=E.useCallback(_=>{const{getNodes:T,setNodes:p,hasDefaultNodes:g,onNodesChange:y}=t.getState(),w=T(),P=typeof _=="function"?_(w):_;if(g)p(P);else if(y){const O=P.length===0?w.map(L=>({type:"remove",id:L.id})):P.map(L=>({item:L,type:"reset"}));y(O)}},[]),l=E.useCallback(_=>{const{edges:T=[],setEdges:p,hasDefaultEdges:g,onEdgesChange:y}=t.getState(),w=typeof _=="function"?_(T):_;if(g)p(w);else if(y){const P=w.length===0?T.map(O=>({type:"remove",id:O.id})):w.map(O=>({item:O,type:"reset"}));y(P)}},[]),a=E.useCallback(_=>{const T=Array.isArray(_)?_:[_],{getNodes:p,setNodes:g,hasDefaultNodes:y,onNodesChange:w}=t.getState();if(y){const O=[...p(),...T];g(O)}else if(w){const P=T.map(O=>({item:O,type:"add"}));w(P)}},[]),u=E.useCallback(_=>{const T=Array.isArray(_)?_:[_],{edges:p=[],setEdges:g,hasDefaultEdges:y,onEdgesChange:w}=t.getState();if(y)g([...p,...T]);else if(w){const P=T.map(O=>({item:O,type:"add"}));w(P)}},[]),c=E.useCallback(()=>{const{getNodes:_,edges:T=[],transform:p}=t.getState(),[g,y,w]=p;return{nodes:_().map(P=>({...P})),edges:T.map(P=>({...P})),viewport:{x:g,y,zoom:w}}},[]),d=E.useCallback(({nodes:_,edges:T})=>{const{nodeInternals:p,getNodes:g,edges:y,hasDefaultNodes:w,hasDefaultEdges:P,onNodesDelete:O,onEdgesDelete:L,onNodesChange:R,onEdgesChange:F}=t.getState(),D=(_||[]).map(k=>k.id),H=(T||[]).map(k=>k.id),Z=g().reduce((k,N)=>{const M=N.parentNode||N.parentId,C=!D.includes(N.id)&&M&&k.find(b=>b.id===M);return(typeof N.deletable=="boolean"?N.deletable:!0)&&(D.includes(N.id)||C)&&k.push(N),k},[]),U=y.filter(k=>typeof k.deletable=="boolean"?k.deletable:!0),v=U.filter(k=>H.includes(k.id));if(Z||v){const k=Bg(Z,U),N=[...v,...k],M=N.reduce((C,S)=>(C.includes(S.id)||C.push(S.id),C),[]);if((P||w)&&(P&&t.setState({edges:y.filter(C=>!M.includes(C.id))}),w&&(Z.forEach(C=>{p.delete(C.id)}),t.setState({nodeInternals:new Map(p)}))),M.length>0&&(L==null||L(N),F&&F(M.map(C=>({id:C,type:"remove"})))),Z.length>0&&(O==null||O(Z),R)){const C=Z.map(S=>({id:S.id,type:"remove"}));R(C)}}},[]),f=E.useCallback(_=>{const T=gE(_),p=T?null:t.getState().nodeInternals.get(_.id);return!T&&!p?[null,null,T]:[T?_:Kf(p),p,T]},[]),h=E.useCallback((_,T=!0,p)=>{const[g,y,w]=f(_);return g?(p||t.getState().getNodes()).filter(P=>{if(!w&&(P.id===y.id||!P.positionAbsolute))return!1;const O=Kf(P),L=Lu(O,g);return T&&L>0||L>=g.width*g.height}):[]},[]),x=E.useCallback((_,T,p=!0)=>{const[g]=f(_);if(!g)return!1;const y=Lu(g,T);return p&&y>0||y>=g.width*g.height},[]);return E.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:s,getEdge:o,setNodes:i,setEdges:l,addNodes:a,addEdges:u,toObject:c,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:x}),[e,n,r,s,o,i,l,a,u,c,d,h,x])}const ZE={actInsideInputWithModifier:!1};var qE=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Ve(),{deleteElements:r}=nd(),s=No(e,ZE),o=No(t);E.useEffect(()=>{if(s){const{edges:i,getNodes:l}=n.getState(),a=l().filter(c=>c.selected),u=i.filter(c=>c.selected);r({nodes:a,edges:u}),n.setState({nodesSelectionActive:!1})}},[s]),E.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function JE(e){const t=Ve();E.useEffect(()=>{let n;const r=()=>{var o,i;if(!e.current)return;const s=Kc(e.current);(s.height===0||s.width===0)&&((i=(o=t.getState()).onError)==null||i.call(o,"004",vn.error004())),t.setState({width:s.width||500,height:s.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const rd={position:"absolute",width:"100%",height:"100%",top:0,left:0},eN=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,oi=e=>({x:e.x,y:e.y,zoom:e.k}),kr=(e,t)=>e.target.closest(`.${t}`),sp=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),op=e=>{const t=e.ctrlKey&&ul()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t},tN=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),nN=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:s=!0,zoomOnPinch:o=!0,panOnScroll:i=!1,panOnScrollSpeed:l=.5,panOnScrollMode:a=lr.Free,zoomOnDoubleClick:u=!0,elementsSelectable:c,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:x,maxZoom:_,zoomActivationKeyCode:T,preventScrolling:p=!0,children:g,noWheelClassName:y,noPanClassName:w})=>{const P=E.useRef(),O=Ve(),L=E.useRef(!1),R=E.useRef(!1),F=E.useRef(null),D=E.useRef({x:0,y:0,zoom:0}),{d3Zoom:H,d3Selection:Z,d3ZoomHandler:U,userSelectionActive:v}=Ce(tN,Ke),k=No(T),N=E.useRef(0),M=E.useRef(!1),C=E.useRef();return JE(F),E.useEffect(()=>{if(F.current){const S=F.current.getBoundingClientRect(),b=Eg().scaleExtent([x,_]).translateExtent(h),B=kt(F.current).call(b),j=fn.translate(f.x,f.y).scale(ds(f.zoom,x,_)),Y=[[0,0],[S.width,S.height]],Q=b.constrain()(j,Y,h);b.transform(B,Q),b.wheelDelta(op),O.setState({d3Zoom:b,d3Selection:B,d3ZoomHandler:B.on("wheel.zoom"),transform:[Q.x,Q.y,Q.k],domNode:F.current.closest(".react-flow")})}},[]),E.useEffect(()=>{Z&&H&&(i&&!k&&!v?Z.on("wheel.zoom",S=>{if(kr(S,y))return!1;S.preventDefault(),S.stopImmediatePropagation();const b=Z.property("__zoom").k||1;if(S.ctrlKey&&o){const W=$t(S),A=op(S),I=b*Math.pow(2,A);H.scaleTo(Z,I,W,S);return}const B=S.deltaMode===1?20:1;let j=a===lr.Vertical?0:S.deltaX*B,Y=a===lr.Horizontal?0:S.deltaY*B;!ul()&&S.shiftKey&&a!==lr.Vertical&&(j=S.deltaY*B,Y=0),H.translateBy(Z,-(j/b)*l,-(Y/b)*l,{internal:!0});const Q=oi(Z.property("__zoom")),{onViewportChangeStart:ne,onViewportChange:se,onViewportChangeEnd:fe}=O.getState();clearTimeout(C.current),M.current||(M.current=!0,t==null||t(S,Q),ne==null||ne(Q)),M.current&&(e==null||e(S,Q),se==null||se(Q),C.current=setTimeout(()=>{n==null||n(S,Q),fe==null||fe(Q),M.current=!1},150))},{passive:!1}):typeof U<"u"&&Z.on("wheel.zoom",function(S,b){if(!p&&S.type==="wheel"&&!S.ctrlKey||kr(S,y))return null;S.preventDefault(),U.call(this,S,b)},{passive:!1}))},[v,i,a,Z,H,U,k,o,p,y,t,e,n]),E.useEffect(()=>{H&&H.on("start",S=>{var j,Y;if(!S.sourceEvent||S.sourceEvent.internal)return null;N.current=(j=S.sourceEvent)==null?void 0:j.button;const{onViewportChangeStart:b}=O.getState(),B=oi(S.transform);L.current=!0,D.current=B,((Y=S.sourceEvent)==null?void 0:Y.type)==="mousedown"&&O.setState({paneDragging:!0}),b==null||b(B),t==null||t(S.sourceEvent,B)})},[H,t]),E.useEffect(()=>{H&&(v&&!L.current?H.on("zoom",null):v||H.on("zoom",S=>{var B;const{onViewportChange:b}=O.getState();if(O.setState({transform:[S.transform.x,S.transform.y,S.transform.k]}),R.current=!!(r&&sp(d,N.current??0)),(e||b)&&!((B=S.sourceEvent)!=null&&B.internal)){const j=oi(S.transform);b==null||b(j),e==null||e(S.sourceEvent,j)}}))},[v,H,e,d,r]),E.useEffect(()=>{H&&H.on("end",S=>{if(!S.sourceEvent||S.sourceEvent.internal)return null;const{onViewportChangeEnd:b}=O.getState();if(L.current=!1,O.setState({paneDragging:!1}),r&&sp(d,N.current??0)&&!R.current&&r(S.sourceEvent),R.current=!1,(n||b)&&eN(D.current,S.transform)){const B=oi(S.transform);D.current=B,clearTimeout(P.current),P.current=setTimeout(()=>{b==null||b(B),n==null||n(S.sourceEvent,B)},i?150:0)}})},[H,i,d,n,r]),E.useEffect(()=>{H&&H.filter(S=>{const b=k||s,B=o&&S.ctrlKey;if((d===!0||Array.isArray(d)&&d.includes(1))&&S.button===1&&S.type==="mousedown"&&(kr(S,"react-flow__node")||kr(S,"react-flow__edge")))return!0;if(!d&&!b&&!i&&!u&&!o||v||!u&&S.type==="dblclick"||kr(S,y)&&S.type==="wheel"||kr(S,w)&&(S.type!=="wheel"||i&&S.type==="wheel"&&!k)||!o&&S.ctrlKey&&S.type==="wheel"||!b&&!i&&!B&&S.type==="wheel"||!d&&(S.type==="mousedown"||S.type==="touchstart")||Array.isArray(d)&&!d.includes(S.button)&&S.type==="mousedown")return!1;const j=Array.isArray(d)&&d.includes(S.button)||!S.button||S.button<=1;return(!S.ctrlKey||S.type==="wheel")&&j})},[v,H,s,o,i,u,d,c,k]),V.createElement("div",{className:"react-flow__renderer",ref:F,style:rd},g)},rN=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function sN(){const{userSelectionActive:e,userSelectionRect:t}=Ce(rN,Ke);return e&&t?V.createElement("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function ip(e,t){const n=t.parentNode||t.parentId,r=e.find(s=>s.id===n);if(r){const s=t.position.x+t.width-r.width,o=t.position.y+t.height-r.height;if(s>0||o>0||t.position.x<0||t.position.y<0){if(r.style={...r.style},r.style.width=r.style.width??r.width,r.style.height=r.style.height??r.height,s>0&&(r.style.width+=s),o>0&&(r.style.height+=o),t.position.x<0){const i=Math.abs(t.position.x);r.position.x=r.position.x-i,r.style.width+=i,t.position.x=0}if(t.position.y<0){const i=Math.abs(t.position.y);r.position.y=r.position.y-i,r.style.height+=i,t.position.y=0}r.width=r.style.width,r.height=r.style.height}}}function oN(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,s)=>{const o=e.filter(l=>l.id===s.id);if(o.length===0)return r.push(s),r;const i={...s};for(const l of o)if(l)switch(l.type){case"select":{i.selected=l.selected;break}case"position":{typeof l.position<"u"&&(i.position=l.position),typeof l.positionAbsolute<"u"&&(i.positionAbsolute=l.positionAbsolute),typeof l.dragging<"u"&&(i.dragging=l.dragging),i.expandParent&&ip(r,i);break}case"dimensions":{typeof l.dimensions<"u"&&(i.width=l.dimensions.width,i.height=l.dimensions.height),typeof l.updateStyle<"u"&&(i.style={...i.style||{},...l.dimensions}),typeof l.resizing=="boolean"&&(i.resizing=l.resizing),i.expandParent&&ip(r,i);break}case"remove":return r}return r.push(i),r},n)}function iN(e,t){return oN(e,t)}const Cn=(e,t)=>({id:e,type:"select",selected:t});function Hr(e,t){return e.reduce((n,r)=>{const s=t.includes(r.id);return!r.selected&&s?(r.selected=!0,n.push(Cn(r.id,!0))):r.selected&&!s&&(r.selected=!1,n.push(Cn(r.id,!1))),n},[])}const xa=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},lN=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),e0=E.memo(({isSelecting:e,selectionMode:t=Eo.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:s,onPaneClick:o,onPaneContextMenu:i,onPaneScroll:l,onPaneMouseEnter:a,onPaneMouseMove:u,onPaneMouseLeave:c,children:d})=>{const f=E.useRef(null),h=Ve(),x=E.useRef(0),_=E.useRef(0),T=E.useRef(),{userSelectionActive:p,elementsSelectable:g,dragging:y}=Ce(lN,Ke),w=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),x.current=0,_.current=0},P=U=>{o==null||o(U),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},O=U=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){U.preventDefault();return}i==null||i(U)},L=l?U=>l(U):void 0,R=U=>{const{resetSelectedElements:v,domNode:k}=h.getState();if(T.current=k==null?void 0:k.getBoundingClientRect(),!g||!e||U.button!==0||U.target!==f.current||!T.current)return;const{x:N,y:M}=Dn(U,T.current);v(),h.setState({userSelectionRect:{width:0,height:0,startX:N,startY:M,x:N,y:M}}),r==null||r(U)},F=U=>{const{userSelectionRect:v,nodeInternals:k,edges:N,transform:M,onNodesChange:C,onEdgesChange:S,nodeOrigin:b,getNodes:B}=h.getState();if(!e||!T.current||!v)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const j=Dn(U,T.current),Y=v.startX??0,Q=v.startY??0,ne={...v,x:j.xI.id),A=fe.map(I=>I.id);if(x.current!==A.length){x.current=A.length;const I=Hr(se,A);I.length&&(C==null||C(I))}if(_.current!==W.length){_.current=W.length;const I=Hr(N,W);I.length&&(S==null||S(I))}h.setState({userSelectionRect:ne})},D=U=>{if(U.button!==0)return;const{userSelectionRect:v}=h.getState();!p&&v&&U.target===f.current&&(P==null||P(U)),h.setState({nodesSelectionActive:x.current>0}),w(),s==null||s(U)},H=U=>{p&&(h.setState({nodesSelectionActive:x.current>0}),s==null||s(U)),w()},Z=g&&(e||p);return V.createElement("div",{className:qe(["react-flow__pane",{dragging:y,selection:e}]),onClick:Z?void 0:xa(P,f),onContextMenu:xa(O,f),onWheel:xa(L,f),onMouseEnter:Z?void 0:a,onMouseDown:Z?R:void 0,onMouseMove:Z?F:u,onMouseUp:Z?D:void 0,onMouseLeave:Z?H:c,ref:f,style:rd},d,V.createElement(sN,null))});e0.displayName="Pane";function t0(e,t){const n=e.parentNode||e.parentId;if(!n)return!1;const r=t.get(n);return r?r.selected?!0:t0(r,t):!1}function lp(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function aN(e,t,n,r){return Array.from(e.values()).filter(s=>(s.selected||s.id===r)&&(!s.parentNode||s.parentId||!t0(s,e))&&(s.draggable||t&&typeof s.draggable>"u")).map(s=>{var o,i;return{id:s.id,position:s.position||{x:0,y:0},positionAbsolute:s.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=s.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((i=s.positionAbsolute)==null?void 0:i.y)??0)},delta:{x:0,y:0},extent:s.extent,parentNode:s.parentNode||s.parentId,parentId:s.parentNode||s.parentId,width:s.width,height:s.height,expandParent:s.expandParent}})}function uN(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function n0(e,t,n,r,s=[0,0],o){const i=uN(e,e.extent||r);let l=i;const a=e.parentNode||e.parentId;if(e.extent==="parent"&&!e.expandParent)if(a&&e.width&&e.height){const d=n.get(a),{x:f,y:h}=dr(d,s).positionAbsolute;l=d&&It(f)&&It(h)&&It(d.width)&&It(d.height)?[[f+e.width*s[0],h+e.height*s[1]],[f+d.width-e.width+e.width*s[0],h+d.height-e.height+e.height*s[1]]]:l}else o==null||o("005",vn.error005()),l=i;else if(e.extent&&a&&e.extent!=="parent"){const d=n.get(a),{x:f,y:h}=dr(d,s).positionAbsolute;l=[[e.extent[0][0]+f,e.extent[0][1]+h],[e.extent[1][0]+f,e.extent[1][1]+h]]}let u={x:0,y:0};if(a){const d=n.get(a);u=dr(d,s).positionAbsolute}const c=l&&l!=="parent"?Xc(t,l):t;return{position:{x:c.x-u.x,y:c.y-u.y},positionAbsolute:c}}function wa({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(s=>({...n.get(s.id),position:s.position,positionAbsolute:s.positionAbsolute}));return[e?r.find(s=>s.id===e):r[0],r]}const ap=(e,t,n,r)=>{const s=t.querySelectorAll(e);if(!s||!s.length)return null;const o=Array.from(s),i=t.getBoundingClientRect(),l={x:i.width*r[0],y:i.height*r[1]};return o.map(a=>{const u=a.getBoundingClientRect();return{id:a.getAttribute("data-handleid"),position:a.getAttribute("data-handlepos"),x:(u.left-i.left-l.x)/n,y:(u.top-i.top-l.y)/n,...Kc(a)}})};function Is(e,t,n){return n===void 0?n:r=>{const s=t().nodeInternals.get(e);s&&n(r,{...s})}}function Du({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:s,unselectNodesAndEdges:o,multiSelectionActive:i,nodeInternals:l,onError:a}=t.getState(),u=l.get(e);if(!u){a==null||a("012",vn.error012(e));return}t.setState({nodesSelectionActive:!1}),u.selected?(n||u.selected&&i)&&(o({nodes:[u],edges:[]}),requestAnimationFrame(()=>{var c;return(c=r==null?void 0:r.current)==null?void 0:c.blur()})):s([e])}function cN(){const e=Ve();return E.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:s,snapToGrid:o}=e.getState(),i=n.touches?n.touches[0].clientX:n.clientX,l=n.touches?n.touches[0].clientY:n.clientY,a={x:(i-r[0])/r[2],y:(l-r[1])/r[2]};return{xSnapped:o?s[0]*Math.round(a.x/s[0]):a.x,ySnapped:o?s[1]*Math.round(a.y/s[1]):a.y,...a}},[])}function Sa(e){return(t,n,r)=>e==null?void 0:e(t,r)}function r0({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:s,isSelectable:o,selectNodesOnDrag:i}){const l=Ve(),[a,u]=E.useState(!1),c=E.useRef([]),d=E.useRef({x:null,y:null}),f=E.useRef(0),h=E.useRef(null),x=E.useRef({x:0,y:0}),_=E.useRef(null),T=E.useRef(!1),p=E.useRef(!1),g=E.useRef(!1),y=cN();return E.useEffect(()=>{if(e!=null&&e.current){const w=kt(e.current),P=({x:R,y:F})=>{const{nodeInternals:D,onNodeDrag:H,onSelectionDrag:Z,updateNodePositions:U,nodeExtent:v,snapGrid:k,snapToGrid:N,nodeOrigin:M,onError:C}=l.getState();d.current={x:R,y:F};let S=!1,b={x:0,y:0,x2:0,y2:0};if(c.current.length>1&&v){const j=Ll(c.current,M);b=So(j)}if(c.current=c.current.map(j=>{const Y={x:R-j.distance.x,y:F-j.distance.y};N&&(Y.x=k[0]*Math.round(Y.x/k[0]),Y.y=k[1]*Math.round(Y.y/k[1]));const Q=[[v[0][0],v[0][1]],[v[1][0],v[1][1]]];c.current.length>1&&v&&!j.extent&&(Q[0][0]=j.positionAbsolute.x-b.x+v[0][0],Q[1][0]=j.positionAbsolute.x+(j.width??0)-b.x2+v[1][0],Q[0][1]=j.positionAbsolute.y-b.y+v[0][1],Q[1][1]=j.positionAbsolute.y+(j.height??0)-b.y2+v[1][1]);const ne=n0(j,Y,D,Q,M,C);return S=S||j.position.x!==ne.position.x||j.position.y!==ne.position.y,j.position=ne.position,j.positionAbsolute=ne.positionAbsolute,j}),!S)return;U(c.current,!0,!0),u(!0);const B=s?H:Sa(Z);if(B&&_.current){const[j,Y]=wa({nodeId:s,dragItems:c.current,nodeInternals:D});B(_.current,j,Y)}},O=()=>{if(!h.current)return;const[R,F]=Tg(x.current,h.current);if(R!==0||F!==0){const{transform:D,panBy:H}=l.getState();d.current.x=(d.current.x??0)-R/D[2],d.current.y=(d.current.y??0)-F/D[2],H({x:R,y:F})&&P(d.current)}f.current=requestAnimationFrame(O)},L=R=>{var M;const{nodeInternals:F,multiSelectionActive:D,nodesDraggable:H,unselectNodesAndEdges:Z,onNodeDragStart:U,onSelectionDragStart:v}=l.getState();p.current=!0;const k=s?U:Sa(v);(!i||!o)&&!D&&s&&((M=F.get(s))!=null&&M.selected||Z()),s&&o&&i&&Du({id:s,store:l,nodeRef:e});const N=y(R);if(d.current=N,c.current=aN(F,H,N,s),k&&c.current){const[C,S]=wa({nodeId:s,dragItems:c.current,nodeInternals:F});k(R.sourceEvent,C,S)}};if(t)w.on(".drag",null);else{const R=xw().on("start",F=>{const{domNode:D,nodeDragThreshold:H}=l.getState();H===0&&L(F),g.current=!1;const Z=y(F);d.current=Z,h.current=(D==null?void 0:D.getBoundingClientRect())||null,x.current=Dn(F.sourceEvent,h.current)}).on("drag",F=>{var U,v;const D=y(F),{autoPanOnNodeDrag:H,nodeDragThreshold:Z}=l.getState();if(F.sourceEvent.type==="touchmove"&&F.sourceEvent.touches.length>1&&(g.current=!0),!g.current){if(!T.current&&p.current&&H&&(T.current=!0,O()),!p.current){const k=D.xSnapped-(((U=d==null?void 0:d.current)==null?void 0:U.x)??0),N=D.ySnapped-(((v=d==null?void 0:d.current)==null?void 0:v.y)??0);Math.sqrt(k*k+N*N)>Z&&L(F)}(d.current.x!==D.xSnapped||d.current.y!==D.ySnapped)&&c.current&&p.current&&(_.current=F.sourceEvent,x.current=Dn(F.sourceEvent,h.current),P(D))}}).on("end",F=>{if(!(!p.current||g.current)&&(u(!1),T.current=!1,p.current=!1,cancelAnimationFrame(f.current),c.current)){const{updateNodePositions:D,nodeInternals:H,onNodeDragStop:Z,onSelectionDragStop:U}=l.getState(),v=s?Z:Sa(U);if(D(c.current,!1,!1),v){const[k,N]=wa({nodeId:s,dragItems:c.current,nodeInternals:H});v(F.sourceEvent,k,N)}}}).filter(F=>{const D=F.target;return!F.button&&(!n||!lp(D,`.${n}`,e))&&(!r||lp(D,r,e))});return w.call(R),()=>{w.on(".drag",null)}}}},[e,t,n,r,o,l,s,i,y]),a}function s0(){const e=Ve();return E.useCallback(n=>{const{nodeInternals:r,nodeExtent:s,updateNodePositions:o,getNodes:i,snapToGrid:l,snapGrid:a,onError:u,nodesDraggable:c}=e.getState(),d=i().filter(g=>g.selected&&(g.draggable||c&&typeof g.draggable>"u")),f=l?a[0]:5,h=l?a[1]:5,x=n.isShiftPressed?4:1,_=n.x*f*x,T=n.y*h*x,p=d.map(g=>{if(g.positionAbsolute){const y={x:g.positionAbsolute.x+_,y:g.positionAbsolute.y+T};l&&(y.x=a[0]*Math.round(y.x/a[0]),y.y=a[1]*Math.round(y.y/a[1]));const{positionAbsolute:w,position:P}=n0(g,y,r,s,void 0,u);g.position=P,g.positionAbsolute=w}return g});o(p,!0,!1)},[])}const es={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var bs=e=>{const t=({id:n,type:r,data:s,xPos:o,yPos:i,xPosOrigin:l,yPosOrigin:a,selected:u,onClick:c,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:x,onDoubleClick:_,style:T,className:p,isDraggable:g,isSelectable:y,isConnectable:w,isFocusable:P,selectNodesOnDrag:O,sourcePosition:L,targetPosition:R,hidden:F,resizeObserver:D,dragHandle:H,zIndex:Z,isParent:U,noDragClassName:v,noPanClassName:k,initialized:N,disableKeyboardA11y:M,ariaLabel:C,rfId:S,hasHandleBounds:b})=>{const B=Ve(),j=E.useRef(null),Y=E.useRef(null),Q=E.useRef(L),ne=E.useRef(R),se=E.useRef(r),fe=y||g||c||d||f||h,W=s0(),A=Is(n,B.getState,d),I=Is(n,B.getState,f),G=Is(n,B.getState,h),X=Is(n,B.getState,x),ie=Is(n,B.getState,_),le=oe=>{const{nodeDragThreshold:K}=B.getState();if(y&&(!O||!g||K>0)&&Du({id:n,store:B,nodeRef:j}),c){const z=B.getState().nodeInternals.get(n);z&&c(oe,{...z})}},ce=oe=>{if(!$u(oe)&&!M)if(bg.includes(oe.key)&&y){const K=oe.key==="Escape";Du({id:n,store:B,unselect:K,nodeRef:j})}else g&&u&&Object.prototype.hasOwnProperty.call(es,oe.key)&&(B.setState({ariaLiveMessage:`Moved selected node ${oe.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~i}`}),W({x:es[oe.key].x,y:es[oe.key].y,isShiftPressed:oe.shiftKey}))};E.useEffect(()=>()=>{Y.current&&(D==null||D.unobserve(Y.current),Y.current=null)},[]),E.useEffect(()=>{if(j.current&&!F){const oe=j.current;(!N||!b||Y.current!==oe)&&(Y.current&&(D==null||D.unobserve(Y.current)),D==null||D.observe(oe),Y.current=oe)}},[F,N,b]),E.useEffect(()=>{const oe=se.current!==r,K=Q.current!==L,z=ne.current!==R;j.current&&(oe||K||z)&&(oe&&(se.current=r),K&&(Q.current=L),z&&(ne.current=R),B.getState().updateNodeDimensions([{id:n,nodeElement:j.current,forceUpdate:!0}]))},[n,r,L,R]);const he=r0({nodeRef:j,disabled:F||!g,noDragClassName:v,handleSelector:H,nodeId:n,isSelectable:y,selectNodesOnDrag:O});return F?null:V.createElement("div",{className:qe(["react-flow__node",`react-flow__node-${r}`,{[k]:g},p,{selected:u,selectable:y,parent:U,dragging:he}]),ref:j,style:{zIndex:Z,transform:`translate(${l}px,${a}px)`,pointerEvents:fe?"all":"none",visibility:N?"visible":"hidden",...T},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:A,onMouseMove:I,onMouseLeave:G,onContextMenu:X,onClick:le,onDoubleClick:ie,onKeyDown:P?ce:void 0,tabIndex:P?0:void 0,role:P?"button":void 0,"aria-describedby":M?void 0:`${Xg}-${S}`,"aria-label":C},V.createElement(EE,{value:n},V.createElement(e,{id:n,data:s,type:r,xPos:o,yPos:i,selected:u,isConnectable:w,sourcePosition:L,targetPosition:R,dragging:he,dragHandle:H,zIndex:Z})))};return t.displayName="NodeWrapper",E.memo(t)};const dN=e=>{const t=e.getNodes().filter(n=>n.selected);return{...Ll(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function fN({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Ve(),{width:s,height:o,x:i,y:l,transformString:a,userSelectionActive:u}=Ce(dN,Ke),c=s0(),d=E.useRef(null);if(E.useEffect(()=>{var x;n||(x=d.current)==null||x.focus({preventScroll:!0})},[n]),r0({nodeRef:d}),u||!s||!o)return null;const f=e?x=>{const _=r.getState().getNodes().filter(T=>T.selected);e(x,_)}:void 0,h=x=>{Object.prototype.hasOwnProperty.call(es,x.key)&&c({x:es[x.key].x,y:es[x.key].y,isShiftPressed:x.shiftKey})};return V.createElement("div",{className:qe(["react-flow__nodesselection","react-flow__container",t]),style:{transform:a}},V.createElement("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:s,height:o,top:l,left:i}}))}var pN=E.memo(fN);const hN=e=>e.nodesSelectionActive,o0=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:i,deleteKeyCode:l,onMove:a,onMoveStart:u,onMoveEnd:c,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:x,onSelectionEnd:_,multiSelectionKeyCode:T,panActivationKeyCode:p,zoomActivationKeyCode:g,elementsSelectable:y,zoomOnScroll:w,zoomOnPinch:P,panOnScroll:O,panOnScrollSpeed:L,panOnScrollMode:R,zoomOnDoubleClick:F,panOnDrag:D,defaultViewport:H,translateExtent:Z,minZoom:U,maxZoom:v,preventScrolling:k,onSelectionContextMenu:N,noWheelClassName:M,noPanClassName:C,disableKeyboardA11y:S})=>{const b=Ce(hN),B=No(d),j=No(p),Y=j||D,Q=j||O,ne=B||f&&Y!==!0;return qE({deleteKeyCode:l,multiSelectionKeyCode:T}),V.createElement(nN,{onMove:a,onMoveStart:u,onMoveEnd:c,onPaneContextMenu:o,elementsSelectable:y,zoomOnScroll:w,zoomOnPinch:P,panOnScroll:Q,panOnScrollSpeed:L,panOnScrollMode:R,zoomOnDoubleClick:F,panOnDrag:!B&&Y,defaultViewport:H,translateExtent:Z,minZoom:U,maxZoom:v,zoomActivationKeyCode:g,preventScrolling:k,noWheelClassName:M,noPanClassName:C},V.createElement(e0,{onSelectionStart:x,onSelectionEnd:_,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:i,panOnDrag:Y,isSelecting:!!ne,selectionMode:h},e,b&&V.createElement(pN,{onSelectionContextMenu:N,noPanClassName:C,disableKeyboardA11y:S})))};o0.displayName="FlowRenderer";var mN=E.memo(o0);function gN(e){return Ce(E.useCallback(n=>e?$g(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}function yN(e){const t={input:bs(e.input||Vg),default:bs(e.default||zu),output:bs(e.output||Yg),group:bs(e.group||td)},n={},r=Object.keys(e).filter(s=>!["input","default","output","group"].includes(s)).reduce((s,o)=>(s[o]=bs(e[o]||zu),s),n);return{...t,...r}}const vN=({x:e,y:t,width:n,height:r,origin:s})=>!n||!r?{x:e,y:t}:s[0]<0||s[1]<0||s[0]>1||s[1]>1?{x:e,y:t}:{x:e-n*s[0],y:t-r*s[1]},_N=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),i0=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:s,updateNodeDimensions:o,onError:i}=Ce(_N,Ke),l=gN(e.onlyRenderVisibleElements),a=E.useRef(),u=E.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const c=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return a.current=c,c},[]);return E.useEffect(()=>()=>{var c;(c=a==null?void 0:a.current)==null||c.disconnect()},[]),V.createElement("div",{className:"react-flow__nodes",style:rd},l.map(c=>{var P,O,L;let d=c.type||"default";e.nodeTypes[d]||(i==null||i("003",vn.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(c.draggable||t&&typeof c.draggable>"u"),x=!!(c.selectable||s&&typeof c.selectable>"u"),_=!!(c.connectable||n&&typeof c.connectable>"u"),T=!!(c.focusable||r&&typeof c.focusable>"u"),p=e.nodeExtent?Xc(c.positionAbsolute,e.nodeExtent):c.positionAbsolute,g=(p==null?void 0:p.x)??0,y=(p==null?void 0:p.y)??0,w=vN({x:g,y,width:c.width??0,height:c.height??0,origin:e.nodeOrigin});return V.createElement(f,{key:c.id,id:c.id,className:c.className,style:c.style,type:d,data:c.data,sourcePosition:c.sourcePosition||re.Bottom,targetPosition:c.targetPosition||re.Top,hidden:c.hidden,xPos:g,yPos:y,xPosOrigin:w.x,yPosOrigin:w.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!c.selected,isDraggable:h,isSelectable:x,isConnectable:_,isFocusable:T,resizeObserver:u,dragHandle:c.dragHandle,zIndex:((P=c[Be])==null?void 0:P.z)??0,isParent:!!((O=c[Be])!=null&&O.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!c.width&&!!c.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:c.ariaLabel,hasHandleBounds:!!((L=c[Be])!=null&&L.handleBounds)})}))};i0.displayName="NodeRenderer";var xN=E.memo(i0);const wN=(e,t,n)=>n===re.Left?e-t:n===re.Right?e+t:e,SN=(e,t,n)=>n===re.Top?e-t:n===re.Bottom?e+t:e,up="react-flow__edgeupdater",cp=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:s,onMouseEnter:o,onMouseOut:i,type:l})=>V.createElement("circle",{onMouseDown:s,onMouseEnter:o,onMouseOut:i,className:qe([up,`${up}-${l}`]),cx:wN(t,r,e),cy:SN(n,r,e),r,stroke:"transparent",fill:"transparent"}),EN=()=>!0;var Cr=e=>{const t=({id:n,className:r,type:s,data:o,onClick:i,onEdgeDoubleClick:l,selected:a,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:x,labelBgBorderRadius:_,style:T,source:p,target:g,sourceX:y,sourceY:w,targetX:P,targetY:O,sourcePosition:L,targetPosition:R,elementsSelectable:F,hidden:D,sourceHandleId:H,targetHandleId:Z,onContextMenu:U,onMouseEnter:v,onMouseMove:k,onMouseLeave:N,reconnectRadius:M,onReconnect:C,onReconnectStart:S,onReconnectEnd:b,markerEnd:B,markerStart:j,rfId:Y,ariaLabel:Q,isFocusable:ne,isReconnectable:se,pathOptions:fe,interactionWidth:W,disableKeyboardA11y:A})=>{const I=E.useRef(null),[G,X]=E.useState(!1),[ie,le]=E.useState(!1),ce=Ve(),he=E.useMemo(()=>`url('#${ju(j,Y)}')`,[j,Y]),oe=E.useMemo(()=>`url('#${ju(B,Y)}')`,[B,Y]);if(D)return null;const K=ye=>{var Vt;const{edges:Ae,addSelectedEdges:xe,unselectNodesAndEdges:ut,multiSelectionActive:je}=ce.getState(),nn=Ae.find(ms=>ms.id===n);nn&&(F&&(ce.setState({nodesSelectionActive:!1}),nn.selected&&je?(ut({nodes:[],edges:[nn]}),(Vt=I.current)==null||Vt.blur()):xe([n])),i&&i(ye,nn))},z=Cs(n,ce.getState,l),ee=Cs(n,ce.getState,U),$=Cs(n,ce.getState,v),q=Cs(n,ce.getState,k),te=Cs(n,ce.getState,N),ae=(ye,Ae)=>{if(ye.button!==0)return;const{edges:xe,isValidConnection:ut}=ce.getState(),je=Ae?g:p,nn=(Ae?Z:H)||null,Vt=Ae?"target":"source",ms=ut||EN,Bl=Ae,gs=xe.find(Yn=>Yn.id===n);le(!0),S==null||S(ye,gs,Vt);const jl=Yn=>{le(!1),b==null||b(Yn,gs,Vt)};Dg({event:ye,handleId:nn,nodeId:je,onConnect:Yn=>C==null?void 0:C(gs,Yn),isTarget:Bl,getState:ce.getState,setState:ce.setState,isValidConnection:ms,edgeUpdaterType:Vt,onReconnectEnd:jl})},pe=ye=>ae(ye,!0),we=ye=>ae(ye,!1),de=()=>X(!0),me=()=>X(!1),ge=!F&&!i,Ee=ye=>{var Ae;if(!A&&bg.includes(ye.key)&&F){const{unselectNodesAndEdges:xe,addSelectedEdges:ut,edges:je}=ce.getState();ye.key==="Escape"?((Ae=I.current)==null||Ae.blur(),xe({edges:[je.find(Vt=>Vt.id===n)]})):ut([n])}};return V.createElement("g",{className:qe(["react-flow__edge",`react-flow__edge-${s}`,r,{selected:a,animated:u,inactive:ge,updating:G}]),onClick:K,onDoubleClick:z,onContextMenu:ee,onMouseEnter:$,onMouseMove:q,onMouseLeave:te,onKeyDown:ne?Ee:void 0,tabIndex:ne?0:void 0,role:ne?"button":"img","data-testid":`rf__edge-${n}`,"aria-label":Q===null?void 0:Q||`Edge from ${p} to ${g}`,"aria-describedby":ne?`${Qg}-${Y}`:void 0,ref:I},!ie&&V.createElement(e,{id:n,source:p,target:g,selected:a,animated:u,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:x,labelBgBorderRadius:_,data:o,style:T,sourceX:y,sourceY:w,targetX:P,targetY:O,sourcePosition:L,targetPosition:R,sourceHandleId:H,targetHandleId:Z,markerStart:he,markerEnd:oe,pathOptions:fe,interactionWidth:W}),se&&V.createElement(V.Fragment,null,(se==="source"||se===!0)&&V.createElement(cp,{position:L,centerX:y,centerY:w,radius:M,onMouseDown:pe,onMouseEnter:de,onMouseOut:me,type:"source"}),(se==="target"||se===!0)&&V.createElement(cp,{position:R,centerX:P,centerY:O,radius:M,onMouseDown:we,onMouseEnter:de,onMouseOut:me,type:"target"})))};return t.displayName="EdgeWrapper",E.memo(t)};function NN(e){const t={default:Cr(e.default||cl),straight:Cr(e.bezier||qc),step:Cr(e.step||Zc),smoothstep:Cr(e.step||Ol),simplebezier:Cr(e.simplebezier||Qc)},n={},r=Object.keys(e).filter(s=>!["default","bezier"].includes(s)).reduce((s,o)=>(s[o]=Cr(e[o]||cl),s),n);return{...t,...r}}function dp(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,s=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,i=(n==null?void 0:n.height)||t.height;switch(e){case re.Top:return{x:r+o/2,y:s};case re.Right:return{x:r+o,y:s+i/2};case re.Bottom:return{x:r+o/2,y:s+i};case re.Left:return{x:r,y:s+i/2}}}function fp(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const TN=(e,t,n,r,s,o)=>{const i=dp(n,e,t),l=dp(o,r,s);return{sourceX:i.x,sourceY:i.y,targetX:l.x,targetY:l.y}};function kN({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:s,targetHeight:o,width:i,height:l,transform:a}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+s),y2:Math.max(e.y+r,t.y+o)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=So({x:(0-a[0])/a[2],y:(0-a[1])/a[2],width:i/a[2],height:l/a[2]}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),f=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*f)>0}function pp(e){var r,s,o,i,l;const t=((r=e==null?void 0:e[Be])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)||0,y:((l=e==null?void 0:e.positionAbsolute)==null?void 0:l.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}const CN=[{level:0,isMaxLevel:!0,edges:[]}];function IN(e,t,n=!1){let r=-1;const s=e.reduce((i,l)=>{var c,d;const a=It(l.zIndex);let u=a?l.zIndex:0;if(n){const f=t.get(l.target),h=t.get(l.source),x=l.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),_=Math.max(((c=h==null?void 0:h[Be])==null?void 0:c.z)||0,((d=f==null?void 0:f[Be])==null?void 0:d.z)||0,1e3);u=(a?l.zIndex:0)+(x?_:0)}return i[u]?i[u].push(l):i[u]=[l],r=u>r?u:r,i},{}),o=Object.entries(s).map(([i,l])=>{const a=+i;return{edges:l,level:a,isMaxLevel:a===r}});return o.length===0?CN:o}function bN(e,t,n){const r=Ce(E.useCallback(s=>e?s.edges.filter(o=>{const i=t.get(o.source),l=t.get(o.target);return(i==null?void 0:i.width)&&(i==null?void 0:i.height)&&(l==null?void 0:l.width)&&(l==null?void 0:l.height)&&kN({sourcePos:i.positionAbsolute||{x:0,y:0},targetPos:l.positionAbsolute||{x:0,y:0},sourceWidth:i.width,sourceHeight:i.height,targetWidth:l.width,targetHeight:l.height,width:s.width,height:s.height,transform:s.transform})}):s.edges,[e,t]));return IN(r,t,n)}const PN=({color:e="none",strokeWidth:t=1})=>V.createElement("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),AN=({color:e="none",strokeWidth:t=1})=>V.createElement("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),hp={[xr.Arrow]:PN,[xr.ArrowClosed]:AN};function RN(e){const t=Ve();return E.useMemo(()=>{var s,o;return Object.prototype.hasOwnProperty.call(hp,e)?hp[e]:((o=(s=t.getState()).onError)==null||o.call(s,"009",vn.error009(e)),null)},[e])}const MN=({id:e,type:t,color:n,width:r=12.5,height:s=12.5,markerUnits:o="strokeWidth",strokeWidth:i,orient:l="auto-start-reverse"})=>{const a=RN(t);return a?V.createElement("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${s}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:l,refX:"0",refY:"0"},V.createElement(a,{color:n,strokeWidth:i})):null},ON=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((s,o)=>([o.markerStart,o.markerEnd].forEach(i=>{if(i&&typeof i=="object"){const l=ju(i,t);r.includes(l)||(s.push({id:l,color:i.color||e,...i}),r.push(l))}}),s),[]).sort((s,o)=>s.id.localeCompare(o.id))},l0=({defaultColor:e,rfId:t})=>{const n=Ce(E.useCallback(ON({defaultColor:e,rfId:t}),[e,t]),(r,s)=>!(r.length!==s.length||r.some((o,i)=>o.id!==s[i].id)));return V.createElement("defs",null,n.map(r=>V.createElement(MN,{id:r.id,key:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient})))};l0.displayName="MarkerDefinitions";var LN=E.memo(l0);const $N=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),a0=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:s,noPanClassName:o,onEdgeContextMenu:i,onEdgeMouseEnter:l,onEdgeMouseMove:a,onEdgeMouseLeave:u,onEdgeClick:c,onEdgeDoubleClick:d,onReconnect:f,onReconnectStart:h,onReconnectEnd:x,reconnectRadius:_,children:T,disableKeyboardA11y:p})=>{const{edgesFocusable:g,edgesUpdatable:y,elementsSelectable:w,width:P,height:O,connectionMode:L,nodeInternals:R,onError:F}=Ce($N,Ke),D=bN(t,R,n);return P?V.createElement(V.Fragment,null,D.map(({level:H,edges:Z,isMaxLevel:U})=>V.createElement("svg",{key:H,style:{zIndex:H},width:P,height:O,className:"react-flow__edges react-flow__container"},U&&V.createElement(LN,{defaultColor:e,rfId:r}),V.createElement("g",null,Z.map(v=>{const[k,N,M]=pp(R.get(v.source)),[C,S,b]=pp(R.get(v.target));if(!M||!b)return null;let B=v.type||"default";s[B]||(F==null||F("011",vn.error011(B)),B="default");const j=s[B]||s.default,Y=L===_r.Strict?S.target:(S.target??[]).concat(S.source??[]),Q=fp(N.source,v.sourceHandle),ne=fp(Y,v.targetHandle),se=(Q==null?void 0:Q.position)||re.Bottom,fe=(ne==null?void 0:ne.position)||re.Top,W=!!(v.focusable||g&&typeof v.focusable>"u"),A=v.reconnectable||v.updatable,I=typeof f<"u"&&(A||y&&typeof A>"u");if(!Q||!ne)return F==null||F("008",vn.error008(Q,v)),null;const{sourceX:G,sourceY:X,targetX:ie,targetY:le}=TN(k,Q,se,C,ne,fe);return V.createElement(j,{key:v.id,id:v.id,className:qe([v.className,o]),type:B,data:v.data,selected:!!v.selected,animated:!!v.animated,hidden:!!v.hidden,label:v.label,labelStyle:v.labelStyle,labelShowBg:v.labelShowBg,labelBgStyle:v.labelBgStyle,labelBgPadding:v.labelBgPadding,labelBgBorderRadius:v.labelBgBorderRadius,style:v.style,source:v.source,target:v.target,sourceHandleId:v.sourceHandle,targetHandleId:v.targetHandle,markerEnd:v.markerEnd,markerStart:v.markerStart,sourceX:G,sourceY:X,targetX:ie,targetY:le,sourcePosition:se,targetPosition:fe,elementsSelectable:w,onContextMenu:i,onMouseEnter:l,onMouseMove:a,onMouseLeave:u,onClick:c,onEdgeDoubleClick:d,onReconnect:f,onReconnectStart:h,onReconnectEnd:x,reconnectRadius:_,rfId:r,ariaLabel:v.ariaLabel,isFocusable:W,isReconnectable:I,pathOptions:"pathOptions"in v?v.pathOptions:void 0,interactionWidth:v.interactionWidth,disableKeyboardA11y:p})})))),T):null};a0.displayName="EdgeRenderer";var BN=E.memo(a0);const jN=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function FN({children:e}){const t=Ce(jN);return V.createElement("div",{className:"react-flow__viewport react-flow__container",style:{transform:t}},e)}function zN(e){const t=nd(),n=E.useRef(!1);E.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const DN={[re.Left]:re.Right,[re.Right]:re.Left,[re.Top]:re.Bottom,[re.Bottom]:re.Top},u0=({nodeId:e,handleType:t,style:n,type:r=Pn.Bezier,CustomComponent:s,connectionStatus:o})=>{var O,L,R;const{fromNode:i,handleId:l,toX:a,toY:u,connectionMode:c}=Ce(E.useCallback(F=>({fromNode:F.nodeInternals.get(e),handleId:F.connectionHandleId,toX:(F.connectionPosition.x-F.transform[0])/F.transform[2],toY:(F.connectionPosition.y-F.transform[1])/F.transform[2],connectionMode:F.connectionMode}),[e]),Ke),d=(O=i==null?void 0:i[Be])==null?void 0:O.handleBounds;let f=d==null?void 0:d[t];if(c===_r.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!i||!f)return null;const h=l?f.find(F=>F.id===l):f[0],x=h?h.x+h.width/2:(i.width??0)/2,_=h?h.y+h.height/2:i.height??0,T=(((L=i.positionAbsolute)==null?void 0:L.x)??0)+x,p=(((R=i.positionAbsolute)==null?void 0:R.y)??0)+_,g=h==null?void 0:h.position,y=g?DN[g]:null;if(!g||!y)return null;if(s)return V.createElement(s,{connectionLineType:r,connectionLineStyle:n,fromNode:i,fromHandle:h,fromX:T,fromY:p,toX:a,toY:u,fromPosition:g,toPosition:y,connectionStatus:o});let w="";const P={sourceX:T,sourceY:p,sourcePosition:g,targetX:a,targetY:u,targetPosition:y};return r===Pn.Bezier?[w]=Og(P):r===Pn.Step?[w]=Bu({...P,borderRadius:0}):r===Pn.SmoothStep?[w]=Bu(P):r===Pn.SimpleBezier?[w]=Mg(P):w=`M${T},${p} ${a},${u}`,V.createElement("path",{d:w,fill:"none",className:"react-flow__connection-path",style:n})};u0.displayName="ConnectionLine";const UN=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function HN({containerStyle:e,style:t,type:n,component:r}){const{nodeId:s,handleType:o,nodesConnectable:i,width:l,height:a,connectionStatus:u}=Ce(UN,Ke);return!(s&&o&&l&&i)?null:V.createElement("svg",{style:e,width:l,height:a,className:"react-flow__edges react-flow__connectionline react-flow__container"},V.createElement("g",{className:qe(["react-flow__connection",u])},V.createElement(u0,{nodeId:s,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:u})))}function mp(e,t){return E.useRef(null),Ve(),E.useMemo(()=>t(e),[e])}const c0=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:s,onInit:o,onNodeClick:i,onEdgeClick:l,onNodeDoubleClick:a,onEdgeDoubleClick:u,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:x,onSelectionStart:_,onSelectionEnd:T,connectionLineType:p,connectionLineStyle:g,connectionLineComponent:y,connectionLineContainerStyle:w,selectionKeyCode:P,selectionOnDrag:O,selectionMode:L,multiSelectionKeyCode:R,panActivationKeyCode:F,zoomActivationKeyCode:D,deleteKeyCode:H,onlyRenderVisibleElements:Z,elementsSelectable:U,selectNodesOnDrag:v,defaultViewport:k,translateExtent:N,minZoom:M,maxZoom:C,preventScrolling:S,defaultMarkerColor:b,zoomOnScroll:B,zoomOnPinch:j,panOnScroll:Y,panOnScrollSpeed:Q,panOnScrollMode:ne,zoomOnDoubleClick:se,panOnDrag:fe,onPaneClick:W,onPaneMouseEnter:A,onPaneMouseMove:I,onPaneMouseLeave:G,onPaneScroll:X,onPaneContextMenu:ie,onEdgeContextMenu:le,onEdgeMouseEnter:ce,onEdgeMouseMove:he,onEdgeMouseLeave:oe,onReconnect:K,onReconnectStart:z,onReconnectEnd:ee,reconnectRadius:$,noDragClassName:q,noWheelClassName:te,noPanClassName:ae,elevateEdgesOnSelect:pe,disableKeyboardA11y:we,nodeOrigin:de,nodeExtent:me,rfId:ge})=>{const Ee=mp(e,yN),ye=mp(t,NN);return zN(o),V.createElement(mN,{onPaneClick:W,onPaneMouseEnter:A,onPaneMouseMove:I,onPaneMouseLeave:G,onPaneContextMenu:ie,onPaneScroll:X,deleteKeyCode:H,selectionKeyCode:P,selectionOnDrag:O,selectionMode:L,onSelectionStart:_,onSelectionEnd:T,multiSelectionKeyCode:R,panActivationKeyCode:F,zoomActivationKeyCode:D,elementsSelectable:U,onMove:n,onMoveStart:r,onMoveEnd:s,zoomOnScroll:B,zoomOnPinch:j,zoomOnDoubleClick:se,panOnScroll:Y,panOnScrollSpeed:Q,panOnScrollMode:ne,panOnDrag:fe,defaultViewport:k,translateExtent:N,minZoom:M,maxZoom:C,onSelectionContextMenu:x,preventScrolling:S,noDragClassName:q,noWheelClassName:te,noPanClassName:ae,disableKeyboardA11y:we},V.createElement(FN,null,V.createElement(BN,{edgeTypes:ye,onEdgeClick:l,onEdgeDoubleClick:u,onlyRenderVisibleElements:Z,onEdgeContextMenu:le,onEdgeMouseEnter:ce,onEdgeMouseMove:he,onEdgeMouseLeave:oe,onReconnect:K,onReconnectStart:z,onReconnectEnd:ee,reconnectRadius:$,defaultMarkerColor:b,noPanClassName:ae,elevateEdgesOnSelect:!!pe,disableKeyboardA11y:we,rfId:ge},V.createElement(HN,{style:g,type:p,component:y,containerStyle:w})),V.createElement("div",{className:"react-flow__edgelabel-renderer"}),V.createElement(xN,{nodeTypes:Ee,onNodeClick:i,onNodeDoubleClick:a,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:v,onlyRenderVisibleElements:Z,noPanClassName:ae,noDragClassName:q,disableKeyboardA11y:we,nodeOrigin:de,nodeExtent:me,rfId:ge})))};c0.displayName="GraphView";var WN=E.memo(c0);const Uu=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],wn={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:Uu,nodeExtent:Uu,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:_r.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],nodeDragThreshold:0,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,onSelectionChange:[],multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:yE,isValidConnection:void 0},VN=()=>R1((e,t)=>({...wn,setNodes:n=>{const{nodeInternals:r,nodeOrigin:s,elevateNodesOnSelect:o}=t();e({nodeInternals:_a(n,r,s,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(s=>({...r,...s}))})},setDefaultNodesAndEdges:(n,r)=>{const s=typeof n<"u",o=typeof r<"u",i=s?_a(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:i,edges:o?r:[],hasDefaultNodes:s,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:s,fitViewOnInit:o,fitViewOnInitDone:i,fitViewOnInitOptions:l,domNode:a,nodeOrigin:u}=t(),c=a==null?void 0:a.querySelector(".react-flow__viewport");if(!c)return;const d=window.getComputedStyle(c),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((_,T)=>{const p=s.get(T.id);if(p!=null&&p.hidden)s.set(p.id,{...p,[Be]:{...p[Be],handleBounds:void 0}});else if(p){const g=Kc(T.nodeElement);!!(g.width&&g.height&&(p.width!==g.width||p.height!==g.height||T.forceUpdate))&&(s.set(p.id,{...p,[Be]:{...p[Be],handleBounds:{source:ap(".source",T.nodeElement,f,u),target:ap(".target",T.nodeElement,f,u)}},...g}),_.push({id:p.id,type:"dimensions",dimensions:g}))}return _},[]);qg(s,u);const x=i||o&&!i&&Jg(t,{initial:!0,...l});e({nodeInternals:new Map(s),fitViewOnInitDone:x}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,s=!1)=>{const{triggerNodeChanges:o}=t(),i=n.map(l=>{const a={id:l.id,type:"position",dragging:s};return r&&(a.positionAbsolute=l.positionAbsolute,a.position=l.position),a});o(i)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:s,hasDefaultNodes:o,nodeOrigin:i,getNodes:l,elevateNodesOnSelect:a}=t();if(n!=null&&n.length){if(o){const u=iN(n,l()),c=_a(u,s,i,a);e({nodeInternals:c})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:s,getNodes:o}=t();let i,l=null;r?i=n.map(a=>Cn(a,!0)):(i=Hr(o(),n),l=Hr(s,[])),si({changedNodes:i,changedEdges:l,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:s,getNodes:o}=t();let i,l=null;r?i=n.map(a=>Cn(a,!0)):(i=Hr(s,n),l=Hr(o(),[])),si({changedNodes:l,changedEdges:i,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:s,getNodes:o}=t(),i=n||o(),l=r||s,a=i.map(c=>(c.selected=!1,Cn(c.id,!1))),u=l.map(c=>Cn(c.id,!1));si({changedNodes:a,changedEdges:u,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:s}=t();r==null||r.scaleExtent([n,s]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:s}=t();r==null||r.scaleExtent([s,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(l=>l.selected).map(l=>Cn(l.id,!1)),i=n.filter(l=>l.selected).map(l=>Cn(l.id,!1));si({changedNodes:o,changedEdges:i,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(s=>{s.positionAbsolute=Xc(s.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:s,height:o,d3Zoom:i,d3Selection:l,translateExtent:a}=t();if(!i||!l||!n.x&&!n.y)return!1;const u=fn.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),c=[[0,0],[s,o]],d=i==null?void 0:i.constrain()(u,c,a);return i.transform(l,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:wn.connectionNodeId,connectionHandleId:wn.connectionHandleId,connectionHandleType:wn.connectionHandleType,connectionStatus:wn.connectionStatus,connectionStartHandle:wn.connectionStartHandle,connectionEndHandle:wn.connectionEndHandle}),reset:()=>e({...wn})}),Object.is),d0=({children:e})=>{const t=E.useRef(null);return t.current||(t.current=VN()),V.createElement(cE,{value:t.current},e)};d0.displayName="ReactFlowProvider";const f0=({children:e})=>E.useContext(Ml)?V.createElement(V.Fragment,null,e):V.createElement(d0,null,e);f0.displayName="ReactFlowWrapper";const GN={input:Vg,default:zu,output:Yg,group:td},YN={default:cl,straight:qc,step:Zc,smoothstep:Ol,simplebezier:Qc},KN=[0,0],XN=[15,15],QN={x:0,y:0,zoom:1},ZN={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},p0=E.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:s,nodeTypes:o=GN,edgeTypes:i=YN,onNodeClick:l,onEdgeClick:a,onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:x,onConnectEnd:_,onClickConnectStart:T,onClickConnectEnd:p,onNodeMouseEnter:g,onNodeMouseMove:y,onNodeMouseLeave:w,onNodeContextMenu:P,onNodeDoubleClick:O,onNodeDragStart:L,onNodeDrag:R,onNodeDragStop:F,onNodesDelete:D,onEdgesDelete:H,onSelectionChange:Z,onSelectionDragStart:U,onSelectionDrag:v,onSelectionDragStop:k,onSelectionContextMenu:N,onSelectionStart:M,onSelectionEnd:C,connectionMode:S=_r.Strict,connectionLineType:b=Pn.Bezier,connectionLineStyle:B,connectionLineComponent:j,connectionLineContainerStyle:Y,deleteKeyCode:Q="Backspace",selectionKeyCode:ne="Shift",selectionOnDrag:se=!1,selectionMode:fe=Eo.Full,panActivationKeyCode:W="Space",multiSelectionKeyCode:A=ul()?"Meta":"Control",zoomActivationKeyCode:I=ul()?"Meta":"Control",snapToGrid:G=!1,snapGrid:X=XN,onlyRenderVisibleElements:ie=!1,selectNodesOnDrag:le=!0,nodesDraggable:ce,nodesConnectable:he,nodesFocusable:oe,nodeOrigin:K=KN,edgesFocusable:z,edgesUpdatable:ee,elementsSelectable:$,defaultViewport:q=QN,minZoom:te=.5,maxZoom:ae=2,translateExtent:pe=Uu,preventScrolling:we=!0,nodeExtent:de,defaultMarkerColor:me="#b1b1b7",zoomOnScroll:ge=!0,zoomOnPinch:Ee=!0,panOnScroll:ye=!1,panOnScrollSpeed:Ae=.5,panOnScrollMode:xe=lr.Free,zoomOnDoubleClick:ut=!0,panOnDrag:je=!0,onPaneClick:nn,onPaneMouseEnter:Vt,onPaneMouseMove:ms,onPaneMouseLeave:Bl,onPaneScroll:gs,onPaneContextMenu:jl,children:sd,onEdgeContextMenu:Yn,onEdgeDoubleClick:_0,onEdgeMouseEnter:x0,onEdgeMouseMove:w0,onEdgeMouseLeave:S0,onEdgeUpdate:E0,onEdgeUpdateStart:N0,onEdgeUpdateEnd:T0,onReconnect:k0,onReconnectStart:C0,onReconnectEnd:I0,reconnectRadius:b0=10,edgeUpdaterRadius:P0=10,onNodesChange:A0,onEdgesChange:R0,noDragClassName:M0="nodrag",noWheelClassName:O0="nowheel",noPanClassName:od="nopan",fitView:L0=!1,fitViewOptions:$0,connectOnClick:B0=!0,attributionPosition:j0,proOptions:F0,defaultEdgeOptions:z0,elevateNodesOnSelect:D0=!0,elevateEdgesOnSelect:U0=!1,disableKeyboardA11y:id=!1,autoPanOnConnect:H0=!0,autoPanOnNodeDrag:W0=!0,connectionRadius:V0=20,isValidConnection:G0,onError:Y0,style:K0,id:ld,nodeDragThreshold:X0,...Q0},Z0)=>{const Fl=ld||"1";return V.createElement("div",{...Q0,style:{...K0,...ZN},ref:Z0,className:qe(["react-flow",s]),"data-testid":"rf__wrapper",id:ld},V.createElement(f0,null,V.createElement(WN,{onInit:u,onMove:c,onMoveStart:d,onMoveEnd:f,onNodeClick:l,onEdgeClick:a,onNodeMouseEnter:g,onNodeMouseMove:y,onNodeMouseLeave:w,onNodeContextMenu:P,onNodeDoubleClick:O,nodeTypes:o,edgeTypes:i,connectionLineType:b,connectionLineStyle:B,connectionLineComponent:j,connectionLineContainerStyle:Y,selectionKeyCode:ne,selectionOnDrag:se,selectionMode:fe,deleteKeyCode:Q,multiSelectionKeyCode:A,panActivationKeyCode:W,zoomActivationKeyCode:I,onlyRenderVisibleElements:ie,selectNodesOnDrag:le,defaultViewport:q,translateExtent:pe,minZoom:te,maxZoom:ae,preventScrolling:we,zoomOnScroll:ge,zoomOnPinch:Ee,zoomOnDoubleClick:ut,panOnScroll:ye,panOnScrollSpeed:Ae,panOnScrollMode:xe,panOnDrag:je,onPaneClick:nn,onPaneMouseEnter:Vt,onPaneMouseMove:ms,onPaneMouseLeave:Bl,onPaneScroll:gs,onPaneContextMenu:jl,onSelectionContextMenu:N,onSelectionStart:M,onSelectionEnd:C,onEdgeContextMenu:Yn,onEdgeDoubleClick:_0,onEdgeMouseEnter:x0,onEdgeMouseMove:w0,onEdgeMouseLeave:S0,onReconnect:k0??E0,onReconnectStart:C0??N0,onReconnectEnd:I0??T0,reconnectRadius:b0??P0,defaultMarkerColor:me,noDragClassName:M0,noWheelClassName:O0,noPanClassName:od,elevateEdgesOnSelect:U0,rfId:Fl,disableKeyboardA11y:id,nodeOrigin:K,nodeExtent:de}),V.createElement(zE,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:x,onConnectEnd:_,onClickConnectStart:T,onClickConnectEnd:p,nodesDraggable:ce,nodesConnectable:he,nodesFocusable:oe,edgesFocusable:z,edgesUpdatable:ee,elementsSelectable:$,elevateNodesOnSelect:D0,minZoom:te,maxZoom:ae,nodeExtent:de,onNodesChange:A0,onEdgesChange:R0,snapToGrid:G,snapGrid:X,connectionMode:S,translateExtent:pe,connectOnClick:B0,defaultEdgeOptions:z0,fitView:L0,fitViewOptions:$0,onNodesDelete:D,onEdgesDelete:H,onNodeDragStart:L,onNodeDrag:R,onNodeDragStop:F,onSelectionDrag:v,onSelectionDragStart:U,onSelectionDragStop:k,noPanClassName:od,nodeOrigin:K,rfId:Fl,autoPanOnConnect:H0,autoPanOnNodeDrag:W0,onError:Y0,connectionRadius:V0,isValidConnection:G0,nodeDragThreshold:X0}),V.createElement(jE,{onSelectionChange:Z}),sd,V.createElement(fE,{proOptions:F0,position:j0}),V.createElement(VE,{rfId:Fl,disableKeyboardA11y:id})))});p0.displayName="ReactFlow";const h0=({id:e,x:t,y:n,width:r,height:s,style:o,color:i,strokeColor:l,strokeWidth:a,className:u,borderRadius:c,shapeRendering:d,onClick:f,selected:h})=>{const{background:x,backgroundColor:_}=o||{},T=i||x||_;return V.createElement("rect",{className:qe(["react-flow__minimap-node",{selected:h},u]),x:t,y:n,rx:c,ry:c,width:r,height:s,fill:T,stroke:l,strokeWidth:a,shapeRendering:d,onClick:f?p=>f(p,e):void 0})};h0.displayName="MiniMapNode";var qN=E.memo(h0);const JN=e=>e.nodeOrigin,eT=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),Ea=e=>e instanceof Function?e:()=>e;function tT({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:s=2,nodeComponent:o=qN,onClick:i}){const l=Ce(eT,Ke),a=Ce(JN),u=Ea(t),c=Ea(e),d=Ea(n),f=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return V.createElement(V.Fragment,null,l.map(h=>{const{x,y:_}=dr(h,a).positionAbsolute;return V.createElement(o,{key:h.id,x,y:_,width:h.width,height:h.height,style:h.style,selected:h.selected,className:d(h),color:u(h),borderRadius:r,strokeColor:c(h),strokeWidth:s,shapeRendering:f,onClick:i,id:h.id})}))}var nT=E.memo(tT);const rT=200,sT=150,oT=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?mE(Ll(t,e.nodeOrigin),n):n,rfId:e.rfId}},iT="react-flow__minimap-desc";function m0({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:s="",nodeBorderRadius:o=5,nodeStrokeWidth:i=2,nodeComponent:l,maskColor:a="rgb(240, 240, 240, 0.6)",maskStrokeColor:u="none",maskStrokeWidth:c=1,position:d="bottom-right",onClick:f,onNodeClick:h,pannable:x=!1,zoomable:_=!1,ariaLabel:T="React Flow mini map",inversePan:p=!1,zoomStep:g=10,offsetScale:y=5}){const w=Ve(),P=E.useRef(null),{boundingRect:O,viewBB:L,rfId:R}=Ce(oT,Ke),F=(e==null?void 0:e.width)??rT,D=(e==null?void 0:e.height)??sT,H=O.width/F,Z=O.height/D,U=Math.max(H,Z),v=U*F,k=U*D,N=y*U,M=O.x-(v-O.width)/2-N,C=O.y-(k-O.height)/2-N,S=v+N*2,b=k+N*2,B=`${iT}-${R}`,j=E.useRef(0);j.current=U,E.useEffect(()=>{if(P.current){const ne=kt(P.current),se=A=>{const{transform:I,d3Selection:G,d3Zoom:X}=w.getState();if(A.sourceEvent.type!=="wheel"||!G||!X)return;const ie=-A.sourceEvent.deltaY*(A.sourceEvent.deltaMode===1?.05:A.sourceEvent.deltaMode?1:.002)*g,le=I[2]*Math.pow(2,ie);X.scaleTo(G,le)},fe=A=>{const{transform:I,d3Selection:G,d3Zoom:X,translateExtent:ie,width:le,height:ce}=w.getState();if(A.sourceEvent.type!=="mousemove"||!G||!X)return;const he=j.current*Math.max(1,I[2])*(p?-1:1),oe={x:I[0]-A.sourceEvent.movementX*he,y:I[1]-A.sourceEvent.movementY*he},K=[[0,0],[le,ce]],z=fn.translate(oe.x,oe.y).scale(I[2]),ee=X.constrain()(z,K,ie);X.transform(G,ee)},W=Eg().on("zoom",x?fe:null).on("zoom.wheel",_?se:null);return ne.call(W),()=>{ne.on("zoom",null)}}},[x,_,p,g]);const Y=f?ne=>{const se=$t(ne);f(ne,{x:se[0],y:se[1]})}:void 0,Q=h?(ne,se)=>{const fe=w.getState().nodeInternals.get(se);h(ne,fe)}:void 0;return V.createElement(Yc,{position:d,style:e,className:qe(["react-flow__minimap",t]),"data-testid":"rf__minimap"},V.createElement("svg",{width:F,height:D,viewBox:`${M} ${C} ${S} ${b}`,role:"img","aria-labelledby":B,ref:P,onClick:Y},T&&V.createElement("title",{id:B},T),V.createElement(nT,{onClick:Q,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:s,nodeStrokeWidth:i,nodeComponent:l}),V.createElement("path",{className:"react-flow__minimap-mask",d:`M${M-N},${C-N}h${S+N*2}v${b+N*2}h${-S-N*2}z - M${L.x},${L.y}h${L.width}v${L.height}h${-L.width}z`,fill:a,fillRule:"evenodd",stroke:u,strokeWidth:c,pointerEvents:"none"})))}m0.displayName="MiniMap";var lT=E.memo(m0);function aT(){return V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32"},V.createElement("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"}))}function uT(){return V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5"},V.createElement("path",{d:"M0 0h32v4.2H0z"}))}function cT(){return V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30"},V.createElement("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"}))}function dT(){return V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},V.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"}))}function fT(){return V.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},V.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"}))}const Wr=({children:e,className:t,...n})=>V.createElement("button",{type:"button",className:qe(["react-flow__controls-button",t]),...n},e);Wr.displayName="ControlButton";const pT=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom}),g0=({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:s,onZoomIn:o,onZoomOut:i,onFitView:l,onInteractiveChange:a,className:u,children:c,position:d="bottom-left"})=>{const f=Ve(),[h,x]=E.useState(!1),{isInteractive:_,minZoomReached:T,maxZoomReached:p}=Ce(pT,Ke),{zoomIn:g,zoomOut:y,fitView:w}=nd();if(E.useEffect(()=>{x(!0)},[]),!h)return null;const P=()=>{g(),o==null||o()},O=()=>{y(),i==null||i()},L=()=>{w(s),l==null||l()},R=()=>{f.setState({nodesDraggable:!_,nodesConnectable:!_,elementsSelectable:!_}),a==null||a(!_)};return V.createElement(Yc,{className:qe(["react-flow__controls",u]),position:d,style:e,"data-testid":"rf__controls"},t&&V.createElement(V.Fragment,null,V.createElement(Wr,{onClick:P,className:"react-flow__controls-zoomin",title:"zoom in","aria-label":"zoom in",disabled:p},V.createElement(aT,null)),V.createElement(Wr,{onClick:O,className:"react-flow__controls-zoomout",title:"zoom out","aria-label":"zoom out",disabled:T},V.createElement(uT,null))),n&&V.createElement(Wr,{className:"react-flow__controls-fitview",onClick:L,title:"fit view","aria-label":"fit view"},V.createElement(cT,null)),r&&V.createElement(Wr,{className:"react-flow__controls-interactive",onClick:R,title:"toggle interactivity","aria-label":"toggle interactivity"},_?V.createElement(fT,null):V.createElement(dT,null)),c)};g0.displayName="Controls";var hT=E.memo(g0),Ut;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Ut||(Ut={}));function mT({color:e,dimensions:t,lineWidth:n}){return V.createElement("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function gT({color:e,radius:t}){return V.createElement("circle",{cx:t,cy:t,r:t,fill:e})}const yT={[Ut.Dots]:"#91919a",[Ut.Lines]:"#eee",[Ut.Cross]:"#e2e2e2"},vT={[Ut.Dots]:1,[Ut.Lines]:1,[Ut.Cross]:6},_T=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function y0({id:e,variant:t=Ut.Dots,gap:n=20,size:r,lineWidth:s=1,offset:o=2,color:i,style:l,className:a}){const u=E.useRef(null),{transform:c,patternId:d}=Ce(_T,Ke),f=i||yT[t],h=r||vT[t],x=t===Ut.Dots,_=t===Ut.Cross,T=Array.isArray(n)?n:[n,n],p=[T[0]*c[2]||1,T[1]*c[2]||1],g=h*c[2],y=_?[g,g]:p,w=x?[g/o,g/o]:[y[0]/o,y[1]/o];return V.createElement("svg",{className:qe(["react-flow__background",a]),style:{...l,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:u,"data-testid":"rf__background"},V.createElement("pattern",{id:d+e,x:c[0]%p[0],y:c[1]%p[1],width:p[0],height:p[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${w[0]},-${w[1]})`},x?V.createElement(gT,{color:f,radius:g/o}):V.createElement(mT,{dimensions:y,color:f,lineWidth:s})),V.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${d+e})`}))}y0.displayName="Background";var xT=E.memo(y0);function Sn(e){return typeof e=="object"&&e!==null}function wT(e){if("leaky"in e||"max_queue"in e)return"input";if("num_buffers"in e||"buf_size"in e||"force_tcp"in e||"host"in e||"port"in e)return"output";const r=typeof e.name=="string"?e.name.toUpperCase():"",s=typeof e.address=="string"?e.address.toUpperCase():"";return r.includes("INPUT")||s.includes("/INPUT")?"input":r.includes("OUTPUT")||s.includes("/OUTPUT")?"output":"unknown"}function Na(e,t=null){if(!e)return[];const n=[];for(const[r,s]of Object.entries(e))!Sn(s)||typeof s.address!="string"||n.push({name:r,address:s.address,direction:wT(s),msgType:typeof s.msg_type=="string"?s.msg_type:null,collectionKind:t});return n.sort((r,s)=>r.address.localeCompare(s.address)),n}function v0(e){const t=new Map;for(const s of Object.values(e.sessions)){const o=Sn(s.metadata)?s.metadata:null,i=o&&Sn(o.components)?o.components:null;if(i)for(const[l,a]of Object.entries(i))!Sn(a)||t.has(l)||t.set(l,a)}const n=new Map,r=new Map;for(const[s,o]of t.entries()){const i=typeof o.name=="string"?o.name:s,l=typeof o.component_type=="string"?o.component_type:"Component",a=Array.isArray(o.children)?o.children.filter(f=>typeof f=="string"):[];if(a.length>0){const f=new Map;for(const h of Na(Sn(o.topics)?o.topics:null,"topic"))f.set(h.address,h);for(const h of Na(Sn(o.relays)?o.relays:null,"relay"))f.set(h.address,h);r.set(s,{address:s,name:i,componentType:l,streams:Array.from(f.values()).sort((h,x)=>h.address.localeCompare(x.address)),children:a})}const u=Sn(o.streams)?o.streams:null;if(!u)continue;const d=(Array.isArray(o.tasks)?o.tasks:[]).filter(Sn).map(f=>{if(typeof f.name!="string")return null;const h=Array.isArray(f.publishes)?f.publishes.filter(x=>typeof x=="string"):[];return{name:f.name,subscribes:typeof f.subscribes=="string"?f.subscribes:null,publishes:h}}).filter(f=>f!==null).sort((f,h)=>f.name.localeCompare(h.name));n.set(s,{address:s,name:i,componentType:l,streams:Na(u),tasks:d})}return{units:n,collections:r}}function ST(e,t){const n=new Map;for(const s of e)n.set(s,0);const r=Math.max(1,e.length);for(let s=0;sa&&(n.set(i.to,u),o=!0)}if(!o)break}return n}function Hu(e,t,n){if(n){const o=t.get(n);return o?o.children.filter(i=>e.has(i)||t.has(i)):[]}const r=new Set;for(const o of t.values())for(const i of o.children)r.add(i);const s=[...Array.from(t.keys()),...Array.from(e.keys())].filter(o=>!r.has(o));return s.length>0?s:Array.from(e.keys())}function $l(e){const t=new Map;for(const[n,r]of e.entries())for(const s of r.children)t.has(s)||t.set(s,n);return t}function ET(e,t){if(!t||!e.has(t))return[];const n=$l(e),r=[],s=new Set;let o=t;for(;o&&!s.has(o);)s.add(o),r.push(o),o=n.get(o);return r.reverse()}function NT(e,t,n){const r=n.get(e);return r?r.children.some(s=>t.has(s)||n.has(s)):!1}function Wu(e,t,n){if(e===t)return!0;const r=new Set;let s=e;for(;s&&!r.has(s);){r.add(s);const o=n.get(s);if(!o)return!1;if(o===t)return!0;s=o}return!1}function TT(e,t,n,r){const s=$l(n),o=new Map,i=(a,u)=>{o.set(a,u),o.set(He(a),u)};for(const a of t.values())for(const u of a.streams)i(u.address,a.address);for(const a of n.values())for(const u of a.streams)i(u.address,a.address);const l=new Set;for(const[a,u]of Object.entries(e.graph)){l.add(a);for(const c of u)l.add(c)}for(const a of l){const u=o.get(a);if(!u||!Wu(u,r,s))return!0}return!1}const Ta=320,ka=120,gp=["#94a3b8","#60a5fa","#22d3ee","#34d399"],kT=["rgba(226, 232, 240, 0.28)","rgba(219, 234, 254, 0.28)","rgba(207, 250, 254, 0.28)","rgba(209, 250, 229, 0.24)"],CT=88,IT=120,bT=72,PT=58,tt=100,Ne=30,tr=96,Ca=22,Ia=6,yp=10,AT=20,vp=240,ii=300,ba=168,Pa=74,_p=58,Ps=48,RT=87,MT=26,OT=30,LT=.36,$T=240,BT=.35,jT=1.8,FT=tt*2+tr+60;function zT(e,t,n){const r=Math.min(176,Math.max(104,e.length*7.4)),s=Math.min(112,Math.max(66,n(t).length*6.1+14));return r+s+RT+MT}function DT(e,t,n){const r=Math.min(220,Math.max(96,e.length*8)),s=Math.min(122,Math.max(66,n(t).length*6.1+14));return r+s+OT}function li(e,t,n,r){return e<=0?r:e*t+Math.max(0,e-1)*n+r}function ai(e,t=40){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}…`}function Vu(e){const t=He(e),n=t.split("/");return n.length<=3?t:`${n[n.length-2]}/${n[n.length-1]}`}function As(e){const t=e.split(".");return t[t.length-1]||e}function En(e,t){const n=e.trim().length>0?e.trim():Vu(t),r=n.split("/");return r.length>0?r[r.length-1]??n:n}function ct(e){if(!e)return null;const t=e.replace(/^builtins\./,""),n=t.split("."),r=n.length>0?n[n.length-1]:t;return r.length<=16?r:`${r.slice(0,15)}…`}function Ii(e){const t=e.split("/");return t.length<=2?e:t.slice(Math.max(0,t.length-3)).join("/")}function Aa(e,t,n){return[e,t,n].join(` -`)}function Kn(e,t){const n=[e.address];return e.msgType&&n.push(`Message Type: ${e.msgType}`),t==="collection"&&e.collectionKind==="topic"&&n.push("Collection Topic"),t==="collection"&&e.collectionKind==="relay"&&n.push("Collection Relay"),n.join(` -`)}function Rs(e,t,n){return n==="collection"&&e.collectionKind?"mono topology-stream-label is-collection":`mono topology-stream-label ${t}`}function Ms(e,t,n,r){return n==="collection"&&e.collectionKind?e.collectionKind==="topic"?t==="is-output"?{border:r?"1px solid #fb923c":"1px solid #f28e2b",background:r?"#2e1f10":"#fff1dd",color:r?"#fed7aa":"#8a4f10",borderRadius:999}:t==="is-input"?{border:r?"1px solid #f59e0b":"1px solid #f6a44d",background:r?"#2a2115":"#fff8ef",color:r?"#fdba74":"#8a4f10",borderRadius:999}:{border:r?"1px solid #fb923c":"1px solid #f8b66f",background:r?"#2a2115":"#fff8ef",color:r?"#fdba74":"#8a4f10",borderRadius:10}:t==="is-output"?{border:r?"1px solid #d8b4fe":"1px solid #b07aa1",background:r?"#2a1d3a":"#f8eef5",color:r?"#e9d5ff":"#6f3f66",borderRadius:999}:t==="is-input"?{border:r?"1px solid #c084fc":"1px solid #c194b7",background:r?"#251b33":"#fbf3f8",color:r?"#e9d5ff":"#6f3f66",borderRadius:999}:{border:r?"1px solid #c084fc":"1px solid #d3accb",background:r?"#251b33":"#fbf3f8",color:r?"#e9d5ff":"#6f3f66",borderRadius:10}:{border:t==="is-input"?r?"1px solid #818cf8":"1px solid #c7d2fe":t==="is-output"?r?"1px solid #22d3ee":"1px solid #7dd3fc":r?"1px solid #4b5563":"1px solid #cbd5e1",background:t==="is-input"?r?"#1d2644":"#eef2ff":t==="is-output"?r?"#0f2e37":"#ecfeff":r?"#182235":"#f8fafc",color:r?"#dbeafe":"#1e293b",borderRadius:t==="is-unknown"?8:999}}function Vr(e){return e.trim().toUpperCase().replace(/^INPUT_/,"").replace(/^OUTPUT_/,"").replace(/^TOPIC_/,"")}function UT(e){const t=new Set,n=new Map,r=new Map;for(const s of e){t.add(s.address);const o=He(s.address);n.set(o,s.address),r.set(Vr(s.name),s.address),r.set(Vr(En(s.name,s.address)),s.address),r.set(Vr(o),s.address);const i=o.split("/").pop();i&&r.set(Vr(i),s.address)}return{addressSet:t,withoutEndpointMap:n,normalizedNameMap:r}}function HT(e,t,n,r,s,o,i){const l=s+8,a=s+o,u=Math.max(l,Math.min(i-Ne-10,a-Ne-8)),c=Math.max(l,Math.min(u,Math.floor((i-Ne)/2))),d=e.map(T=>{const p=t.get(T),g=n.get(T);if(!p||!g)return null;const y=p.y-r;return{top:y,bottom:y+g.height}}).filter(T=>T!==null).sort((T,p)=>T.top-p.top);if(d.length===0)return c;let f=c,h=-1,x=l;for(const T of d){const p=T.top-x;p>=Ne+8&&p>h&&(h=p,f=x+Math.floor((p-Ne)/2)),x=Math.max(x,T.bottom)}const _=a-x;return _>=Ne+8&&_>h&&(f=x+Math.floor((_-Ne)/2)),Math.max(l,Math.min(u,f))}function ui(e,t){if(!e)return null;if(t.addressSet.has(e))return e;if(t.withoutEndpointMap.has(e))return t.withoutEndpointMap.get(e)??null;const n=e.split(":")[0];if(t.withoutEndpointMap.has(n))return t.withoutEndpointMap.get(n)??null;const r=Vr(e);if(t.normalizedNameMap.has(r))return t.normalizedNameMap.get(r)??null;const s=Vr(n.split("/").pop()??"");if(t.normalizedNameMap.has(s))return t.normalizedNameMap.get(s)??null;for(const o of t.addressSet)if(o.startsWith(`${e}:`)||o.startsWith(`${n}:`))return o;return null}function WT(e){return typeof e=="object"&&e!==null&&typeof e.x=="number"&&Number.isFinite(e.x)&&typeof e.y=="number"&&Number.isFinite(e.y)}function VT(e){if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return!1;const t=new Set;for(const n of e.nodes)if(!n||typeof n.id!="string"||n.id.length===0||t.has(n.id)||(t.add(n.id),!WT(n.position)))return!1;for(const n of e.nodes)if(typeof n.parentNode=="string"&&!t.has(n.parentNode))return!1;for(const n of e.edges)if(!n||typeof n.source!="string"||typeof n.target!="string"||!t.has(n.source)||!t.has(n.target))return!1;return!0}function GT(e,t,n,r,s,o){var fe,W;const i=r==="orthogonal"?"step":r==="smooth"?"smoothstep":"default",{units:l,collections:a}=v0(e),u=Hu(l,a,n),c=new Map,d=new Map;for(const A of u){const I=l.get(A);if(I){c.set(A,I);continue}const G=a.get(A);G&&d.set(A,G)}const f=new Set(c.keys()),h=new Set(d.keys()),x=$l(a),_=n?a.get(n)??null:null,T=_?`scope:${_.address}`:null,p=new Map,g=new Map;for(const A of l.values())for(const I of A.streams)p.set(I.address,A.address),p.set(He(I.address),A.address);for(const A of a.values())for(const I of A.streams)g.set(I.address,A.address),g.set(He(I.address),A.address);const y=new Map;for(const A of l.values())for(const I of A.streams)y.set(I.address,I.address),y.set(He(I.address),I.address);for(const A of a.values())for(const I of A.streams)y.set(I.address,I.address),y.set(He(I.address),I.address);const w=[];for(const[A,I]of Object.entries(e.graph))for(const G of I)w.push({from:y.get(A)??A,to:y.get(G)??G});const P=new Map,O=(A,I)=>{P.set(A,I),P.set(He(A),I)};for(const A of c.values())for(const I of A.streams)O(I.address,{ownerId:`unit:${A.address}`,ownerKind:"unit"});for(const A of d.values())for(const I of A.streams)O(I.address,{ownerId:`collection:${A.address}`,ownerKind:"collection"});const L=new Set(P.keys()),R=w.filter(A=>L.has(A.from)||L.has(A.to)),F=new Set(L);for(const A of R)F.add(A.from),F.add(A.to);const D=new Set,H=new Map;for(const A of c.values()){const I=`unit:${A.address}`;D.add(I),H.set(I,A.name)}for(const A of d.values()){const I=`collection:${A.address}`;D.add(I),H.set(I,A.name)}for(const A of F){if(P.has(A))continue;const I=g.get(A),G=p.get(A);if(I&&h.has(I)){O(A,{ownerId:`collection:${I}`,ownerKind:"collection"});continue}if(G&&f.has(G)){O(A,{ownerId:`unit:${G}`,ownerKind:"unit"});continue}if(_&&T&&(I&&Wu(I,_.address,x)||G&&Wu(G,_.address,x))){O(A,{ownerId:T,ownerKind:"scope_collection"});continue}const X=G??I??null;if(X){let le=x.get(X)??null;for(;le;){if(h.has(le)){O(A,{ownerId:`collection:${le}`,ownerKind:"collection_proxy"});break}le=x.get(le)??null}if(P.has(A))continue}const ie=`orphan:${A}`;O(A,{ownerId:ie,ownerKind:"orphan"}),D.add(ie),H.set(ie,Vu(A))}const Z=[],U=new Set;for(const A of R){const I=(fe=P.get(A.from))==null?void 0:fe.ownerId,G=(W=P.get(A.to))==null?void 0:W.ownerId;if(!I||!G||I===G||!D.has(I)||!D.has(G))continue;const X=`${I}->${G}`;U.has(X)||(U.add(X),Z.push({from:I,to:G}))}const v=Array.from(D).sort((A,I)=>{const G=H.get(A)??A,X=H.get(I)??I;return G.localeCompare(X)}),k=ST(v,Z),N=new Map;for(const A of v){const I=k.get(A)??0,G=N.get(I);G?G.push(A):N.set(I,[A])}const M=new Map;for(const A of c.values()){const I=A.streams.filter($=>$.direction==="input").length,G=A.streams.filter($=>$.direction==="output").length,X=A.streams.filter($=>$.direction==="unknown").length,ie=A.tasks.length,le=Math.max(1,I,G,ie,X),ce=DT(A.name,A.componentType,As),he=li(le,tt,Ia,22),oe=li(ie,tr,yp,AT),K=t==="lr"?Math.max(FT,ce):Math.max(220,ce,he,oe);if(t==="lr"){const $=Math.max(1,I,G,ie),q=Math.max(126,Ps+16+$*30+(X>0?Ne+12:0)+12);M.set(`unit:${A.address}`,{width:K,height:q});continue}const z=Math.max(1,(I>0?1:0)+(ie>0?1:0)+(X>0?1:0)+(G>0?1:0)),ee=Math.max(216,Ps+18+z*Ne+Math.max(0,z-1)*12+16);M.set(`unit:${A.address}`,{width:K,height:ee})}for(const A of d.values()){const I=A.streams.filter(K=>K.direction==="input").length,G=A.streams.filter(K=>K.direction==="output").length,X=A.streams.filter(K=>K.direction==="unknown").length,ie=Math.max(1,I,G,X),le=Math.max(t==="lr"?ii:300,li(ie,tt,Ia,22)),ce=zT(A.name,A.componentType,As),he=Math.max(le,ce),oe=t==="lr"?Math.max(124,Pa+16+Math.max(1,I,G)*30+(X>0?Ne+12:0)+12):Math.max(176,Pa+14+Math.max(1,(I>0?1:0)+(X>0?1:0)+(G>0?1:0))*Ne+12);M.set(`collection:${A.address}`,{width:he,height:oe})}for(const A of v)M.has(A)||M.set(A,{width:vp,height:74});const C=new Map,S=Array.from(N.keys()).sort((A,I)=>A-I);if(t==="tb"){let A=28;for(const I of S){const G=N.get(I)??[];let X=24,ie=0;for(const le of G){const ce=M.get(le)??{width:Ta,height:ka};C.set(le,{x:X,y:A}),X+=ce.width+bT,ie=Math.max(ie,ce.height)}A+=ie+CT}}else{let A=24;for(const I of S){const G=N.get(I)??[];let X=28,ie=0;for(const le of G){const ce=M.get(le)??{width:Ta,height:ka};C.set(le,{x:A,y:X}),X+=ce.height+PT,ie=Math.max(ie,ce.width)}A+=ie+IT}}const b=[],B=[],j={stroke:s?"#8fa3bc":"#475569",strokeWidth:1.5},Y={type:xr.ArrowClosed,width:12,height:12,color:s?"#8fa3bc":"#475569"};function Q(A,I,G,X,ie,le,ce,he){if(G.length===0)return;const oe=I.width-22,K=G.length*tt,z=G.length>1?Math.max(6,Math.min(16,Math.floor((oe-K)/(G.length-1)))):0,ee=K+z*Math.max(0,G.length-1),$=11+Math.max(0,Math.floor((oe-ee)/2));G.forEach((q,te)=>{const ae=Ms(q,ie,le,s),pe=$+te*(tt+z);he.push({id:`stream:${q.address}`,parentNode:A,extent:"parent",draggable:!1,data:{label:m.jsxs("span",{className:Rs(q,ie,le),title:Kn(q,le),children:[m.jsx("span",{className:"topology-stream-name",children:En(q.name,q.address)}),ct(q.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(q.msgType),"]"]}):null]})},position:{x:pe,y:X},sourcePosition:ce==="tb"?re.Bottom:re.Right,targetPosition:ce==="tb"?re.Top:re.Left,style:{width:tt,height:Ne,borderRadius:ae.borderRadius,border:ae.border,background:ae.background,color:ae.color,fontSize:8,padding:"0 6px"}})})}if(_&&T){const A=v.filter(ge=>ge.startsWith("unit:")||ge.startsWith("collection:"));let I=24,G=32,X=24+ii,ie=32+ba;if(A.length>0){I=Number.POSITIVE_INFINITY,G=Number.POSITIVE_INFINITY,X=Number.NEGATIVE_INFINITY,ie=Number.NEGATIVE_INFINITY;for(const ge of A){const Ee=C.get(ge),ye=M.get(ge);!Ee||!ye||(I=Math.min(I,Ee.x),G=Math.min(G,Ee.y),X=Math.max(X,Ee.x+ye.width),ie=Math.max(ie,Ee.y+ye.height))}(!Number.isFinite(I)||!Number.isFinite(G))&&(I=24,G=32,X=24+ii,ie=32+ba)}const le=_.streams.filter(ge=>ge.direction==="input"),ce=_.streams.filter(ge=>ge.direction==="output"),he=_.streams.filter(ge=>ge.direction==="unknown"),oe=Math.max(1,le.length,ce.length,he.length),K=li(oe,tt,Ia,24),z=le.length>0,ee=ce.length>0,$=t==="lr"?72:76,q=t==="lr"?108:64,te=28,ae=t==="lr"?Math.max(q,$+Math.max(1,le.length,ce.length)*30+(he.length>0?Ne+10:0)+8):z?Math.max(q,$+Ne+8):q,pe=t==="tb"?ee?Math.max(_p,Ne+20):20:_p,we=Math.max(0,ie-G),de={x:I-te,y:G-ae},me={width:Math.max(360,X-I+te*2,K+te*2),height:Math.max(180,we+ae+pe)};if(A.length>0){const ge=(I+X)/2,Ee=de.x+te,ye=de.x+me.width-te,Ae=(Ee+ye)/2,xe=Math.round(Ae-ge);if(xe!==0)for(const ut of A){const je=C.get(ut);je&&C.set(ut,{x:je.x+xe,y:je.y})}}if(b.push({id:T,position:de,sourcePosition:t==="tb"?re.Bottom:re.Right,targetPosition:t==="tb"?re.Top:re.Left,data:{label:m.jsxs("div",{className:"topology-collection-label topology-collection-label--scope",title:Aa(_.name,_.address,_.componentType),children:[m.jsxs("span",{className:"topology-title-row topology-title-row--collection",children:[m.jsxs("span",{className:"topology-title-row",children:[m.jsx("strong",{children:_.name}),m.jsx("span",{className:"topology-unit-type",title:_.componentType,children:As(_.componentType)})]}),m.jsx("button",{type:"button","data-scope-up":"true",className:"topology-collection-scope-up-btn nodrag nopan",title:"Go up one scope","aria-label":`Go up from ${_.name}`,onPointerDown:ge=>{ge.stopPropagation()},onMouseDown:ge=>{ge.stopPropagation()},onClick:ge=>{var Ee;ge.stopPropagation(),(Ee=o==null?void 0:o.goUpFromScope)==null||Ee.call(o,_.address)},children:"↑ Up"})]}),m.jsx("span",{className:"mono",children:Ii(_.address)})]})},style:{width:me.width,height:me.height,border:`2px dashed ${s?"#4b647e":gp[0]}`,borderRadius:14,background:s?"rgba(15, 23, 42, 0.45)":"rgba(226, 232, 240, 0.24)",color:s?"#e2e8f0":"#0f172a",padding:10,zIndex:-1},draggable:!1,selectable:!1}),t==="lr"){const ye=Math.max(1,le.length,ce.length)*30,Ae=Math.max($,ae-ye-8);le.forEach((xe,ut)=>{const je=Ms(xe,"is-input","collection",s);b.push({id:`stream:${xe.address}`,parentNode:T,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:Rs(xe,"is-input","collection"),title:Kn(xe,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(xe.name,xe.address)}),ct(xe.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(xe.msgType),"]"]}):null]})},position:{x:12,y:Ae+ut*30},style:{width:tt,height:Ne,borderRadius:je.borderRadius,border:je.border,background:je.background,color:je.color,padding:"0 6px"}})}),ce.forEach((xe,ut)=>{const je=Ms(xe,"is-output","collection",s);b.push({id:`stream:${xe.address}`,parentNode:T,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:Rs(xe,"is-output","collection"),title:Kn(xe,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(xe.name,xe.address)}),ct(xe.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(xe.msgType),"]"]}):null]})},position:{x:me.width-tt-12,y:Ae+ut*30},style:{width:tt,height:Ne,borderRadius:je.borderRadius,border:je.border,background:je.background,color:je.color,padding:"0 6px"}})}),he.length>0&&Q(T,me,he,56+Math.max(le.length,ce.length)*30+4,"is-unknown","collection",t,b)}else{const ge=Math.max($,ae-Ne-8),Ee=ae+we,ye=Math.min(me.height-Ne-10,Ee+Math.max(6,Math.floor((pe-Ne)/2)));if(Q(T,me,le,ge,"is-input","collection",t,b),Q(T,me,ce,ye,"is-output","collection",t,b),he.length>0){const Ae=HT(A,C,M,de.y,ae,we,me.height);Q(T,me,he,Ae,"is-unknown","collection",t,b)}}}for(const A of d.values()){const I=`collection:${A.address}`,G=C.get(I)??{x:0,y:0},X=M.get(I)??{width:ii,height:ba};b.push({id:I,position:G,sourcePosition:t==="tb"?re.Bottom:re.Right,targetPosition:t==="tb"?re.Top:re.Left,data:{label:m.jsxs("div",{className:"topology-collection-label",title:Aa(A.name,A.address,A.componentType),children:[m.jsxs("span",{className:"topology-title-row topology-title-row--collection",children:[m.jsxs("span",{className:"topology-title-row",children:[m.jsx("strong",{children:A.name}),m.jsx("span",{className:"topology-unit-type",title:A.componentType,children:As(A.componentType)})]}),m.jsx("button",{type:"button","data-open-collection":"true",className:"topology-collection-open-btn nodrag nopan",title:"Open collection scope","aria-label":`Open ${A.name} scope`,onPointerDown:he=>{he.stopPropagation()},onMouseDown:he=>{he.stopPropagation()},onClick:he=>{var oe;he.stopPropagation(),(oe=o==null?void 0:o.openCollectionScope)==null||oe.call(o,A.address)},children:"Open"})]}),m.jsx("span",{className:"mono",children:Ii(A.address)})]})},style:{width:X.width,height:X.height,border:`2px dashed ${s?"#4f8ccf":gp[1]}`,borderRadius:12,background:s?"rgba(30, 58, 95, 0.34)":kT[1],color:s?"#e2e8f0":"#0f172a",padding:10}});const ie=A.streams.filter(he=>he.direction==="input"),le=A.streams.filter(he=>he.direction==="output"),ce=A.streams.filter(he=>he.direction==="unknown");if(t==="lr"){const oe=Pa+6;ie.forEach((K,z)=>{const ee=Ms(K,"is-input","collection",s);b.push({id:`stream:${K.address}`,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:Rs(K,"is-input","collection"),title:Kn(K,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(K.name,K.address)}),ct(K.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(K.msgType),"]"]}):null]})},position:{x:10,y:oe+z*30},style:{width:tt,height:Ne,borderRadius:ee.borderRadius,border:ee.border,background:ee.background,color:ee.color,padding:"0 6px"}})}),le.forEach((K,z)=>{const ee=Ms(K,"is-output","collection",s);b.push({id:`stream:${K.address}`,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:Rs(K,"is-output","collection"),title:Kn(K,"collection"),children:[m.jsx("span",{className:"topology-stream-name",children:En(K.name,K.address)}),ct(K.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(K.msgType),"]"]}):null]})},position:{x:X.width-tt-10,y:oe+z*30},style:{width:tt,height:Ne,borderRadius:ee.borderRadius,border:ee.border,background:ee.background,color:ee.color,padding:"0 6px"}})}),ce.length>0&&Q(I,X,ce,X.height-Ne-10,"is-unknown","collection",t,b)}else{const oe=Math.max(86+Ne+10,X.height-Ne-12);Q(I,X,ie,86,"is-input","collection",t,b),Q(I,X,le,oe,"is-output","collection",t,b),ce.length>0&&Q(I,X,ce,Math.floor((X.height-Ne)/2)+14,"is-unknown","collection",t,b)}}for(const A of c.values()){const I=`unit:${A.address}`,G=C.get(I)??{x:0,y:0},X=M.get(I)??{width:Ta,height:ka},ie=A.streams.filter(K=>K.direction==="input"),le=A.streams.filter(K=>K.direction==="output"),ce=A.streams.filter(K=>K.direction==="unknown"),he=new Set(A.streams.map(K=>K.address)),oe=UT(A.streams);if(b.push({id:I,position:G,data:{label:m.jsxs("div",{className:"topology-unit-label",children:[m.jsxs("span",{className:"topology-title-row",title:Aa(A.name,A.address,A.componentType),children:[m.jsx("strong",{children:A.name}),m.jsx("span",{className:"topology-unit-type",title:A.componentType,children:As(A.componentType)})]}),m.jsx("span",{className:"mono topology-unit-address",title:A.address,children:ai(Ii(A.address),34)})]})},style:{width:X.width,height:X.height,border:s?"1px solid #3b82f6":"1px solid #93c5fd",borderRadius:12,background:s?"#0f1f35":"#f8fbff",padding:10}}),t==="lr"){const K=Ps+6;ie.forEach((z,ee)=>{b.push({id:`stream:${z.address}`,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:"mono topology-stream-label is-input",title:Kn(z,"unit"),children:[m.jsx("span",{className:"topology-stream-name",children:En(z.name,z.address)}),ct(z.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(z.msgType),"]"]}):null]})},position:{x:10,y:K+ee*30},style:{width:tt,height:Ne,borderRadius:999,border:s?"1px solid #818cf8":"1px solid #c7d2fe",background:s?"#1d2644":"#eef2ff",padding:"0 6px"}})}),le.forEach((z,ee)=>{b.push({id:`stream:${z.address}`,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsxs("span",{className:"mono topology-stream-label is-output",title:Kn(z,"unit"),children:[m.jsx("span",{className:"topology-stream-name",children:En(z.name,z.address)}),ct(z.msgType)?m.jsxs("span",{className:"topology-stream-type",children:["[",ct(z.msgType),"]"]}):null]})},position:{x:X.width-tt-10,y:K+ee*30},style:{width:tt,height:Ne,borderRadius:999,border:s?"1px solid #22d3ee":"1px solid #7dd3fc",background:s?"#0f2e37":"#ecfeff",padding:"0 6px"}})}),A.tasks.forEach((z,ee)=>{const $=`task:${A.address}:${z.name}`,q=ui(z.subscribes,oe),te=Array.from(new Set(z.publishes.map(ae=>ui(ae,oe)).filter(ae=>ae!==null)));b.push({id:$,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Right,targetPosition:re.Left,data:{label:m.jsx("span",{className:"mono topology-task-label",title:z.name,children:ai(z.name,15)})},position:{x:Math.floor((X.width-tr)/2),y:K+ee*30+4},style:{width:tr,height:Ca,borderRadius:999,border:s?"1px solid #41536c":"1px solid #dbe2ea",background:s?"#1a273a":"#f1f5f9",padding:"0 6px"}}),q&&he.has(q)&&B.push({id:`edge:internal:${A.address}:${z.name}:sub`,source:`stream:${q}`,target:$,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:Y,style:j});for(const ae of te)he.has(ae)&&B.push({id:`edge:internal:${A.address}:${z.name}:${ae}`,source:$,target:`stream:${ae}`,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:Y,style:j})}),ce.length>0&&Q(I,X,ce,X.height-Ne-8,"is-unknown","unit",t,b)}else{const K=Ps+Ne+12,z=X.height-Ne-12,ee=z-8,$=K+Math.max(0,Math.floor((ee-K-Ca)/2));Q(I,X,ie,Ps+2,"is-input","unit",t,b),Q(I,X,le,z,"is-output","unit",t,b),ce.length>0&&Q(I,X,ce,$+28,"is-unknown","unit",t,b);const q=A.tasks.length,te=X.width-20,ae=q*tr,pe=q>1?Math.max(yp,Math.min(22,Math.floor((te-ae)/(q-1)))):0,we=ae+pe*Math.max(0,q-1),de=10+Math.max(0,Math.floor((te-we)/2));A.tasks.forEach((me,ge)=>{const Ee=`task:${A.address}:${me.name}`,ye=ui(me.subscribes,oe),Ae=Array.from(new Set(me.publishes.map(xe=>ui(xe,oe)).filter(xe=>xe!==null)));b.push({id:Ee,parentNode:I,extent:"parent",draggable:!1,sourcePosition:re.Bottom,targetPosition:re.Top,data:{label:m.jsx("span",{className:"mono topology-task-label",title:me.name,children:ai(me.name,15)})},position:{x:de+ge*(tr+pe),y:$},style:{width:tr,height:Ca,borderRadius:999,border:s?"1px solid #41536c":"1px solid #dbe2ea",background:s?"#1a273a":"#f1f5f9",padding:"0 6px"}}),ye&&he.has(ye)&&B.push({id:`edge:internal:${A.address}:tb:${me.name}:sub`,source:`stream:${ye}`,target:Ee,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:Y,style:j});for(const xe of Ae)he.has(xe)&&B.push({id:`edge:internal:${A.address}:tb:${me.name}:${xe}`,source:Ee,target:`stream:${xe}`,type:i,zIndex:20,className:"topology-internal-edge",markerEnd:Y,style:j})})}}for(const A of F){const I=P.get(A);if(I&&I.ownerKind!=="orphan")continue;const G=`orphan:${A}`,X=C.get(G)??{x:0,y:0};b.push({id:`stream:${A}`,position:X,sourcePosition:t==="tb"?re.Bottom:re.Right,targetPosition:t==="tb"?re.Top:re.Left,data:{label:m.jsxs("div",{className:"mono topology-orphan-label",children:[m.jsx("strong",{children:Vu(A)}),m.jsx("span",{children:ai(A,54)})]})},style:{width:vp,border:s?"1px solid #41536c":"1px solid #dbe2ea",borderRadius:10,background:s?"#111c2e":"#ffffff",padding:6}})}const ne=A=>{const I=P.get(A);return I?I.ownerKind==="unit"||I.ownerKind==="collection"||I.ownerKind==="scope_collection"||I.ownerKind==="orphan"?`stream:${A}`:I.ownerId:`stream:${A}`},se=A=>{var I;return((I=P.get(A))==null?void 0:I.ownerId)??null};for(const A of R){const I=ne(A.from),G=ne(A.to);if(I===G)continue;const X=se(A.from),ie=se(A.to);if(!(X&&ie&&X===ie&&X.startsWith("scope:"))&&!(X&&ie&&X===ie&&X.startsWith("collection:"))){if(X&&ie&&X===ie&&X.startsWith("unit:")){const le=c.get(X.slice(5));if(le&&le.tasks.length>0)continue}B.push({id:`edge:${A.from}->${A.to}`,source:I,target:G,type:i,zIndex:1,markerEnd:{type:xr.ArrowClosed,width:12,height:12,color:s?"#8fa3bc":"#64748b"},style:{stroke:s?"#8fa3bc":"#64748b",strokeWidth:1.2}})}}return{nodes:b,edges:B}}function YT(e){const t=new Map;if(!e)return t;for(const n of e.units.values())for(const r of n.streams)t.set(r.address,r.address),t.set(He(r.address),r.address);for(const n of e.collections.values())for(const r of n.streams)t.set(r.address,r.address),t.set(He(r.address),r.address);return t}function KT(e,t){const n=new Set;for(const r of e){const s=t.get(r)??t.get(He(r))??null;s&&(n.add(s),n.add(He(s)))}return n}function XT(e,t,n){if(!e||t.size===0)return t;const r=new Map;for(const[l,a]of Object.entries(e.graph)){const u=n.get(l)??n.get(He(l))??l,c=r.get(u)??[];for(const d of a){const f=n.get(d)??n.get(He(d))??d;c.push(f)}r.set(u,c)}const s=new Set,o=Array.from(t);for(;o.length>0;){const l=o.shift();if(!l||s.has(l))continue;s.add(l);const a=r.get(l)??[];for(const u of a)s.has(u)||o.push(u)}const i=new Set;for(const l of s)i.add(l),i.add(He(l));return i}function QT(e,t){if(t.size===0||e.edges.length===0)return e;const n=a=>{if(!a)return!1;const u=He(a);return t.has(a)||t.has(u)},r=new Map;e.edges.forEach((a,u)=>{const c=r.get(a.source);c?c.push(u):r.set(a.source,[u])});const s=new Set,o=new Set,i=[],l=a=>{o.has(a)||(o.add(a),i.push(a))};for(e.edges.forEach((a,u)=>{const c=a.source.startsWith("stream:")?a.source.slice(7):null,d=ZT(a.id);n(c??d)&&(s.add(u),l(a.target))});i.length>0;){const a=i.shift();if(!a)continue;const u=r.get(a);if(!(!u||u.length===0))for(const c of u)s.has(c)||(s.add(c),l(e.edges[c].target))}return s.size===0?e:{nodes:e.nodes,edges:e.edges.map((a,u)=>{if(!s.has(u)||typeof a.className=="string"&&a.className.includes("topology-internal-edge"))return a;const d=typeof a.markerEnd=="object"&&a.markerEnd!==null?{...a.markerEnd,color:"#2563eb"}:{type:xr.ArrowClosed,width:12,height:12,color:"#2563eb"};return{...a,animated:!0,markerEnd:d,style:{...a.style??{},stroke:"#2563eb",strokeWidth:1.7}}})}}function ZT(e){if(!e.startsWith("edge:")||e.startsWith("edge:internal:"))return null;const t=e.slice(5),n=t.indexOf("->");if(n<=0)return null;const r=t.slice(0,n);return r.length>0?r:null}function qT(e){const t=new Map;if(!e)return t;for(const n of e.units.values())for(const r of n.streams){const s={direction:r.direction,unitAddress:n.address};t.set(r.address,s),t.set(He(r.address),s)}return t}function JT(e){const t=new Map;if(!e)return t;const n=(r,s)=>{const o=s.split(":").slice(1).join(":");o.length>0&&!t.has(o)&&t.set(o,r)};for(const r of e.units.values())for(const s of r.streams)n(r.address,s.address);for(const r of e.collections.values())for(const s of r.streams)n(r.address,s.address);return t}function e2(e,t,n){if(!e)return null;const{topic:r,endpointToken:s}=zc(n);let o=-1,i=null;const l=(a,u,c)=>{const d=t2(t,u,c,r,s);d>o&&(o=d,i=a)};for(const a of e.units.values())for(const u of a.streams)l(a.address,u.address,u.direction);for(const a of e.collections.values())for(const u of a.streams)l(a.address,u.address,u.direction);return o>0?i:null}function t2(e,t,n,r,s){if(e==="publisher"&&n!=="output"||e==="subscriber"&&n!=="input")return-1;let o=0;const i=He(t);return r.length>0&&(i===r?o+=12:t.startsWith(`${r}:`)?o+=8:t.includes(r)&&(o+=2)),s.length>0&&(t.endsWith(`:${s}`)?o+=14:t.includes(s)&&(o+=7)),o}function n2(e,t,n){if(e.kind!=="publisher"&&e.kind!=="subscriber")return null;const r=e.streamAddress.split(":").slice(1).join(":");return e.unitAddress??t.get(r)??n(e.kind,e.streamAddress)??null}function r2(e,t,n,r){if(e.kind==="unit")return`unit:${e.unitAddress}`;if(e.kind==="collection")return`collection:${e.collectionAddress}`;if(t&&(r!=null&&r.units.has(t)))return`unit:${t}`;if(t&&(r!=null&&r.collections.has(t)))return`collection:${t}`;const s=e.streamAddress;if(!s)return null;const o=s.split(":").slice(1).join(":"),i=s.split(":")[0]??"",l=n.nodes.find(a=>{if(!a.id.startsWith("stream:"))return!1;const u=a.id.slice(7);return u.includes(o)||u.startsWith(i)});return(l==null?void 0:l.id)??null}function s2({autoFocusOnSelection:e,focusSelection:t,focusRequestId:n,flowInitTick:r,flowInstanceRef:s,flowData:o,topologyComponents:i,activeScope:l,parentCollectionByAddress:a,componentAddressByEndpointId:u,componentAddressByStreamSelection:c,setScopeCollectionAddress:d}){const f=E.useRef(0),h=E.useRef(null),x=E.useRef(null);E.useEffect(()=>{if(!e||!t||n<=0||f.current===n||!s.current)return;const T=n2(t,u,c),p=t.kind==="unit"?t.unitAddress:t.kind==="collection"?t.collectionAddress:T;if(p&&i){const P=a.get(p)??null;if(P!==l){h.current=n,d(P);return}}const g=r2(t,T,o,i);if(!g||!o.nodes.some(P=>P.id===g))return;const y=()=>{const P=s.current;if(!P){x.current=null;return}P.fitView({nodes:[{id:g}],padding:LT,duration:$T,minZoom:BT,maxZoom:jT}),f.current=n,h.current=null,x.current=null};if(h.current===n){if(x.current===n)return;x.current=n,requestAnimationFrame(()=>{requestAnimationFrame(y)});return}y()},[l,e,u,c,o,r,n,t,s,a,d,i])}function o2(e){return Object.values(e).reduce((t,n)=>t+n.length,0)}function i2({graphSnapshot:e,profilingSnapshot:t=null,recentEvents:n,immersive:r=!1,showLegend:s=!0,showMiniMap:o=!0,darkMode:i=!1,defaultLayout:l="tb",edgeConnectorStyle:a="curved",autoFitOnLayoutScopeChange:u=!0,autoFocusOnSelection:c=!0,focusSelection:d=null,focusRequestId:f=0,onEntitySelect:h}){var ee;const x=E.useRef(null),_=E.useRef(null),T=E.useRef(new Map),p=E.useRef(""),g=E.useRef(null),y=E.useRef(new Map),[w,P]=E.useState(!1),[O,L]=E.useState(0),[R,F]=E.useState(null),[D,H]=E.useState([]),Z=l;E.useEffect(()=>{if(!t){y.current=new Map,H([]);return}const $=y.current,q=new Map,te=new Set;for(const we of Object.values(t)){const de=we.process_id;for(const me of Object.values(we.publishers)){const ge=typeof me.messages_published_total=="number"&&Number.isFinite(me.messages_published_total)?me.messages_published_total:0,Ee=`${de}:${me.endpoint_id}`,ye=$.get(Ee);ye!==void 0&&ge>ye&&te.add(`${me.topic}:${me.endpoint_id}`),q.set(Ee,ge)}}y.current=q;const ae=Array.from(te).sort(),pe=ae.join("|");pe!==p.current&&(p.current=pe,H(ae))},[t]);const U=E.useMemo(()=>e?v0(e):null,[e]),v=E.useMemo(()=>U?$l(U.collections):new Map,[U]),k=E.useMemo(()=>U?ET(U.collections,R):[],[U,R]),N=E.useMemo(()=>qT(U),[U]),M=E.useMemo(()=>JT(U),[U]),C=E.useMemo(()=>($,q)=>e2(U,$,q),[U]),S=E.useMemo(()=>YT(U),[U]),b=E.useMemo(()=>KT(D,S),[D,S]),B=E.useMemo(()=>XT(e,b,S),[b,S,e]),j=k.length>0?k[k.length-1]:null,Y=E.useCallback($=>{U!=null&&U.collections.has($)&&F($)},[U]),Q=E.useCallback($=>{F(v.get($)??null)},[v]),ne=`${Z}:${j??"root"}`,se=E.useMemo(()=>e?GT(e,Z,j,a,i,{openCollectionScope:Y,goUpFromScope:Q}):{nodes:[],edges:[]},[e,Z,j,a,i,Y,Q]),fe=E.useMemo(()=>{if(se.nodes.length>0&&VT(se))return T.current.set(ne,se),se;const $=T.current.get(ne);return $&&$.nodes.length>0?$:se},[se,ne]),W=E.useMemo(()=>QT(fe,B),[B,fe]),A=$=>{$.startsWith("collection:")&&Y($.slice(11))},I=$=>{if($.startsWith("unit:")){h==null||h({kind:"unit",unitAddress:$.slice(5)});return}if($.startsWith("collection:")){h==null||h({kind:"collection",collectionAddress:$.slice(11)});return}if($.startsWith("stream:")){const q=$.slice(7),te=N.get(q)??N.get(He(q));if(!te){h==null||h(null);return}if(te.direction==="output"){h==null||h({kind:"publisher",streamAddress:q,unitAddress:te.unitAddress});return}if(te.direction==="input"){h==null||h({kind:"subscriber",streamAddress:q,unitAddress:te.unitAddress});return}}h==null||h(null)};if(E.useEffect(()=>{!U||!R||U.collections.has(R)||F(null)},[R,U]),E.useEffect(()=>{if(!U||!e){g.current=null;return}const $=Hu(U.units,U.collections,null),q=$.length===1?$[0]:null,te=q!==null&&TT(e,U.units,U.collections,q),ae=q!==null&&U.collections.has(q)&&NT(q,U.units,U.collections)&&!te,pe=`${$.slice().sort().join("|")}::${ae?"ready":"wait"}`;g.current!==pe&&(g.current=pe,R===null&&(!ae||!q||F(q)))},[e,R,U]),E.useEffect(()=>{if(!U||!R)return;Hu(U.units,U.collections,R).length===0&&F(null)},[R,U]),s2({autoFocusOnSelection:c,focusSelection:d,focusRequestId:f,flowInitTick:O,flowInstanceRef:_,flowData:fe,topologyComponents:U,activeScope:j,parentCollectionByAddress:v,componentAddressByEndpointId:M,componentAddressByStreamSelection:C,setScopeCollectionAddress:F}),E.useEffect(()=>{const $=()=>{var ae;const q=((ae=x.current)==null?void 0:ae.closest(".dashboard-layout"))??x.current,te=document.fullscreenElement;if(!q||!te){P(!1);return}P(te===q||te.contains(q))};return document.addEventListener("fullscreenchange",$),()=>{document.removeEventListener("fullscreenchange",$)}},[]),!e)return r?m.jsx("section",{className:"topology-immersive",children:m.jsx("div",{className:"topology-empty-state",children:m.jsx("p",{children:"Waiting for initial snapshot..."})})}):m.jsx(Ji,{title:"Topology",subtitle:"Live graph, process ownership, and edge changes",children:m.jsx("div",{className:"placeholder",children:m.jsx("p",{children:"Waiting for initial snapshot..."})})});const G=Object.keys(e.graph).length,X=o2(e.graph),ie=Object.keys(e.sessions).length,le=Object.values(e.processes),ce=((ee=x.current)==null?void 0:ee.closest(".dashboard-layout"))??x.current??document.documentElement,he=async()=>{if(ce)try{document.fullscreenElement?await document.exitFullscreen():await ce.requestFullscreen()}catch{}},oe=m.jsxs("div",{className:"topology-flow-toolbar",children:[m.jsx("span",{className:"topology-flow-toolbar__label",children:"Scope"}),m.jsx("button",{type:"button",className:`topology-layout-btn ${j?"":"is-active"}`,onClick:()=>F(null),children:"Root"}),m.jsx("button",{type:"button",className:"topology-layout-btn",disabled:!j,onClick:()=>{j&&F(v.get(j)??null)},children:"Up"}),k.length>0?m.jsx("span",{className:"topology-scope-sep",children:"|"}):null,k.length>0?m.jsx("span",{className:"topology-scope-trail",children:k.map(($,q)=>{const te=U==null?void 0:U.collections.get($),ae=(te==null?void 0:te.name)??Ii($),pe=te?[te.name,te.address,te.componentType].join(` -`):$,we=q===k.length-1;return m.jsxs("span",{className:"topology-scope-segment",children:[we?m.jsx("span",{className:"topology-scope-tail",title:pe,children:ae}):m.jsx("button",{type:"button",className:"topology-scope-chip",title:pe,onClick:()=>F($),children:ae}),we?null:m.jsx("span",{className:"topology-scope-slash",children:"/"})]},`scope-${$}`)})}):null]}),K=m.jsxs("div",{className:"topology-viewport-legend","aria-label":"Topology legend",children:[m.jsx("span",{className:"topology-viewport-legend__title",children:"Legend"}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-collection"}),"Collection"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-input"}),"Subscriber"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-output"}),"Publisher"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-topic"}),"Collection Topic"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-relay"}),"Collection Relay"]}),m.jsxs("span",{className:"topology-viewport-legend__item",children:[m.jsx("i",{className:"topology-viewport-legend__swatch is-task"}),"Task"]})]}),z=m.jsxs(m.Fragment,{children:[r?null:oe,m.jsxs("div",{className:`topology-flow-shell ${r?"is-immersive":""} ${i?"is-dark":""}`,ref:x,children:[r?m.jsx("div",{className:"topology-viewport-top-controls",children:oe}):null,r&&s?m.jsx("div",{className:"topology-viewport-bottom-dock",children:K}):null,r||!s?null:K,m.jsxs(p0,{nodes:W.nodes,edges:W.edges,fitView:!0,fitViewOptions:{padding:.18,minZoom:.4},minZoom:.2,maxZoom:2.4,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,onInit:$=>{_.current=$,L(q=>q+1)},onPaneClick:()=>h==null?void 0:h(null),onNodeClick:($,q)=>{if(q.id.startsWith("scope:")){const te=$.target,ae=te==null?void 0:te.closest('[data-scope-up="true"]');if(ae){if(!ae.disabled){const pe=q.id.slice(6);Q(pe)}return}}if(q.id.startsWith("collection:")){const te=$.target;if(te!=null&&te.closest('[data-open-collection="true"]')){A(q.id);return}h==null||h({kind:"collection",collectionAddress:q.id.slice(11)});return}I(q.id)},proOptions:{hideAttribution:!0},children:[m.jsx(xT,{color:i?"#243244":"#d5deea",gap:24}),o?m.jsx(lT,{pannable:!0,zoomable:!0,maskColor:i?"rgba(2, 6, 23, 0.72)":"rgba(15, 23, 42, 0.10)",style:{background:i?"#0e1728":"#f8fafc",border:i?"1px solid #334155":"1px solid #dbe2ea",borderRadius:8},nodeColor:$=>$.id.startsWith("collection:")?i?"#1d4f79":"#dbeafe":$.id.startsWith("unit:")?i?"#1e3a62":"#bfdbfe":i?"#334155":"#cbd5e1"}):null,m.jsx(hT,{showFitView:!1,showInteractive:!1,children:m.jsx(Wr,{className:"topology-control-btn",title:w?"Exit fullscreen":"Enter fullscreen","aria-label":w?"Exit fullscreen":"Enter fullscreen",onClick:()=>{he()},children:"⛶"})})]},u?`topology-flow-${Z}-${j??"root"}`:"topology-flow-stable")]})]});return r?m.jsx("section",{className:"topology-immersive",children:z}):m.jsxs(Ji,{title:"Topology",subtitle:"Low-level publisher/subscriber wiring with optional metadata overlays",children:[m.jsxs("div",{className:"stats-grid",children:[m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Topics"}),m.jsx("strong",{children:G})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Edges"}),m.jsx("strong",{children:X})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Sessions"}),m.jsx("strong",{children:ie})]}),m.jsxs("article",{className:"stat-card",children:[m.jsx("span",{children:"Processes"}),m.jsx("strong",{children:le.length})]})]}),z,m.jsxs("div",{className:"panel-section",children:[m.jsx("h3",{children:"Process Ownership"}),le.length===0?m.jsx("p",{className:"muted",children:"No process ownership in current snapshot."}):m.jsxs("table",{className:"data-table",children:[m.jsx("thead",{children:m.jsxs("tr",{children:[m.jsx("th",{children:"Process ID"}),m.jsx("th",{children:"PID"}),m.jsx("th",{children:"Host"}),m.jsx("th",{children:"Units"})]})}),m.jsx("tbody",{children:le.map($=>m.jsxs("tr",{children:[m.jsx("td",{className:"mono",children:$.process_id.slice(0,8)}),m.jsx("td",{children:$.pid??"-"}),m.jsx("td",{children:$.host??"-"}),m.jsx("td",{children:$.units.length})]},$.process_id))})]})]}),m.jsxs("div",{className:"panel-section",children:[m.jsx("h3",{children:"Recent Topology Changes"}),n.length===0?m.jsx("p",{className:"muted",children:"No topology events received yet."}):m.jsx("ul",{className:"event-list",children:n.slice(0,8).map($=>m.jsxs("li",{className:"event-item",children:[m.jsx("span",{className:"event-pill",children:$.data.event_type}),m.jsxs("span",{className:"mono",children:["seq ",$.data.seq]}),m.jsx("span",{children:$.data.changed_topics.length>0?$.data.changed_topics.join(", "):"No topic list"})]},`topo-${$.data.seq}`))})]})]})}function De(e,t,n,r=!0){return{repr_value:n,structured_value:n,settings_schema:null,serialized_present:!0,patchable:r,patch_error:null,component_type:t,component_name:e}}function en(e,t,n,r={},s={}){return{process_id:e,pid:t,host:"fixture-host",window_seconds:2,timestamp:1711111111,publishers:r,subscribers:s}}function xp(e,t,n){return{endpoint_id:e,topic:t,messages_published_total:n.messagesPublishedTotal??n.messagesPublishedWindow*10,messages_published_window:n.messagesPublishedWindow,publish_rate_hz_window:n.publishRateHzWindow,inflight_messages_current:n.inflightCurrent??0,num_buffers:n.numBuffers??8,timestamp:n.timestamp??1711111111}}function wp(e,t,n){return{endpoint_id:e,topic:t,messages_received_total:n.messagesReceivedTotal??n.messagesReceivedWindow*10,messages_received_window:n.messagesReceivedWindow,channel_kind_last:n.channelKindLast??"fifo",timestamp:n.timestamp??1711111111}}function Ft(e,t="builtins.str"){return{address:e,msg_type:t,leaky:!1}}function Xt(e,t,n="builtins.str"){return{address:e,msg_type:n,host:"127.0.0.1",port:t}}function ot(e,t,n){return{name:e,subscribes:t,publishes:n}}function Me(e){return String(e).padStart(2,"0")}const tn={name:"root-scope-navigation",health:{status:"ok",graph_session_active:!0,graph_address:"127.0.0.1:25978"},snapshot:{snapshot:{graph:{"SYSTEM/PING_TOPIC":["GLOBAL_PING_TOPIC"]},edge_owners:[],sessions:{"fixture-session":{edges:[{from_topic:"SYSTEM/PING_TOPIC",to_topic:"GLOBAL_PING_TOPIC"}],metadata:{components:{SYSTEM:{name:"SYSTEM",component_type:"fixture.TestSystem",children:["SYSTEM/PING"],topics:{PING:{address:"SYSTEM/PING_TOPIC",msg_type:"builtins.str"}}},"SYSTEM/PING":{name:"PING",component_type:"fixture.MessageGenerator",streams:{OUTPUT:{address:"SYSTEM/PING_TOPIC:ping-output-endpoint",msg_type:"builtins.str",host:"127.0.0.1",port:9001}},tasks:[{name:"emit",subscribes:null,publishes:["SYSTEM/PING_TOPIC"]}]}}}}},processes:{"fixture-process":{process_id:"fixture-process",pid:4201,host:"fixture-host",units:["SYSTEM/PING"]}}},settings:{SYSTEM:De("SYSTEM","fixture.TestSystem",{enabled:!0}),"SYSTEM/PING":De("PING","fixture.MessageGenerator",{rate_hz:10,message:"ping"})},profiling:{"fixture-process":en("fixture-process",4201,["SYSTEM/PING"],{"SYSTEM/PING_TOPIC:ping-output-endpoint":{endpoint_id:"ping-output-endpoint",topic:"SYSTEM/PING_TOPIC",messages_published_total:120,messages_published_window:20,publish_rate_hz_window:10,inflight_messages_current:1,num_buffers:8,timestamp:1711111111}})}}},l2={name:"wide-fanout",health:tn.health,snapshot:{snapshot:{graph:{"STRESS/SOURCE_A":["STRESS/FANOUT_1","STRESS/FANOUT_2","STRESS/FANOUT_3","STRESS/FANOUT_4","STRESS/FANOUT_5","STRESS/FANOUT_6"],"STRESS/SOURCE_B":["STRESS/FANOUT_1","STRESS/FANOUT_2"],"STRESS/FANOUT_1":["STRESS/SINK_1"],"STRESS/FANOUT_2":["STRESS/SINK_2"],"STRESS/FANOUT_3":["STRESS/SINK_3"],"STRESS/FANOUT_4":["STRESS/SINK_4"],"STRESS/FANOUT_5":["STRESS/SINK_5"],"STRESS/FANOUT_6":["STRESS/SINK_6"]},edge_owners:[],sessions:{"wide-session":{edges:[],metadata:{components:{STRESS:{name:"STRESS",component_type:"fixture.StressCollection",children:["STRESS/AGGREGATOR","STRESS/SINK_1","STRESS/SINK_2","STRESS/SINK_3","STRESS/SINK_4","STRESS/SINK_5","STRESS/SINK_6"]},"STRESS/AGGREGATOR":{name:"AGGREGATOR",component_type:"fixture.AggregatorUnit",streams:{INPUT_ALPHA:{address:"STRESS/SOURCE_A:input-alpha",msg_type:"builtins.str",leaky:!1},INPUT_BETA:{address:"STRESS/SOURCE_B:input-beta",msg_type:"builtins.str",leaky:!1},OUTPUT_1:{address:"STRESS/FANOUT_1:fanout-1",msg_type:"builtins.str",host:"127.0.0.1",port:9101},OUTPUT_2:{address:"STRESS/FANOUT_2:fanout-2",msg_type:"builtins.str",host:"127.0.0.1",port:9102},OUTPUT_3:{address:"STRESS/FANOUT_3:fanout-3",msg_type:"builtins.str",host:"127.0.0.1",port:9103},OUTPUT_4:{address:"STRESS/FANOUT_4:fanout-4",msg_type:"builtins.str",host:"127.0.0.1",port:9104},OUTPUT_5:{address:"STRESS/FANOUT_5:fanout-5",msg_type:"builtins.str",host:"127.0.0.1",port:9105},OUTPUT_6:{address:"STRESS/FANOUT_6:fanout-6",msg_type:"builtins.str",host:"127.0.0.1",port:9106}},tasks:[{name:"normalize_payload",subscribes:"STRESS/SOURCE_A",publishes:["STRESS/FANOUT_1","STRESS/FANOUT_2"]},{name:"deduplicate_messages",subscribes:"STRESS/SOURCE_B",publishes:["STRESS/FANOUT_3","STRESS/FANOUT_4"]},{name:"route_priority_messages",subscribes:"STRESS/SOURCE_A",publishes:["STRESS/FANOUT_5","STRESS/FANOUT_6"]}]},...Object.fromEntries(Array.from({length:6},(e,t)=>{const n=t+1;return[`STRESS/SINK_${n}`,{name:`SINK_${n}`,component_type:"fixture.DebugOutput",streams:{INPUT:{address:`STRESS/FANOUT_${n}:sink-${n}`,msg_type:"builtins.str",leaky:!1}},tasks:[{name:"on_message",subscribes:`STRESS/FANOUT_${n}`,publishes:[]}]}]}))}}}},processes:{"wide-process":{process_id:"wide-process",pid:4301,host:"fixture-host",units:["STRESS/AGGREGATOR","STRESS/SINK_1","STRESS/SINK_2","STRESS/SINK_3","STRESS/SINK_4","STRESS/SINK_5","STRESS/SINK_6"]}}},settings:{STRESS:De("STRESS","fixture.StressCollection",{mode:"stress"}),"STRESS/AGGREGATOR":De("AGGREGATOR","fixture.AggregatorUnit",{batch_size:64,strategy:"spread"})},profiling:{"wide-process":en("wide-process",4301)}}},a2={name:"long-labels",health:tn.health,snapshot:{snapshot:{graph:{"LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME":["LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME"]},edge_owners:[],sessions:{"long-session":{edges:[],metadata:{components:{LONG_SCOPE:{name:"EXTRAORDINARILY_VERBOSE_COLLECTION_NAME_FOR_LAYOUT_TESTING",component_type:"fixture.deep.namespace.ExtremelyLongCollectionComponentType",children:["LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME"]},"LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME":{name:"COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME",component_type:"fixture.deep.namespace.componenttypes.ExceptionallyLongComponentTypeName",streams:{OUTPUT_WITH_A_LONG_NAME:{address:"LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME:publisher-endpoint-with-a-very-long-token",msg_type:"fixtures.messages.ReallyLongStructuredMessageTypeName",host:"127.0.0.1",port:9201},INPUT_WITH_A_LONG_NAME:{address:"LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME:subscriber-endpoint-with-a-very-long-token",msg_type:"fixtures.messages.ReallyLongStructuredMessageTypeName",leaky:!1}},tasks:[{name:"task_with_a_surprisingly_long_name_for_a_single_render_chip",subscribes:"LONG_SCOPE/ULTRA_VERBOSE_SUBSCRIBER_TOPIC_NAME",publishes:["LONG_SCOPE/EXTRAORDINARILY_VERBOSE_PUBLISHER_TOPIC_NAME"]}]}}}}},processes:{"long-process":{process_id:"long-process",pid:4401,host:"fixture-host",units:["LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME"]}}},settings:{LONG_SCOPE:De("EXTRAORDINARILY_VERBOSE_COLLECTION_NAME_FOR_LAYOUT_TESTING","fixture.deep.namespace.ExtremelyLongCollectionComponentType",{debug_mode_enabled:!0}),"LONG_SCOPE/COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME":De("COMPONENT_WITH_EXCEPTIONALLY_LONG_NAME","fixture.deep.namespace.componenttypes.ExceptionallyLongComponentTypeName",{default_payload:"the_quick_brown_fox_jumps_over_the_lazy_dog_repeatedly_to_stress_text_overflow"})},profiling:{"long-process":en("long-process",4401)}}},u2={name:"semantic-stream-names",health:tn.health,snapshot:{snapshot:{graph:{"SIN/OUTPUT_SIGNAL_TOPIC":["SIN/WAVEFORM_TOPIC"]},edge_owners:[],sessions:{"semantic-stream-session":{edges:[],metadata:{components:{SIN:{name:"SIN",component_type:"fixture.LFO",streams:{INPUT_SIGNAL:Ft("SIN/INPUT_SIGNAL_TOPIC:sin-input-signal","fixtures.array.AxisArray"),INPUT_SETTINGS:Ft("SIN/INPUT_SETTINGS_TOPIC:sin-input-settings","fixtures.config.LFOSettings"),OUTPUT_SIGNAL:Xt("SIN/OUTPUT_SIGNAL_TOPIC:sin-output-signal",9211,"fixtures.array.AxisArray")},tasks:[ot("on_signal","SIN/INPUT_SIGNAL_TOPIC",[]),ot("on_settings","SIN/INPUT_SETTINGS_TOPIC",[]),ot("generate",null,["SIN/OUTPUT_SIGNAL_TOPIC"])]}}}}},processes:{"semantic-stream-process":{process_id:"semantic-stream-process",pid:4451,host:"fixture-host",units:["SIN"]}}},settings:{SIN:De("SIN","fixture.LFO",{freq:1.5,update_rate:60})},profiling:{"semantic-stream-process":en("semantic-stream-process",4451)}}},Xn=Array.from({length:6},(e,t)=>`TRACE_LAB/SPARSE_SUB_${Me(t+1)}`),Qn=Array.from({length:8},(e,t)=>`TRACE_LAB/DENSE_SUB_${Me(t+1)}`),c2={name:"profiling-trace-rates",health:tn.health,snapshot:{snapshot:{graph:Object.fromEntries([["TRACE_LAB/SPARSE_TOPIC",Xn.map((e,t)=>`TRACE_LAB/SPARSE_SUB_${Me(t+1)}_TOPIC`)],["TRACE_LAB/DENSE_TOPIC",Qn.map((e,t)=>`TRACE_LAB/DENSE_SUB_${Me(t+1)}_TOPIC`)]]),edge_owners:[],sessions:{"trace-session":{edges:[],metadata:{components:{TRACE_LAB:{name:"TRACE_LAB",component_type:"fixture.TraceLabCollection",children:["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn]},"TRACE_LAB/SPARSE_PUB":{name:"SPARSE_PUB",component_type:"fixture.TracePublisherUnit",streams:{OUTPUT:Xt("TRACE_LAB/SPARSE_TOPIC:sparse-publisher-endpoint",9901)},tasks:[ot("publish_sparse",null,["TRACE_LAB/SPARSE_TOPIC"])]},"TRACE_LAB/DENSE_PUB":{name:"DENSE_PUB",component_type:"fixture.TracePublisherUnit",streams:{OUTPUT:Xt("TRACE_LAB/DENSE_TOPIC:dense-publisher-endpoint",9902)},tasks:[ot("publish_dense",null,["TRACE_LAB/DENSE_TOPIC"])]},...Object.fromEntries(Xn.map((e,t)=>{const n=Me(t+1);return[e,{name:`SPARSE_SUB_${n}`,component_type:"fixture.TraceSubscriberUnit",streams:{INPUT:Ft(`TRACE_LAB/SPARSE_SUB_${n}_TOPIC:sparse-subscriber-${n}`)},tasks:[ot(`consume_sparse_${n}`,`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,[])]}]})),...Object.fromEntries(Qn.map((e,t)=>{const n=Me(t+1);return[e,{name:`DENSE_SUB_${n}`,component_type:"fixture.TraceSubscriberUnit",streams:{INPUT:Ft(`TRACE_LAB/DENSE_SUB_${n}_TOPIC:dense-subscriber-${n}`)},tasks:[ot(`consume_dense_${n}`,`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,[])]}]}))}}}},processes:{"trace-process":{process_id:"trace-process",pid:5001,host:"fixture-host",units:["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn]}}},settings:{TRACE_LAB:De("TRACE_LAB","fixture.TraceLabCollection",{trace_enabled:!0}),"TRACE_LAB/SPARSE_PUB":De("SPARSE_PUB","fixture.TracePublisherUnit",{publish_rate_hz:1}),"TRACE_LAB/DENSE_PUB":De("DENSE_PUB","fixture.TracePublisherUnit",{publish_rate_hz:60})},profiling:{"trace-process":en("trace-process",5001,["TRACE_LAB/SPARSE_PUB","TRACE_LAB/DENSE_PUB",...Xn,...Qn],{"TRACE_LAB/SPARSE_TOPIC:sparse-publisher-endpoint":xp("sparse-publisher-endpoint","TRACE_LAB/SPARSE_TOPIC",{messagesPublishedWindow:2,publishRateHzWindow:1,numBuffers:4}),"TRACE_LAB/DENSE_TOPIC:dense-publisher-endpoint":xp("dense-publisher-endpoint","TRACE_LAB/DENSE_TOPIC",{messagesPublishedWindow:120,publishRateHzWindow:60,inflightCurrent:2,numBuffers:16})},{...Object.fromEntries(Xn.map((e,t)=>{const n=Me(t+1);return[`TRACE_LAB/SPARSE_SUB_${n}_TOPIC:sparse-subscriber-${n}`,wp(`sparse-subscriber-${n}`,`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,{messagesReceivedWindow:2,channelKindLast:t%2===0?"fifo":"shared_memory"})]})),...Object.fromEntries(Qn.map((e,t)=>{const n=Me(t+1);return[`TRACE_LAB/DENSE_SUB_${n}_TOPIC:dense-subscriber-${n}`,wp(`dense-subscriber-${n}`,`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,{messagesReceivedWindow:120,channelKindLast:t<3?"tcp":t%2===0?"fifo":"shared_memory"})]}))})}},traceScenarios:[{processId:"trace-process",publisherEndpointId:"sparse-publisher-endpoint",publisherTopic:"TRACE_LAB/SPARSE_TOPIC",eventIntervalMs:140,samplesPerTick:1,timestampStepNs:1e9,publishDeltaNsBase:94e7,publishDeltaNsJitter:12e7,subscribers:Xn.map((e,t)=>{const n=Me(t+1);return{endpointId:`sparse-subscriber-${n}`,topic:`TRACE_LAB/SPARSE_SUB_${n}_TOPIC`,leaseTimeNsBase:7e6+t*8e5,userSpanNsBase:25e5+t*24e4}})},{processId:"trace-process",publisherEndpointId:"dense-publisher-endpoint",publisherTopic:"TRACE_LAB/DENSE_TOPIC",eventIntervalMs:100,samplesPerTick:12,timestampStepNs:16666667,publishDeltaNsBase:164e5,publishDeltaNsJitter:24e5,subscribers:Qn.map((e,t)=>{const n=Me(t+1);return{endpointId:`dense-subscriber-${n}`,topic:`TRACE_LAB/DENSE_SUB_${n}_TOPIC`,leaseTimeNsBase:13e5+t*14e4,userSpanNsBase:92e4+t*11e4}})}]},d2={name:"nested-collections",health:tn.health,snapshot:{snapshot:{graph:{"LAB/PIPELINE/ROOT_TOPIC":["LAB/PIPELINE/INNER/INNER_TOPIC"],"LAB/PIPELINE/INNER/INNER_TOPIC":["LAB/PIPELINE/LEAF_TOPIC"]},edge_owners:[],sessions:{"nested-session":{edges:[],metadata:{components:{LAB:{name:"LAB",component_type:"fixture.RootCollection",children:["LAB/PIPELINE"]},"LAB/PIPELINE":{name:"PIPELINE",component_type:"fixture.PipelineCollection",children:["LAB/PIPELINE/SOURCE","LAB/PIPELINE/INNER"],topics:{ROOT_TOPIC:{address:"LAB/PIPELINE/ROOT_TOPIC",msg_type:"builtins.str"}}},"LAB/PIPELINE/INNER":{name:"INNER",component_type:"fixture.InnerCollection",children:["LAB/PIPELINE/INNER/SINK"],topics:{INNER_TOPIC:{address:"LAB/PIPELINE/INNER/INNER_TOPIC",msg_type:"builtins.str"}}},"LAB/PIPELINE/SOURCE":{name:"SOURCE",component_type:"fixture.SourceUnit",streams:{OUTPUT:{address:"LAB/PIPELINE/ROOT_TOPIC:source-output",msg_type:"builtins.str",host:"127.0.0.1",port:9301}},tasks:[{name:"emit_root_topic",subscribes:null,publishes:["LAB/PIPELINE/ROOT_TOPIC"]}]},"LAB/PIPELINE/INNER/SINK":{name:"SINK",component_type:"fixture.SinkUnit",streams:{INPUT:{address:"LAB/PIPELINE/INNER/INNER_TOPIC:inner-input",msg_type:"builtins.str",leaky:!1},OUTPUT:{address:"LAB/PIPELINE/LEAF_TOPIC:leaf-output",msg_type:"builtins.str",host:"127.0.0.1",port:9302}},tasks:[{name:"relay_nested_topic",subscribes:"LAB/PIPELINE/INNER/INNER_TOPIC",publishes:["LAB/PIPELINE/LEAF_TOPIC"]}]},"CONTROL/PROBE":{name:"PROBE",component_type:"fixture.RootProbe",streams:{OUTPUT:{address:"CONTROL/PROBE_TOPIC:probe-output",msg_type:"builtins.str",host:"127.0.0.1",port:9303}},tasks:[{name:"probe_root_scope",subscribes:null,publishes:["CONTROL/PROBE_TOPIC"]}]}}}}},processes:{"nested-process":{process_id:"nested-process",pid:4501,host:"fixture-host",units:["LAB/PIPELINE/SOURCE","LAB/PIPELINE/INNER/SINK","CONTROL/PROBE"]}}},settings:{LAB:De("LAB","fixture.RootCollection",{enabled:!0}),"LAB/PIPELINE":De("PIPELINE","fixture.PipelineCollection",{stage_count:2}),"LAB/PIPELINE/INNER":De("INNER","fixture.InnerCollection",{nested:!0})},profiling:{"nested-process":en("nested-process",4501)}}},f2={name:"orphan-streams",health:tn.health,snapshot:{snapshot:{graph:{"ORPHAN/INPUT_TOPIC":["SYSTEM/PROCESS_TOPIC"],"SYSTEM/PROCESS_TOPIC":["ORPHAN/OUTPUT_TOPIC"]},edge_owners:[],sessions:{"orphan-session":{edges:[],metadata:{components:{"SYSTEM/PROCESSOR":{name:"PROCESSOR",component_type:"fixture.ProcessorUnit",streams:{INPUT:{address:"SYSTEM/PROCESS_TOPIC:processor-input",msg_type:"builtins.str",leaky:!1},OUTPUT:{address:"SYSTEM/PROCESS_TOPIC:processor-output",msg_type:"builtins.str",host:"127.0.0.1",port:9401}},tasks:[{name:"transform_orphan_stream",subscribes:"SYSTEM/PROCESS_TOPIC",publishes:["SYSTEM/PROCESS_TOPIC"]}]}}}}},processes:{"orphan-process":{process_id:"orphan-process",pid:4601,host:"fixture-host",units:["SYSTEM/PROCESSOR"]}}},settings:{"SYSTEM/PROCESSOR":De("PROCESSOR","fixture.ProcessorUnit",{amplify:2})},profiling:{"orphan-process":en("orphan-process",4601)}}},Ir=12,p2={name:"dense-unit-layout",health:tn.health,snapshot:{snapshot:{graph:Object.fromEntries(Array.from({length:Ir},(e,t)=>{const n=Me(t+1);return[`MATRIX/IN_${n}_TOPIC`,[`MATRIX/OUT_${n}_TOPIC`]]})),edge_owners:[],sessions:{"dense-unit-session":{edges:[],metadata:{components:{MATRIX:{name:"MATRIX",component_type:"fixture.MatrixCollection",children:["MATRIX/ROUTER"]},"MATRIX/ROUTER":{name:"ROUTER",component_type:"fixture.DenseRouter",streams:Object.fromEntries([...Array.from({length:Ir},(e,t)=>{const n=Me(t+1);return[`INPUT_${n}`,Ft(`MATRIX/IN_${n}_TOPIC:router-input-${n}`)]}),...Array.from({length:Ir},(e,t)=>{const n=Me(t+1);return[`OUTPUT_${n}`,Xt(`MATRIX/OUT_${n}_TOPIC:router-output-${n}`,9500+t)]})]),tasks:Array.from({length:Ir},(e,t)=>{const n=Me(t+1);return ot(`route_lane_${n}`,`MATRIX/IN_${n}_TOPIC`,[`MATRIX/OUT_${n}_TOPIC`])})}}}}},processes:{"dense-unit-process":{process_id:"dense-unit-process",pid:4701,host:"fixture-host",units:["MATRIX/ROUTER"]}}},settings:{MATRIX:De("MATRIX","fixture.MatrixCollection",{lanes:Ir}),"MATRIX/ROUTER":De("ROUTER","fixture.DenseRouter",{lanes:Ir,parallelism:4})},profiling:{"dense-unit-process":en("dense-unit-process",4701)}}},on=12,ci=Array.from({length:on},(e,t)=>`MEGA/SRC_${Me(t+1)}`),di=Array.from({length:on},(e,t)=>`MEGA/SINK_${Me(t+1)}`),h2={name:"massive-fanout",health:tn.health,snapshot:{snapshot:{graph:Object.fromEntries([...Array.from({length:on},(e,t)=>{const n=Me(t+1);return[`MEGA/SRC_${n}_TOPIC`,[`MEGA/HUB_IN_${n}_TOPIC`]]}),...Array.from({length:on},(e,t)=>{const n=Me(t+1);return[`MEGA/HUB_OUT_${n}_TOPIC`,[`MEGA/SINK_${n}_IN_TOPIC`]]})]),edge_owners:[],sessions:{"mega-session":{edges:[],metadata:{components:{MEGA:{name:"MEGA",component_type:"fixture.MegaScope",children:[...ci,"MEGA/HUB",...di]},...Object.fromEntries(ci.map((e,t)=>{const n=Me(t+1);return[e,{name:`SRC_${n}`,component_type:"fixture.SourceUnit",streams:{OUTPUT:Xt(`MEGA/SRC_${n}_TOPIC:source-output-${n}`,9600+t)},tasks:[ot(`emit_lane_${n}`,null,[`MEGA/SRC_${n}_TOPIC`])]}]})),"MEGA/HUB":{name:"HUB",component_type:"fixture.HubRouter",streams:Object.fromEntries([...Array.from({length:on},(e,t)=>{const n=Me(t+1);return[`INPUT_${n}`,Ft(`MEGA/HUB_IN_${n}_TOPIC:hub-input-${n}`)]}),...Array.from({length:on},(e,t)=>{const n=Me(t+1);return[`OUTPUT_${n}`,Xt(`MEGA/HUB_OUT_${n}_TOPIC:hub-output-${n}`,9700+t)]})]),tasks:Array.from({length:on},(e,t)=>{const n=Me(t+1);return ot(`fanout_lane_${n}`,`MEGA/HUB_IN_${n}_TOPIC`,[`MEGA/HUB_OUT_${n}_TOPIC`])})},...Object.fromEntries(di.map((e,t)=>{const n=Me(t+1);return[e,{name:`SINK_${n}`,component_type:"fixture.SinkUnit",streams:{INPUT:Ft(`MEGA/SINK_${n}_IN_TOPIC:sink-input-${n}`)},tasks:[ot(`consume_lane_${n}`,`MEGA/SINK_${n}_IN_TOPIC`,[])]}]}))}}}},processes:{"mega-process":{process_id:"mega-process",pid:4801,host:"fixture-host",units:[...ci,"MEGA/HUB",...di]}}},settings:{MEGA:De("MEGA","fixture.MegaScope",{lanes:on}),"MEGA/HUB":De("HUB","fixture.HubRouter",{lanes:on,fanout_mode:"parallel"})},profiling:{"mega-process":en("mega-process",4801,[...ci,"MEGA/HUB",...di])}}},m2={name:"cyclic-feedback",health:tn.health,snapshot:{snapshot:{graph:{"ALPHA/OUT_TOPIC":["BETA/IN_TOPIC"],"BETA/OUT_TOPIC":["GAMMA/IN_TOPIC"],"GAMMA/OUT_TOPIC":["ALPHA/IN_TOPIC"],"GAMMA/AUDIT_TOPIC":["MONITOR/IN_TOPIC"]},edge_owners:[],sessions:{"cycle-session":{edges:[],metadata:{components:{ALPHA:{name:"ALPHA",component_type:"fixture.FeedbackStage",streams:{INPUT:Ft("ALPHA/IN_TOPIC:alpha-input"),OUTPUT:Xt("ALPHA/OUT_TOPIC:alpha-output",9801)},tasks:[ot("forward_alpha","ALPHA/IN_TOPIC",["ALPHA/OUT_TOPIC"])]},BETA:{name:"BETA",component_type:"fixture.FeedbackStage",streams:{INPUT:Ft("BETA/IN_TOPIC:beta-input"),OUTPUT:Xt("BETA/OUT_TOPIC:beta-output",9802)},tasks:[ot("forward_beta","BETA/IN_TOPIC",["BETA/OUT_TOPIC"])]},GAMMA:{name:"GAMMA",component_type:"fixture.FeedbackStage",streams:{INPUT:Ft("GAMMA/IN_TOPIC:gamma-input"),OUTPUT:Xt("GAMMA/OUT_TOPIC:gamma-output",9803),OUTPUT_AUDIT:Xt("GAMMA/AUDIT_TOPIC:gamma-audit",9804)},tasks:[ot("fanout_gamma","GAMMA/IN_TOPIC",["GAMMA/OUT_TOPIC","GAMMA/AUDIT_TOPIC"])]},MONITOR:{name:"MONITOR",component_type:"fixture.MonitorUnit",streams:{INPUT:Ft("MONITOR/IN_TOPIC:monitor-input")},tasks:[ot("observe_cycle","MONITOR/IN_TOPIC",[])]}}}}},processes:{"cycle-process":{process_id:"cycle-process",pid:4901,host:"fixture-host",units:["ALPHA","BETA","GAMMA","MONITOR"]}}},settings:{ALPHA:De("ALPHA","fixture.FeedbackStage",{gain:1}),GAMMA:De("GAMMA","fixture.FeedbackStage",{audit_enabled:!0})},profiling:{"cycle-process":en("cycle-process",4901)}}},g2={"root-scope-navigation":tn,"wide-fanout":l2,"long-labels":a2,"semantic-stream-names":u2,"profiling-trace-rates":c2,"nested-collections":d2,"orphan-streams":f2,"dense-unit-layout":p2,"massive-fanout":h2,"cyclic-feedback":m2};function y2(e){return e?g2[e]??null:null}const v2=120,_2=250,x2=1e3,w2=.05,S2=5e3,E2=60;function br(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function N2(){return typeof window>"u"?null:new URLSearchParams(window.location.search).get("fixture")}function T2(e,t,n){const r=t.split(".").filter(i=>i.length>0);if(r.length===0)return n;const s=e&&typeof e=="object"&&!Array.isArray(e)?br(e):{};let o=s;return r.forEach((i,l)=>{if(l===r.length-1){o[i]=n;return}const u=o[i],c=u&&typeof u=="object"&&!Array.isArray(u)?{...u}:{};o[i]=c,o=c}),s}function Sp(e,t){return t}function k2(e,t,n){return Math.min(n,Math.max(t,e))}function C2(e){const t=Sp(void 0,w2),n=Math.max(1,Math.trunc(Sp(void 0,S2))),r=new URLSearchParams({profiling_interval:t.toString(),profiling_max_samples:n.toString()}).toString(),s=e.includes("?")?"&":"?";return`${e}${s}${r}`}function I2(){const e=window.location.protocol==="https:"?"wss":"ws";return C2(`${e}://${window.location.host}/ws/events`)}async function Ep(e){const t=e.includes("?")?"&":"?",n=`${e}${t}_ts=${Date.now()}`,r=await fetch(n,{cache:"no-store",headers:{"Cache-Control":"no-cache",Pragma:"no-cache"}});if(!r.ok)throw new Error(`${e} failed (${r.status})`);return await r.json()}async function Np(e,t){const n=e.includes("?")?"&":"?",r=`${e}${n}_ts=${Date.now()}`,s=await fetch(r,{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json","Cache-Control":"no-cache",Pragma:"no-cache"},body:JSON.stringify(t)});if(!s.ok){let o=`${e} failed (${s.status})`;try{const i=await s.json();typeof i.detail=="string"&&i.detail.length>0&&(o=i.detail)}catch{}throw new Error(o)}return await s.json()}function Tp(e){return typeof e=="object"&&e!==null}function b2(e){return Tp(e)?typeof e.kind=="string"&&Tp(e.data):!1}function P2(e){const[t,n]=E.useState(null),[r,s]=E.useState(null),[o,i]=E.useState(null),[l,a]=E.useState([]),[u,c]=E.useState("connecting"),[d,f]=E.useState(null),[h,x]=E.useState(null),_=Math.round(k2(((e==null?void 0:e.snapshotPollSeconds)??2)*1e3,500,3e4)),T=E.useMemo(()=>y2(N2()),[]),p=E.useRef(null),g=E.useRef(null),y=E.useRef(new Map),w=E.useRef(new Map),P=E.useRef(new Map),O=E.useCallback(k=>{const N=y.current.get(k);N!==void 0&&(window.clearInterval(N),y.current.delete(k))},[]),L=E.useCallback(()=>{for(const k of y.current.values())window.clearInterval(k);y.current.clear(),w.current.clear(),P.current.clear()},[]),R=E.useCallback(async()=>{if(T){const N=br(T.snapshot);s(N),x(Date.now());return}const k=await Ep("/api/snapshot");s(k),x(Date.now())},[T]),F=E.useCallback(async()=>{if(T){n(br(T.health));return}const k=await Ep("/api/health");n(k)},[T]);E.useEffect(()=>{if(T)return L(),n(br(T.health)),s(br(T.snapshot)),i(null),a([]),c("open"),f(null),x(Date.now()),()=>{L()}},[L,T]);const D=E.useCallback(()=>{p.current!==null&&window.clearTimeout(p.current),p.current=window.setTimeout(()=>{R().catch(k=>{const N=k instanceof Error?k.message:"Snapshot refresh failed.";f(N)}),p.current=null},_2)},[R]);E.useEffect(()=>{T||(F().catch(k=>{const N=k instanceof Error?k.message:"Health check failed.";f(N)}),R().catch(k=>{const N=k instanceof Error?k.message:"Initial snapshot failed.";f(N)}))},[T,F,R]),E.useEffect(()=>{if(T)return;const k=window.setInterval(()=>{R().catch(N=>{const M=N instanceof Error?N.message:"Snapshot poll failed.";f(M)})},_);return()=>{window.clearInterval(k)}},[T,R,_]),E.useEffect(()=>{if(T)return;let k=!1,N=null;const M=()=>{k||(c("connecting"),N=new WebSocket(I2()),N.onopen=()=>{k||(c("open"),f(null))},N.onmessage=C=>{let S=null;try{S=JSON.parse(C.data)}catch{return}if(!b2(S))return;const b=S;a(B=>[b,...B].slice(0,v2)),b.kind==="topology.changed"&&D(),b.kind==="settings.changed"&&s(B=>{if(!B)return B;const j=b,Y=B.settings[j.data.component_address]??null,Q={...B.settings,[j.data.component_address]:{...j.data.value,patchable:(Y==null?void 0:Y.patchable)??!1,patch_error:(Y==null?void 0:Y.patch_error)??null,component_type:(Y==null?void 0:Y.component_type)??null,component_name:(Y==null?void 0:Y.component_name)??null}};return{...B,settings:Q}}),b.kind==="profiling.trace"&&i(b),b.kind==="system.error"&&f(b.data.message)},N.onerror=()=>{k||c("closed")},N.onclose=()=>{k||(c("closed"),g.current=window.setTimeout(()=>{M()},x2))})};return M(),()=>{k=!0,N!==null&&N.close(),g.current!==null&&window.clearTimeout(g.current),p.current!==null&&window.clearTimeout(p.current)}},[T,D]);const H=E.useMemo(()=>l.filter(k=>k.kind==="topology.changed"),[l]),Z=E.useCallback(async()=>{try{await R()}catch(k){const N=k instanceof Error?k.message:"Snapshot refresh failed.";f(N)}},[R]),U=E.useCallback(async(k,N,M,C=2)=>{if(T){let B=null;return s(j=>{if(!j)return j;const Y=j.settings[k];if(!Y)return j;const Q=Y.structured_value??Y.repr_value,ne=T2(Q,N,M);return B={...Y,structured_value:ne,repr_value:ne},{...j,settings:{...j.settings,[k]:B}}}),x(Date.now()),{component_address:k,field_path:N,updated_value:B??br(T.snapshot.settings[k])}}const S=encodeURIComponent(k),b=await Np(`/api/settings/${S}/field`,{field_path:N,value:M,timeout:C});return s(B=>{if(!B)return B;const j=B.settings[b.component_address]??null;return{...B,settings:{...B.settings,[b.component_address]:{...b.updated_value,patchable:(j==null?void 0:j.patchable)??!0,patch_error:(j==null?void 0:j.patch_error)??null,component_type:(j==null?void 0:j.component_type)??null,component_name:(j==null?void 0:j.component_name)??null}}}}),x(Date.now()),b},[T]),v=E.useCallback(async k=>{if(T){const N=`${k.process_id}:${k.publisher_endpoint_id??"*"}`;if(!k.enabled){if(k.publisher_endpoint_id)O(N);else for(const C of Array.from(y.current.keys()))C.startsWith(`${k.process_id}:`)&&O(C);return{process_id:k.process_id,unit_address:"",enabled:!1,control:{fixture:!0,metrics:k.metrics??[]}}}const M=(T.traceScenarios??[]).find(C=>C.processId===k.process_id&&C.publisherEndpointId===k.publisher_endpoint_id&&C.publisherTopic===k.publisher_topic);if(M){O(N),P.current.has(N)||P.current.set(N,Date.now()*1e6),w.current.has(N)||w.current.set(N,0);const C=()=>{const b=P.current.get(N)??Date.now()*1e6,B=w.current.get(N)??0,j=[],Y=new Set(k.metrics??[]),Q=Y.size===0||Y.has("publish_delta_ns"),ne=Y.size===0||Y.has("lease_time_ns"),se=Y.size===0||Y.has("user_span_ns");for(let fe=0;fe=9466848e5&&e<=41024448e5?e:e>=946684800&&e<=4102444800?e*1e3:null}function j2(e){return e.toLowerCase().includes("collection")}function F2(e){if(e.kind==="unit")return{kind:"unit",unitAddress:e.unitAddress};if(e.kind==="collection")return{kind:"collection",collectionAddress:e.collectionAddress};const t=z_(e.streamAddress);return{kind:e.kind,unitAddress:e.unitAddress,endpointId:t.endpointId,topic:t.topic}}function z2(e,t){var r;const n=((r=t==null?void 0:t[e])==null?void 0:r.component_type)??"";return j2(n)?{kind:"collection",collectionAddress:e}:{kind:"unit",unitAddress:e}}function D2(e){return(e==null?void 0:e.kind)==="unit"?e.unitAddress:(e==null?void 0:e.kind)==="collection"?e.collectionAddress:null}function U2(e){if(!e||typeof e!="object")return Mt;const t=e,n=typeof t.snapshotPollSeconds=="number"&&Number.isFinite(t.snapshotPollSeconds)?Math.min(30,Math.max(.5,t.snapshotPollSeconds)):Mt.snapshotPollSeconds,r=typeof t.inspectorWidthPx=="number"&&Number.isFinite(t.inspectorWidthPx)?Math.min(900,Math.max(360,Math.round(t.inspectorWidthPx))):Mt.inspectorWidthPx,s=t.traceMetricsPreset==="publish+lease"||t.traceMetricsPreset==="publish"||t.traceMetricsPreset==="publish+lease+user"?t.traceMetricsPreset:Mt.traceMetricsPreset,o=t.edgeConnectorStyle==="orthogonal"||t.edgeConnectorStyle==="smooth"||t.edgeConnectorStyle==="curved"?t.edgeConnectorStyle:Mt.edgeConnectorStyle;return{snapshotPollSeconds:n,themeMode:t.themeMode==="dark"?"dark":"light",topologyDefaultLayout:t.topologyDefaultLayout==="lr"?"lr":"tb",edgeConnectorStyle:o,showLegend:typeof t.showLegend=="boolean"?t.showLegend:Mt.showLegend,showMiniMap:typeof t.showMiniMap=="boolean"?t.showMiniMap:Mt.showMiniMap,traceMetricsPreset:s,autoFitOnLayoutScopeChange:typeof t.autoFitOnLayoutScopeChange=="boolean"?t.autoFitOnLayoutScopeChange:Mt.autoFitOnLayoutScopeChange,autoFocusOnInspectorSelection:typeof t.autoFocusOnInspectorSelection=="boolean"?t.autoFocusOnInspectorSelection:Mt.autoFocusOnInspectorSelection,inspectorWidthPx:r}}function H2(e,t,n){const r=[],s=[];return e==="closed"?r.push("WebSocket disconnected"):e==="connecting"&&s.push("WebSocket connecting"),t===null?s.push("Graph health pending"):t||r.push("Graph session inactive"),n&&r.push(n),r.length>0?{tone:"err",tooltip:r.join(" · ")}:s.length>0?{tone:"warn",tooltip:s.join(" · ")}:{tone:"ok",tooltip:"Connected: GraphServer reachable, WebSocket open, session active."}}function W2(){const[e,t]=E.useState(null),[n,r]=E.useState(!1),[s,o]=E.useState(0),[i,l]=E.useState(0),[a,u]=E.useState(!1),[c,d]=E.useState(!0),[f,h]=E.useState(!1),[x,_]=E.useState(null),[T,p]=E.useState(0),[g,y]=E.useState(null),[w,P]=E.useState(null),[O,L]=E.useState(0),[R,F]=E.useState(()=>{try{const I=window.localStorage.getItem(kp);return I?U2(JSON.parse(I)):Mt}catch{return Mt}});E.useEffect(()=>{window.localStorage.setItem(kp,JSON.stringify(R))},[R]);const{health:D,snapshot:H,latestTraceEvent:Z,connectionState:U,error:v,lastSnapshotUpdateMs:k,topologyEvents:N,patchSettingField:M,setProfilingTraceControl:C}=P2({snapshotPollSeconds:R.snapshotPollSeconds}),S=E.useMemo(()=>{let I=0;for(const G of Object.values((H==null?void 0:H.profiling)??{}))if(typeof G.timestamp=="number"&&Number.isFinite(G.timestamp)){const X=B2(G.timestamp);X!==null&&(I=Math.max(I,X))}return I<=0?k:I},[k,H==null?void 0:H.profiling]),b=D!=null&&D.graph_address&&D.graph_address.length>0?D.graph_address:$2,B=S?new Date(S).toLocaleTimeString():"n/a",j=E.useMemo(()=>H2(U,(D==null?void 0:D.graph_session_active)??null,v),[U,D==null?void 0:D.graph_session_active,v]),Y=E.useMemo(()=>R.traceMetricsPreset==="publish"?["publish_delta_ns"]:R.traceMetricsPreset==="publish+lease"?["publish_delta_ns","lease_time_ns"]:["publish_delta_ns","lease_time_ns","user_span_ns"],[R.traceMetricsPreset]),Q=E.useMemo(()=>({"--inspector-width":`${R.inspectorWidthPx}px`}),[R.inspectorWidthPx]),ne=I=>{if(P(null),!I){t(null);return}h(!1);const G=F2(I);G.kind==="unit"||G.kind==="collection"?(d(!1),l(X=>X+1)):(u(!1),o(X=>X+1)),t(G)},se=I=>{P(I),L(G=>G+1)},fe=()=>{p(I=>I+1),_(null)},W=()=>{if(a){u(!1);return}if(c){u(!0),d(!1);return}u(!0)},A=()=>{if(c){d(!1);return}if(a){d(!0),u(!1);return}d(!0)};return m.jsxs("div",{className:`dashboard-layout is-comfortable ${f?"is-inspector-collapsed ":""}${R.themeMode==="dark"?"is-dark":""}`,style:Q,children:[m.jsx("aside",{className:"dashboard-inspector dashboard-inspector--pinned",children:m.jsxs("div",{className:`dashboard-inspector__body ${a?"is-publishers-collapsed ":""}${c?"is-settings-collapsed":""}`,children:[m.jsxs("section",{className:"inspector-section inspector-section--split",children:[m.jsxs("header",{className:"inspector-section__header",children:[m.jsx("span",{children:"Publishers"}),m.jsx("button",{type:"button",className:"inspector-section__collapse-btn",onClick:W,children:a?"Expand":"Collapse"})]}),a?null:m.jsx("div",{className:"inspector-section__content inspector-section__content--scroll",children:m.jsx(t1,{graphSnapshot:(H==null?void 0:H.snapshot)??null,profilingSnapshot:(H==null?void 0:H.profiling)??null,latestTraceEvent:Z,setProfilingTraceControl:C,darkMode:R.themeMode==="dark",focusPublisherEndpointId:(e==null?void 0:e.kind)==="publisher"?e.endpointId:null,focusPublisherTopic:(e==null?void 0:e.kind)==="publisher"?e.topic:null,focusSubscriberEndpointId:(e==null?void 0:e.kind)==="subscriber"?e.endpointId:null,focusActionId:s,hideFilters:!1,defaultTraceMetrics:Y,traceDockHost:g,onTraceDockStateChange:_,traceCloseSignal:T,onPublisherSelect:I=>{t({kind:"publisher",unitAddress:I.unitAddress,endpointId:I.endpointId,topic:I.topic}),se({kind:"publisher",streamAddress:`${I.topic}:${I.endpointId}`,unitAddress:I.unitAddress})},onSubscriberSelect:I=>{t({kind:"subscriber",unitAddress:I.unitAddress,endpointId:I.endpointId,topic:I.topic}),se({kind:"subscriber",streamAddress:`${I.topic}:${I.endpointId}`,unitAddress:I.unitAddress})}})})]}),m.jsxs("section",{className:"inspector-section inspector-section--split",children:[m.jsxs("header",{className:"inspector-section__header",children:[m.jsx("span",{children:"Settings"}),m.jsx("button",{type:"button",className:"inspector-section__collapse-btn",onClick:A,children:c?"Expand":"Collapse"})]}),c?null:m.jsx("div",{className:"inspector-section__content inspector-section__content--scroll",children:m.jsx(i1,{settings:(H==null?void 0:H.settings)??null,patchSettingField:M,focusComponentAddress:D2(e),focusActionId:i,onComponentSelect:I=>{if(!I){t(null);return}l(X=>X+1);const G=z2(I,H==null?void 0:H.settings);t(G),se(G.kind==="collection"?{kind:"collection",collectionAddress:G.collectionAddress}:{kind:"unit",unitAddress:G.unitAddress})}})})]})]})}),m.jsxs("div",{className:"dashboard-main",children:[m.jsxs("div",{className:"dashboard-viewport",children:[m.jsx(i2,{graphSnapshot:(H==null?void 0:H.snapshot)??null,profilingSnapshot:(H==null?void 0:H.profiling)??null,recentEvents:N,immersive:!0,showLegend:R.showLegend,showMiniMap:R.showMiniMap,darkMode:R.themeMode==="dark",defaultLayout:R.topologyDefaultLayout,edgeConnectorStyle:R.edgeConnectorStyle,autoFitOnLayoutScopeChange:R.autoFitOnLayoutScopeChange,autoFocusOnSelection:R.autoFocusOnInspectorSelection,focusSelection:w,focusRequestId:O,onEntitySelect:ne}),m.jsxs("section",{className:"dashboard-brand-card",children:[m.jsx("span",{className:`dashboard-health-dot is-${j.tone}`,title:j.tooltip,"aria-label":j.tooltip}),m.jsx("img",{src:A2,alt:"ezmsg",className:"dashboard-brand-logo-image"}),m.jsx("div",{className:"dashboard-brand-card__title-row",children:m.jsx("h1",{className:"mono",children:"ezmsg-dashboard"})}),m.jsxs("p",{className:"dashboard-brand-card__meta-line",children:[m.jsxs("span",{className:"mono",children:["GraphServer ",b]}),m.jsx("span",{children:"·"}),m.jsxs("span",{className:"mono",children:["Snapshot ",B]})]})]}),m.jsxs("div",{className:"dashboard-floating-control-dock","aria-label":"Viewport shortcuts",children:[m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-shortcut-btn",onClick:()=>F(I=>({...I,topologyDefaultLayout:I.topologyDefaultLayout==="lr"?"tb":"lr"})),title:R.topologyDefaultLayout==="lr"?"Topology layout: left-to-right":"Topology layout: top-to-bottom","aria-label":R.topologyDefaultLayout==="lr"?"Topology layout left-to-right":"Topology layout top-to-bottom",children:R.topologyDefaultLayout==="lr"?m.jsx(L2,{}):m.jsx(O2,{})}),m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-shortcut-btn",onClick:()=>F(I=>({...I,themeMode:I.themeMode==="dark"?"light":"dark"})),title:R.themeMode==="dark"?"Theme: dark":"Theme: light","aria-label":R.themeMode==="dark"?"Theme dark":"Theme light",children:R.themeMode==="dark"?m.jsx(M2,{}):m.jsx(R2,{})}),m.jsx("button",{type:"button",className:"topology-layout-btn dashboard-floating-gear-btn",onClick:()=>r(!0),title:"Global Settings","aria-label":"Global Settings",children:"⚙"})]}),m.jsx("button",{type:"button",className:`topology-layout-btn dashboard-floating-inspector-btn ${f?"is-collapsed":""}`.trim(),onClick:()=>h(I=>!I),title:f?"Show Inspector":"Hide Inspector","aria-label":f?"Show Inspector":"Hide Inspector",children:f?"«":"»"}),n?m.jsx("div",{className:"dashboard-modal-backdrop",onClick:()=>r(!1),children:m.jsxs("section",{className:"dashboard-modal",onClick:I=>I.stopPropagation(),children:[m.jsxs("header",{className:"dashboard-modal__header",children:[m.jsx("h2",{children:"Global Settings"}),m.jsx("button",{type:"button",className:"topology-layout-btn",onClick:()=>r(!1),children:"Close"})]}),m.jsxs("div",{className:"dashboard-modal__body",children:[m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Snapshot Poll Frequency (seconds)"}),m.jsx("input",{type:"number",min:.5,max:30,step:.5,value:R.snapshotPollSeconds,onChange:I=>{const G=Number.parseFloat(I.target.value);Number.isFinite(G)&&F(X=>({...X,snapshotPollSeconds:Math.max(.5,Math.min(30,G))}))}})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Theme"}),m.jsxs("select",{value:R.themeMode,onChange:I=>F(G=>({...G,themeMode:I.target.value==="dark"?"dark":"light"})),children:[m.jsx("option",{value:"light",children:"Light"}),m.jsx("option",{value:"dark",children:"Dark"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Default Topology Layout"}),m.jsxs("select",{value:R.topologyDefaultLayout,onChange:I=>F(G=>({...G,topologyDefaultLayout:I.target.value==="lr"?"lr":"tb"})),children:[m.jsx("option",{value:"tb",children:"Top to Bottom"}),m.jsx("option",{value:"lr",children:"Left to Right"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Edge Connector Type"}),m.jsxs("select",{value:R.edgeConnectorStyle,onChange:I=>F(G=>({...G,edgeConnectorStyle:I.target.value==="orthogonal"||I.target.value==="smooth"?I.target.value:"curved"})),children:[m.jsx("option",{value:"curved",children:"Curved (Bezier)"}),m.jsx("option",{value:"orthogonal",children:"Orthogonal (Step)"}),m.jsx("option",{value:"smooth",children:"Smooth Step"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Default Trace Metrics"}),m.jsxs("select",{value:R.traceMetricsPreset,onChange:I=>F(G=>({...G,traceMetricsPreset:I.target.value==="publish"||I.target.value==="publish+lease"?I.target.value:"publish+lease+user"})),children:[m.jsx("option",{value:"publish+lease+user",children:"Publish + Lease + User"}),m.jsx("option",{value:"publish+lease",children:"Publish + Lease"}),m.jsx("option",{value:"publish",children:"Publish Only"})]})]}),m.jsxs("label",{className:"dashboard-setting-row",children:[m.jsx("span",{children:"Inspector Width (px)"}),m.jsx("input",{type:"number",min:360,max:900,step:10,value:R.inspectorWidthPx,onChange:I=>{const G=Number.parseInt(I.target.value,10);Number.isFinite(G)&&F(X=>({...X,inspectorWidthPx:Math.max(360,Math.min(900,G))}))}})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:R.autoFocusOnInspectorSelection,onChange:I=>F(G=>({...G,autoFocusOnInspectorSelection:I.target.checked}))}),m.jsx("span",{children:"Auto-focus topology on inspector selection"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:R.autoFitOnLayoutScopeChange,onChange:I=>F(G=>({...G,autoFitOnLayoutScopeChange:I.target.checked}))}),m.jsx("span",{children:"Auto-fit on layout/scope change"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:R.showLegend,onChange:I=>F(G=>({...G,showLegend:I.target.checked}))}),m.jsx("span",{children:"Show legend"})]}),m.jsxs("label",{className:"dashboard-setting-toggle",children:[m.jsx("input",{type:"checkbox",checked:R.showMiniMap,onChange:I=>F(G=>({...G,showMiniMap:I.target.checked}))}),m.jsx("span",{children:"Show minimap"})]})]})]})}):null]}),x!=null&&x.active?m.jsxs("section",{className:"trace-dock",children:[m.jsxs("header",{className:"trace-dock__header",children:[m.jsx("div",{className:"trace-dock__title-wrap",children:m.jsx("h3",{children:"Realtime Profiling Trace"})}),m.jsxs("div",{className:"trace-dock__actions",children:[m.jsx("span",{className:`trace-status ${x.status==="capturing"?"is-live":""}`,children:x.status}),m.jsx("button",{type:"button",className:"topology-layout-btn trace-dock__close-btn",onClick:fe,title:"Close trace","aria-label":"Close trace",children:"✕"})]})]}),m.jsx("div",{className:"trace-dock__body",children:m.jsx("div",{className:"trace-dock__host",ref:y})})]}):null]})]})}Ra.createRoot(document.getElementById("root")).render(m.jsx(V.StrictMode,{children:m.jsx(W2,{})})); diff --git a/src/ezmsg/dashboard/_web/index.html b/src/ezmsg/dashboard/_web/index.html index 4cbe944..69e9a87 100644 --- a/src/ezmsg/dashboard/_web/index.html +++ b/src/ezmsg/dashboard/_web/index.html @@ -5,7 +5,7 @@ ezmsg-dashboard - + From 536f2ce1f73ab6e145116632aac9d15c309f6de4 Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Tue, 28 Apr 2026 12:18:59 -0400 Subject: [PATCH 3/6] neutral topic/relay placement --- frontend/package-lock.json | 6 +- frontend/src/components/TopologyPanel.tsx | 7 +- .../src/components/topologyFlowData.test.tsx | 52 ++++ frontend/src/components/topologyFlowData.tsx | 229 +++++++++++------- frontend/src/components/topologyGraph.ts | 19 +- 5 files changed, 220 insertions(+), 93 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8373a56..7dcc5b3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2296,9 +2296,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", "dev": true, "funding": [ { diff --git a/frontend/src/components/TopologyPanel.tsx b/frontend/src/components/TopologyPanel.tsx index 6846386..20e4729 100644 --- a/frontend/src/components/TopologyPanel.tsx +++ b/frontend/src/components/TopologyPanel.tsx @@ -224,7 +224,12 @@ export function TopologyPanel({ ] ); const flowData = useMemo(() => { - if (computedFlowData.nodes.length > 0 && validateFlowData(computedFlowData)) { + if (computedFlowData.nodes.length === 0) { + flowCacheByScopeRef.current.delete(flowScopeKey); + return computedFlowData; + } + + if (validateFlowData(computedFlowData)) { flowCacheByScopeRef.current.set(flowScopeKey, computedFlowData); return computedFlowData; } diff --git a/frontend/src/components/topologyFlowData.test.tsx b/frontend/src/components/topologyFlowData.test.tsx index 969f111..1fb0a5a 100644 --- a/frontend/src/components/topologyFlowData.test.tsx +++ b/frontend/src/components/topologyFlowData.test.tsx @@ -203,6 +203,12 @@ function visibleExternalEdges(flow: FlowData): string[] { .sort(); } +function findNode(flow: FlowData, id: string) { + const node = flow.nodes.find((entry) => entry.id === id); + expect(node, `Missing node ${id}`).toBeDefined(); + return node!; +} + describe("topologyFlowData", () => { it("lays out dense unit internals without overlap in both layouts", () => { for (const layoutMode of ["tb", "lr"] as LayoutMode[]) { @@ -428,4 +434,50 @@ describe("topologyFlowData", () => { "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", ]); }); + + it("renders neutral collection topics and relays on the same lane with distinct legend styling", () => { + for (const layoutMode of ["tb", "lr"] as LayoutMode[]) { + const flow = buildFlowData( + relayCollapseSnapshot( + {}, + { + name: "PASSTHROUGH", + component_type: "fixture.Passthrough", + children: [], + topics: { + MID_TOPIC: topicStream("SYSTEM/PASSTHROUGH/MID_TOPIC"), + }, + relays: { + MID_RELAY: relayStream( + "SYSTEM/PASSTHROUGH/MID_RELAY", + "RelayMetadata", + "SYSTEM/PASSTHROUGH/__relays__/MID_RELAY/INPUT", + "SYSTEM/PASSTHROUGH/__relays__/MID_RELAY/OUTPUT", + { + leaky: true, + max_queue: 2, + num_buffers: 2, + } + ), + }, + } + ), + layoutMode, + null, + "curved", + false + ); + + expect(validateFlowData(flow)).toBe(true); + + const topicNode = findNode(flow, "stream:SYSTEM/PASSTHROUGH/MID_TOPIC"); + const relayNode = findNode(flow, "stream:SYSTEM/PASSTHROUGH/MID_RELAY"); + + expect(topicNode.position.y).toBe(relayNode.position.y); + expect(topicNode.style?.borderRadius).toBe(relayNode.style?.borderRadius); + expect(topicNode.style?.border).not.toBe(relayNode.style?.border); + expect(topicNode.style?.background).not.toBe(relayNode.style?.background); + expect(topicNode.style?.color).not.toBe(relayNode.style?.color); + } + }); }); diff --git a/frontend/src/components/topologyFlowData.tsx b/frontend/src/components/topologyFlowData.tsx index d0dccef..0ee0b20 100644 --- a/frontend/src/components/topologyFlowData.tsx +++ b/frontend/src/components/topologyFlowData.tsx @@ -87,6 +87,21 @@ function compactMsgType(msgType: string | null): string | null { return `${short.slice(0, 15)}…`; } +function isNeutralCollectionStream(stream: UnitComponent["streams"][number]): boolean { + return stream.collectionKind !== null && stream.direction === "unknown"; +} + +function scopedNeutralStreamOwnerId(streamAddress: string): string { + return `stream:${streamAddress}`; +} + +function laneCount(...groups: Array<{ length: number }>): number { + return Math.max( + 1, + groups.reduce((count, group) => count + (group.length > 0 ? 1 : 0), 0) + ); +} + export function compactCollectionAddress(address: string): string { const parts = address.split("/"); if (parts.length <= 2) { @@ -122,6 +137,9 @@ function streamLabelClassName( ownerKind: "unit" | "collection" ): string { if (ownerKind === "collection" && stream.collectionKind) { + if (className === "is-unknown") { + return "mono topology-stream-label is-collection"; + } return "mono topology-stream-label is-collection"; } return `mono topology-stream-label ${className}`; @@ -160,7 +178,7 @@ function streamNodeVisualStyle( border: darkMode ? "1px solid #fb923c" : "1px solid #f8b66f", background: darkMode ? "#2a2115" : "#fff8ef", color: darkMode ? "#fdba74" : "#8a4f10", - borderRadius: 10, + borderRadius: 999, }; } if (className === "is-output") { @@ -180,10 +198,10 @@ function streamNodeVisualStyle( }; } return { - border: darkMode ? "1px solid #c084fc" : "1px solid #d3accb", - background: darkMode ? "#251b33" : "#fbf3f8", + border: darkMode ? "1px solid #d8b4fe" : "1px solid #b07aa1", + background: darkMode ? "#2a1d3a" : "#f8eef5", color: darkMode ? "#e9d5ff" : "#6f3f66", - borderRadius: 10, + borderRadius: 999, }; } @@ -418,6 +436,12 @@ export function buildFlowData( const scopedCollectionOwnerId = scopedCollection ? `scope:${scopedCollection.address}` : null; + const scopedNeutralStreams = scopedCollection + ? scopedCollection.streams.filter(isNeutralCollectionStream) + : []; + const scopedNeutralStreamByOwnerId = new Map( + scopedNeutralStreams.map((stream) => [scopedNeutralStreamOwnerId(stream.address), stream] as const) + ); const unitOwnerByStreamAddress = new Map(); const collectionOwnerByStreamAddress = new Map(); @@ -494,6 +518,7 @@ export function buildFlowData( | "unit" | "collection" | "scope_collection" + | "scope_collection_stream" | "collection_proxy" | "orphan"; } @@ -517,6 +542,12 @@ export function buildFlowData( }); } } + for (const stream of scopedNeutralStreams) { + registerStreamOwner(stream.address, { + ownerId: scopedNeutralStreamOwnerId(stream.address), + ownerKind: "scope_collection_stream", + }); + } const ownedStreams = new Set(streamOwnerByAddress.keys()); const relevantRawEdges = rawEdges.filter( @@ -541,6 +572,11 @@ export function buildFlowData( ownerIds.add(ownerId); ownerLabel.set(ownerId, collection.name); } + for (const stream of scopedNeutralStreams) { + const ownerId = scopedNeutralStreamOwnerId(stream.address); + ownerIds.add(ownerId); + ownerLabel.set(ownerId, streamDisplayName(stream.name, stream.address)); + } for (const streamAddress of relevantStreams) { if (streamOwnerByAddress.has(streamAddress)) { continue; @@ -712,10 +748,14 @@ export function buildFlowData( ownerSizeById.set(`unit:${unit.address}`, { width, height }); } for (const collection of visibleCollections.values()) { - const inputs = collection.streams.filter((stream) => stream.direction === "input").length; - const outputs = collection.streams.filter((stream) => stream.direction === "output").length; - const unknown = collection.streams.filter((stream) => stream.direction === "unknown").length; - const maxRows = Math.max(1, inputs, outputs, unknown); + const inputStreams = collection.streams.filter((stream) => stream.direction === "input"); + const outputStreams = collection.streams.filter((stream) => stream.direction === "output"); + const neutralStreams = collection.streams.filter(isNeutralCollectionStream); + const inputs = inputStreams.length; + const outputs = outputStreams.length; + const neutral = neutralStreams.length; + const rowLanes = laneCount(inputStreams, neutralStreams, outputStreams); + const maxRows = Math.max(1, inputs, outputs, neutral); const streamDrivenWidth = Math.max( layoutMode === "lr" ? COLLECTION_NODE_WIDTH : 300, requiredRowWidth( @@ -736,24 +776,25 @@ export function buildFlowData( 124, COLLECTION_NODE_HEADER_HEIGHT + 16 - + Math.max(1, inputs, outputs) * 30 - + (unknown > 0 ? STREAM_NODE_HEIGHT + 12 : 0) + + Math.max(1, inputs, neutral, outputs) * 30 + 12 ) : Math.max( 176, COLLECTION_NODE_HEADER_HEIGHT - + 14 - + Math.max( - 1, - (inputs > 0 ? 1 : 0) - + (unknown > 0 ? 1 : 0) - + (outputs > 0 ? 1 : 0) - ) * STREAM_NODE_HEIGHT - + 12 + + 18 + + rowLanes * STREAM_NODE_HEIGHT + + Math.max(0, rowLanes - 1) * 12 + + 16 ); ownerSizeById.set(`collection:${collection.address}`, { width, height }); } + for (const stream of scopedNeutralStreams) { + ownerSizeById.set(scopedNeutralStreamOwnerId(stream.address), { + width: STREAM_NODE_WIDTH, + height: STREAM_NODE_HEIGHT, + }); + } for (const ownerId of orderedOwnerIds) { if (ownerSizeById.has(ownerId)) { continue; @@ -871,7 +912,10 @@ export function buildFlowData( if (scopedCollection && scopedCollectionOwnerId) { const scopedOwnerIds = orderedOwnerIds.filter( - (ownerId) => ownerId.startsWith("unit:") || ownerId.startsWith("collection:") + (ownerId) => + ownerId.startsWith("unit:") + || ownerId.startsWith("collection:") + || scopedNeutralStreamByOwnerId.has(ownerId) ); let minX = 24; let minY = 32; @@ -903,8 +947,11 @@ export function buildFlowData( const scopedInputs = scopedCollection.streams.filter((stream) => stream.direction === "input"); const scopedOutputs = scopedCollection.streams.filter((stream) => stream.direction === "output"); - const scopedUnknown = scopedCollection.streams.filter((stream) => stream.direction === "unknown"); - const scopedStreamMax = Math.max(1, scopedInputs.length, scopedOutputs.length, scopedUnknown.length); + const scopedStreamMax = Math.max( + 1, + scopedInputs.length, + scopedOutputs.length + ); const scopedRowMinWidth = requiredRowWidth( scopedStreamMax, STREAM_NODE_WIDTH, @@ -922,12 +969,12 @@ export function buildFlowData( scopedHeaderBase, scopedStreamTop + Math.max(1, scopedInputs.length, scopedOutputs.length) * 30 - + (scopedUnknown.length > 0 ? STREAM_NODE_HEIGHT + 10 : 0) + 8 ) - : hasScopedInputRow - ? Math.max(scopedHeaderBase, scopedStreamTop + STREAM_NODE_HEIGHT + 8) - : scopedHeaderBase; + : Math.max( + scopedHeaderBase, + scopedStreamTop + (hasScopedInputRow ? STREAM_NODE_HEIGHT + 8 : 0) + ); const scopeBottomPadding = layoutMode === "tb" ? hasScopedOutputRow ? Math.max(COLLECTION_SCOPE_BOTTOM_PADDING, STREAM_NODE_HEIGHT + 20) @@ -1105,23 +1152,8 @@ export function buildFlowData( }, }); }); - if (scopedUnknown.length > 0) { - placeUnitStreamRow( - scopedCollectionOwnerId, - scopeSize, - scopedUnknown, - 56 + Math.max(scopedInputs.length, scopedOutputs.length) * rowStep + 4, - "is-unknown", - "collection", - layoutMode, - nodes - ); - } } else { - const topInputY = Math.max( - scopedStreamTop, - scopeHeaderHeight - STREAM_NODE_HEIGHT - 8 - ); + const topInputY = scopedStreamTop; const scopeFooterTop = scopeHeaderHeight + scopeContentHeight; const bottomOutputY = Math.min( scopeSize.height - STREAM_NODE_HEIGHT - 10, @@ -1147,27 +1179,52 @@ export function buildFlowData( layoutMode, nodes ); - if (scopedUnknown.length > 0) { - const unknownRowY = chooseScopedUnknownRowY( - scopedOwnerIds, - ownerPosition, - ownerSizeById, - scopePos.y, - scopeHeaderHeight, - scopeContentHeight, - scopeSize.height - ); - placeUnitStreamRow( - scopedCollectionOwnerId, - scopeSize, - scopedUnknown, - unknownRowY, - "is-unknown", - "collection", - layoutMode, - nodes - ); + } + + for (const ownerId of scopedOwnerIds) { + const stream = scopedNeutralStreamByOwnerId.get(ownerId); + if (!stream) { + continue; } + const position = ownerPosition.get(ownerId); + if (!position) { + continue; + } + const visual = streamNodeVisualStyle(stream, "is-unknown", "collection", darkMode); + nodes.push({ + id: ownerId, + parentNode: scopedCollectionOwnerId, + extent: "parent", + draggable: false, + data: { + label: ( + + + {streamDisplayName(stream.name, stream.address)} + + {compactMsgType(stream.msgType) ? ( + [{compactMsgType(stream.msgType)}] + ) : null} + + ), + }, + position: { x: position.x - scopePos.x, y: position.y - scopePos.y }, + sourcePosition: layoutMode === "tb" ? Position.Bottom : Position.Right, + targetPosition: layoutMode === "tb" ? Position.Top : Position.Left, + style: { + width: STREAM_NODE_WIDTH, + height: STREAM_NODE_HEIGHT, + borderRadius: visual.borderRadius, + border: visual.border, + background: visual.background, + color: visual.color, + fontSize: 8, + padding: "0 6px", + }, + }); } } @@ -1240,7 +1297,7 @@ export function buildFlowData( const inputs = collection.streams.filter((stream) => stream.direction === "input"); const outputs = collection.streams.filter((stream) => stream.direction === "output"); - const unknown = collection.streams.filter((stream) => stream.direction === "unknown"); + const neutral = collection.streams.filter(isNeutralCollectionStream); if (layoutMode === "lr") { const rowStep = 30; @@ -1320,25 +1377,37 @@ export function buildFlowData( }); }); - if (unknown.length > 0) { - placeUnitStreamRow( - nodeId, - size, - unknown, - size.height - STREAM_NODE_HEIGHT - 10, - "is-unknown", - "collection", - layoutMode, - nodes - ); - } + placeUnitStreamRow( + nodeId, + size, + neutral, + top, + "is-unknown", + "collection", + layoutMode, + nodes + ); } else { const topInputY = 86; const bottomOutputY = Math.max( topInputY + STREAM_NODE_HEIGHT + 10, size.height - STREAM_NODE_HEIGHT - 12 ); + const neutralY = Math.min( + bottomOutputY - STREAM_NODE_HEIGHT - 12, + Math.floor((topInputY + bottomOutputY) / 2) + ); placeUnitStreamRow(nodeId, size, inputs, topInputY, "is-input", "collection", layoutMode, nodes); + placeUnitStreamRow( + nodeId, + size, + neutral, + neutralY, + "is-unknown", + "collection", + layoutMode, + nodes + ); placeUnitStreamRow( nodeId, size, @@ -1349,18 +1418,6 @@ export function buildFlowData( layoutMode, nodes ); - if (unknown.length > 0) { - placeUnitStreamRow( - nodeId, - size, - unknown, - Math.floor((size.height - STREAM_NODE_HEIGHT) / 2) + 14, - "is-unknown", - "collection", - layoutMode, - nodes - ); - } } } diff --git a/frontend/src/components/topologyGraph.ts b/frontend/src/components/topologyGraph.ts index 4e18639..349025d 100644 --- a/frontend/src/components/topologyGraph.ts +++ b/frontend/src/components/topologyGraph.ts @@ -56,7 +56,19 @@ function isRecord(value: unknown): value is AnyRecord { return typeof value === "object" && value !== null; } -function streamDirection(stream: AnyRecord): StreamDirection { +function streamDirection( + stream: AnyRecord, + relayType: RelayMetadataType = null +): StreamDirection { + if (relayType === "RelayMetadata") { + return "unknown"; + } + if (relayType === "InputRelayMetadata") { + return "input"; + } + if (relayType === "OutputRelayMetadata") { + return "output"; + } const hasInputHints = "leaky" in stream || "max_queue" in stream; if (hasInputHints) { return "input"; @@ -143,13 +155,14 @@ function parseStreamEntries( continue; } const isRelay = collectionKind === "relay"; + const parsedRelayMetadataType = isRelay ? relayMetadataType(streamValue) : null; out.push({ name: streamName, address: streamValue.address, - direction: streamDirection(streamValue), + direction: streamDirection(streamValue, parsedRelayMetadataType), msgType: typeof streamValue.msg_type === "string" ? streamValue.msg_type : null, collectionKind, - relayMetadataType: isRelay ? relayMetadataType(streamValue) : null, + relayMetadataType: parsedRelayMetadataType, relayGroup: isRelay && typeof streamValue.relay_group === "string" ? streamValue.relay_group From 7db8982036632945e4d2c5ca7f79064f7b97d580 Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Thu, 30 Apr 2026 11:39:50 -0400 Subject: [PATCH 4/6] remove local ezmsg override --- pyproject.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2448b9c..da4b7a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,5 +56,3 @@ artifacts = [ norecursedirs = "tests/helpers" addopts = "-p no:warnings" -[tool.uv.sources] -ezmsg = { path = "../ezmsg", editable = true } \ No newline at end of file From b10bed79cea3549f01870b90620f9c3849518daf Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Thu, 30 Apr 2026 12:51:28 -0400 Subject: [PATCH 5/6] fix relay collapse unit tests --- frontend/src/components/topologyFlowData.test.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/frontend/src/components/topologyFlowData.test.tsx b/frontend/src/components/topologyFlowData.test.tsx index 1fb0a5a..235f46d 100644 --- a/frontend/src/components/topologyFlowData.test.tsx +++ b/frontend/src/components/topologyFlowData.test.tsx @@ -336,9 +336,7 @@ describe("topologyFlowData", () => { expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); expect(visibleExternalEdges(flow)).toEqual([ - "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/MID", "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", - "stream:SYSTEM/PASSTHROUGH/MID->stream:SYSTEM/PASSTHROUGH/OUT", "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", ]); }); @@ -383,7 +381,6 @@ describe("topologyFlowData", () => { expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); expect(visibleExternalEdges(flow)).toEqual([ - "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/OUT", "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", ]); @@ -429,7 +426,6 @@ describe("topologyFlowData", () => { expect(flow.nodes.some((node) => node.id.includes("__relays__"))).toBe(false); expect(flow.edges.some((edge) => edge.id.includes("__relays__"))).toBe(false); expect(visibleExternalEdges(flow)).toEqual([ - "stream:SYSTEM/PASSTHROUGH/IN->stream:SYSTEM/PASSTHROUGH/OUT", "stream:SYSTEM/PASSTHROUGH/OUT->stream:SYSTEM/SINK/INPUT:sink-input", "stream:SYSTEM/SOURCE/OUTPUT:source-output->stream:SYSTEM/PASSTHROUGH/IN", ]); From ebc008482ceef85f80393cb336f35760bd17442f Mon Sep 17 00:00:00 2001 From: Griffin Milsap Date: Thu, 30 Apr 2026 14:21:42 -0400 Subject: [PATCH 6/6] addressed remaining test failures --- frontend/src/components/ProfilingPanel.tsx | 11 ++++++++--- frontend/src/hooks/useDashboardData.ts | 3 ++- .../long-labels-topology-dark-darwin.png | Bin 69384 -> 68986 bytes ...collections-pipeline-scope-dark-darwin.png | Bin 62006 -> 69159 bytes pyproject.toml | 2 ++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/ProfilingPanel.tsx b/frontend/src/components/ProfilingPanel.tsx index 21b390c..71c870d 100644 --- a/frontend/src/components/ProfilingPanel.tsx +++ b/frontend/src/components/ProfilingPanel.tsx @@ -233,11 +233,16 @@ function extractTraceSamples( ) { continue; } + const canonicalEndpointId = canonicalizeProfilingEndpointId( + endpointId, + relayEndpointByInternalTopic + ); + const canonicalTopic = canonicalizeProfilingTopic(topic, relayEndpointByInternalTopic); out.push({ - rowId: `${processId}:${endpointId}`, + rowId: `${processId}:${canonicalEndpointId}`, processId, - endpointId, - topic: canonicalizeProfilingTopic(topic, relayEndpointByInternalTopic), + endpointId: canonicalEndpointId, + topic: canonicalTopic, timestamp: typeof timestamp === "number" && Number.isFinite(timestamp) ? timestamp diff --git a/frontend/src/hooks/useDashboardData.ts b/frontend/src/hooks/useDashboardData.ts index 039d484..6973965 100644 --- a/frontend/src/hooks/useDashboardData.ts +++ b/frontend/src/hooks/useDashboardData.ts @@ -548,11 +548,12 @@ export function useDashboardData(options?: DashboardDataOptions) { }; } + const requestedTopic = request.publisher_topic ?? request.subscriber_topic; const scenario = (dashboardFixture.traceScenarios ?? []).find( (candidate) => candidate.processId === request.process_id && candidate.publisherEndpointId === request.publisher_endpoint_id - && candidate.publisherTopic === request.publisher_topic + && candidate.publisherTopic === requestedTopic ); if (scenario) { diff --git a/frontend/tests/e2e/dashboard.spec.ts-snapshots/long-labels-topology-dark-darwin.png b/frontend/tests/e2e/dashboard.spec.ts-snapshots/long-labels-topology-dark-darwin.png index 2b5416b98a1712b14762e93b7b403caccadec496..2a0bc4ae4fc68d78e06e3d0ed332cfb780c64003 100644 GIT binary patch literal 68986 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

fXHpWVb$WAUF)=l2dS2n(N7K0q$xiOZ5>)^* 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 literal 69384 zcmX_{19YXq(yn7`V%xTD+s;H2+qP}noY=N)O)|0Vik)5~i=& z(WwG1c7fjc?{ofm-~68k*dN86oh|<0JuEz&wUZYO`Q=@?y)?Z%ZdX$=5${u6Zda6z zk2cU?LP&t`U$5lxd4k1*3x-zbSQS>k8kW}QBt#Z}Yhn+4@bc%8>^U~DD1&>`D=~f4R?8g8h<{yF zqfM|Mxc(?GH>obD&=EyFga*5rJcNaTf%#wilvFeozcnjq(LX|JBh!*H5;A2ek;1{m z%~r(C)I-3*xz^XWva17y=aOE*g$oiJn9~`PQB&47xV1O9VIm_dpqZ$k=Z9tw+)U}{ z3<7y=d>vOzk)$G}rBhvJJiLW0m5~GfjY%(zh>D6D+wxj?{D81GEra;%*wVlV7YQF5 z3mch$fP(8!G&MCoP-8ux&$aUSsbtYYM>D-r?_M*T;wn2N9IVWYOu=M453$6;hR7h9 z=HPTp;5dnY4Ug4{< z-Dw^AYOEa2q)lv$4e2UL5iyUYQIbeko^_Ovg9N1nRY{mAB55}LcVG?$A(JywEw9zt zNXVp?EWS!8DJfMe)*0!jpg-co#6nCrTFUF=vy${wRZWg{+1RL3DM@;1&I!iTCNh(f z)HFrc+EwM`XmwUfqKXTN2R7!}$cTW^kO6by&TIVeKANt&aZx4znDk2;w`wIa1_tA1 z@_KoEa{AE3e3P@Sv@CV{^|7()EqV+&vaSsaPhrev^J1-xNp6@OSp4MIT%oPUjN z{&Di~@M!M{B_A??##BZAS#)0zq&h3&CJ-I zuEakO_6FLMuJDYa@xPN?RVQB@p zQP<3JfgruPwxFV3@Wtu=GqpJ&f|t93HKBNB2JNP##>KG-Z?3M>OHG4Erz(6befBG0 zR6!pKIwm=FXMKESYf92UVRL1p>!d10QbR&TFGsD@OpV71mbz3DwW45V|L%oB{}n3a zyTTmY9Ma3!ScH!cZ-3O@#lfVJO*cC`y}|y4N-G)1iDd!V*4$hSFq>6@K!6SOay~U8 zNMUu#>IMDw&65%_?XGpjS|s1}v~)JOHAH)M8@{lJrATP_avYZZeYefza3+6NC`YMP zarW0)m9bl~U+_AdAs>(%3OY75!bL@Uz0btu1}+S(gD^rf*w9uksX0jCkm6Wo!HnB3bLVfLz9@?MUxI8|df@NTxI^UwArBu4NQIL@q zd*{T-?e+<($;o+#Mcm##_~Pnq2ll*tkGX@J0xIFNwQXJ8?9IXC1W7!NzaC&>Vq<5d zL%h9@%a`Wo|FSVR|7DH)FdUbZL((Jt^~B1~*4XqrA}*pd4qR@WMGKqOCABu!SKQOH zwp?f}(;8idkAx(N`*ZIj3}0x&_YSO``^|I6ASfZjMch+bY|2NG5Y^1I7%Nk|gnR_a zPkF_p$ASutbz7vOxs*zbwBq-YQ^r+Ik;FqDzbPu%%n)B&;tMm2fP{uvRink{4*E{i zv4WD4I=}aY?s(1qeo{k2J9Gq<(U0Ao{-_w4vxS27usGm#uHEd|Olx=ziuaSXA>xdp z#Iu##Y-We1?i^D~?U6^FXSXYE*-}cc=`zbJDu;$C@_1eT3>;=HQP*!->-P?HXIcpw zo-A9ncDh=mWo2=4GgPA1|!@e7@Rlb_!dm4_j(_2#d?B+pL%Ic0x+F(qO36=p;vVykGGN3E8!n zh{e;E&tQd_Dt<@A6>$60;od2i!@4oEf=uoHu$CdCVW)Dd*z#xat=aC}#?rdHxEL4z zN4LrA#$LR=C7otyDnl-O!18%Z3>I6Py4>?abhVg_y59|v-2{mQ+{tFAjK1y8gdYcr zqoJh{lh>)h+^I+g(Jo1+8?V=c|BI2cvoj8>jqBrwMTBp;Pb>aq=aZtkdg+GWX?4Zz zZ&TmT=D>P4*HaevwwxdldG(d(-z4Q@zJn5McFUnK=H_O$yY<|}q{Uv}LNQsbNV~4r zsWEm2{An%6D>)qx7Xsmye?&T4d)*)6<7bvUqN?281qm4#?3M@G9hj7l%fXiyjQf!4 zIvx#MlS1LAQq~U{40_j>y4ECdanPDw*M<4>4C)*fzXm1dEoO2!J&(^!g`Ly6UC%4Z zi^05nzt0Y@rq78SNA}UgM@IJFi<$9QOhYxg-|P`X^uJGoI!B+c$tGrkGn}^htdI+n z2%ez5$f@BhD9YegF1K3kHcORV5W~kz&)KmsvHO41(^7JFd5xYQE0mDwx7d>4{y3|a z43E;|w&G@MkobDK;BiiO%R*Sf=giJ_nM7C8Ksm^u4I(O{5R84c+vW5*0n+lXXw-5)W`9 zGMii;ow1tO_iF32g~ny#;_1Edsf(|ePPF2V)w0P^5ku$xmiBcS8eaF^Z!17Lxw90K zHL7IRQ4>o`nUeb8ID5EFe@{EF0W6K7!BK`nrP9Js%&itzm(6bgEo!vQX{{Dl6~qPT7z&mk`LDr{aZt$Q52(IRd}{?N#p2lk$YY z4!hs)m*(o^J)PX!Xi!sAzq{6yohds_QoFc3 z7L7_Ba{qMy{-(>5X~h97MWGt5d-Z|BiikfGrcNh(g0VZ(I0#rwuPc`lCO>toDz`H^ ztn!K94D zL`qLYqa)Pwjj;p$Iz4f|+`e9Jq?q&Q>n{53CPN=~zl~pfq4h-V@vNwQOFo;6DF3{a zY{Ir|_mnvF(sp^S?&tZ9j=zpkr!VmHqc~)dT%_0KX-tS(D6Qu+tJ(VVb{of{b9rtK zDCFVqpKfC>*Xeij$NU6ieLf%Rn)o@50O5_6r(Ga{-54)K_&i3B;jN5?CtkxL%zBPs zNJyTJ4&;(Q&!-2u)91!TMOCYnY(^tnSD%o|-3+==DiUy|3x5yM6c|8YPA?}h!dz|a z)(b@HfJH8BIRjXAnVljV5|L93cLctXO(3ZlnVABZ^SB-N`loT~XIJpJ4Y+**TU5uT zip+MFyDcwwdtM(K%PeWtlTvF)k&}5{?d6gG4pG9P+eR!lyCdG^2rRI#t}L5cS)_E> zyxVRI5z%F{GqG`jXF_3%hDvff7~09If;FWiRc%(2(d4hhUGLDVc=7u^?Df~+815}C zt{QaMI>mhjwbs585FN^<3N2$VhrGVBS*;d{B7@_iB1y^Vw5D|11k~?czgknu1j!+A z%%rXAZd6MR5*JGPCM4&j!HV;+xx{QC9~2$VYD-C3d~I3qb-D%KTy=*XDoHXo(5s}d zty?3cd7ZuR)6q>M zK;Ist=e_yt?#kVr;qN8yPmt;wT4$Fgofc~lVvFU-kbLUBCqC|t>ce|*0-q0T zc0#qK3#+Bw@WVMA3u_^($aEsJ&rz7C=?7% zPtUA1JK+{)Gq@6vrC1dQIP3)8e4qnC?%n^g+y*m=KsOvydfq*_1ik4auQVk3Z^GKv z8Bzd+fJG64pQuf5Hd$@9pPT0)!e_BVTCE&5mf7m}H2oYzpGXA~4@Y@_R>T9+U*KeqocrI5II;;W=IRt2fW-*kf+9KYJP6q zPw&*=@OOJj3}Jg_iFt;UNrlXK4u1Z1p-6N%RWAXL$rk z268Je2Rn^S4cx8uY$KJ%QgK>V^eXb;>2)_mk{UZXakAPO^pJ`UMDe>C_Ch1V6HOLX ze;f@rf^N177S|LV{N;k}dyRta1 zQ4NmBNlQuVvU_zjMb0d*u)##Z5(Dp3NzKd#^X0HixRp(XSi-2?Y8*uj!iJC_JyZvsOpVCkdP&A% zwLr(iGBOG|z?O1;h<0r7yW2B`=3Li`mthvD+|v5)baXgZpDw>?ht+^?H=5Gc(b(~( zP{3sKUh|L3`{?5YY26ZeZ&9z)zub7-j7t5|Icte$Gf7r11Z)u!q|5dcJO`5z41J-b z?K~~iLqU>-3z9&ezqw`Lzp5&!2d5JvSsCX-BC&8z7q8egm*xxujKPxQ1BZfv4J;Nr zxVCx;?VrC?6j?ABwySkEQIOqEw-7{;-5=O(i1O6mAI@Z{iud;F9Z-7KCF%8hjErpI zT$6d8@j2`kfM{72;lkt4w;%T)m`oQ=ibiMXwOZs~n)7}wR<1cO6?ucjSIuv!}c{TmK*6={x-{DuWuFXEz1`;VSPu;4IVw2!Q1pt2epDxMYsI( z7l<93n6znamd#p{;6?zK+tG7$Mg&=FXoL(7kIQs<;&m`A{tk;3-W}+)*$@n5+3{e4 zsXRX+0eFbj21JkW^`+VK^QmSN!N2Nuza2E*_*y?lqi#JnHI?hOlF$~entk^34S_9cgDB!)tX6o?X3jvqg`lDEZU?-3pI0Ve?I7@?`d}ss?pACVR ztsc4=#moHI#!5Y)u|j9pcMdTG5>luR^!dsh@w&(Tg^`;&QFmEVRYpcT(`mKdO zC^R;c*JY(`et6i>s@Zz=hx5YXyW5tPr;s_}-fh=rOPMJ01JpreF9zTI-)ItV@{o|Z5|Z^aMB;gl}$ z=%oHELf(iqJZ>S_e15Xr@Vzg-AQsF$f*oF=fwJ^G{+esimD|6qrr2w6xr=mmaTE<4wt^ZMgW`ou5~)EbwwqHs|Vqw9O2C&B_qjykqq3(h+NRmeY$&snWsPOfa$ zCBSl(&sc3Q^zp7TBA;sw61H1wX^!GQZ=)a>nDLpt(!b*&*2eaK}Ld$pX} zsHxbt@-6PO(intIY;A3=omE?XL4^wWdfXtzkV7&dc-|>uHj*JIC~&UIMLimAx5|NQ z;(z|!PfSvQ0_+c&!>O$k*w)GvOVxjJGcw3%DQ_M~N8$XXq;hRambJ4ND3X$aI*iOI z8enI~W`P$IhP1;2+=W@GB@2d}%U!HGvof$(?yC2GYV)^`2+3n#Nvcuhl`vf3WNt`wf+zk(3IDAEyA1d3XP9 zhBmh{55l89PH+gt!cGcVZgy->*^P#cO{AX~>0;9%SlbytfavdB*C2(TfMm=OB3FC zhJD?W6C;u%OsySnkO>!X@? zQ47T!g7lER>q5WPnvD*prN7s?iO<&SP#m6f^m8!*C4c&2=>Q5X5{(wtsr?LQR=U!- zyYAI+(x?HS&;IlHXm=<@_iISfXy2sMmBQtwgTD-Xgkn*agGfo=%Kz+Iju%=0sTC!IOh?k`{}+ z+@Kb&meD6r@Ug+XfT}PxK{8t{6t02Mzx7xNEN}N#ro-zQ3w5Kj_;D`Q!d!jI1~y$! z5kd(pN~vJvxeZ zPrBLZ#ze+f(?$(vGMf`Q4o{x&af_ZV|nur806y2fr_bESltC%22f64;B6@9hZ@Y3QBT z3R&4$5llrQ019(lctnO)iY2~1*2w6PiK*#??W`L^-XK2UnnT(H>F!yf zzKv2XWRE5hl6JfW!JuQmhtbv`h_+n28y@TTw1&SEu!b>G+nVf4~d>^;c!&?{kiya zXG$lOK__KcuBgGVy$fd{t?kdu(%5e~a0n9(_rTp`fsFm*bDV>cpGZtYhlQO#Bv)2h zQ*rFiZGP@4mKHLJ`!8nZNO%VWkU$~7x!YL-bT5>POPiVOE%*r_6S*k%?x9PXXvH%y zSw(p@Y7Q1f;N>_EW*m8ZtePxJtV=F5uyUD}5z(8S{t0V?) z4R??`27pq;_4d>52nXx5)$Uj>ylJ(vS;wIF&HnriS}gIWk5-lbrVEkr{^-FU2?_c}IhDbc+SOixkC5L$bN_R7MkD`y` zbIp>+EH?qKH_ypZziQfPG-=u7l$85z9Hxigj6d2*Y^$y9 zG?%OfHv2QLDN<5X*{yXG1Mg{eeUhtMQ^(%tCV%I~*pKiGo60LSE z=UX)$8a90MR$2_AgHtil(|f2c&h#x=fpx(&N3f7Ma@%65!u(!_LRp&^j_Ttf2Rj{ z0(zfhP^28paG*dOJRsuN*~hTqS$JG51d|ZFd|@~gL(hi_GD?o#_;G8Po2`0{zS9z_ z@>@`W!~2HX5(#j>v*SQJ-VgO`ymBlV8mq!+=hMaAu_2SQ@P2!tm<(>Gt%r;Uck>Yv z5Pb8O-)!sWu9w#=?k~A?I3`ULm>GK%zacqWG34^#BwTMR*-%PnQ_a&`IP($ya8FE3 zov=7_t`)?{O`l?58u0sU{r0MRZ>>GY!TJ#nWs0_}EC35J+XQ<&yVm@!=q>#7&uYI7 zI=Y#$IK0+xM?GI(D$oPNZ))nw!%6HL`#R|`Ik}jUcK^S#+PU7%tZds=?Lzt#@;QDF zFYCSEI&fFXx)8lXDb$fS38U9#or@xulRsioIh6 z6^4VQRU8Ky0{%4fR=q)n_PpPKTZ^e}g%Tc|PXCh>8yRM};A2T~jFF-rk{EOaUd0=irp7s;UZ3JD)H!Qnf#{CR6o&Bqb*@ zyM0Zx4@uX9<_L5XAPBy*@9Yh{znrqHc^Tf01<*Yc@HshsvJ3ryN+74}kl8f1mIc8y z+k>-RZSm05Ol}MHAGM;s`54~h^NJIS-7oT(nvTxN!2@W@2m4SPJhpy5(}xfbebD~%yz11rQnRdSxhReR z-bk?3bBRknSM}@D+|o9KY^6YYam8M0tJ|~0bQ3|Xav3NgIVlOebi-v5gNYoX%KwGf zeX9>?q1r`kQX=w<_ahfM8L4nXQ?g0DaX?j6^y^!T>uS$ub@e5GkB3;VQhI78 zNYA7fM_qtuJ_L(tvALuSZ4h>|Wsu$c@nzOS6Du{u&`@>>P2VrzJDL3ur^v3Zt%16@ z=s6~pZMv~eI>^|eQC}RIxfWxNHC*1ZrJv2%YDUod%lPD1k z@i74X+hGr#)TD*tVxoVYi)k`LwR{n%%aj zyP@VA+lSsmCmFmf*+v`l--BOsJ<|#V`pCV9!$U(95#Fu!vt@|%xjfAZ-XambT0Q9!g#v^MlIN?8J~!rmia;jlk4;ry zpp=aP10&)m9Ntgrf*9Uh(;QIWtD$j88kQ`q%!33+2RciOGf3R)ID^ua`bbu|a& za>iC{yu<4U6GjfWH8;7}1&9<-JbkNfi8h~egbvx_vz-jZT_>}b6nix$&q{nEF5pXf&U(9>5srgQLAQxl_@Q+pC@kd^{G+~rI>nVE zbkTa`f-FL69P-(Yjfsh!ot?Yhj)rz7yHRvQq=<83f_mTef!P#ZRNRllcJB|bVd z@M`kYS~NyIH1UGZ9(PMQShBU*b{8W!HX}odyUlJt$9>L1-7xE# zhoXIX)_JRjKq{RDC|W=(u(q;}Ok<>u!y6*Mub~?9E|<&G z;wq3DekDEODL_O&ab!e@$>EHWUTj{ipFBnoa!sBAO<8GFxK)f!sp9Zx>+C0AQU#}? zvRJaeR>orY+{igETPp;1CgArCO{H>4YMw-&(Qfbt+~Ugb^0-_jwWV)h`{3X5V*XAh z76=7|ijRbd4Ufi-9wOk$V5j!QJDoTDr8Ilni^pfu;Gkx>IrO=G^!bd&b#%C20GF}a z^c4vmjN903Hb`jWjsdfb6L@pfvT!$*avPFfrxR2*0*tX_5A~78q6-a3;Kl|JAZxA z2fup!b>=P6QonP&Czs9k`8yYjjbHrDP00y{e(!kb8HN9pmzSq=Rb8jwsirq|pkCH; zyf!Zah*yXva{!J-a2e#ZNj0T;EFRCb%T7eEC!!ooK+HW#)XpB((dl%)!*oI$1iYoE zCVDwm&2lI>3=N8GRBbF>Hj&UkYj=h-qd2#AWe!-6{}r6io%R)LRZ(-Zn7DXqo*z=$ z`?N8$iQ=^t$Cba6oQ%rB<9(K)1F)9av93n$b|6txhs3|w3X5wtJ3G2Hd<+9H5t)XT zPF9dH+Lfa3R{#~&sVJ6%i-W3?`qu>k<&V0mqQgH*WR#TE#SF>@29PFOlN#5D7Y7!W z9%>3wawV)K*}njv^HU`Rgmr&5$-d(#uV(b`PJR*+o7E8)2yyYd3t(%~jSX(HW69w2 zp{W6077`V4NG7U{YfH0CBn*bxGQs{xpczpthPqGDzN3OFyZGEp zV*ag2!re=b04v3>=i)wAwbHaoX%Gm+dhKzKi)gv&J~k@f>m8SmsS1&Iz)oFISx9}g z00NquP$BixJ21O3K!j;eJ}W{0$SPYr#2Zqss#vFnbna!NgZsA<6WJ^b*CvWQ8mF>- z<=?N;@pC|Yr1}C+xc3Fg4|pYZS@8X?jq8pSBE|k?FLq!ckZ6$HY>clVzNVt2q6QD; zsl;2Ws+{tAyL-Ix%`I-UY*tsd)q#f(Ry(61wRhtFSoU(U6X!wQpa%>M6;0j63Al6o zfMS+HA3E^zCbzLXit#L2lnW;)9*DWryp9 z9xXw|q2a1$C(guJK|H)^@|Z4b+UW(B230lHY`hu*0YAUz{;Giifx|!hlVziX(R~(B z6Vce$A1Aky{GcO9W7q!3QVn5;#FAnn5ycX+2So{yA^^%y$AE*q3&h;y%Zah2UP)ZQv-x*> zOk}3+YprfizH!)!#VHm<;p~!P03cWwi_O!#WD_Gt=Lnvi9Q+H*B3X6W6dqDZMMFbb z{l^WaIJ?giY}fZqMqwc`Z?MogSePiU`@_%qhUU23uEdtsHP=p1>-&t-3f$u*>=5@PWt-o7XSy-f`f+Ahq1Y7YD)6R zMC}4K$`8Rd7rtmP$nUSn46~w|T4RG7+{?>;+{8wW+2BciW3aEWO}BHnP$7RF}2>DSk9N{!Ebw*xwQ}b5nDL{=fm1!%Sf?GBQo3>RV+h?-)a}s3K5ID!#44 zO~61AdW3=oC5Y!%-~o8q_+EGtmc{Ig>cCzL=_|k_!1DnmJG|?Pr^hihMYGZCUK+yO zN1W`~zbk22NzekcMl0p-Kgq_({sZRzFvAt)ABIbf;KH6&Q<8#SHbu-vCEj=N6`*x|e0YYFY47O!HO4Z=O~%BXX7EPwTPE*^l2AZ+3=|XH zyX-4~G=#cyVrpza?_PRxqar0FVN;TV=2he#niY|e&`?q$VqrU-ox)zBrl$JZ@;}6UoJzD1~(UY_!m{phctwdaHu;rrdCxYy3hNH zyZp*hGZRaEtPic+ApmJQmY2z(G@^}i*S1L+841IpoCsh_wXn~45yAxj4U<7gK?atN z3=8#8-Ax@<^|Yj=a&=4)PTXWkue&C{AWgcaW{9^h$v1f~jg?YQtw1gVk!R8LP=j@I zss?EU<;0AnlDg6|2fLY-RaJQDT=!1Y`2-jk7&uzJy@33ZGD_q!ng*_?x%t>`A@9k?6a>#QbvD7?Q|Zo? zkEDKzDrsTO=%#XKl@t_=C~K%I5dk`n^!J!(YIYXw2Amf^Z}yLa6U^ib-P<>B3q5{F zh!|DGEx4%#7QoshDlFjO!oGfsc}Xs>0DH5en&PQFRZo)qm&ktYKEY1cT;nn?DKjlD zIXX`H`4d5&=!_(vRl$1au*^23iM<_S<01eT?^7NO*ITDPhv~V;p3+U&omds=t5>||_?aF_N z@M6cJ(%OO|tD&D(l~(mBYD-`s_)#T*f9&wS&0AmI)zh-pUqTfQV9Uf;;lB#A*kb?i zV89m?jrkA9e;y@G0TG`675;zBoU&1JVQF4P!@R1(3J`?04f#wdjmM}(PJkr zEi5p=JH(Ktm~A!X<-d&1lP57y(b0}zz;0;z*1M64nE~dj9{Jg?pd=)urpHH5Tzq2p z`Gyuq82&Lvleo05t?nxCFs}rnFV-y{PB_LOm^01Z+7bZ`dvx#k504h*cJ%3#6OkG1 z8)N0>g^PXy{Jj*cwn!FbmFQ`@V5A9}@344)9l!1=Q*(ut<`+hYh>pzV7b6JAuEA@6 z$?#Bsg9Ac9NMH%Vr&sJWUTM)yto&&*A5y>0vHVvB|AFv^RpsT#0?_Ua=9>(CMtBb4&~ri7y?~52F@& zTNs!rc(sBOYC0=29tjK(Azz@jjz8EG|5gvVbcTbDmRN{`wH(^>nGKKI@*;<%v}Bw2 zlZmV6mU8OZvP=w?$)TE%8^0M(O)h1uni6h6{{$w7*0oXyHpxUIaNk&Ei^s{6gYeYe_F zE{oOC+4bT1{qAfT=N8_|W7&GKG$kbkT=iq&kS5`WlIlmjQ4m^+WIx3oG{5h|D>4$L zz9cnlo1CH9g+_ZK{3Gu;Ms3yKgz>{)hxBP_l@3 z*S1Q(>S+ke2|$fmR8(B$ve8xB9LeF!sFH4Uym`}Wi~!{%kU#`{Ny-zA%AcNDS~aZa z@HFFaIFJ(&bbGqyGP;U3rs`p?3invwNS&OSnwurps18CN9vvs*B0RO2B1+wj1GeSE&VQd3gucDoj-j6NY}QIM0rzWLg2 zcaY(!XlinL+(qMX*okOrX?e`%UIL&-Ui{w7PK*>FSC^v)CI$ut%O5Q{tPU6BN#^ME z+7MAu=rd@$eujqjqw?D_=*-;Qu7ArN3JQ#ts1v4^=KMW6n#tpVwY0SU)pWMojMQk@zr|jo6Zqiq@e<+g z1k6vsAA`*n{Tu!iTge~Ja=t-NTADh1ve8@t8waiKY^`9s8f)=r#sG|Md2!L_J4!UhY{CPX{@gobj|e7 z-vdB;19e78Pib{K)dqFwysj!$y4iT$U6$br(4bWStP>FJ5)AKfojtpvuB1jUr0^0a zbaQD@=aL={4{4_wYvXR_yR@#6k()|y{t&GDcvy!$d;VCTyhSNH`fHy*(dlNh`P-NV ztPhvj=Pet9LBF4YAugMim5K{|K%;Ia{|N}1-k>KnHy3y$r9=ipIRSu6tNqX-WMy6I zbUl|9t2OA1RF+hlXX3Ei9-kTu{CvLNEpw~GclNm2>HhwE>IBu+!R>ar5kXHXnRjy| ziA1)tl8Ql}U0UJ~w%KAG+&h50GJUlj1%9>H4@z2zcn1Q865dwZAXU&||tI4l+&?I~&i z9H(wJ>~oXj`0z+Rr*~~`4wKuL1y+VX&+qBwPucVJz>&VoIU*)|WKGHNfj#2Y&e8jy z9QW8W?2CsbW?2!SkRLFxclROrUh??cMI|NB-7fM7tv+e|T!n%BHzK8-96%`Jb6?cHafEUDV0Wf5go3ph! zI(v4ist--4jb*a<0;Ut9_RC5-@Hp~MC;6@UHWaZ0GFr~u&eo8AyFFgJWwV6B#r(TH z9;J1497Y40^$-5*`Ll}V)4=B#038%_fA0lz_9$SOi~ye*o~fQJCHV`{Q8GRE(y4u$_Q zuGQs&)Z%UPgI$u9wxnK0K)zUaGaT&jo1UKTYce)6l0R*K#9^P!;S*UJV^R%*g$=&F zg3qal3R(f`HCd*%trrP5c)afD_Cgc{lKwjRgGV`49C1LEVxTGt z==Ad$3s5oIzZ5i8(!<}RIef0^gX6cADt3=8+mov{?9KJTW4A0v{^ysAqt6WZ0%jGB zsL7~DbuSpG3zt@D0zFU2mrr>O!(`Iw2DUlHHxmHGY`WH6LE|xO9 z`JYdA^mOUXKOVHK<>YR0wXm({U>ao9mZuNryC-kFK0oBoQ>SBb1wgyUw$_sXd3AD` zZkCG$7@9vq;Vz2Gsy3UQI{j9yE7aB+{_LY2j%FTs8BBSN-ME!d6V-&^* zcEs05F*E_d{Q1y^mk~*2WOspgCdElkPyX7}TFCXCNX1ze@c{un?jOa_2Yc5!ozE2x z@=nK7sC8e*v)6*=f|#O+HQJcKMe`Yr7*O+26qGwRM#h*)0mQ|!wj|;J8ZQww&B5XJ zVXlhWwpP_jr9oC3M_D$T@#$>&eh#}ntnrwh)pE%{vJ4d&2?Ygm0Ug9vP4}6A6AU|z zm9|C?+=kO;!{k3}U2=jXk$GXUGzPoF>0qNipO6u1TI&N*v_rKbH95ZC>R^M!%dI+{ zV{&3cUQZ7Xbs;2a^vQZX9tlHdxSP9~YwIL!Hp}C3V7;>3yWl%l*`o5H^)a5Mc!1|n3&+u7AN8+BZ1!D0eT&I#@#{Z?k<@1wa98G7X);Dtu8z<&V5E#wKf+CgA^`k_|nDXE12bOiu?hOW`8Uf)A<5fiGtb zWVLss3Q!wd6p@g~lFu)#l=eW|Y&sQ99{G5U^5EqsO4LP;Wp}_AARpCoyO`^-ND@cl zbiE+$mL?o4(cb))A;i;afTt3~3AhWo2ZNI|%#oI(@kJxJaB{|Oi!I*>SgbdleA){N zVu$48w%A_-bQKBUMoWe$;U|EVmsk3_-=FQ4+zVk^SXxn4l?$z=WKEW#`13%29r@%O zK-!)^R9)=(6p`yspvckZS67yf5O)HLk&(f}v#*tde13v?_qe-);I}Seq@W-twOp3U{>Q1)Jl&mHY;UKO|S;&0TpruAPgL^O0}wmfle&20pVV` z1V;Nk#yPOLFFr4qv@s~xW`|Ep`)r|?qiG&8nZojXPR}VYsBo)%aHl8<^XJRO#stah zftdnBRnnI|vzbhZl$GV?2P_o9=^OWA7e;pRm5)dq4x5l(z|pISTt4#!8g{B?@Bv!B za<%okDM=f_UVNaC%L_VQ&H<0ZTKWBQt3v&?_r?qac6l^NY8 zAieIUP1nemzMRZT=lw~qW3_g-es<4@NC0GAym65ZMAIA%_b3AEed}sV({XRsPC_J4mYjrl83!dAI5g`ZQ zh5DAs=LLb~cZkPgc1W@YLjE1wCh8MU`Nkttv)9G=Z z9dI<^v>UEm@L1-rHCkkV9i_r=I?V$F+xZ|1@7K$ptH-L?nc7Bl2D^<0wzMRY+ZD{bK_zACLCkvqWh2DU;5wan$@7eX zj;i13yubEGkLkCA69zqG*2-yPS}5Gv{nPL^#N!ztV+3MLACN`|neecGD`&x@s;o@? zTIp9&g3aOJ`cwHXwD}v5He6}2i?5K^z45!sy&9VLVYk=EXg)9lgI=#JCFw&e4SG&$ zX?AKLdW%yh^Z&GfGv|IRu!TP#uQE$f+DQ}&KzLH&7nEciVPo02Gq(q2gcq0FO<5;; zEfjHibh=G&zI%Bvh;hN`1%nUK(Xy|~NsIeex z_pX;4;u0e7BI5ZFD|NfP&L@;3k$vPhZf_6k$#~$He3oE`T{!GN;nZ?ZiG?6i9;=md zYUiV|{=%jk?q+g1S&nZ94g_ue8C_W*{d+W(;iPJKFj9jYQjC+0&qFpJdUZ9tV{+4f zdU_rh`*HDXI;H72w6IjcB6KDMmn@wmhrMj5w)vD}gqZ(Qu$^y&hlgkQ17Q~sMNn2A z(|~LcWAA!kz3UvKswnm>3hh?0`T@`~?vy54H*u?$!VwUSvlSK=GQIhz`PtQV=T1(} z0x9U(xH4jy7?~%grw_gH>Khyn)B#eg)F1>lR+gDrX_ViMsFKwB(iANfQvef>&N20A z#rRgXb>T&NI_7QL2k!r4@2|q@ikdAzG+2T|Ah^3j@ZiDS-Gc{rcXxMpcXxLP?(VJ| z2u|pg{O6pPd%M5xe(9IPBOz3=k>Msj7%h9U0M()O22tfMOz# ze~t7B9hvFfe5lWEc;cY>yxlW9_r^9yUJ?(4qVgoQ)CpzE>nyA*1fIO&`$pylmPSS= zx1$(J7-$Ci`cf0|;$PYw#A6{f5QKt%25qMD3btZ6Y>39K zSG4x~p?8&EsdO`aeuPsi6M@+{!aW{19}+|Ry*5)RliDgTqzEfKiOEXRP*ReP$;j*J z8QS<1W*S%wM0|#eH98G{*8aX!@h52Ap#Q__ei#`h7Mn+ zlASSvj380GIST*&K+kf(@aVRos#`TBaP14rg^7VzoNF`9&AP5<8%sU&1G$Q2hE^|! ziW=qqt;;qt?W3yzzqq=(cIL#aoT?IOF?k3gLc*NJ?Oq|Z^CGkYFAEE+m|g*cQ@`2yEdKD)RDVUMNpbt^h>Rvj-H|IE>zl&Z84fKLMy* z-R`jp*~k@yuLdrFUBVWIllr}ir55>y3JXZF_!5qIgEO0-%?~USr24@D*fU>rTv?k{ zX(&*~eR^tbnzY&$Mmbb{9G?P`2;5T(X-(1LfD{`gF(9(3iye0?4d;({72Yf@WYTwYn3goPoc+X`Sq5{2-@p#qAU$-+?##`W{8 z3ID`C{?P?Tp*lS(kMCC>+15>IzzgOnCy+H#h zOI)eS3oKOoIwk?ntvmI%8vnG zUUm6Kr^eBuZSP77OY?_QzA~^fLGgxPd2`&Cy4~r2<*$U2x zU;$wQMPfl_nxO$Ks!(~~>_LNh)<$jaGZckuPY{3~Q{wOKt4CLs4yJsg=l(`UFTp+3 z1F$7#5*Zn@hY{S~1-M1{`D@+s(F48+@OB;;n}iLkwJXiBvl&QbBz+-3J!im&2>ytO zOazr(>`bPwWzK3?YW|fx3I;|@G6F4{v8j%=8K5Wpniz!zxsu@L7v!DlR8tWJ_B=2^ zaYwmCSSFsfeH@AiRovCz?SmLJXt+bbD|2Ha2lOL=1%4++p*L*Fz?u{N=rt)N{w12R z*6C}#UYF#)p>crcpFi}uMLLZ#Bm%Iyo4iw~*8>K)Wv-?tC(PtB5m90huxQaUtW1rL zjwVtW*~v%m&$U7YqJq}K!em2tJAZgrPN;Sn4-x5Y9GS=`B_u;1cS-R3XQv&0m&uCl z+?EeRJ-O~O%CMf+G&*3S4vPkn4-171AE&EnaJ4g%PafPtZ1Tj1B-kcHgFJ^P#*m|H z?aK6jnDwT7Lc#DLPywZ^p}VpjB9s$W zmd3)14gguMOB*X=DuaoX%TXi5&o4F4F&|k^H7Y6;JJ*ud7F?YKO2eaOW0WurDMD_J zbamDQP?bn1Hf7yDQGQUGgg6JjmY;SC$3MhQ(!Ofb^sEi(%P_jQRVx*HEp zrdtUrqb*IA^_3fOc*5)_k2qN%?w8QwRhTL#zB%^Pl{Q*&hCu_wA4bQALt2@~Wn|+! zJk%5zvblYIK=io{aWT*)SX2#!)Uf>iHZ;I-5+@oTA4}huMkWD` zl+PqVOlgZ>G&Fo&n9|!TK=m0oG{FCWX+bP}%C%#fBh%kzNou;~?%K~c;pg|Q7^hIZ zxe*Ty-8D4&NGrfO)oajqU?IpB$#G%}DKg7;l+t-olOSDS@ zzsc*H?It+=9!8Qc3{uE!!lo$&lnU^tCP@@MW>Bk_q-}BvFLEQHnmDm4Z0hQL0uc|e+w#}6ag1{bV0Mr!O(8w@^Cxto; zpxnfdT(It=HOtC2aRB;W?-foKh;m#Yu-o0|Ekx>j)+})$5~TYH4ILewTqr=~lc%vq z**`NXAf9GsW3H=#eSVCa5z#z(WN2CI(K=sgpkp;|Dk-64kXw$vxJijLZ0kO#|9QaRzup3j*o<>eA;OAtT z+3&PaKxao>UO{<@jG8$Qq%YCRZKYynr=cLArH0H(@E?Lncij1%l9fzTS7>Wq9b(gp~6DDa8h9? zG6Ap)5g;>yzA5e*l~7etoLeL@`Lw{yCK-l^aj3eOTtZzd2F|eN-Ln$$Qa?r6GAa{NQi<(dTy(5l@EKer{=37FPx+L@ejYj)Va8xzn;MKvf1)JD zkC}tgrUk@zrQDFuJjD@q? z&|$#O*^yr;*;oHL%+07bAhh3It>C$G;(RI!R2!B-#wzp8qJZr~DRjvP{$1pV^}$)X zvSG3|)mB|u2Jz^67;M3y>Lm>3KX+iA6W8@q`3bhNpd!!QP$Ezf^*^eQBiT^`2Mwgk zU5w%Y@xu&!^tFTg_4V)GDA-a`QPGr_QI(fbmX^FekRQ-cD;hE zSE58omU;XYhD?OrKl(4Z#?tQ$`PTYHCT6+T7G-&5BCmMRj~x*OEq4Kr5%UGvG%3IE zv>fl?=a3` z);I!RJf$L|iM&#{`D@oim8COFER=X-6L3*uv4i&-|AI}~{(gD-iJXyu3%$Lzq*DBN6lur*?b2AwY7$Fd*rV-`&GqFH_@Cm7n|Zsmq=JwQ~ED{@>5; z{z67}fGw@zFAx?T8U_vfJy0kRnuLsg2Za?^2JnHUU!~`yPM@ToyKef-1t&n;XZEeB$f#u_b0T=LC0SC38Dk5!x zo%N-WJfH{pCm|Hz#4Ytedm$74b13J>sVV%`*@>~Aaj^IanPA|qkL+8c7R<{{YeKst z#@KDv=7(k$Cm_IW^?LQPw@{&Pbos@F(Xu|UH2!9Ba40oB_zW4FlkTEN3CHi% zOGzDju?qk1ktsnM83*Xbeq$x)h7Jkxa2Wz>dp`!9np?MX* z)lE)c9H(jC+-NxISQy*4n=V(8(d;xwLQnZ@H?Q6}PrNzcGutzM7L z!GQ~%o}RwZVyi5k>R~1>B^HqNYj#Xw^^b0s3x~=5E5#Ikm}uYT?Ck7h7EibLdvBb{ zQz8w<#knOBG9KDSu3&Q9%lzEJMw_J~z&2Sv--X$5<@OR28z~T1G|=yoE^9TNdq$`0 zJQ1!D+~41agoLb8uc!a^Eui)pyo->Pm6e*>Y@;m_V9e}t%qnB@S?$ghPq{yw*8Ut7 zpg#Ov&Q2m4m5aL7<~Y$e3l5IMZoz4@U6Y}Vx|LhfB1fg8rS%$x*M7Ot&LE!;@VqWJ z+(VP!=SP`oRIB{HH(O~ZRjWx9zMsFe0xQ3xMrn;Tc`Ko^2hseCRrC`MFj5q;Qn z5CpS7n#BKFLx6_=?Z-&5Y?sjB5B)Pp*wEoo@rbC$L8Qh55kW!Em7791blM=RpvTJZ z#k=R{6*=Dn0)vi{$?0G2&mfkrTI-MAGj1R_IXUm0?rUvpsi>$RiP@iAU9n2Vab=QH z6DvKH8T6_MX_R$Tqte=fimG%hl=iDL7*W2&g_ko!8c$`BNmHxHCn;0*%|hG_*sTvlaeUR|5Lp$T7z zm-umu`zA}xAb2dq-pux(oOTR=7)#qgvF$&H7n20ZnsBMSiBxT z=ZZFWod}&D%q}mLOKlRVt$=krUiXT6%z;5X(`mPfsXw*%LpDF2F7V*+BpVVv8;Wp*q-w)|juPGKRG z_iqIFW6b5;X6O1(NciIW<`x#jS?%X#p;t96U(+lM4DvhOoi{sN-CrNYciq{VzvjL6XUaHnb8gqK*rMkjqw^}X`C!t1Aij*e;izeW^SZiiS!)G-c zs8F{*QSNm6on!Y&T*DStTv~8^HkUek7~mPkK2m>?l)kv05kxt8f7?on<|PQ-iVO=Y zYiw*R3kze3t##hI{Def1$?X+a@)aH)0jTwwQ=uGxx!Ua1?Y8odutJ*b@ADHt7B5WF z#piVRxs_)Welll_d{8KvJjvt!5TNhl;BU^&#pQmMbkWs?=2-V8ArgVP*(O~c2NFdj z==6H~2)Z4?fY$Hxv&>jOFLU$s@=}$dsmN_bd!3MwCG$dS5Fi#B(+QG!?jMzqU1Dch zWMmnWkS70wXaoBp&JTRHr~c>6Y{C961d=xG-Pz{m1owKmJR^fnM~CfR()pVhX4sAJ zba+t_IgJV}hU{1CO$*QlHVZY;D>;p9(sr}m@1}!i3su@U8e0jl`@H%CKizCE(!5K1 zo`0K{esJJ}_=K3)^i-+Y%nu>IgT6U&;zC0sDd7UkJ4GSe2y($bVq~H+H&|mNM zHdLxuG{Xn{3>p6Tfy3oR3mX1F4{`hw3fn(0?=YS;agAByFk08;`TTIkwfzV})zM*1 zXR{PgBHd_nu2gP!X~IMdj?YXKPDoCzH@-jHdic}%(jOd+JMBHaFRu6_c#qZ92P^@1Q#KkzDvg_iCs&v2b9Zc%lst1yN4)lNLQl z@+&KIcw}_v`!-n1mmi>+{9z<~-iGGtgz7m!#;cv4g%GrKog5{;+U7VMgpe*Vqp9#(=!9z)LPWwK}hHJl<@*B~V#;qE4ac&`vsqF9_jgz2Sa$|8kBL zRPqVwQX$joVzu$O@dsC_YIT*%WeqwpN5-z?!^n((13Ksd;AMFjO4z|Vz-u;JS*PUkr%)iQ)k7F5v8Xu=q*iiUl>oGRHUxdZf^pr>?HgB!$)%m zwm5mfU5A?L%RK+;0|w|I%*Au6tVIC=ycj$ zY;L@G@Mf2YX}Gw*JiTebTBY5yGR0jc)aYQJx3?0YChjEB)ZdnF1I~%tfUT9 z6EhO&tu0<4r|^1e>Wf3 zq6GB4YWaRw6s?xhtYu+QKix03bX~UqixyO(w%NXS_UT)0wSRD#5o`?wHScgK7EgZg z#zmty<)WgcPSD$*8XJp>49^#etGj7V-)=Bfq(Xq4<(Edl?@<2nnOL<#O*|yS$N?-T z{c5?^MM_o%(d2mgGX_IeC7=jMTc>75=%dqRh$-THG|3}D3RYGY7yX;iDyJ@;-I~km zb$_ln`UfAfda;wG0Ppj|RlCVl*YPptP}q1CHc1Y7Z-EdRM3qM#tyDJe_*y$h17-k4 z2$oWgpZmjQa_2?SgeGMyWCSjUNAK$(at;p^BV#R4!}p?}7t-~xTCu`{!=M+FkXdgJ zu25~izrbcUdmMdGtS_4Qu4}d2!b?tWycZ-r{;qz1{U`q(Z`H5)O9JF;Cbv;sW@e=i zgHQ1?aHXQ=%^)qTm)o{##ncPv^)^*E-eH20(-nx<_GP z5FR|&^z&q+)IgL{&_RmjQEz9|aAg)PEiG-^Wuwlhe4tg7hSU^GJYTsS9goXtdVW4k zR&2S=Nb^S3o{2^Ns4CO3p>b!&aBCA{k0NSrZmC+cx~jhZ7KoF8%K)Ij2&g(u=YTn$ zEh?+3MoWeO^Z^R8&pmYqmw?<<>`IMo|F4J$=He;OS1~t9E~nENpk0@SG)&;LQj1>x zM;^C3pW@hGzbfX6Wx8E&laN>7ilwtZ9!>!f3qKx%b{o9OW60yz&9!_z*r(POX!CVDn#@GR~MX0o=;`gLUg{* zNVQTf>sdfN+SwD0=BE~KxLtRxhvzj*<;xOgJb_%NVp#NjCXVvXp}`0T-jRk=mI=*Edvd_CL@zi5i3 zo;uYuHGS><@2x*ve^<*dIy#OusI#vN)%E+zr>m~qD3z}Etxat?esgHVNA{Y88qK@3 z-Ew!pmY@I6o%K~#=3QB%IlGYXUGpJPzmU35mC<^OK150wbRLT+ z4nj&4P@gWbIa4WMV*=|Mn*(kUWVE0(F;ZJQ!&ZyKU+MLp!)&L`ZU`JIZ=k(lI?bkl zx&GN%{gD{{Y~Cj?5YqL#z~t|nyOTM<)${jEPFmfi#O4y^Qpjc~$g8ZhSu)SVJg3A= zPvi5nBVkD(TC=k<2L@|Yr?CP7XMA~?RlfpQeTM=!Gr_psp+g{^EF=n&!W+|;n9*G5x6j?^@__NVi>dPn{;sjN%(X0=@r{U(aC;vVADPaU^)(h(?iJvl{lvA& z5`5{Ar%`914_@jNWvBkNXec=D6DY2o3AK6gbbII%8f9UIZ+%inMz}Phb$+2zr3Hp^ zdpxtZ9UiclkJCX4j`&mqfcwwz{XZ;;N7{Fg%K9x@>mEohcV;Kqx z3Xt;k-Ab`611QD*XbP3dmy7D4%Fo!=(J?o>K$4gi8HfxFF174@V)OF_uXK1Mbgm0k zq`4XQ#gH z!R_$a^K^S;z1afOo!Rc(V7fN6w1gpqwAbVS>H$G^V%$~#kgBU~gxZ5;AvX|qyE`r_ zE911?C9N7ccz!;h87cI9aayY0q9hIbLGk_)oZvI9c)8KM)-z2=$66`51mt?$1!kb# z14(4@MxjkJve+nwxEs!fhzQI%=ZnRsvBYu;K(Fm>>2Cl^KCc9FuDm%@y)_j#i&8w(h`0n%P$6CIQ7q{L1vi}Pb;dF&-eZTU@#bIDgpZK_pgUFdUV$!`^fHah+ndaOck(Do83KSB8;w)o|YOdr8R8*keJGhGvszyD@KI6$%JurL6 z+hVWOH#c^T4vv3ug!zq+Lueq1(B)-odbDHmU_?C9ESH6{L?E=M;m9hIdVKOc0g~{G z`gA5E6f`l}sp*AMK!d zl52>*s{M6jskgae*<7ig+qU_`ecc{UZ2}bJJN9<)6BR_dSgq@=j$GVYcBid$>CJc? zyHHcRG{qHhO}X9PAnv}XNttO@d=3SR3`GTnf~!`W^O9Wn?GislvadOhCj=f&A|fB_ znhRS2I|J@qqAt~`%k8AFXp=u5lK`zf4GrvvGvS0-aqwc$@3Vd4i*?_6C<%R2Qy42F zoAnMCkfqg@XmpkwacCR5*-{ylr=>b`+=p{wxn6p0PUmyAbGyKPFnk2+Kcn#q^tiCj zNJ!uOcC&JNe7>6`@2aNe#O5j}rKI;WVrYMZ0l_S?Edrx1(tbD3$S`E_RBOMiH4ATf zu};7~z8+T}QhIy8YczHhy3(rL49jLWS*>BypWfht7Y*h1X;a}P73n4DMvZBM^RZ*pbJbWX81sJA?F1=P$;mpcbmEl?J+9=a*Ucfab8`W z_m4s>BoEJCkEP#T4Q_%BN3ZtTbS?xBp!YB)R-NU!lPaZ3+IDenaeEtX`SFL&M`n1m z#igZoueZ8K6~fS86B9X-IR-gLy!M9~F4#3ab2~tAYhUO~_A%obpl(JW^Z3nQR}g8E z@&mb(xnN)~h{3%`qAVJh#|>B6*d}I%m+7foq`etBwz0_dRs~3Ea_+U7t?=?Xd~)e& zXu`4U5H>tg*qdOg0o>FfM0VQI-6no_OcWoszur1O_bN z+?w>C_##Ym6qEoDgVx3a!csYI?SSigFA&^Z>MiK29-_lqo7Lj>Zk0@~s?=yMyHwvx z_`;0RNFzFYh3~Xt;bi7k8(XnoqVtv6=f=j?_UX0tF_8Be!HiPDP2;)dvmlue3il={ zDf!rB2xBr&`-5+BL=*G`T7cZsQz$@jEV}XsH~_s4%5`ogdY4A3I3;f7-eTEE3T_qZh2YFf2YjF zUQ)6Iv1I24&o3@g5b7AUBBunN;3J3E`M~ZVT)9d)Y_u$etS6V|c5b+e>9pH?KWXwf z91M(lyAw~Q)DX*^8STvlY8GyPZLbsD@4O7F?i7VBCPY|RKYysv9#0YF^~FiVikEa_CKua zEmbjcG3=M73Bj-9UahxE1_J$#01(Cs8eeI$~OZ(XuBsOM|Fk1 znaSyxr|Jv$5%%LB47aQT0C-)h)a7#el~QL6RG_$BMhFEVAW94(PZu7}SA=<51RvIm zt*y=8tE{RNi=}g^;Vy|>{XE)>3VyX zYX^^P^y+U@e*Yt@t<6LEHDq#ibF)hEXfm76n|w@QI12B(E()>1uNWeK5|R;h)Nxzr z0@f%N$ktYkRgL{0AE}zikTZXDrEys!s^RjV%!1(1>2u(h0gT7o&5hUVHHFY*t3?x{ zLG-3tN_sd(N#*3_N2kz`y%D@i$xPQnK<6%(zdq>|kJ9Lt8FxZVEwI$gnXdEw-pKnbcihf2;ujj65POXhsQe2tOL$ex*12 zV5=cK^lr2_10!X0J?I`$d)tv-K6}@Ri;Ls2d!Z1aw!LIC`g`O?U!b9DNJXtHZ`l`ay*r5G)n~SQScX5>2`xl!y47s*K0QXG%ZbqwTHqI2f2|S zuB4iBQ&|_$s(q9701f@dnf@fWs%liVo-QCCx;Gcb!@}jXJb26^;(TO~_ zc;B2a)_L^jLy9KS1T^`bn;dW1O!K!&bPP9E5q?-Ra8OtwPD9scgQZ=~(|7RAA;A&XTnPi3Mia zy(8u9jS)?cCBj&>W^dkukTw_TC_|(e6xe`C*#3TBmdK?sukW*@kHjpvHCVd~m}G z;(>(pSm`vOXdqpfFP6z77h;!%lN?vCH}PXdq(=FS4|>JAt*Ch(Dl((}y^QS2r#wC} zHa*Ks>cw%rtYwylx8~eKHQ%Am?D#q0coM+&-|YrBry=thqQ~o<2~9NohWNa9cI%I( zfYdxM4yeJAP?2Xmn#=t-TSG}i5FWJSg?xN^`a0Pn9YbFU*!)E9_ekxP|HcAjxPBb| z;y9YpB^6o?!5_uJ#GJ3v2JO+_1>SLs1Bo7>uy(l*kASe*MRyMlOl-k<{Wk5L!C~(g z78(-5>3qqJNm?>UrC6lfdUIjSXuWwplP{{Ecl?Ni&&_20Cu2t6{$A{ZzW&{@zUs(I zeKBRQyo;Jkc#@^Cx%F&Tb*`YO4`Ph`TfzQ*mA0E4zAcDaD&_0bP^9Md9n2w(fT4l2 zBOSi{W~F8_0?y*B`*No{!JVO<3ZQZ-e1Y5sMnQ2CnMfvyj`;R`2q3^FhZCA&OVDE~ z)$|;l1r0aWD|MM}aBmao7zyn_LWptGu}VG(G=BoX1ApL7mttp|s>~!igPPa~hD3j_ zZ%{viJ|it{j0RMsO1GB*Dr&rHb(WVju7tF*GPMM-5eS-8l+?n(kgt#I;yrPY!9MsE zgubb%RMEpz)Jw0ybeabRsn{uxfWS7j4sc8>-UUfAA7M6Gd zR1N0J^6G%lutWpCp{1oI8rtVX-688IJRYY z_VW|gX0{guFo|l*YT9Qv9FNvsv&jmd@;N6avC&A$p4N^2xaBa%&eY^=`|@}!BV(NQs>$Kvvh(FbH=-hrXmrrTj*0P=)}p16 z*8W5~dm$RiF}wuPXTzgT+z4VNOl~{}QF=ybACXtsV)7fWm-~&QsX=2TF0OP&0}**W zWZYdQKSGnBb(v(F$7{W7=Y@9_prJc{mVVcV0#OOCG6wp_w&|Ph^ON1_y!BoZo0Xbs z-E$4}A!^AvP^aV%oNi61@Eh1h3k%0!=x45S`L#_1aZrKXDadIz81_Ene9PjOY1fTR?gV6g{IT}!Iyfr%X2?L7;x%(dV2F^ zcy_XgY6Uooed#TCUMIdXONRa{L%k~%N0cL05r zLkfd}it_sQ<_%J{cDzFXIth#v#1b>dOvLLP%k|DgWD-y?&~fjdctFk{yfWGx&sy5s zKS4otdi=(=sD!*R2Zj@Jjy5CaNT9LX%*=`i3ET~~O;5}5c3U92*p zann;oGmMN^;_eXxdK7>sWnfG1v^e40W+d{W)^2mST&qS>3w7bH0*YKNC`S{S@8ibk zRUOkwq`OE4WAmdrtUN$fA81;od!%;zDH-=_hkOs{3{{m4&CV|@%+K!Fb9~O;va26w zL+&eg<@(C+>Gg1^>a}-2{JEL*b2n~HZkzjpcxW_?+k2gdJ0)!e3p2wsz=Qs?=aU|t z_OX7Ook zEz%F&nk7>-Xsqa(lF60j)wzY`YNLF6frMy~TC_jdca4o~nCHfM;uxr?*ZVeC*2l={ zsA6ru^=6Nn@O1-Kme1V~K$Avpt+>8}P%D}O85G^$5v?P-!AV)ZCUc9arlq-He9th! z@7(+QB>1e~DLOmdS+72AzE?*ikpiruzx1TDkx{X5_}2>aA3v=OLMSNZIXw8|TUKN$_Kbv}}dcUb7eaKb@bL z?t~xN>|tYLY=|QA+uk7U?%j$Y@IT&FD zGkqt{F_OPr$l_RRf?GC{iJ`)@M*sNGLPrq^1rZHw)iF`D_i{kQ@8lHg6bA>09zc5h zwYk0kS8Vs{Z)2tCjg!rWt6D!y8ztl*?5?6@}&I$f#KN_k;OTGZ|8stY?_m z=`fG$$?qt`?~rPWk9LO5yy3nlhd}& z-tU#~smoi~`e0jOaHbI(EeIhVbx#2N%>`Fxw2?(vXeM*q*!0vDIQ<%@1%J z=kxp}mEBF6d2mz&)Ks^AtXGhoo?_2aKcqEotea=>HiTUx0eKXlzsrpEr@pDBY~{tOGbLrgcfM@qU?<=>N2j+Im_=&*AV$IPV<6b_ zzCG`%O*PsOnc&xMyxL@V47Ubm+%(?*p8IsA%R~0hY(7H>&$45?H~V*A>GDQ~NBQ(b z!WEk>T3YvWjJ1|sXaU#hS)krN~G{nLOjbk&dJo$Y+H4;L3A^$wzQ zxh%olLaN>or8r*h!%B)5o-jgI*!U&CF$eSPpwXJuKQROY5MK#56=&BDYG{7Zv`CJrL@^%xx6{QM`b zDWiHoB)DG}M-;;hG*KUX-K_oKMb=!Yl8^rC>2y`(VkoaiMD!^G*Y0O*Q&d(1WKt92 z^+V&b4J9_SB+hlOuQc=*6tvsHWZLf3z{ZA7vf+5aOh8%ipXrtUaFG60pf}@pP zB&JKje4lWbZ;%e=jO;uad`y9^k^KCRNZ5~=lA^iH6`z~eS1~V?rvMQ4;(UfjrHC|B zhu=m~hx~nfx;=Q4qejtU+Jx4R?OtY2fTrl?v(=;JtO>H_iE)xSbF(v-<_oF8mkv*u zSqY~upksdAB+B7ki2Tf)Jes7?W!4p^~7ATa5>FpPA2uiPYi zv*WI82~d1M5M3&}POtlM5T=gW6H1PJO(sDmx7v5b<7u3xP1A&C#bywhD~)k}jZI!FcZO2Mr!eOKU}>Qq9e*)FB-yHb1HbpqofCbqs~xZV^J=Tj|V69^rUzlOQG*_09u-NH%>4(Z?1my&HuXOzBMD>xZv-zwRO54*`*(p@7F?6r% ze4{O%^A@rHU8 zt}V7R%`h zw8Y2jNrZ+0D&nx?8)lY}pOsl%M6UyT>a+;|VeRThfopChl_)K@Ez~&P`h3??vspfR z5Q567%r7@F#Kq8y$cg!HEC36!E|iiBI1*uD5-_zhcaYIHIYSEUENp?@rc~m)x1^y! z^N@w9CBW-Q$@ua~|F~T_Od^TR37AO!YyfD#{T=1bSnte+lKKH9uRkuYFGK<=tN^yy zcKp6-!AwjO2mSbcd(r5x?l|39lplqF4F z{g$S&CP+v|L{G$>^3QKTmVN*}Mc?%2DR!!WPkN^Gzh~ZjLOp!J_d=$m{Y62Ib8IE} z@5|}^KWem8kWX3R!bw&CPDsQ_OGO<~qV!*jD#)9jp3ft{9F>v=n9snnjEYD_s42e_ za*_O#VFW@tOzK=Q3F%)l)wnkyM*C$(%ChQnLgLbrp@o$NW8{Aqvp-BZvWE^`w?nZ{ zdNk01Qt%N)Y|!VjDLXo?sxtS8(6YUVI!&ZTErx+|WC8`Y4))gdKb(0?Y7OI4ktzu@ zP6=vSX1|f60>eN)soxxF$ym~ad}v?9`B2G{s>C~CJ}S4P!iKFEOqF^S*O6rJ+sFSW zOj{|b0VML$&DPi$OBPYvvgW5u;zwaXjj8Qs&psYZaVgWKc%v6o+UalN@XPs!EgZKm=Xx zz|f-18#^#NJwH2RVp`K%NcL-r#ETtv%n2a zq}}TM|7{1K&%n}J!hFN;j5X-leqaa5y=YR!VXpnZ>*?{zugHz^1eZFCG{I^`5p(5_Rq~?kz(9w+&AVcFM$PE@cd{e<{FXmS=ET?i zZ1VX&1{YRfm$$bbWqF!)^CSeum-(O1kMNLDDBCh^N)2u@paG}Cpo|*}jXm1-ureDf zHu#UN#1=f_qTMh@m?4tK*!dEda#Nb8{Y+63hij4gqSU4L6Zo(ZT>*K1D~%qqrqbZB zA}Ub&G%I7hQ{_iKy#6hfAUl9?&wb3<9Nf(zFZ&xg0N)#L$j=)arT< z{|Q6(c8Vd7m)R*|>ipxyldy~&J)xiiJ*=1j2XWI+Nl9&1)3~g$dJPn4$dLDGp!zy8 z&MoLE!jt2rUq3u`d^v7Pn0J7+tA{S2%@Lz!CXCy*)^Qa^k(9RVOWCr!8T7V)0CZS%JP`0@cG{#ejG*ZjPAa6cSSg{Y znt=3y(4zBgyZ)%>bMEz;l)M$a%&oCZE*!V}&P~ERi`zx+hUOPEaf+*pm*}W$PSv{W z-F5fJ{gF^+6jMZeuHV-nX3mN3ag5aTSg*_Dmd8NJ_vTA)$;e1}m=kWVd;Rwv)Y(NV zt}EHE%oa9HY($tbtEB%Io>LmP6Lbjj*KTq0d+DfVOwL-xbbdJHEko$}}3 z&{^L+|15R}E47#xJ8f_|=k#Hvsw*0!$yO+wo=|(W0K*LS*t!{f3$sjtLQ!mS?!W`Y zL^>emO;PieJ(J0+p){0H+w+?rH~#zV0uKA-I>r{-#%fQnY&N^)3mXN`x z6}~OLtF!H5-T7yKlD30kyvXmtxnC*V_`m>I+rxR7g>|iC;kLbM&2sYdN<(zKwMIXy zYUv}LnOcyN)YWBXGF?V~S(yS8qalyg{MTbe0&Z&jAu9tTs;)Ib_a>*~&1@aWK@ljF z__%0hG@Xq31_ue!(Be|%`XJSQ^oAhw&4%1uFe**U-4WBP&UCifnHlne_(ZxhUwBBB zPEH-A7SHsgj7@WVq@t7?kqlCe;q?=At68<0|h_d}+hDfRr?bJ;>u)zIt-)f=&CXlXr?1; zOHXBWyFGyBmfqauUq1N?D{)hom9fbvJ2?E#Jp#IMC&nkpkON=lXw;+|ZVDnc%w z>wEB6*B&G4q$Y9N2I=M78L{1S!IYmPW)|27P9!g4Q9;LEp)s_4AO{T>phd5%u6}a- zCo=*z6r7e3RRqa;O`*)c)##So0rOsEa4?jTBquluj}l#PGV1vsq%ty`qdNBb9MTLYc5YLRe!ZLZK_)6Is@XvizT81liF=q@3n z5BqqPo;xX4ug*|Jb@4N3uFtOv8=s1C0f0e{g_KY~}=FD5G zTCP1Z;L$$@Djv~LQ?;s8PZ*mI1$`Qe|7r=TATk|yclOQJCV6)$9;fX- zpJFPD+n!%d?rV;0G!eveK#(W^MG&mRasjh7Dcs%4&DpOmIc&ZWF}4b>so0yye0=zX z)~)wD%tU(4=Xai=NLt#tM%F^$)~^cL?qdL4vyl zcZc8vcXxM!2X_hX?oM!bcXxO1bKlSV^mxA>-TjwAjjB4k&fe>+HLp48?kzm6b(`Ww zz`TCg5&1h1E;nUf_;*({dOvovJH`#uQ zW=}QNG-PtvKJ17}$H)7wRFBfCuED{>0p6pw=H?m&rRnuXcKrDK9%c_`?uxOoBEdiP z%>YtFd$fu{eQUk#@pRGpiS3}5$Ui;)3l^%y`H_M7DKw^(X*7bIq& z<2<|d%#Bm12rmP6&kjzzz9)6taCqd$i+EFp5OFa@9l2Y|s3W7#@(sJIBN|$Sj=2I$ zjt$;UVI1czRHAl$=;#ciF(hsMxg5AFXjBIfIH)^d3zy$$e-~`A5~NN^#ZC7!{X69+ z1#LiHNJ{YK_{8ukP9y}oOza!ValjGTDQ8k*8UVkexyudWn~6J3yKt;URLLZ`)$Hs z8VO0S_od&PE5F745OjCr$ZNI9T5_<<=arw6HKSOaA6l$3#9`g1%Dw<-A!Y zvjb&BCSl*{3l%48`5f7hTjBBPaZ=SEF+>89uPx=}XWX)@3cb4Bm?K@G(a_?^x$>VHfFHXqzCAyAYi!`C$wz+@>)pEf6)LAzOSup1WeH@8c5 zJ)QPmM4HK`LV;=4*6q1`B`k=`1ylT)l9C2UNTYj)HCl}{^z~6PJPCN5k2bsXW(#Er z`8;IauJ>TwaE8MMOp;Q~X#g925eol703wzQ0?8gEp~W+kd=dSHj0w7ku)eR*?a1|| zx|TJRKLxHRzi=8ZjFc+0?Qu%+szEWLp@SC?D&3*a{mKB86{w^nkQ)pZsz96$0u~{O zgIB%PLcVUM<{YV$KQWd^xO-ZTVcr+C{#$k1cd&pXQ28jl`FLzkBtA^l%m-`Dixt-) z0pb))1`5!9&_*JUn(At^k+Ww7;{k#+Y#cdU9)r`$cYzK=&zm#Ru8nnA#l!V{#g4u{ zqm_M#;OQ9y;T+FHBs&O#bL*0)q2i^#*@_4X@spQ&c~}LAJxS2ZQ7y0Cu?(3jEu37x zY;TT+;XU+IGm6R}^xHvs&^urbCf%h!Xi_7uWynT?+fpo3k`E6SvGtIDiV^|C)Jd64OZ)!6f{Y| zKY*ohlKdlYOz&Ir~;?< z>8$$CpZl+3z+qzHn;oAL5#&cHz^XkR zCzWu9b%s)Lfx8pc!f?ulKBnQmR7b|q2cO*qcjgM#g z0n^D2?^7hLc)p)IZqS~d%_tik?roplLK5YG#>#z!oQFpXR1X9y4v>)u8wI}HBi@hd$t*oG2;)-i&KC*=lzQ4M)pm@_2Z1EG{faN=vUd zI*U6wu^KubOr#TBQC!{Zf1TR_)Lv-l=v6u`18ds2C%aTKb`B1HbOB(20D2^fxE^*b;(p6fFjO{zdU zFx4cH95vf3j-?qM2GE=3)zyOh{14mx(hu-g&xPWwgbc5jJ#$~*84o_AA^mSp{@d$y zg;ZxB@iCKGe6L5QR0Aduw~1|`o+e@@y#t6qu)#zI|Ks(pI4$2UYW^&Ai0JKyo^5k;`Ty6qU!|>oXzH)HiCdc5+2%5G7 z?Fj8^qph=pQ;^)LP5dY z#icP%EUMl9cHtcw85$9Hsvd{SMqXaM$ugP2cB2!(yn;fwH8jn?>^Zotdt$^ufMhNf zEA|EjK@22FjYzG!TDjWW2XO1QIzc9kJe>C%BAyeRQORYXprF{@JPiYm&w)Sk*^igY zpcCk+Io&=x!HLrgWz%=gWIV?BO5=A~H#)ub79#Np&R&s^)PE>c`+f=m#2*1qlj`FY zr{h66cSM8TG}s8?@y@{vz#m|#FUC{J`8!!IHBWbyeTtuJXtJcGrVI6-auoaC4b?m~ zL!dat((v#f zBd}{!X_B9Dy=)j5Uu@S}IjV`ckn%#rRW*04mK$6j>Lr7mw*C-#!21jSPReq>n3?Z@ zj#1j#T_2RcJ5v89lF8|L~#Z_Pl7ri)L!9}Uw?>1VpZ^7X)rK3aPk8*fu?`vZ$?tZpnMkOdqOs2P^%z) z2*Qzczayvii+2qX#28mS1o==2G=dl+or2)B?P)Qc*vl8I-kjE z7a&k6D{Y&*qi7gQ@Uzm7icHqat3Bq2IhQsA>&oBYh(@dBdiz}uWtLe{_+-ELJo!uA zQrc4V0okoE%9v)_+CD*YZCBv1XGFpDL(R3D=>rH{WFqeG=N1oVT;{pLZ+FA9fuRpT zQ3tI?^RN|!I2-(4&U$M^bXU&c7`1N>#P!?8;6&gL?fY>;q` zDs;!)P388%=HX~N4{)YHB@>Gc97DK+5BhtJKH#4*GHKfUJ%)e}fCRqT^wO8KOW}BVs_op0NsN;|Em(#t2FiPg;4;MPTALaky zHr6^k8C9)NBy*5p9qQ3bO!B#ojEz(zF!uNM%7OOwj}Nvoc6UDddWW zj>pJcIwF8n+C6U|XS)ugVJ719?V(r&rg`ti&h9cEhEF39N(9Bk2Q zO>QX2B9#ffXtUWZZbpmwfRdVH(Prb12pS)M;_!1TdFEcgU_pYlECto;jrOuV<<7 z@_P9E9+BUFYa;b4KUI04PBi8qNMckf@`n;eL-$+3*VTpxs9=#_8FM22@q<+RsK4-V z^7O&L1Ld*-|5?}_C?}b!4Zh7TUm`R#FeZSiC^0W-zbsk|kT^Pv!RL~p{~Ih%bUHRR zR$q0S6W}5#Cs)(dl&l8zjk(7si}(3J%IEsb{d`6DZfBLF|KWHpft7(HUGCfD5;)FDxOehEP2b|P-Itf1e0T5kv*O9~N0~ZZ8joRZ5+)wI z`9gkASttkFTm;ot2-OYCA*1A8ZhkRDl3&UtA|ORwrx;@R!#nuWTQph!iKMdlj(6DR zVgcPjli<}i1!@{|QKTGjOiHGFGtVw6s$_Jw;rk;iwqeQ34i=QZeJI9Et{3Moj<<7!(ZW_|jR+SFXtoS{*9dI=0 z^f+I8Z#@T*FLEhes6@aUv({Q}?k?sx^mHn#%Y@sS1Zy+X7ZWu1f%!CGGF1v#?1*(w z&D1DE%OMTU&d#o+;Y&egwl*g1&6P|=2n%q#U7?%+^1&P*Z)ks@;q}Y*jhMPbha6v#Wnc940cJ!J!ed_$-k~;&%t-1nEoF z%1X=1Ja6V`%!hNhH8nMNn5@`&*gAfkC^8y`k0=o9T45#I&K|aUdGmZpqu`_WUi$S1 zP2=~4s4>Md4wDq$&g(U@m>v}kg~%e<8WkY^G~zJyUxGLl)jMQ~wTCDHNC=loK?T3~ zx=%C(@^{j1O@6O83=a^9B_NkK<^1vDI27x#X9SExgO4vWl!Gx18!sxIJEE7Ky}y?L z(F&HIktpP;bEV5L{z-er5v%IA+ik=XcmDBN@YkJKEtd8CmKqlj0G){I(O0&^1=@;Wf;N~bTs~d=> zC*SC5AR~7PSGih-=&O(#`D8C4|6yue=~s124EquKiX`sm&`Ujigp`A zMg0Q}{~rj3gAuuZW+r{}AL6ZmmDC$%I}WGFoz+r*Ii()GrgT)YWcpgAksIN2j;?E}Ar^5QrL3 zPXb+VM!hyw2jqnPgYMYfS<0wC>|xPid19&53DV@CK6+q(&@=h0bL$NPfv}MDpwgTi zQM9L0o3+lxPFd-l!JJW$!ZY^>bt{cWfm{Q(n={o*!hRR9DY$w9uy%F@tr^%CA**yeI~}>2qD0jwE~;u!_?)YPqNm7!xwW zuoM#EG4@Wk-@dU+Oa7v7!JMEzTGePA-PFOo0PHNP= zWdj0SL_GF-^SVL>0$_{+IAo-xqyXF*kfK%YoW8JCvTeuN=7K5zb!7JzF)C6ngO_ro z;Am(&?+?iyd`wRdiGC|!>ENlU`2y5jM_$0AU7Oi-z&+lA|2{Z|u%O`9i!&aMr3&>7 z03K$(o9^Ej4h~<-qi)A4prS-`>yn8-CED(T90Ef9ZTbJjV@M# zoFfiGCK9+zR)jHRl z+0LD9$8?G$i>(g7s5QI^n%%JVQmypFY=g`Y|1A0MIz(~#wCQTyb6HDuDK`+I&TM{H z^W)D2X7+M7BMZ%!3GdLOVK%ewJU;U=i7UMC$gRevHNz)6iFk8AE@Sw!x7Yl-7cyVd zILz~Na}nt4Y?NtsPyEX7=IZw#yvb(EBkOtn_q?t8>`b)gQmYmn)YKOIJ_3ucfMlvI zQv-{%>}>H>LqW{$$+0mEt6U9(MU$UGJ(0&OJ>T=Hsu({U_~&eZ)F*vOFiFsb2>y+H4@afXS#S1qno* zeeZgZ|E)|?eS33D#82nbEBHJ8Yo}J4cno1La;Y#96q+YC9;+P;0n{n#d3=CFrB+*( z?tGEF?R6akJG;$J->?GBqlKyv4HP8gOkiuiF{|$d828)7xhFRn$VwEFsgaQ%7z-0q zNIZ+|S=q)+8Y>`|B1N)6*Rm zcxG{^XQD@gWe>q~e_4~i3=0>@C*PicjxXcZTdCG+nF(S{bMsRXqwZ&d!}s+L3%92i z-#?*UD7j@yfXd#>M%6h`m87(BpYLsGP9#5K ze!&G+6c`$qgFkLC^4pGZhcT?yR_dg){lpS;G~Ca8IHLl)V2Ag-`NQ`=l9JX{ALOh2 zn~lN84tz$jo;=$7`WGq?f^I53-zU_>Bpt1Vg)(|)rE%C<69LBE3?;yFGKDdlpVr#i z&g{pfP(e%x4H0nkc4191$!B%YJtytQfH*TgZ z#HJ-ACZ&CH$RcwZpBPo8Wx<7qdp@2~_^=ZRyxg5H7P;S=@DgH;nQRHKweC}$R_jHU zrnUZ)6x#`!LP#bI7EYTO(N!Br3j5qvU0a{SPyZKiz{I&O%AGJ6rf%t|K=fCky>W01 zeCNjn6u&&pM>ug+6R=P1f8p>B?iZ-KAEldvGtsZ1?RF>fc#yM94($-eD#EhIc{cqX zvy)58$^yYLtg-%GY?(@a z0Q@BeFhz6WH1b;TLp26+Im%Rgq+&-v4Ht|n(hz)hDnI0~kx~8;(t~Km`4Bi_GJNhF zdfvzFVJwxFS_q3rv$54FsHn*Nis7mEHLVl`3Hy0H6m)+q(#Ni(FUX-j1G$LL_L4l5f!q(&R z;m&eA3YYl`J|KuU41MSq5&yfBfOE^bbe0GGI4~e0`4vs0)CRc27XscLxiWx%p(O8P zvstKBj5qlWTo);D&yYetQGl*q_w?piwf$i>1cci`BjaUeCwG~zOP!=Atb5!$y4Y*I zPwv#97vW*!O4U26nH)6ATBbyUFuBYi$jPx|1V&GDe8cB3f7y>Pg#`1-_6h7q*W>h5 zN?|;EcUCjDXUG(&D6*ZZcOPx|)JjVhm$O}J6vmRTS}99nB+nOaLK~l`zzceQMlTw_ zzP)d8xJLNG^>c(yVJ3Yse)fWika$2Xz)=k7dn~*as361)-hRFv-;bJ3RWoavj|G{B zh;8b!1kE}O9ykNym!WJ3pzRM0gX&x;@B2u^`*-c{$wJhqXt1dDiYpI)|{xL zq2ITFZ$bdK0M4$iO43z$ytTJtJ9U+?myfr|P&@ZyT(c4QQol*!=;$g|ozKt+F>kgm zWT}PLp`rlZg(h~cQ@M%z9{1(h=jH9Vqozb--eTSu19oQ_H!TM{i_b^jz(%*Aw9V6b zl0a*Lf{LQFZkd+0^zqW?b;?7;Ek%SWtDsd6a&8Ur13>Y;U`s^j;PiAIze|(mi zS;1Z*9-sVP2?XR zP8)}ilPGx9?)H!p4cZTd`}JFQl}QCRW43^#q@2}MF%8D?U05$O5{lthRMI@MzCkf@ zNU!I!tt0I!q208GlS+-2A7Wqq!vjH>p;>(29#{T7dsTjE1sQ63d3`v)9-Gv9lV;rZDe$k8k+9Dlm{pubNQGp{$B$K;l% zZo>%UAAkBdFWV{CDA#m85f>NDKp)@5$9UQ=DOOKXBPUFL!&Y{YV>iBmg+)4B_Vn|- zPkX#v%aM|{o&ZdBPv$C!FplK!gQFQL^%q)Q4`1pA_e|3R0y`CkyA?oZpd%@Kvibia zTd^wu9*5O%2|;ybctV=}xI!tlxr*N~OI-MvmkVx-U=+7K?(ww8JD?H?tyHX6UHR&5 zp&O__YU*5VbpxEkb?fU~^Gl(;xrQK1drGQ~pS`HFQt%>G0n&x}L=H4}VJ`B`2A3N7 z+lk*V)^EhJbi-k=&(F`*T=lTO$Twq%1e+Do6<#4Ep-GSHCOv(-h|;dOfqAzP39#&^ zCu$X@oBq&`R+iJP-bNyBege>r)7Vw7X%JPQ#t}`}9Z(NVoP+F)? z04Z9aq=gI!8k_t8p&ZMWPC(c8pMFQ|kl^2-SB^cKN5w-xhoTKBlY-rU<0~ii@2npP z`N;dQabg}~+)oM_I@%OF*4F2MfynDi!J8;r=+`tPIZ>+%9u^k(7b>RT1ww(8`sU5v zc~6d;s-R`b<5v2&ZlhTK7RRqZk%w$ zn4b3poNiCpfR}@}Fd0hQe%8&zSbK9unw6~kOj$|kjB1{>=5L-SUs)NMLD?+W2va%2 zKRX2k#Bc*@XrZGN$PmUS!hmvlaBO2a@2BHa>JlePB4R!HyGgzC@MV%?m(O-wF9|qz z?$F=AV0OawR_j9Q@-cE%UvV|!VugGRaAo-CXuqWnU8(W<-k@ad_6P%G>F;1&Ywh-_ zwXll931(ekyrQHc-tYp*l<&>mZ^SyMdgD z>b6i@CqcEFu0Gj=GuJ4bj4u8ljgceWwBhvBKRZa$18Rg`Q0UiDQQ~T8M~J!)$!liR z4^UMC}M}K4cXWl?E4d0LIBXEeun*9h9HEFJhhps6h^#mr@+~)H%gt`HKgrK{C5jW#iRImI4A}Nm8-nJe8EU6k(gSHPG2u?hC z=b&8Md`>ZOep-VWa6pqO`qfdz^bHOw{v?dCw6T#4w$<%`fXfq;EzujG|6*|#UC}}I zWA1wZ7_h@TIXNjSEB(5uwOkEZ(^l%Mzg(Ih?ys1;BfgI&*booy*ZQH8DI0ZN>uOh+ zVHtD>Ew-NU$F3QuQuobS!;fr^0SDNfr=UPtlKXsDfVZ2umId3k>7!K z^V_!3DK~ESI~u(M<1@<2CD+1uY=Z*v6q5gRB(FC2ql z8QZ@t0(`l>1I)uuy7uYN?i$3A&O$0{^0Q&)unjLZ=vNELsT6mkk2Qa+E(J)%KV_K8 zA*I4g>j-yK2{88?#A+!2{LX4IGPwwyVT|_5s6h@RI6K|DSJHyqY+#aZDo@C2ak5_M zO%?g*-n;Ujeb?VF(X1Anz+Wt z+t>Rq#Oj?2Lq8gHy`cpqvv^yfnQ_}w6Vg@x`E4yo5dlN%w=FqfBA7oW3h1&kwo>vp zWuzRKNpJ~8=vS8G7*_ZCY{?q3dE4PJW4Z6~6e9rt(ycsu2U2Kk*x+aV>e%Y!gd`nO z&UHHaVMbeVQL*mL6N+-O+6V}5dL!CT30%`;+O6Og$J;bFBR4Y`65O$`v79uq8Q<3@ zDwk}nf0{$a1?a--T(-;(=92bOG#b#MWedc3)pZeckz%H{&-^@q|HRDz@Yg4t*4THI$u7ryIiXo7IZS-~RfO9#56#Y*QP%!W}IYPc~9%~6by<+IOOrzqWw}|1$u&ut2h3c6v#39sq(}S+IOID4p zqb@e8r9GtClb){!!I3g7%(LlDX1j`+8E2?(HlTWMN9Kf+8N4&D-BTv?n!U)F=$%Nc zKk3j!QD=WpP-A1rw_6Yiv_r-aF6kgdMMiA)er9EAEg<8ub*gXfJfmet6kdTIP7Lot zzanCbMKOg(g>`zKrkQ;rJkL_6_69i>Amv}d!v}X81c{R=iRmU zxTbTl=m{e$Mn@T!t-PoRV%oVBc<`QuD>yS>r4Zc&z;LznUkP z{U3h)_?smOalAHV8 zJg*csb{-A^uWyn%4g&dNb7DB@e)&+_-;c>M?3raW%5QIxh8(f+Ad+h=-0of=qM$?Z zlggC-9E1c2Q$Pf`8lzLS-i0W9P1OIm1^EARd${YtD#S@uPLUDsLhuk9>4Nb0^ZmH9 zA5eY%8~*-wZ##wy5NS}na!73U$p2NX#r(!5lJ|~8c#gur#PGWQ{1X$ZGEffi7Dm5O z2oVGV?le_8q1pfcV4Z)Vbl|6t{Xb!X5~4jbQ${86L_2%-b&!eYkR1Q>Y84F3Xa>$y za-bUkl=8mefCv&T?|Yr{Ff1CR!Di?`!NLG7-|}B(2-0T*^gpbSpex?LuYn=^f4&#Y zUy%PzATc-CvoB$Y!Ld;|Le8ciwqVV z{0!g>|6$Gph!Or@P^ACwccg`5@iZl4frlX%38fGXMos)LXsm((K-F`7e5oapBF1?) zVfkYTeG-t6Fh-{N|01Kn&sLZML$V}n`ItHeMMT%Bew=lAAWc&&4L78;^aSF@aBu(G zv6)6&jy5zsBQaADKqEFGfe(2@)Hl`Lv(VVtVa?|_YXRV75K2ryU!;%9C;FEcY*+mq z44BaG&wp$J_PPRVJ{jNlEKt}hQ`acW%iCXIERHo;d5)!h3^?5oy zZHtEf7W^I5|IJF!%*05fHzrz9?PqG5YF%R`xKfG9{YKR$(Z`-=tRPDM4bU7DqUF<{ zIhy&ISX1NZwlvFOixjZ_OVEepua}V39S>lD*s9QWF@-5x)Yj(Q?qrP=nl1%2jZziK zY4QG9JaDonAwR+2U4)ipD}gUWifW2&PCr)yU&|Cp-oQ9M9F%}v1kdVA)JYT^qIVG7G4f&EW$@JR&?wxnQW%MRPfa|T~|IhWtAy}n9yk)W7)Yeo{ z5hV8IwM)5J(@aVpJfAY50dO0|)NUq8;40bK+Z0rpdhf1)9XU~`MPYN*h(nv$t;T67aELxI0(SqpV!L{ zD|z&I-czB;=6z=;*K`~o-cr3{!^F_qcXyzFYs;@h`A~W!9hox0wY zk%tjLGbo3Dwo+kxxe@|7(X!2T$J3x@~?7Y?j}j2u#U%%_S2 zeR@Snc`n_D^5T@A8xS|&u+;SVE#PgVf+0wQ?nb&PZDnPS_Nl0(WWHSE)Od7JxV^Cv zNu-7?qKI^Mjy&GHmQ8~$Nd)ssSyeS&$4UZdlgKirrKAYUn3$yDO6wS?(*e+c=n{pa zBG#85($Xqu)A;5J`nA8$W)7tR&5-nYUr$f)Z*W9JL~i`gDww`tQRhiA2F4&3QR)?gNfWMt$uz#Ibx}qZ^QuC$rSGTt$KG3$C_%@3^?hUl(@15FIK)H?pZ2K5ETj&IP zz)iX-es7@zxGwGN@+TT<{e}SyU5EpVMIrky&v2gqdS%OB>Q@8=1hlpSF%W>Sy`6KJ ziGjsJp|xrC`xPXZ#pm^PjflH{hx=Tyv4sVtsfV&M0ARl!djmvs8oT9vn~0M388idO zc%CK}a5gDv2uh;`s385IBQPW@n(V~-<$#KcYGQl2)FMqpm`qkPGB@V%u(p3OZz0G@ zMwU5wh$;XKRIs0b>TGASyCAKzd!-EiZEwmr5d$%*@YM zsFr2nMnL}EzxtEeClARS+$G1L+ARk8+SFL1tf=}0=BW=Eq_br&UnI-Rpi*)+>57Ao zkDf2{ZLK`36O{Aj*QSWd+*dPbt#prn_LqNvTO}^PEH=iN^n@evgyb^y2_a-_+ehuUl-OP(z)9r|u!Zq8@>ArMr|08Ejoe9*&SKU!L}dD2_|{RB=; zBoh1GOH(vlTq#eWKn@Cz#hJ=HnhVf_g+P(qVSiSAc3uaEb1;5emzO50T;l@o*AN)k&w=AQV?e&P=9;JYw%;JdX92F9k#^>P_O3ee0 zS)rt=*x`Qb(B`6}q#VC%U|70%4Jep5>n>SO<-h^8Ea##j5OR9BDb_ggBXr#GQ)^F4GTzgbpbk9RfH6hjUX| zS&`{#RCCsm(b04kOMHk{ms23~%#O;G!@UvG+4;<G$cO3pKOfG830MEgg;9_Ia(uv7 z!+yk(ez)OVvwFhAN9!IQ9{vJDj8Em!5LHnE8LXnFmKzrfxv&u1QI?yVt7O<`POKDE z!=yMz%I51I0@YR@8Gb~nC}1(im8iZQBkMG=TTu67%drnyWzY71kO`uHi%&Q!Z>?M< zP}1T5l~vV+->AwLYSTt$GrlvB=m}nKoM;-KLXkh{LPEADQ zD5gC!xQcv>}lUQ10?*rxcujBa-k4nzq=^;|v7 zjBTRu+jl|i;Ly;a_*&&dU2v#qY8-&-L?D<;EY`ofM|3^o9%!~WxSOu2nWotFHS~Y> znyG{uAO~)so5O!g8PEW2#Yx&YDPQ7g#ch93gsOF8V^g#*F@oL5PdBMIEK=S3%;}H7 zE9ZagEy_7K`j%{nqU3u4<>hZFL8MSG0vR1)^$%H(d&0S5*yq$GQ~6G>B#{610xq)o z91{vEfigtl2T+ugQ&I4{JE(Uv_8N&I;sNm!EGYmr#Y#p-Caamx+Uk5+HoU;?;ly}- ztDvfCz0e*NDn8!aeDwNgEBfn9cZ-6RqiN^1#oWAPhW+jCnD6ZuQJ(Z7KhVq(+PWX5 zqKYQ^?f4bZnQ!M5R1{?o8Ty~Q0Spd47`ShfJa9zNxP}{`UT+U$NJ#d0?5!G2@&-2U zRw{KoV~98uK055VxKfYJ3kxv;HT9iQWMu4&*?ehUcjClnCQ zqazL58QHHxHP{WWtz~w-T;X(CbF#JuoLccZ++{oGH>-a-x<2BjYNR&V>ij7eN=jmn zN_RWO!?t&<1$4R4lsMTjw%d=FC+8tz19uzPWIt^O3JV`EH-;uAn479gwW<_>>CB|~ zK@)yLV&bank%@`T7fdv#OTy>Qjx^jd??IdE8m0kC6FN-zk?eHoP83rc8(5mz8D&Gm zT)GOYi}jX^Gi^u=B^8yv&yQ47%hRbJ z+r?yG*y!Ni0p`#q}OZhp!g9S`uggECTAFR}iZ@&L;t%IJS<*U*~S*_78sK zMnZllF3aiP{r|$(mm`VMcq+eyCMD0$fO`MIpvD-{h5a2ABvV`T*l4_*RKfR271282 zbG8&Fdq=)0pB;XCd?!&$dVJXCdEtI{5gA#oEYH{0*7Gxz;QDm6_bdCl^P~aj z%)MhkOcYe(JCARrT%@Tmmw3l8KPZ5tNU+PMoA9$7hZVarZ?T4r)dx zGmRDLCSxgVzCBE!U0od=vW-@@mQg|ZZ5Qt4Ia{mFk%cn+X9s$^^dW$;@Y2bOGZ?2) zWGXvLljWb!5rXtRN|oT*IFJ(s-DhWQZA}Y{nk8f!8uLlMPpRt^dz&W9<=U%Uq1nR8 zxc%()yWL6tcR?{gnkJu^c-irIP-W9`Q9?yTzh0+Y7@ilS!TZ$ab~>)Uw_mQYJsS^1 zN0DH_dB06}ebE~EpiTX4#4%5XyuSU=JQ$UpGwc0os?|;8w$-_6BsDrT7AG*lY1Jqr zF)ka`<@wfg5gcnI9(|@7*XxC)>-DTW`LUT$IU6%1a(_hT8g|9J6Sb)Kn5T%0 zpJ%DqMk31tIaitMP%s7!De9=DHQMjc|nkS+D@UWy3bI=!cQXPLN@GEXg3NB*sWKMENx?)_$41V9B<1t zZYOv?xx{?=hi$FIG3UZGRU#wL3{oUPTm2hw?6 z^=KLV_<}JJi!AfsZ#jHk-=szF;8K7w~!fU&Z2AdI{y zz&E6h*ThOKf2H)y+9PW}UpU>h4lGWPeziwV- zsiS1&ILCOEddM5{FFl?$)qTjb)O}keGFJPB-TP^2R-Dc49J0E<(P7yJGpP$V1cHjw zdqUaf?rktd+?$*^4sacJ$a~yr)se7=ew`^QzF+vG!Id9LNcS) z%W~1>C^4ID57RYlm}vj57yoATdHO!K_U2%_*K!RFz3& znM+wo8J_=bPY6_yA|)Q8c%bo|sB!h=aI#D7EIaw*p*<3n1xbJu1EKTnCOgo7>x>L@ zs9os?>%y^wY zNrj}J)U~o1tfCvqXKisELZJjcLG35!O}ffn^*4VsE9k!_(Ze3H#}BX1+wUVo7-7%A zM738S$m_a&LR*NA8={Vm<-7r+X4j07!>>L}j zO3j5zF=74YetU2rHhoC57scSjeYTL~pX9}RozEi2c@6E5VZXW{+vRD%_%3WXKIY$omR5R0EBBh!Zb$=oQ)Gm6Hpi!hv@{MZtOC}3aQ@!i+1?nw z#*tZFBk~RzHs_Gn)$lu3=Hno`Tj@*UN9 zp(LQy_Z(3C?Z0B1}~C3u%>P1 z^8U$-P`rqK>oMY8Oae^B{1_|7)KoTw<#Eu&@g{AaQ3Pq?JL~jVs^|WkxhXr_<%`#I zJXrU)X$!-dy4yG!NJlqsKPL+(2DhU9UHS7I&5tyvFwXi;AAg1}4z6 zuCsQgV=i}V`tfnZdj`|4(^~e0`IOxqG_<&)G0i1yy>$iU1#dWilAoF6f)#5Q(Tf}H zKTjW!_mZzuP2U;#`IU*`hOlar6U!@bP+;P2X!Grj96#hN@%#iVxy zVQK#E+p%&ioUh$Pv5N^9KPX;H3UhWSad^ame1Q)J%cgVBU#>k&$*UANTr+h&bMw6| z^le#Z_Xih3@&>-jL{J!&Wy1@F-kZ%VW?=+qFBwY_F$snB;zE?ck!Bj67M<*KaQ{Iw zgtYhkZyRagD%w9ax!4VaZC;oCdS3in&AB1 z5eg#T($}}HaC_}o72B7I*O9s@)3jkw_jI0LDIHN|*UDUj2+>kfvQcu-73x`=hO9Ft ziYqU%U23)Jue*=Zg7EwN6(uh*F_aYikmRj_<2!d$qnY`q(25Rr+mFhs$E)v0+1cizaCK4=(u^$$ zR1B2$BrM8lttacKv!5T; zH!Ts!5@gCEMyI3%O332kG*Vv3{+KBCU6b!*SoKK3XrC3vv1|>-?mv=aKL~l z{8{^ZeQsT00O7Q<;s`&Wezx+u?4kh%JeP?iHwWcoXKrjTkq(}W{LW{=Hrz#jT#5S) z0RoaMZE;Xs_=3x1us1Qw?D)76`R`wUu~SlV(a)YcgrV-ba4XN$v95IF6W@4Oz?t0`!_!Yi4GD_!AmF8*)MUqeBpGWC@^wrY>Gf#_-UE!I%h+0^o;}9 zfX)JHg3*hHzw0bt)Y6|q`UM6|n*sgURywZ+14t5BPO~5BC*B)Zs5#b2J(clB(b7lN zQ9}vmSyt9+j@obCBw^d^ARynAR?=}xU2PK6D=69rw)Oic$RXbX`RMP0|F8DmJ1DAd z+ZSz6k*tz4B1tkxmZX3{lQWVUJ`j+cV*`zfAd+*YMY1Hxl0_sZ$(feW#D*s4hP&`P z`<%V++vmRb{=2v8R#B^p)ho<7)|hjS@f*J}#~K_nm2)zfB7Kxc38x(~ba>ZhZX(j|5bf?n!w!2~yBPGIl!?hWj{z1dE6xD=V1p>+&FuX+5a=1%um@|( zbCDg?*XwQMq;n&(lRfZyu7{mL6t;kRzVHiuuv4=Z_D4iY5$dA3Z>oY%znSyD5~7yP zjv1{#@vLSRqH$F1hge&a{(0UWwE1asU`!;C=QJpFQ4QUJ9_G`Qovo##9p;3l1XcSQ zch8!jw#>k1QV8J?S$HK9zH7T7fm81i-Ou|pb76~m%b(L@0x= zEMXcUI1mlld3)0o1?8Qoz4{K;O3ix9_&FSRQpEzb5EcP3=awT#t_w!3E-X97n+g5; zw+LY!7AWZP()w!^RWLa-HwWwZ!nBAB?a>j7-p~k5WT69+{vcm-XyPAO zz>Nqz_Wb5Dwej6*|KqRKbJyLk4?dE3MQPx(?!gA9> zvM*c+L)|CO35%EZNbP&Q2`ekkqn!G9snVqyUQ%!qc@iNT?|?vJRP`Ch`DwjPKbB^C z-2~|NKXwAsOMPb4^I8KlB|uf#ZC-`%KEBdP>HP-BYj8^q495ZpbXqtV1`i85;XOWi}1bj?Rw(7EzI0sZW}-^F5UCz%E84 zK<|*K+FE*A1M(zQqW7``N1hP$C-p5h>WKW343q2!5-o<*yB8hz|Man%;55K$R+J?_ zca1#i=prB!*vNcz^}vsuc8e(FG&nan_f;mu%&ev$r}PDiR2F!;=3Q#<6$*GlTtb`{ zf4+POOQinR$=RG!0WMy=xPJa;P5#Gx5;NS9!dAyowU~N|KlhM|pR?69^v?Ue(<%_{ zR&i8SH3$eF+KTPzLDQmq=Dy#2Ec4ty?%_B2;317xu#?40&liuP`-V9baG3CbZofH~ z)o#qI(9U_V_y$}Ir~(x=Cn1<8lD_mOpr8DeR8F^m#ywL4r1>w$Pc1PC8CjVbsmu*g zPWH}r_kmlPpS@?|U~Y8zp=(&kHLC{P^Dqrq`zt5(`reKXGmVA(J)Gy%8|PjzQ61vd zFaaMP^!VYwJqE?bWhBO@#IX@L4iMEQDP(g7v)oJuBb5qBisWFG?1w=6abDyM_h+_# ze=VdCDAd)t>9MGhD}JzApE0PEH@RhsIqD6Pc?kLqEoh0+t+%v1Ds#jR>dnh5fcxwh z1#GSLXCe-|OeMTu8XMgP`J=0`LBzon;mE$B)oD#On zL*KcqWHUde`-CCwT9a%*O8YbY-s0OJIx(O}cT>hK&L(BdMuWr3)RmCxI{kYXddquCDhj$mKrJ-@DN(D+&D>T6?a0m8iXM z0StAM+o;2{gu%!VOx`eVCZs%am|89WGI!;2_>LFUMn|r>Uj_R+>|az-Ru32az3rj2 zG?OUI!^ETsHTl&j?Wsd4q)z4cg@sTT8(SU=OFK>@o*$ zsLneOu~e#IP7^~NUGIYre#DIf%dR$7Yt=PIcU;zsxaO@&frQfnxd28(VCmo_rKNNh zNuMoAYD37Ek7}e#&%b^WhS^P~gfwle$&j`)iHIC0!kYZXvVA&b*AUmdSW1$(Ee5qADKA0h{vswTYl#Qfq zaeaDCYq+$uM9Dz9vuar77g>{+hn5ci7`|+=Tdb+~Z6=`K9#Z@qr0)aq= zr-!v9ts~mZeU|pR?7!GQGU$n_h}&Zo7oU!`-X9rpC@L>U`+5T#yS&`ru#rYU1|O!U zruv?i7~(Vs_9gL9DdcmzGX+lMW5^#kUrwZQ4~Z zu7tCODq1ct-vQ|XLyZ#{l>U&D-?P`}Q4;c#(*lDs*Kf@qzTWzZSxK{BiPn(0Q1$Zz zhNL0K6Pe%`iVCOyT`!ns<41pL=(btyM zG?A;dvrfsv2>*itXT}S)mD*57Y4^6b%vOtvG7YE}C{ViA-2gVEyRb1(H@9>WYVfUP zWhBK}#KC7}G4#bX3CR*1vwWcNj%i=zWrIf#V^)Cr1R?+-1r$y5-S=)ywyKxQRQGQ8 zoD9P-FK0%C0AA;fvIx*bmSw9>x14?^uu||n6m9igi47GEsH$kZ8W3GDsq*s#>T=3j zEHT2bN0BluOOvhVi6t^X^(IH-x&?1^bETyH1PTIey!^vz&j7g=ttclQhym6W7NUEofGt6Y~w_h-1uPb&z)e3#oDJI7oG{;YKXuCv!ukipI9 zSl+zhc|Pk@U*A4)*3XzF;Wg}fD>%2Ip`q&j+Oq)k)rhVyN{;}STB0c?O}WO z_+s%kW{S(5932zirEJ(T`+(Ahwj#qd$UwU9V{R9Qsh20u^FYcCP<2*j{=Pq(#0ggU zl)&J`c9))O!`)wtU!&f3+ygq zC}^j<17a$wuGT$H#T+(lCGi?^Hb%|NhVT#A7y3&_`!8BpSYTtRBSYj={>iV?OT@cT zQ#%s;VD}Jx2}1VdWO~89J-ixEVYNuL`uci-h7=_XX|xQJ;@qJ4$(;L;MEU2Y%UWaS z?UpcA1JIXFpj+d&(Brs&Of*iV6?sZ7Hl8 z4Ls5_kUIQ*i<}$^ui;Sy!2?!PRrp#?%OudaIC7Mx9Mn8 zw@;1XZM@tESeF6DBSqQS!>>eo*Ti5~Z(oE*&Dvj(YCPRIB~_2P_ua|+gLyal`Z%a9 zZFAGrQbk$0voBU6r-!PjX=|qu7|3uojjYRp)=T6b0&|rHH{pUwZY0Ea{O+dOJR)p= z$Pt7lZFdan70Zm8%H~t~=Fwvl9xZdV$DS3l49t3dz+OFDX~OoeQeJ-jtt39e5?a_` z%pl-B_?Ed{F}}y7#_z~(x?(Iq?~}duup*;BKkVvKM_tMaX<+t(_`{YxvNti=%(bJo zbQaJ_$8C}3=ZuCHzfn~~;^?=|_mUeA6=mXPqqZe>>MwZDEH|>Go-|~-Z5Fw0m7&0+ z<0pdO-7hct_z>>s=6&&Aw-+zIaj6hKmXWy*Ce?`G*5~ND3-{eDQo=N%TcDUoQR&lN zxqVUQE$D*n*J8R&k}KC=QgZoIK2Ub9+*_PEVJbXib~)q3jwOHjbRdW5-6t5iq#HW4 z>J&f-Ab{Qf_U-47QnSrjOx(9WDS1tGJEgaTgOCw4tc}off@fOlUhisZYL88hZ9&#m zz8=q?Tgtr~u--D{yQl^VE8x_Rj6kT>R)18G7IXHN${DiLQ}Md`x_?ynFF~0ZNZ1*K zqvum>1>M6{US+#=vDM@0Wdi_xD)ID|&ch|rcw?SOi))`brw%I;+Rd%I?nXZ^7=6rt z{0s}&f(M+Z0t#&s5g|AzsT1|~sMM^^YrwMASJi`lnGFZ?(5iK&EK}kF!X@!Bgo_Eh zhquUlch-^F=a4Qa7H~UsJJ$|oW@h7cMrV!Ea2Nt|Cm)xd1MC^YD~(DWPH~>*=2D*DjHpK&pwGeQvT<}X(UAn@J*!^zV?MQ#=GWts z|IX);!lp-O*m?=c=c$pm3rPVhv6wi$w4#DZn#tC~ zHB6tD`M&Tg>L_a ztwUjXc{w>qH(VSX)X{b8N!S*0Jm!j`;JbH`$S4;J$vade8kwEQ-@J zMy1$6X~09r$Gp75bnJ@K z@qj#`P-926n&kHBAYMSdfvN zN^{%7n+X_jvJ`><_2Uqc7H2l5pvw>;0R^q=*ZMa9hX)Lx;eZp4^~V+eZ;lZO0;ATe z6v-cU&o)GR)C%$c)o+h|A0_gCnBQ*uvp)0KOXai<<>7%30tLkaLu>4%-i(P3>y5xj z+JU_%LHIY|#lJfO&JRBO;NuK2HHyt%uVhC|cxx`KbQl z0DvXv7Bi0&W}mBk#~3!~OL=&?SA>vpaMbl|=bcM_kB84dpNtO`r{xy1$v z3CSnB{HfEGYQp-Sx0Q!5SOk=eshOXdGonjXel!lu7~&I_oUhne+@4%m6L#6e*YuVoo7ff$D0iL z32+A6y0I&es!aDY~n}xu`rMHg8y*d zOtsKZrADT66PaBVzW+T*-s}7$H+Q^jFgRQaUHPrJTsYG+YAZ2WQblGoSoZJP(sT4@ zC)>h7P~bipTGU>Gp;7Rq8IQ}uZu3o_E4;~2=T3-+-j5+?5r(>{tKR`k1v(&29snk= zm?=R4%jt;q+SK)FFiMU@?AKdiz2mN(eI7~a9hj5y`MeIj_Z4S1c-`f79|vzwcTeK` zkj={cFHf>LZ}5uZl(@Zp`kv5pZzQ6dUqU=LiDaJczty2V*2SR7>lXIUM~iZv_-$`SDqelP!VHl! zZlXphG6QCXC0egmokeA6iejgC-sJI#J09OvZ{E-5GaK&wdFTMUh^6fAyJB!@8;dK> zYU83a)At8GR# zN|P18JwEIpj5hT6@v^ zgq{ANU65PP(;i_+k{m~sGnz`e{Kz0ReyLriGZdEaTs}ugOF_R^jQO_^nOTXi$qHb=~Cl~gAgsV=myy4S9l;$CF9ja|8V`hFo!sGCEHkyat)#C$9pBM zcS}U6R~(7*oy(terXzvLNeiX6c(@lEDs>U@q9!`hTnS%fqCVN*T>8La=mL$yGjPNE z;bXC)jNtjFbs$JCWFw+V4iddJ(8>jY`Wwhr8kP*1x=#uZEhNWfR;*W6St-$&ht>^9 z7(gILV^XYD1$quMdvn6x3Y(30QLhT3ICzg&4d4l2i^0_J*7LPc%=Tv6=#?U5Q08Ps z(7B~|+he|YokZYML*}A9N&0<0!MR~m-$85JMB&WR+U{HN(Tj^#*D=To^_CyQ69T)p z7DRpHJ9~vVEK>;~tnSty9;}|PU8hDpT{wL=YRY$M2nr>%*J&Q2mELnt&jS|{xdT=e ze}6jKu!eg~uIdR<9w?IDP`y``^kTqhc72BsZp_Tfp+(4;3Vrod;3rK1 zkC971t4-Ekc=4m?+GbzGWWhw|Yn9c(m~;ifLXBExbqRGyQW=7iPe;+pwwn3Em&$EQ zsyLaNl8!Y<4h+?id$q`5tdgTiyUK#Kd0$7DEXvR$7RxhwLie@4GD<`e z(JfJeJJ^eT=9+||8{w1@G?at96X*FF*Ov`c`s&675yEHjT{w*l+rhq}J$%OIQ3!5|J(l}4j^MqL?5m*<^hL;S&P$L$%dtkTI{kDB-wakuJzC=^J-S3 zKw`lc62-9Kde{LF;?&X~^Ch?LtG}Y!doy(HB$RHQ<%cpTZ$=>0lp9w0g%b@Zhf-KZ z^{oF2SO^y2ZM0Nk0(;E-5d5iTz37Ga`+m$#Oo>FAJEye%xu<(wD!`-)Vw0ZhBSF#e zvos%H<>wX48xWG1_E>I&JAZV!r!%Vv^MA2=&yg}UM*5;}Yg_GFY9l@0-uBUpY-s}w zrmU;EY!<>T+M1cZ>#P@S!%Umhe!@)&NaYumLF}dyt%*(L^DD z-6NCYVp+!&NRy2o>*l#EMciss*EYGD6R^QlEae!}dD`FJZT>(lD00?g^E4}PtZuXK zjqxU7$R*g)&O7OBZXxTa^5l`XiIx)crndp=x_T$#?cC49gtYCv*eFKAti|qSl0Y~2 zi=#;#POh6r^`+~0ELmDzH_T{BRCYOY(g-?QJGq8&>+Vdkh-Pzc(mEB-RaE#*ieS-c zH{_e!TO417Br;o&(|RA4Cbzw&(rEmv=u7;pxzWPKUU>fP_mFs27-sD&Bd;j;iS*LF zZ}zpPF7$!8=JEmnknrXiG`(qzjg_FrcR6+~!WG}fGm?&%^8JbQ$i0{836J>RIXYrL z8)F7wM)RuoLs`Q|n5Rlz*F$$gGw(y@&eAoKVCMysgcYmtW%Zg@RJgZ|x6&tIyLpr1 z!C~#8nLcBC2B!Bpt{2(8J*%sa45n31_9MC=UbW%^(r$zEi=RbltTE=p-_Yg6vMDV0IL(|&uLR?&iih2fF3EI4V- zs3*KuzoJs+VDPDy&DcF>rE{cAmQZKfBcy9pfwb2ZQDux?g7<*niJ?6$yk*l%Aa2tu zQO|K8ogckhJ%?&TD5odTILvpwAO-mk;evyn-Zq}~$m#mPbiR*-DV`fVdTQ+GEWID< z4hwMfR~|{QTy?@c@;|&fT#lxbfPTrTu|(1`%KN>0H7JJ4eGg8xeS*VtaUoHuVm&#D z=-%$6WK`)HTwh4H$eS}Za+=tL!8TuSbwBP;_v_DSFePu)=inn_$eCpHY~$F-aWAez z8y*}NR4M>QtY_Q3wBpT?aeBFbU;)~SRz0A@jy~s$2I71bMk(cqKE)ATt$4kJ>my@0 znJP~#5sh;3mH+6i9A$jw2QD+N2jSMilfe;c$}c_6#4{(3YtXzKe!2v&5~eFGFeQw1 zwD=)OO{XFLF~G_S%pVil^Dc+?G@R{UU#%`9V-(Qjm(lfm~UKzU{wurQz;ua8Qw-_ zk~j)eui6qbm#dEF{!+e@_t%6;1tZC*&W_K? zSrc9dLje>Mx;TDYc~vzTiGaAYZ`R4g$G!$^B`ahltm$F}S$DOZ#a>*uJ^WfoP(#{p z*Sq4dLv$riRdV0$Ft;LG^Yu7wuRYHn_PE2qMC;|{^XNV)zx{71*Cml;yBF}*E9uk` z?aKB7gLo}48;gCwsEW7bLbFFas@s;ke3+V$-3+={eszROG1Rd_jv6dnO`1t^H>iu8 zbWh7{le+?wTld=0P-s?UiR^;Ga75S>rn7*nRs^OIVdfRy53zVjZ9Nd5+)|cI^6XH@ zOyh54M)KD8;kJH7I@wFwRy<$Hh9W^JIE?!^k&r5_ERU_uf3F55koMI)pODe5@ofA$ zQYgi*e-2sR1pT=YuF<%$-(5728+^#5O66SY?Br}0ORq%$^9h-A-yU>>cNI^$?W8VN zxjS5_g$zU;Vat4W}0z93Ph+PG!1{sY?ImAh7A{9Z=CvEJtuk1U|~t z7-59@o#f_N^R;YVCX^h8qp#0y6+k%9eOsGpF${!9nWY@+QyWK2Gk@x;zw>v(FoBUBAY4gWuepvBQHs;eeg~)ZqcE3cBwG6HGvOn@oafF@ zUfR)g4rZ;o`f`efUbtaj1rgr2v{B#io!u;LtinGSY&qIAHG@?-PS2z{Ldm!ct}g_q z8=3E-{hiQ*C}j;zu16S2e0} zeMX+N8KP&({&lO^OL5~bb~^FxZ+BSTiNhtud@C$F&X>z2WvckmBZ|&7!iFOUikKtH zd#2~V_)Ig2TPKralDOf^r}d#di`_%l$9w|vtL}W`>mEC>R#s5qZ7Fb&-EHL)AN?|Z z2IyN6OWdxElcOsgzFsPUzpfUu&DY-*nBn7K$46%|A1FJ4WBZ((r*yO$i|1a8WS;eL z3D2MpyGjDL;%gPc>6FvmJNM=b#J7y8@o|`atxh(b{pLLvPM5kxtUFoi=9wn=vfRHzV{b({g>p%=3OoTw<>#WQ50jgAL%1o1QXV^(jT6nX=ZY}*`HWc% zRr1}k$^%?pmz`RstpMpS9{6Xw!yX7R8z7UE+@rFj3>tv>X!H!nSH-noShD123@%$&L-2XuHbr3SPA+ZcGGE4)}?=_ki zb5UtW-RZ0cwg_r^A&WhB6QzzgaE6U*z++w7w`-w+4+?qF<%T-GkpPFh%pap)AGTPF zO7xabuq`W0oQ0%!kVS^K?o2#0Ej_q~kbTd#>90<$H&r?Q4?D6SjIGPI;^8&tZqvP{ z(R75Rw%@|I5rTdrA}qC6dsmi0qiepE!l@4Qi4)-cY$tX0W*Vii0+JTS0BUGq3QEK7`s}EULgj~N9ow8g+-vOhn_J51 zW-%^XxArD4Wr@RPoEji4&#;5+Ts>$%IknBq9K#`&ExV5nQf=6;SH({%HB4{tMB4Ln zg(;b|gz6~*UQyncEZBiv_T}HqV0u21f8&Tp2j5I#(6)o&&6c`FJ`=9uGil|0^%xi8t*!h4{*V zl%wCA@FaCU1FxuS$5Bh=d|Uo`&^Sr85%xZ2=>Q+a{!V~R&^SHmL3~otK+ia3WTfr| z7bo42Odp-&Z}ZPTViICa#s2!T{*(ug32(il)i-{-p|~c8z{9d@L%DP7<3~?RcIq`7 ze8ReC?(V-vP=09o>$1$N5vjJcX1)<3y0@Fk-iBL0(8L8fa)m_gj&cD$9+*#nM_f`zF=Q*yIabWU8|2(7_2~g^#lJ7aX*WA-6*eUTm3BY z11y`pK(JSv@{EkP;4(Q&6IL0vD7d73li53=_awu`44V-q?HD#E%VnlH+v9woLOb7vb?!QLO>Cbb|QFlO}E7UL~xTK5f|L8 z4n;C$P!eBlmS%9xGza&cVr>hmvmFq`1_j;Xf$k7-u(FGm!`do$hOjT*#8kJ^BwdS; z?YuC_6;8gDnt=1lLWr$gxYlRcA zsg7?%0;JGK_*3@!jU`q{2EvpW`)?yhAcqv7=U!%&%9pJ zCV2m)d$IOM*yyVps@`Tfymcndo|pb`kqjYT@laf?lvj&7C?{DLR5y=zz=Sob%p@0OQRTI2_ zEBjuTI<6$LCN`=uA)&V5YFih2t`@v^Oi4>Ycb@q1tz}O5dPx+Om*Q zX%F4xh$a^hofP5_cTgYB-4K6oiNP|nN!Kfk;e^KJn$qgOz<-(v$r;B5o+fNT8u#RY z;Kk`$4*`xt1nH`PI36%aA9Dy>_9sxsx&?IX%#6^>4vaCx{V?^79jEm0!=O3}$W>GF zN35iy+`jyxp|tcH5Bz9M+id&5PrJ%Zh(;|!9UhmO zsUtQ>Mq55?XZk1Z7y?#};1!l&_wEml(pUM~DDz127Tda~#Lu=T=odFg8u267upY~T z0rj5#4a54)ccK9h=aXo^cLD`ICNOB>d=;RShb6HXZ5;O!i{<0hP6&Z;2WwvLk-LI; z>LN|=$>A3|slPt1E9&UgcOg-R@oB=GEnA;@Tj**5mK!kHX zc5Xx{baXmK9%XKqO4*ZW1D>uM8STYfSx9eXmM~2zTkEUJbw#-ssi>4~!+2><84&?+ zg{w_tO=(58O(X{|?}1FH)?wbRP*=p{#?i;fQlc8-S#JtpLzzCM-fnFNl;=~LVlKal z?&yd)S5kQynqKddOU1`lD-SoS^PW7=( z3$j^byJFL0^yPF+Mr>kAQufr8Bif;?bkmR-2Hp35e6CezV^dCiTr&Kkb4skElRhcm zt2oall1@N_HnDta3Vkr1yuGO>{(ZKfKL5wI3m~{_3uLQtN9Q21u}Xm25KVJWf{vK} zVUG2Q$eG@+Dz*aik_88Chq;NdU-qSoKuMV~l-9>c41-2M$9-v58m_*k9duK`%9@6W z0o>2*__%hW6YZ}|HLzOpcJVAB2AXt%HjGb6%gRVCotoNm6V?w{(~+emjTd$Lysl{3 z!BE~cTE%8L_S)Uzv&HhDzP+(~xkgxUzdy1rn$EFsy1CgP?{X=6n5#T`RNG(~Ree+f zRvt=7x3G+EU(nT=u2Q(df=kpQ>NEnT)mzaL&hY+ASsjxm3rpkhyh;4X3Ow*eeXlb- zNJewg2HP{RM?O;jOy_fbe(&}=%8>bjo#q^jOFGnXo$8t7XSp$E#my}lhYC7?Nr2gY9+-NB2eu^DNt7|}yVV9^ z;$RZ5Y0YdzWd_KNfTDBTN9MR#@{lXY!+2<#9jD)W79EEH{>t#p}PeFJ}tG)|}S3uS44=FE7OInT~Q&VF)0uFV09L=b`9em1pc_MONg zVuZdkZ#X#K+~q7$S14amkyqAWp!6iI{}!sL%){p4X=XvHsgOd;2{~C`Avy!QA*kW`m@xeVC(|1S{ zu5lfzgpL4lIY(e+S-X3_D34(=>rGHawvK-BcHAP5TOx@&pRJ$V*2e`evz?q!<}{bq z08JX88#imB)f0k9r%TJ8Kh1Tpiun9s>p9dV+Z`* zYaz~cx@)8KF$UHgaB}aPvw_zBg(TqfTsa}{oxVe0Xe+9kS*dn8M7$&=G0$FFgp^rl)uG3x8fwQ9L?PTrs&!vu=BQ_P#H+1Oj97bZ^XPo@u1RNDrtR z8<%&!3G)5~GYHf`!whQm9V7N>=z!z}biu~XiS0S2rA1?OVq^}1_~2#`aAoRwSmzFf z+5^8buG`{Zw@5oP7O$^q>YQzDV~$Jq(4-_^CK1vdvApNr{V6*Q8=LPp9g-evTP9US)86WdjaP8{X~E+1_FHw zx^Wl&+oSo{a4@kpP(G=V@$w?`WML2}m;}7-i}0lsSQ@VJH3CTW)fB%;#ry|Vk5Epj z7pT$9TToEoP3e~vTUu0fGt3G@*?4PQ$|D;zT#9{mYDE!#^IJz(Hn2y)*85j=WwrYL zP_DmzZ4HTEyloLhJ@qygQ*wQ43^da*WO2RrTE389?J9vinva-H13e0sK{c#Z+WI`0i^Q* z8G1L#yZ>E=ZOj|J?Qp6Rxo3*!cC6yXS_eN-G31%|MLs|C#CZL^$Z~oOJur`At4+{ zpd|oSy~3Y(PC(Dd_~&r`7drFL8fESyJ2GagGbDLHXy{UJa*eKw?)x!NclpC1D)BwC zFB!IXmi(tLA?z$t=jovm+nMCZ#4GcM+RUWd4kiv-u8U1~4sN9V%oDf-AYEr&x5JZp z4QEUbzGLq7_5s-m%}2+^fb@fAfbD01>z+rnWk{Y*%uv0vz^tmJdpjT&_k8@ujY~_- z${~)nwT~A#sdn9VfDe8@Q>=~Wh7VavMSQXV8#={f4cG#TGCu@(n*ilZP?E`Za8A6w z-Zx;&-OUZC3J!RMpfT$yHm5BjzxT~ssZ_)ukglzdtg5l`tlT{r7X;?SM=~oXT2g<) zzkbO*XSi^5L!<=p@aDFVu$w`GPeuIiGjso+xw`z-F+xrwuLS(P987>#f6?kI|K_32^!oT0)#+t3-0bia3^>OL4vzmaCaEoeQ+Dx-3Mmio%6Zt z`T_5!Rkdr^+TCmSYB~DoNL6K7Yz#6C1Ox=^Z*pJM5fI*XARr)yqP>Mb84q_iK|sJm z`1VCo(<}3I9odgyks9HW#IfUC%J3&KlNQrC`)UoktMxgQQ8AUp6|t!{npQfZotQ0A z-LtvDcJ1c1h?%y*HlvBT@a*DQsCUn$wY~7$#znxzy02T6KBpuaZ77}{W)@8-o)p?L zLI}$LTao^Mu7w{Z5wm(MTw7RirXmMSYnR}Lb9 zPC-!;M6S{#`BY7eBIS~gaG~R1(}%o_#8D$=J#2*ET_Q`XihrxF1mvdx;vxXKM%5{E zi(_x|^_L zLIhT5s0{9$jXNKaoy6t*t_xq#oJ$4z8DzP?%zsR=I&_ zhmxl`N(?Ip^IYj_)g&P6Yh@V|a}1T>?0pGbn^k*Yp>%ayv?5}NsROT?;X({&p}T6N zRNiOx{%tfHO@;&<{DKWL<|O&N85^I@p#Q9gm{9#+c}a=E2b`EcL|WfHu0vN9t3kGN zWH~=+{??RDBuVF^ti>CydIAfxs?!^mRS=`bJ{Fo+N>{w+rLo&y+L9?EV%Dy6Ya6sn zjl+92y@GMqVX9YIWaOg{3(3faeF;U$Qt0wI?U$LY?|{xGJg~NQb{UD)kArDg(MSMDR z)B9JLy%ej-x{ZlcMYZA1S7}IxhW@BucT%;)Q49H=(Llso)B33>zex6DZ^(t7i@pQ! zFmAIO8obS-&GQ0%2A^gICojbQLA$@Xb8{s^LWPi4S>hXHdOPsj+xP+FXaYg+r2C|B zGUyXnl<5s;?N--E`~J#=hxvGWx3mc-Oh(3F9JmOn;o~oO;9I2_x~1k+bGg2M_f8H^ zsuYtc2?Lxvo!Ovi2KY{7X{zS0&mj&A`REF&j?d^iVPD~>J%fu#%Ikb=Z(k|ywiplL z5PNtZHNd-mwkYtn*t@wf3GrcdwOQgMJ&&vA5u_ZWaAovR%E>7+QAMEYh4j8n4R^3uP4bsZ)eUJ7!jUa{Q$@mfG(n?~9GC2rIuaU4`vMQFzm|ZDYP(UWAH? z5@rgK*AvP-dO6^ws@)0LAFl1V@O65#->kd>wjg@FnKdPG!#VE2B-YTm-5~ezhw0_P z;~$+viLHsfDbB-N@Peb=OT}#6s84N0N4~HCu)m|Gu)*bg{0B(_XdwP1iC2`JQTRhc zX<_fQU3vIcABtH0>EG$NpJb-%fxb8auYG{xy}$T*0M@{&k$JbHOg+uU|Q^P4vybSxrMw@el|8{RjTsgOeufXd(NDDH7-rR_;zV+hJ7Un~0Lh2S~g! zNr*f*iCmD11?2C!1{&QBw1OD*SFRJ6T`yX0s6Zke_d@^`N+CtP`%`#j z=cGEBn540RA#uAI?0&JigpkKf8xX{pIvI&B7IR zFtP?22cE9hM)N|`tR{dV@&!G~9CTSPSLIVCTbO{ZlcPP$Rwa-!wf}xt5BkSV0Ydqn zorwEa$jMY8EZgsDeo6AGaH|h@HIyxZ9W)zJPm~kzI>rI^TehM=kepx52{=06LJzbr z&3`!?x|qxq-IyH(1U?}{WfXIMU(d!9afkuhtfuZCT(A5eR8oaO4aomAua8y%sa;B1 z5+ju@4}Td=V^JT@pRCX9cHW3StGfYTig6LYU{MD?@KB8Jcycs783bkMn|d(RPK=Xk z=r}l;;*O%V*a;(o{(g)| z6vf#5%!?PD)-xa#qgRg}3`{`Ix`5Lkoev>>g1&am<@V+Z-^D6Bp#7{{6$W)g4Xm z&Y!$|EBu~`Zir1{2?iNAo;N|h_f%X}6ciRd;K5k(5u5kUbcu1RfE;wmzA+9lNH0%p zdUm62rxI{|iY;&~7u3gr3GKpqFPdoUh(z#sRo8)(CSRa0h8XS&T2R4*Oitbqvwsu* zffb;*)ogwn`i=Vto3f_4VQ+!D&K=W{as$M{5g|XCe*B4X|L*4Kcik*N0(N*E=ISi} zurHe<_SmmcE%Cq$jR8RYqiw@lqb?`}Y~`;Z^=yvGeOsUVolh@=+$CU_E56k0H`4{* zhGLuD;x1RQ@%sdF{8F>iuLq{=slBd`JdOQpi`c+-n+49|=_yG>RFq09@jgP3l4@}l z=1*jt7Q+b~9X_jBo*D8VA3umbZ>ocY?c8_v*6_G8Mf~l~aKXyyLasfA58J7Dd@rP1!e-Y&tK>1>u#0lsvkm0cOm5f7g}@hXYiH`aerP&@iF)r&=ZUq`yxBkAZ`uY`I{{sf z7O8ale_IoW%B#l~}yh6jK z4kj||m)x2stQ)V(*xW6;%U1WNeg@;YVBvAqbdo0&VNqcgZ;z7c;6TFL&pXaSV!LP! z!>4vSu2$+f5nC$&fd(SBy{Vz5S63lsc>ze18B{=|v>oC$xE>;s-6 z6Ar?$V$5qZ)zv{EZ()X+$O#P5LAhHYp2iXC!~v7%fseXsSzh<2%%-$G#U*R4UR}&) zr4?n9qodSfcJFH^Kx0(AGFX@W>FFy0{spYmL{an*NEq<75pum(E{%e#^D+ujrIL6! zEdT(YA%+T0Jn*;mVkkwjIL(IFqcZp%LJPtuMoQKC9!1Z)gZwi@%T$>XIEolzc)t>H z056e{u$7g^iK@vpK9WUS9h`?~FvJ9zw?CYRNkDIX0|IL0E2}Dr9G5y^OILK-BnMLx z-sB5`djpomxjk4hm#3|}a}A1uCar5;lefDC5BNJA|F)K{cs|NvImIj4;*_Cp9-vHq zq&555uF9KEO(x;~)F5lrXjwUJOl`0|vlGZbQ(l2j5y- z;{sHOqcn7l?yr6?(wo)Ve)L>xb(^l)iZg?G!g3-W&cid=xCZ@Xm9lE7CEU6@+FPTN z6|;m;gUtm^pSEsP>SjTTV-k=TMyAg2==aFL75O6QS&EU@bA7dze+zecp45-SU;Ra~ zqA#-qxRUCWqrK16zQ6nSdZ)n2*nwx@*1m=?Mk6oe7vagOs-8U4%gCqObpaRdik$bI zuTL!BiHK?fbiNdNZ*7USEAo6N+H2KK>oMKxUz*e{@6dXStwNEN96u|6!Q3Ys9kl9r z^2)8{8XDS7P46_Ft8g%-Yv{e3ihhYxXdsG9kD4%obxNRE08#>IyS_qSSP0)=?rezK zc%7}|LPMUQ(7S__sT={e<;!P15Eg5YC;ZwzKdlg=ku>acHv-lW9;GRkIw?mdL)tyo zyLPkte-O~v{9Ls0NxMwDy2I6Z7>nfuJY`4?Bp(qQWz|R7`-Y%!NJu<_;0_|47wN-3 zkTMf|uxCLY8=)-Wd)$8v(C+Eoyu2(ihEVSg{;Jg~eL9KNN>{E1LiYq7A0>OK<^8>U z10S~uW~X;Hc&fXos7R5k(TwhVt2-^K%`M!mCA-ETp!DuOGp&Sgmr!V+H_6Ab-(6pPY0RwA9Zcl?UfvR||uJUE5BhhkZg84;OK)ZMhSfoZI5$?2SoiQA~$_)e!|}bIvp6GkNAC^V&_hTPJm}8 z1<<9+Oz64h4~D6Txudyd#5lj`K*QhZ;bDOI3qt(O4GBjO zc(0>E@sTJTTt^V`kR$BZQd-m9urmB($9l5ee=4T(QXhDj{Y(|`w46c}Sa`+R0{sTE zmRxg&Zgwp__FV3iCXO*GW|(4-Z3;AK=^zemo*zLTT{)ynYu)?6eeYy@rojI`Mkq=& zUW&YbN2L~*^1N^-O zp%ohG)^aoQeB>^!E{Ro9U}^VlS=9XA({=89`;AGHMghwmZ=UTBw>kT3dPpHoKLsnJ z$4$gjXt*Tpk3BQ<8DwzX_wvOatho?B$cu=o)!c$6fjJJiGL^7Sh*jr}IC`>vDz`ON zM}C5AbP}sAb4p%mz%@iWo+FboJq|5QN#Rb(Q|!@MOD}z1K2t*$S0zL2BIG-maszns z7=*YFB}kcyqU1$;N44?tQop}m>(~eGJ+^xkrVy%mfQ}GQP(5swWCtE6y>{Nu?ey!I z)YA?=?W9m|VMiowRfY&SKdnJ7!vkM7R{6dYg@iNeG)=%gN+>-Z!6P4%G!|nCvL~CN z+XbSk{=-=bHD~I$r?`IOQMJ1^hoM8~-=4g65!o2hXLwqbn39O4peR}w2sjDE|Fsek zO+_h!5Ww>f^<{PA>3L)a(*)D+1sl7Z_Gd^69x*9)HS7XRc7s$I7@zT;%SqIaMQLVh zxOT@Au=*DB`={^U)V84Xp3=iEx7}UI!6>ByB$1(oEZ>UEg6eZ2F2ou70O>6;pE)_# zepLelz3<Ov*xU<3QlmY|2TiwSY>n%!8U(7WGGE_E zH3&x|sbeZph0)h!@-}?pWQ0tF<3``zUA^Zny$G%CdyCi+{Slz{FX|!{Wnjq=)0*=z znpBP|g@}L%!?b@mG-y9esef=V)rxq7>lqZg5vo4g(B4fWaU-nyA>a!OdwJ7N|Mu+m6CS*MH-$&-0@@|jqYJ+goMnM zFHVucfyiN3-W)|DR3oZE6l1f{wc0gY|cKhB>GZ`Qi5wo0h|V6Z+Furu);sElJX0(aEqQ8$8TW*%HQYd5FrwYWIn zYdtu&y4a9zz_5D#kOR-Wi;TJmMV#XxN3SoPICa}10)U_D7?bs;BdCCm^n|}}h-#|? zACJl}{1E>6>ImAdur~gf)YqZfhTgb{c(`H2PFbRDDFngBX-C> z0rM=dBYz3Hm{4==%M|xq?e1Ch64Thfwf?Gk&$93YNCe>GIAWMyc`9hE!8k;gPWWaRW@5^ z^6%N%a4UlFRpNEna%_2u4sU&n*FEc;uEVRfSO?%o2nu=$!{7h;J~pJ+W?SVl57l+4b@f+yt zpmHY9k5T9|l>tiF`k~s#m-R>eA&>Ph?L64dAI7Yj4ULgcc&G4weK8X(Paa9kKCj{_ zi5VH;Xv>V()iOH!u$h$jJwwEE_V`x4mBPr{(a=AE7{SWjJ({GfxX4=4+rcQ{+Rgl) zkGEke92giH|L!*=QiDV%J5b;9Qzfko{*1s?rGQbY=nuu8K#nhR0QSIhIIJ7mS4HxT z%!s7$^Pwsf6%{o#hb3WzhsQM?pfPi)`8-r052UmQ&Z*&6Q8XQwO0{4o%W8D;?KuJ1Vd95PuHE@2om!3F~Z060u3$v zuWTLUWq_w!+h=(N5P&Ih&7~DOSKH^TOif7P5I{J|P|wQF60Em16$mAobRU&hP_%Yn z_1Ll1*lXm;$PeyldFE?*Jl9?x+lJWBEDy_m%&gg<}QVtWv=J5OXWGM_Orqx-W zXpv|ObQ-M+c;p`GI`iWKclM(V+MJ~sUWYfoqk&%$*7i7 zwL{kG#`DkdCi6s=$zH1>sDhk#>pj8Tiygcjep;H~fM+sgJbl`~zcw|AxKYU$VGKkH zn;P^^5Jee=zbGgXp|Ud7UJxN_WAk0M^XWTQS+>a^6Pp|@etWW-WOoHb(acOtR*Ll4 z7Vyj~LgwKDpoc^B=0TzfEB>2m>ij&0O#TV8O({w+5T`Iq(Q|7`%&mWzL#qpWfX(91 zre(2_e3PD!KWyf?(2^uxxeuviC+foA8M^xqUIzusy-gmD> zNW{+aDY$ojuBC@gqWbE@*ia3h)KN4?r~}{$d~<~>VU86>i+^{qQZOsWySV9Uqr04GsoYV*)NaE|9)U7CvavhVEWh?$?ni(`?@9P{>2LVc zK^yX9I58{~$c62K4m0cRm42%Ma#dHa-@IMV?9pJ-L`JqW?RoRhR%nHoy;V`Z%_Kc2 z-AgVqA>82rUaX5|S%@x&X&n2vFG$aeB%bpeY#8d!-+wn{h@&d4s0wh0jB1a_4-+`N z9B4lxj;9L0DHDz7Fb?uVScCcBm4(PE_kS_Ipm~F_&qV;Rx6Pm**mK^-$=N&t4Ibm~nV)!J$Iyq;^#2{1zSZE(QeJUAgDCB47l2<%1L!YmY{G1B#VrWni3bLS9$?U$tv z6!Xx0YirYwa54A~6g{%VNDX|w{Hsyj(J=1zaH?yr6!ecTUsdPfiV@t~<>%kwu&ki$ z6l804Uhyv{5VBJ@bOE?wF3uTl>5-=ShHzk7i-^+h>yt`7zwzi#C1ClRVC<+h;yk1Q z51JVkDrOrnOo0n|M4r7kTh=o*zkiRh2rob}85{9pcw4)tzEo-* zRcA>_N?Lvjpjp#xe0r#hKXESySxrQgNGl~AIlTrUZdGH^Q`j;+=EacuO zY7UrqFqZyDD#Elu$jkeR#@70pcRY&0#BBOfdtg*oA$;`!fU389x0D!jHNF2?#`0*; zb8&HaMX(iVUZNZ}m0_E;uOA*;6lh}pdrX2x?qA#13WkQ5!^ww&f;_v=8<*bgZs+50 zocxkRpp$&!^@Ejatd@~F#ynHu`~v|$5izN5T#9wT%>)f*YI?k=<-P$UvBG@ziJa^o zQtNc|s9(XY`8d*BjZMljMpdVAmpFWFl~= zVh%_rM);-?`ho6afG*fZK6}JT0{tpXCHf}8P&{p|*8(x3hD*mytuDIl) z1}QmX(N+o_jFLpgVCv{U+nRWn;gO=fp!iVbzOHuia@q5jF(TCTw79>fEWmmo=J3^NE`CXJLM6STAk z0GqdBl(uqKzL^^vGc|VR=kc4fd2E$%pVN7v&k{uW{%)sa;^*EZJG~eH4&SEkUhbu^q~2%Xu!-g zeu3#;YD>_5QY;l`S3Vpl_fi;A$xhC3?JN)9XOY&m5uFSte&;VGg&16wL&{;`BLUU@ zm|rbmt9L(ZPrHR5SP7A#!RyAnvh!N#C#~--DA-i=9Pb~g4M9oEcp4hO{qb<=?CKc- zB!SM*=JK)~pg)?bsSV*=2mpw=#V#o`y;mvYJkx+)=&awAg_TyAO>a}f9yV~>L(Vw# ze5kpalEoHgM^z8G^VqW{!W|O+<&Rdtap#_`E!Fb3)FqhKeGR|MZeP_bzSSuRV$kx<=D7L^uh&rp%a9bHScEOi=>dnqi*H{tJ!UkCc=sSry^9&# zbl3u(v!=AVp3BP1G3khMvytt%QWsa~KYI{we0!6#C{X+Z7L}q-dt%c115^TrQgTwp z9yNacg@|fvSBX9nGL+nDp=Z4j{M_uQhuO|EAcohtR$E&8$#YNEcyM5_TSGA=TuU2M zX@YUp?e*i-*)u?_Iq%Knz%I+>WCJ8oWg`Gq)V$#hFF%!rfTrs!$qS*PpP(k44`Ekk znVI8QxGEf-c~=0&l#z4a@l>y$1TeAH^d=16*B^iQ&}O)b{Uz6B_2fs>2nIi`uIs;I zqhT1iTp)6$H8t6;Uub0m#N$JrN!Hvs9JbbuG>Ylt3}2s{=cCSB0ZVe`w%B3)B^Q;P z)qpVoL8|x#e`zk)#4BJ=R@Ef%a?rk5qZVDmy4PZ5&fJrY4!gu3Pr~uVm$LTW4tw{B zYRl7aeM({tc4=O|P!UoR_zGd%XL-WHMzw+*g=zSqoEBQQK7NBG^{VGHOB@rrH_ z2!OdJ`mj2V8I##**$&CAp`2^4UgpY}vnv1~6uN1Oep#HB{JF5sQQF*dhoE?p^N#4v zD)hWQc5hLgkAQrGdTdudz==JSjOSoo+_T5b+_$Z>ef&({5jBiO^P8d_6HYXB9;Log z%8gE=;|_SL>uFHC{FP>KG|FI%Q@LQ4HE?l>x3jS3a+H1t-BJ^{^ledodAm2*P+t$~ z96S&9ha9g`cR`b{>a0r>A@+AF`w<>5?W7x}Qvn9pjWWeIfb#o`HJnBVRbR7;(07sl z^{H4Ey<;fE7Uq!Uq{U2Dirojx&iTPAW4H*X_8Yx}Krh`NGb=e=JQMmbIspj;G+|nu zW#GvZGV*28A8KJ%Mi$T@VOKG2)W&{VvtChv%kmho8s=n@S^L7m!$N*u_MP9b5p8v` ztTM9^jzJ_FUM#g*|CGTVsL2bV^4;yC4$xB&ZnM|F$4o;hrLyGAr1sr?>3qfo*AA!N zx_i3%7i|3&Dw4N!f-O`T3P^6XAva$;dx3)nyjz7GK|ae`!k!-n6_9|9E3FCTn6F*! z`$ozWqHYaG?#6=)e|N%}la8fjrw9p?WkMg)M8&sq0w0Kp8@aTI3F{EIpMJESo}PBZ z&w4bhJE9Z%a?NZ>O1`Lm&+#EDE3LLpg|~FKCJmo+xr3*6GKE^nCx>Yj(IY9G#;j=7 z_-U#xYIm$Fi0S;F9$kep8*Wec;ZP4mQijmaT%+1bQ+qMq<97^(_4JW;l@+h<`Sy5h z)JaBK+G@x7;KT%JZ#w83i397+csLf7s-cGY?^=icEoY>vs^U=R6B>O4Z=Nx|p8^ul ziYn#DK9Za^U!RpaWWfkxw9JeLT_iApaiD}+R%z1P0wwX6mrH-ABbN|;G`lQ+KmSpM zu?i2iX{1a`sXYZ264@pEOoH~7*2M))ef~w7L3`%TEfE`E5kEP@hVq#JS7#|KU2O7K z45`m-o_ znV~JsiwfxK9%wDBX@QjV4n7cwf4WQwj{SYCn1cahvOJbb1aj*-w(94kP`#o~4(AcbC0+r{&yEj7NTz%t zkRe?G{>ljT*94A$$D0c_t>$D-R*&;PKaSEM`W_UCav55gf+9DAf5_GtyPKP;s6H)z z>?x=ZHjop5_5zLc&lTdHeVGKiKBqf)bMTJ0{6yczf2SGmTuzaDtGRqIO{e z&mAAvI8Zpm=)05sYY?8mXCd{)?50j5@fW+Kin0pZSY)G@9xR6Tw)`_g>GkdvRL*K|FQ9=`w%L>TG$_+~D+* z@?hD=aCN65%l@RfKOqq+s{eS=X1CTyMkgiQcIU_efiAl`>I(YgTn?X|sU?#160$Vt zlK9pcc3*F)i7cGA%A?2+hbn}bv*3-dDC?_(aecBnPgGE3|| zmKo{NI$+Op=&R?Rl9e+Q;x60c%b5PbZ*$e#+rD}|-9jz`b^I?cYjIBDs!|F2LC0I8 zsQsby+hI3(rDS4G3>1ATK&Z0A^nc2JEe^Uk{p5UC%4#dy+e#E5PKA%}Z)bO0SBJ^B zLd+rK>S7jpd-ZVd!NJPPVpHz3%@AVuEH3$?SII8I2)iuySObKgDiTKpat)FOQc=ZmQYQJd=b0>r?w6RL{3z% z^cOo}-}x9i`N+$;@n($C{>PG4LKO<1K0M649ow&^yXMh=Q}{^7nSCs5oQEf6ES=C09f~G{PxSwfYrDO50+%17UL&L7H-Q#0YS_TA zCAa^T>d4I9X!<^QR|I|5;v>M}N?h@G4Kzi;A6@gK$G zFvG2xcJ9XHzg^I1Gyb_Xmp;$h@ydr86veR+a@&fZm{uai=qW>?V0t&JcGnIK8Zv~IZwvW$WlGYEgbvX;-r z#1#@miw|#f%X@1Z7Q-L4*6&d9xGcH5jZH#3YM^k`E~?tF@*a1tn2&1VnYwEDtmHOZ0&wh8ww z-rw@`#hgIZ+`SeZuW``uTfDE4*q!C@7UE*wEuwGH6q)@+`k6@cKP;f7sjRN>=dJ3w zk&%n7Scf89>BFy%NZ3^3FDQuL=_+Vrg2qU0BY!bZjwO#37DoN>g676uLMwP%HC+;7 zNAC@rCnF~!BULI$=A~K?gs_V8>yJJVucpcdP4_Ghu$}dyH>ykeP-x@gnoTciCclH* zqkvrjZDB@9wZW(P()s>3&d8HgT`!O{+qe-%LtGI3ngTba4r}fwO9lZ3 zy`kH|4z;Dky~v%m8K}sW*@8pWU;J#<5U4duhHvUP3VnldMg30UbnQH=l|%gaNfVvQj0@n63&1SVJ#%T6mY*L`v0@11}AAdWn)6xU2lS!evvM#B=_ za8sJ?2Mr2|h_SY?$~cc97a3h0yUB^x|23hv%$G7`>^vn+4ZMq=XOyb^V(Nr)WER$X z#1%roks~~9A%rB{%;xU^N(W5Pj{P~(@Q3-Eel1Y9wzA3+@}=5G9l-q+OP!dI^C!F?3kz+GD%a6m>?-itq)O5= z#~~x;NT((yTdT^=D}q~*2u)#E)u3IB>1j(XZcm2$!z{ztP&D`vgvBU}$DS-@RV!?187NAv@KSEz06f-8iWzwLR^|c^OaPvYUVEe`!j}+eUB6TJC);~)G=;HRg z=gm@{GMNrE>~va<5z{D9%mp2R{b3_(tLIH^l0{PI$LGryroOSG4xsQxH?l1GqHg8t zV#^KhsgIQv4(^MUJLm>7Vct#E7pL3r@ZMkUkr<0TukonOsHKsn74Om0(=Y4la;|$k z`)QM$U|SJkq-Dtd+I!a(#gZ{LHl+;Mke#hH9|C(ngutFX!o$LRp1q<@P8@afN?RT) z1;9b1mCE{BR$^uLlk*dMfn&x(zUO`kd;fQuW(u)!6OINC8JeF+MOn8B00DjnplUxT zqRAEkN5|XmL@5aznZiDa16FD_iF+3TX!v~_S*!6=InmU@&{}KbpYx((Vx9i}d1&CK zADzl2hELPx{!)E!gP%n2Poq?!(5o9Hqg=h}?!MP6 zgSqPh86jXSFE6|3u#fbH)K7`u%r6?hwC$5{a9r?}FY5VMsk4VzgzUu!^$qP77U`UQ zznT;wDKS(E|B0~wa3*51gW+$Uk4w3N2%7o$9OPG!-d`1F}XsOV#L} z@3`tIBNG-&%IC7Pe^%c0f=?XtUff}<>6H#|N3JMEUEO*jwb!&hFOG+gRp)L(rFklc z&uR{BmTxmjn5%jbdD@oO72@+ajNT}pm7PtWH1aiuqRIb&%1pw|TtdxYbthb{;N6K# zJ~AfBuj3PQGcz4l#;k>HV}8Vr0QP+|Bi+k2VURFSJ$_M6;?OZ%T=r=8pCJtft-leqXsbq7=` zAwsx@4<3*i;KVtEkdY2Ae)Qr8@mCaXRJU*f&7gA4#rCJ5TamT&jLCoVWH&`2s`{qK zkCN-oT#Q*qUuXw!)IUWJZaL@qO|_(#X|7G%<7H0PEm5QuHVzW(5ha2B9$3aZx}agm z%~L|2?A{kI(ima!-jz$?b#d?OL6**?amPPJk&y8E`5pM1y=7M%sge|n4?&F6ev2Sb zL0j9={OjdcK0r6T8rNqeTC5dnLc#ulxGhK#BS%NZCp^=D^bQvel;Ms$EZ0qFe&_Ps zSZhD;0v&^dD6+r!b#}^pktP^UCX0}wKxo7*wA9j;Yfldt>J|CstI9klOXctK+@v%) z89WL2KQk(WvrYX6hQKepR@=Kj5{kWje8()gE59P!hUachlez-Pg+Kh5nSHM30X33M zG%Vk2o{vL3Z_&}2#{m_VB|PuPjQp^Vxv6{?yjo4J(+YQQz7^)}$SSmsak4k4=iJyn^tdZXOoxg2DM2je@Cd!oN}S)aDVGs4TBA-~IEC5YR zjRLmHtAU6@v4Q+foe$YEoVL6x&0yI3GIZsf*2`(chfLu%U%B2d<>ZAkHnUH~A@~j6 zn(*Ak8x+o$6KFPmEWH4Gj4Zqe&~fxZQ$EK%hmlAn2R6T0$Iv-|-A~HoF`!RhBH?s^4a`*F#%SJo;*FhRZ>ffpj zlUuK&s*%~NRMrEVOHyLxH0_rq`I5dqT-{YxFg3TeZw_}g@_nydRBh;AUDaUMkSknN zP!+^~c(`F>Z4=)RD5QU{>=wBs&pfsRpPKU}v?}pDEzJ#}>jq130J}SOZzIJ{Ue;=k zz?AO!K4`jn-cBs-;j>RyBrl8V2g-`XzMI1%N6eLBAG1h!Ol+5#&DcQ6aL zeP**H&*_+WSsBmX!SgG(0{$|_M2uE~D9gLN__OTl8$6t7}AWrF${CK{mX?^V?)^ zcq+eY#3jva6!=_(OledXHn)!hJrja@_x2RRDypFdS*lyvq-$gcRWcbhvi7LC07%~j=yUJBXW1GCo5SYTrquQOP5r$Xe5Jz z&#T2VH%S08dQ{-v)G?B#jXA3^?kNIcIB9505E0N}uf0<`CnqPgJxlQ0$vE9VTLiCU z7^o$txX)w*uK&IA+p=}Fs)Z1AAWElKd(a=r84ldNXhWqw^rB+f!sWNJlWf~#Tz0?o zVoB**{H|>z24RymJM3SSb5??EEK`T-2WOYU<$J~y^CT7tlwY$_h;Jfw zZufj&?fpgUlHP8kaJ-rXwMVo^2w40;syZ($=y#X$qTZB-e|S=*6JhK3{LkWc^Ew?x ziW&@B3r0eW`Q>%Y;^}~p*+~k(p~T|nwo3jL-k;smOn+;%*z5J{@)9<2r{TCkk>>H8 z^F3<>Mq;uZuP_3J4F7zd1Mq)XK*rd1%|Feygai#WWh--#=T-Wt?vzsbbO!RVq{+s(EMheCRbBmb8ngyE4y1> zuu7eoC^?TYtffWw2v@TN^zBPyvce;~6R*8DnVMtc-fHjuRaRz&rr;>uUGl*w7NbW3 z&Vu4*h+|rHaAs`xKqJJCtn#ae`H5i)u@7J4l@f8(@hvfc+oGc)=F9OWpiYyuPE*tYF_)BE}E^}cJpPyU&lbP3@2SdE=z?Z* z4O2zZE82%WtZZxMB8|Ljxl%0d{tYa|EaPb4=hBp&>l`F)!(PDms(FcP>U+o5Z*kVe zIP>c32k_}B44mnz-BmnZN&IgCDYCM$S_17SdNZ+}EV#U^kbV^AeCEHlS#m$JS8v(3 zS&EfYYtvvxA5%DGT?pgk^AzZf2iQAAs1ib#GbH?D_|is$P-r7Y4Oo)TJZz|4qfW^g zsHg~LE`I9l`JsxOZEqhTnFaS;D}rkFk)Ko?_6}X!&rx347YH_8oz>{E(0|7|VQ{L*sc*w+t6OK52>1~ZV30b+ z35RAY(8R~ zh4!963qvGG5^$PSc8x1(>Mi7#2?G}^e)$uA{OaFJ7Bhj>l(=Wc`<{SFgopn^b#sYe zT(d~*19my_4*@GK`V}5l(?eJi^%Lkt69CVD8lk=tBIvbJT8;?nJwn zANwul55mkm7$i)(x$zYg(`*}&Jmvpf38wn6y_JCd-u3nvj%g!heTu|UM+Fa9O9MTM zZR~@x^UUzo(+8@>`|9f<0c6*8VE=l_3#@lItlO!EmnC5bWKpk~AX%aKUCddtKKzz7 znwXtM!x|JRc}~-74K$D?4mIZ>Jxw1-D3sc6`p5~tUNTS7x#|nfSg{jtT(@yeq>=T! zii#@Mfm#yQQb7b%VO*T7#2mK^>C8`m=qPvscG5t3uHG#^m~Z!Y@Q9Td^T1MmQ^PtZ zP~eOoGU@8#j1YNDg3njXz}(8tT-%!g&XS=H2Ri7L7JfEK4ux=hB_^X)w&ZH+g8+(; zA?V#h4vnlrw;RN>q-Za26h^AIy?1i4L5*u#mCnzA=A2KJAyN>TS&M5*2k*$nl>QmH zoZuGp50qXx!XP5xF;{oDpPq|2@U-mvim%D6suo|M%S|08xg!p&IM-xn5;^RN{m~l_ zU!akIHatZnhyJ)cJguWQ`39AbGiAxKq*kRIk3ASoxKZ7d)7te9E{_#(e};h)>oeB* zQF39T)-J4Bz|Bl;dPu{WBy=FKCx zgBZaV|HlnD+CsYI$8i@-)&w~b# zoDCffbeR%154SjT@GSN|?^;n*a$kTJc!xHM@;s!U3w*7!X_$CF0_U0{04nWI)YqTqr zQC|#rd9I%L4aUd06)taX=;`Te)0-{S2`h{ANCT0dXb;3Vupr51EdmCle}AVm`4*Hv z%AnKY^#0lmP?E!_vn+|Z5DB^MdIGP2tr53t!xe+?OkWtV_2aaCZ~XfgA*QrB87#n3 zG6J5hvhGB~qkX%v>8Uz8KE!>p{v5CZ)D&s#rq4Xp>u#wRB?+T0^F z3&JBJKu2|IRfTA2NCcd>=dBlBr_GB}Dh zNsIsN@ijsYhq(phP}t6U2`&@wpkXf?oa8Gn_Bs@g@$z?6A&@t0t8crt`M}iV50gbw4%XN}Ia$3~m&v3lHy@ep+X=|#&-^5xJW6Z62t4U0-+eAON@G|L5 z-7w`H4reg>JglMEwc2fgqoBCb^pkksZc%5tjU1=qNA2HCc3$7y=+v2$VV=dNXYsrL zc~ThSB^2`M@#5m(NT?$T>3zQi#bo(BHz%r^*CeHAQc?PY~z zPG!#B{RyZ6n#It1V;z;U!RuwO9Lvth37^HEt2(S14LrQ49}Vt4%%=I3kYs4-(MJ0Et3uM(s~otBfBuI&H>i0kRh>Rm|~C&d$yozAvIK zE}Z2U`1m!aB_=jDl^h&B%$<)l`T4VLzZVzZL4|T3yE}5hh(!FBvovOA!t(MYp(#G^ zM>r+3$z#5UTOs0~5f=z?Tlcxt(eco(22N}>qD76OanU8Bv}@eHBu$o8mI8a_ z#{T|()tJ@et4Ja~)9xOq*nwYWXKU@QN8VCE5Vhg+Fn)iwq60Zmhyz=;=6NymJ5PMZ z;&wGXow?&tGDp77X*ZD_zh0Yezu5ywCCZy|S943Mz`*F4S0N+1?CqT;By*!v8J73X z-5r6biJBMg|eKG5+wVL9luY`#JyO!y;e)8mAe`BhjYoefI%$_od|5DJ`pMiyd7WWx5b* z`9>BmoV5OD=etSY_q#z+6oJQ!eMZTIQn~LWN_Cj%g#3>4V@89r{OzYHqr*vRZEuOS zwQMnio(F4FCrtJ~H=yodbXJfxU?3JceQ-;vV~slY%7Z=-_^^3|^;K z5+NugEr$JkRz5m>2Cq#|HwP&$#^K*maaruTYE0y8mRhjxGt=T;xdy2bp!&2Uw0myW0jsxL6fqX+$KJLC_>kpO>jFMkEao8dhX-nYj3?M zY7I`i<0T1n9c6sNu+IJ%A$cy3qse5;>K(6lPzcxnw*r@SN>1Yi*Y zEbuTZYt1Iv*Mi^?iZ@9!>^8f)zZi-4E;)Yv_0fwWWbRBv@X)h;okKWR$C8K-*GK&w^6`4T%7m!Q-q&92R_mh1kN?&R{}fA|eqlZtlgtTwt4&QNIMnL^r;r<;AS zmvrAz$#7`)U%w2>pFXnYT=_Q>+j4V7++Z1Wn=TjTtWxDq${f%`?)8Mw=C0muE-s~u{I7+K>wJB`37&o770bU|Zb{pVl5 z@{$`oK6lQG9)2=A_VMWudV6I1&lp^9x57!U_w@8!b3gb~T3R|(JhVSK#}#oB0S`~M z|9DSe^uE9DnUrc+qvxa1ZoPzIf`wHWAN-Z{akKZq^>oqw{WVCV*6jUm!6Qrzoe1OX z=*XZ2ydex&7P*8nBXF34(s8*keMUGE8B%Z2BTV}#ygf-RW?9}Idy*rwv`U-jv{pi5_ux-PVI$qaet?XL|7KBOdh zjhtmlnkJUU^K{jXSXLJ~dzKrA^qVqs(B>jKweNz&^9*WvT3s$CtiM|W@crJ}!@2@p z{N>zot*czG((OX#N|SIIk(=-Hu-S$0-|L5ss2@;4lJ#aWSIyMXS^86WDEw|48Lo^9 zv*d+DMR)pf2$N;tA#j3Qi3x^O<^hsCy8Q~ zz&swFGfB$EKXDS0U2|N^w&HQ)1R%3r2f`&PtE#j=4QTCSk-Fm%t`5#>(lau8%hc8t z6IC~R)z=i=sazZih;Xu_TId-&0$wBBzk^Z?dNI<>@TD`Dg$rBsI>Gi^RoRdn_s5<` zG#jO0kO@5iB^HBc5Gw*w)X3;4yX{6>P`l?tN)0Ruzug6aExRtcf*vz5x7~LsPmT8H zM%N9UALRx&8865L)N!Ho;VaXJ5A_SWej`a$o$pknU7dhsLCqH`<)WvT7Y+?`3Nte^ zx~SzgxS*n!d0cZrj#F@v|-H~mC^k+UXoBKl>3wj-nQ zdxfk<>T~o%`@&m)Y&k=A>VTOu0ULf!g1L0DT@qb~-N;9xrw5B%Q(F_XV97{9-Xrw> zNHJvC@whF8_8X0|pOSHIU>Ry-iHFW*v%u)3|EJC=bTRvK@e+bTA-@nG+Y`IJezebB zV5{w~s{q`!&NmtS7D>>JCqXjvk6-fHcZFD{74aMJKfHC1-8&-6(@`40D;QL9_A>Jth@~Y~ZYu@f~_(xB_jwbBS>GtPv$^5X>QtcJsnc5U+e z%lm{?w}vT%?y%g}Bv5ncg1Ftw`5_VxxY$oia z48ZPMiV~pOe=={Ca)$=I}#;iK}47+&&BgFs;1PtoWN7$ju@#$qqXz zbxcPOKtws`;>tSi=Uo$m({FF0H+{_S6pVUJd!?o5W!mI@d(x8<_2{SSIB02^*#AMH+EDE@LlAw z=m}SBmzD5<`461n%vi6ekeCF8VR4ucy|vq?&#TaCw!q3;p_->yf+_HG%!Ydm>u}z&GSCb`AlevaueaCpcj1>Hztl^1!Z1 zdSr0!J%S}G@Oo9r3$U2OMjZ2*+!OI}mebRY)VB1b2R%H(1QGIGZp=yHNK38q^W&^N zG+F2}#pQp_YW28k)BL#?p6xDmZdR>+vfzbsQ+wV-&%%vpdJFBXYx*3NZ&c3_UpElht7CGw9FA^`D!fXso@1;{YVAKRd)w3Pd>5YAP`nxLo1MN04y-bx7aormDati>7aS}fQ*2dV za1lq%G6X#~XPT7&6l|(O7!59}U!s>L3AqBsh2m`g{D=T`_jt?TPJuUrIEw{e6_>}S z)SWD?H-HjgaI##Skg)q+c~`YP@W^eh?l$XoykGTV^xrubwvwSKTrwnY*)`=+%lO{k zp%jj5S$l+v7xnJ$oxsp1?;}C)m=~@42>%W2cJil`-xazYD;w4I9(1rOOpu9dhLZR$ zCarF~v0oJ=SxP1Zu_qRYnLVrwj2ZXuX02TPc|7d<8? z2K1fg^oe9da+4d4)i>w*cfW4={o}g@=F0Y1C$Eot85TC5<<%>YDGDL$c3+M_;$()P zZH{i0P@Pqpdzfn3+q;rc2@2Xk1ij!7TsDKr`8&IZ1Llp8m7=67Cl~v-{a&s#!ro_& z4V8o>k;m)V>xVWk0NBivrUhHnyh+dkI|554t#!EAnatvDI(YQcNsRFj2}DP?nJ`wT zqi13zA_JzfajPzu{@gDz3MbyP4x%(tr_f`eu47)!iUBXH{nKM&>^WwRC&F1)cHeMi zZ9NTD@D4aqmd7j-e28 zvI^|wKII6Dir>Q_JKkLG!$CUtSbpbM7qlNa<=b@GxQ|lh0<1Yn52{p4`tHaLYY*Qc zwm7-y+wCcwo_i-5xr9>FovvSx^72J*dDo7NV8rE;_s?)XO-si~kV#jsPESOgj7Ww5 zo8nrzFNo@Uhr$8cip-?|E7X8AW1gDfPq(p1cJ`dPW$8#Sxgi5d0b7bSQ_|5cBDk?ptRqRqWJ1 zpO)p;HMQi9y`r|}D8XYCDi!f+3ADHl4pqmQt~R)hb7gV5hl&(vo`;I(p#hE32s@hq zBSDask#JyUG&M!rzjRd4>_Px#JasA7G~SlFz1uf3{9Ou{?F%W*tk>`UW+e&fpZFp@ zc^7*3+lO$V2b&Fj5A*FvcT|$o^=G*_q#lt)|Ml!L8u}mYcIUIxZ=8fsSJyWS7VNpa z1_rwK9l-*rUxRu|A3h{bA!mq(&18}Bc;?4@YllT+)w($Ufu_r4t}1e34^aUtCRJ@e zbgUmz2ypG%17Q?TUC}IyJb?rIKkW%t^-GAq-#;yOfoWpI9zVr|6p+5ia}_kHy9)=?$*?cLcL~OAur6abnZH8ddB`b zyRNC<({Iq+tu1Ni(9l81Bmw|yU8pqc3z_|Cm#>{vjy%SoTuDhOK+>;qKY(lyEn;i( z5{#0Svpz)K9t#uIj4He{6E=~^{dR%o5X8W96ljszzrT7JE1l|fpUc1{isB{~KlEY*!jyY7N( z7izn1R>p5j-DHm|LP#Wt;OLCT!y%Yxic*SYl-naTQUyMWy7mMwssf*tDxEkvy z%7Et&>@dJUoNY$fyq|djAqfZMY=uFWX$1gIST%5j!93>rEGda7CCc!y_|Hg$tfn)F zAoNgT{gJlRna}1xDq5c`P&kp1{b_%KnvS*5H3uvH!y#|1XdHzejG5DO6mvopX#&Y-+M3 zUkeeE;U{fUtxV{H*K)3#}c2_r_1?m64Hfln*3-0Y2_(P}y z!&9Vq@IN^KfWF@SFBkCt99t6pC%lD2R-bcE!HKJ3&Y%Xai`p{B@-Hj#f05k(Te$xo zfe7v24{Lxk|0yhh+T1|`2PgU?=N2Qa4=QebEZ}3H2jYK10y1Na|K)h>hX~y^3!E!Y zgXvJFP&~VcW@I3)uArEnAx@YKgarK>7IXbUeT#+45@e0Yg_*GE_Z$pQ3&4OBpJw0|xJZWaGdhpRcK2@spkQlSWn19l=& zc1-<-80G3N9A@Kv&@3(kD$NfsWzVRQWh|SD*o7n$gB}0z={Ng|K#$pC9)3_UlVj24 z^@gQ_LT|tV1XLtJxx;OC_Zru)i(@dhZz&~>{Bz5LLC?qB=RiEQ&T!;PT_%ey`ArfL zbJG<{vHCqDV5Zj{-=DY7vX2y&=s;lGB3eSsd1Rw`B}-mej}p*!${#XR z+O|nO#wUAzl#MQHx$ncM{6ro=s>rij^ACfF2q)PhAOvF@Z2T~q+NeQa4wF@t-WB3a zuNBgIz8fy>;bl1H4U#EZ<(fUKhKx}PDlKviy|MgqZ<$3v5j@~twH5P1#ZN}tF7I-! z6qO%I8fe{n7x5tFg*Sr&#h3LPJHt}lML@L)&K@E`oPfiVY%E^=o4Le)v48_JGpZ~q zJmI!1axxeEVOwRRrVIHaY zOEC9~kFN=^H`Lm4@vJkR&|OW{ z=Qn8}uZ%|A#O8|!Qd{f(2z2V|l8C)_Vi%^OU! zZ%JhDcPUNBsCV=E9%VVy%I3QVPEat_#n`q(qF61Ym)a6 zxVH`a9!A~4HLUeQH&Ygm%C(6ltIAlf8BHx}2ztdzfU&XD%*_o$efd4*#3G;p10LPnWN^myzmvYD{CW zlp{nxn!l+;$*hXDK|RPFU5uEWwX6SSqn)ga-4XLOod0$CX(4{~n8dZ<@HQCMH;Hm5 zmys)3iSGF%^v?2B!nE(1{dDy7KtOFIsAfMcC?vC!F>}z=()qd6<0&zYN2K}+DP)d6 zeQCd_YRz}fsf(QsD%wT9DM_n)0e;@tw@~DTMem zIYz*LbLSgTO8FpjH0WZOoaIAaUq@!n^7?T8^PSiWBmy=#3~ZW<<1M)gLv^!A7voE3 z4SPY@9Jf(&j@vL%3_R~(!oZ6L`m?Jhg&1Jd7E#%8VWX4XkW}T^`*Y(wx0i%ItGFuU zaNPI%auQAYr@$29?~DM=E$o*OukhZ-ADC%6*&Um>lfEobdy=tGi1?|gXnT-9UWhCVXE-b=N8(>ClMVRr zK>QG*0$caBG6xORd#dxpo4e~eUHHUjFbG_Pqx?Sgw^NixF^8hLUh()k8WrU=s?e@` zmW*R*$7tpLA^K1W1B;}2i0PqOd2BV|U_pvUo z?l{Y$z#FWL*QG_RTr&I64G(fy>n1!pHK!8BPE{+cX@8-&azx}M{Dhdplv6I5Cr`sL z`F%8q8(IJe2WC%ki#n z+K~|Gs$2|#eVB#90eYjHK zMd*E-AfaC(dh)>MrGKy&8pV(W-#2vDa=bflFw6VM7ga!8mUqlhqohF7ZZd#YZRY#v zCJx2t(yTZPEvk~F`3OsTx?5!5Gfzil_=I6oHjUHlsqe0G7q6#I3E+dY?Mv*}_`HJ| zqzC}l22%XKJq1Gbo9E0DqNV0HoJ18Pz2(adzMB^}ghIsg+6xhbgzx7U-4_dkM91J> z1QR<_K{MOY?FpPTuQ_PY*?9NJZD|Iw}F#NIH0Rrp7*(K-F~(c!m_ zRvbA(F4LaKm0KjeU9{ei@+X4?9&Hu_Ry+{39IlVs!_>4Aso~!i=0$Fcy#(G?@q3c| z*dO5zGxe$G0qAO9caMB_O-{qm`X>8*$`<{<7 zYeLvz9TH);T)*UcLGgFJs96A)G;e4^(YD1X2D5UnOmBedRS>ok|c_Wnq+6{IF#bj@R zJ_mb4(6*;(I{%HX%&JmbCPWLQGvqRsCO~AGo}MgJ{ya~yuI#RG)qb9tmD z!>OpCVUh_D@imu;62uXZV}8#@NM6^Zi6L&GZC&^_U5Ai#0{LGo7P%JO(`~?rzfl{= zyi>Qgx0hEU-U;8>rpak$E0h3eY{B;PW@rZ{-Mit26Ia25dAqJ!tUXj=D!fEhcu&kG z62CiU#X9Nnwmrk7u_~roM7uV3to5P`@4?WXVR7=M^T7|yV;o;zc>3AU1QJ_r1h%dB zN{{xfIlUN*N{$+HHTra_pDw_YM|Z=iRS5=00;UDch}SP=aY3kSP5q0uI<5Q7LmcYQ zz~>f3_y_FK)??{P#nP*7!-ZHEHm@OlkhHAsJ3>|a-Rwe6}<%>1p2^u+u6i)oY}_PCdR%vbXMB~l|`q}`!b8|bUVf1XE-8fXaGoVLH&Qt{5P8D~ia=!j6MQMFy;=dDxZq2pyU)Oh zR^_;2=JPpf$T!z5?u0pA+qC<^?%PgeGf1~4ZCB)bVSwE@BBv?r#)Fq;977&tp$n3$Is?y${`O5fN<4*oRI; zVMRI7y8bleBk6E{BAnlhEFoE=Hiq00slY>su@QMJlfeW7ZwXw35^lKj}rs$~@D zPaJP3XhLL)H zusXGNGH3?*z0&P)MW(i?MMQ9OyaB}c)-Q#0!e;nEDzA_q!ws&=WxV!NN-Wl=?3B#;)-xN|*r2hGNKkcHnwstUv zq|CGJ7KB#u2C8plrEo`v6S87w)-`yJ4ELs-i#bic$u#{&u3D-+sOt`Fm9m$x)$HDm& z_Y1Tb1*ZH(+Q-=_?x^hNPeeEF(kv3|&pjLV1dmOQ<{S>E=rcB!Ct@I5tv?`n!4wu; zr%>p`&fD@m%V1NZ8})fDXZ=tiw{RZAVjQVVuX7d99LBy35Fxad&xeisWsA`^I?!6U zyZ3MSR&+jec=~>Lk1NSB1`K_|M#kmVU#g*Qv|f9@tub?ObP#&9qf8nMVqKY>oV;a# zjypOyKw)F5WP*e1Wn*Pc>}*IM+-d)KZ(UmAndHAa1@iG^$++z1Q=%wBe@(}iAJ(Ju)fWlXuJk9SeS(I);Y(JRK$7oqSllYZt68 z+QLVy)h{rS&GI7R+sHG5+^-26>AcnJF8Cg(WN~qg&!aVSr<7-h8Hrj6t5hly+z7mF*OD5vNGr#{1e>*L)vU<7U=Zk>r#>&Li8!)T%hhN{Diz+KVsW@va}4Rh_TAuIuTk z$H%don`8knI9S-hLBXk+CL9B-?S8OzgR%5)bY1DES9zOD#?VgPkPQciK3m1dOw@h>EcuO z2a#aiZYl%!B7*NOjM`$a?-kIDwj=AYP-LRK|K@O+e`1T<2_ViuYur9Z6RaEn#mjMJ zB+<6q!~d4`&(4ty--%cTmE$SpQuLNt1zz|(J~=L=qS-YMY+heh4|Ejgyc^y<=%q-t zzI*3odEE+wyu8~NF)fq%G~G7WDGO6_t{}#92AUCu6Zr%@u5S;@0G}uzCh_>HEd=tC zv^0`H0DJF9tVcoF@O_Aj;h)+an#`1w<@M}lr_^f^(fqXJ$?ZU`8nMM1-$X5!?(x*G z#^275=L9`V6?#(jFqHd`v%*v^TEN-iHHsjguweO<6qK#JK6QXKYdB@@R9x}vM~*U) zfF)sJTVdfqO&lD4#(P^_msWo?X$XnWb`DJ2 z#th8k<=VCHPBN8~J3U48@S}2-Ew-djjWspC>5$o5U*@eXq}@rd>i)6eYMe~FyYjR> zzI%oUiOCS~y*lqlkRG+Nj7nk_0Vn0-VkRGR3r}aUzAONRD1zA5*0g&>MaK%3t!yjU z$9MN}l9}p%%?Q{(vNS9Hwqw*Hjib*d&L6H^c&&b~4mrQEGnOuye{?TfO#xc02tHrqG-fK7)U|yN1z|_v7$&K z=H{^Jx09)k0;9Q|iH1DRbQTloOMiXDJ%U?9JimWuu{L{-w6IdGN*u+akcfnZWt}(I zZntb>Fd5E>$kBu}C3fF6faMq&8TqcY37Y}szmG)rLv$)zwX6<51o=TBCIpGhmQ(?6 z0<&Z=*rD~?6zL}ZN`2VganvAd9BX8rOvmf!6|iAm6Zo=!r2<3uZ9z{&rhPlwwNZ4c z%h)O41Q+J1+Ff>bO=GRqjCc?X>ci8vLmdAZBAL~mP%`XgvbR)DAKK8rh}iS; zgv19RH#2wK&zDZFb3svN5}&iAEOdIGm&!u_(V@z$#M# zeqwV5A*)M0*|D>5(HS`A=bj^;_hvDEQRZvghKO6r7#x{;`y_E8o5sG*YNpGa*ml3~ zxgQFKnGnyY{e0=F=W}YJFeYVky=U9rIB3Wr^@2h)&P)RjhwT4k5+iUsy6hY~uu*@Z ze|-DY>GfcuZvJ;KCsVG&>w`kB8$Q1v3FI*O7mE^#$>#jMd&>l>nRo4uDv^@107dW; zbru^x_1wP&RpuZKdR}zE)T5l+RPOC9NQ4V{?w{(ou47yiJ*w6m9_pxxO9W&!I!qN4m&0A8oCzScR1&~*%td`I0p%!%ITUIX0dKeB&UvvD zbuiz-%}6$|P&XB?pG>%MU?^*%sj#yM`FzgCN)RENvNHL!;OM51B9IWDD3?(iDqDmU zMuJO-o2;jvoc_ns2H67KHA&!sZcHpV1et`lsikEf5b2_aCD;mI7tm7-$UI!#`?nw# zPs{Q8R%dSpvuzGLVzaxCMW5-7d#FW9YopL@7yFyS>5L;&U5_XoJt@od?EVZ&N=Yu-2w1x01mbXN@M4dG%L zV8bugPrW(@Rwk{x&d75e`qF2&-c3kr&o3mv_Y}1uD}rsXQ(b;m=OFTclWN~{e_Rl%rCWrO8b^9NW>_zPD4M?Fvfge=w zP^YO)j7~PEIt(AD?gvr*Z54%a(Gr;0Utyr7lg8yKEGA_ZI14{YrXV-kJW_46xZ5v22QrxG^8Pvmr$?!DC5cAD^r1e zL&dnDwb;LQ>KNfIhdytK0x#D?3Px$=zJoojZb(MQP0gM?sW!yKTM7y>OrGZx1p^9n zhltP&eyms{vdLRFkBk)-nukYc5Tj9XtrAj$OI~T`=fo7~5*roHMYTk1d6gI!_UJKvs&81NMH^d$Fj;x-6in zhPqzUOxOU>fx;t%x~wlRjbn{~9jflOZe**2ffCO-zwm&@+XiQBU9C1O{l19D{*TKxb>YoqQ#M za%NlOBehb;|M+Exx^(W?w&Qj27PTNp?KG!X93Y6GYndb7su*Oql~yu3t~bc0ql9 zJRVcA?q6tM{&;(MA4R_M>h!qwc26fT#o!#w28f|6$boqtJHHq%AIX-n5@WvhPB_gmKR?jg)>PVP3(I*)J-+2 zwG6PG0PPT|rawoOZnJcyv&4-QbLyqeiWzG z`I(&}GS-dRL^^vF;=w~@r48^>!FdM+BWmgWt0(W5{yAl}Ie0CC>Vn}^c?fU>YPmEE zeB{#N;_UWX6&MI^W0BPp2vuTNkm+B!8|~hj*B6$PL_E z_Gov&$UcBT=`KWtpBSYEZC%hu-m}I8q}Qj8v1I_yoq94hDmIj(KQ(33si)k7Nt!)z zF_?-uf#`V92P2=Zp-hZH5UQ?5IXzc)OI`rB-pFWC%GST=)=dTrIpNjul`g@}&0RDB z(wOMo3Kn1gJq|^+YwYw10h>{y#i8E;^sHn$Hat9m8DVQ)g^!NU6!+s}~8ly11Hq=^k*)%R7q$P}`^Q{LoYBsf*(~FL-qrEm?@upFs zz*mibB2&!1v!GG-^D5UpKv+*t@8akzZ{cV}GIHlTEx{ieRkic~)=8Ms@NJ=Jj|DBT zr3mawbjw97x4MKPNF=Dd*O#wBz4FuWYqw}{YqO__Vb{XK#^B(?itoF1&2PXb-qy(8 z{3W%4&t>- zJ^{Y@?X@jEX5AB_@Xog)s2pOK_`B#QFiMhH)kr*{W&=pbFAV9tjy4uQ(Bf+V{&8){^t#2vS^|AZ8&ovc{d2uXQI1Wk z$v*aX#e5F8(xUoek*#u{#$KQ{t+TJ+>5rAi4+I&@j16s{PH(5@Z?{nc( z8i}{Yf3W~gBrar9yhZBA_mE7M@y^R*0*#a--?#U&IS!djk9(|}*YJ<_#aC|McLOX! zxwxNH8T_WJ`l4~kqA#u}c$~QjKQ#s1upj)mH^3GzWHU%F1phA+Kq@>(siD+Ksr% z#>)xM_IB@%_ic(9qryI?8P5u41u+9Sw z;~!tQ{hZ_&iTKk4XW^|Bl- z+piwbwpIOOGn`HmKirnUMO*@fMdk8rxl3~Y!|@$j2dFj{PMSs;^#3DSMh*zh6ffd( z$q*~p(!&Pi$r%RIGa&6zc6}5=fE*=&`yzv9aB3>^zq5e4{ZM}zwtbEXP64b#kEv)d z!y}4N#%S`<0VJs1{I^uUWb+lBWhAb3(VV%tvh_a>)6m4FR~^jEk+X7n=2w9AX$zG5 zD{n@0_`get+y@JbqU0|en>)RZ0($ZqHVJ0URd0yLN@5nJ_!LRIHoBF=TaPvmfPWmj z2CPz>TLk*}e@nUP#}ji5QNQRqmvsC5M?y`6%_x9s3jAA4&<$2LRRNhLgpc)615lt& z5hD_bVf~>A_t5`c1c(?R421qM5nI54b7GN8ssF>Z0$K_*1%bE1zBz{hG=z@)cfeHO zQBP5gf`OR|d2Bi&G4&cfK@pD4t-atZ@+W?AvM9h^1IXJ2P!fYZ((XQ-&`25N49q2E z<)p;|b()O#uwg*$&;Obq`2q5^`~S4XInWz^z$PVNOY9$MtF`B5n)o|eQY{am5eOe> zjv*gH0Z`W#oVqpB*eqNbjXM0YIKV$)jObUS12oY<17S#@;Db}Vq(YbTcD#`U5Hn~0 z4O3i4Ww+zT1+?_2H5ArBEoku#p|I0rfLrkJx67tEyngz!A7;{5{jcsEs&apM{)zp$ zzM{dE!9_cS*}#1hy@MnO_}3pULI3*0vN%)U@$Y{cUEn|Ga0d2C|D)fx_GIV4DC(#E z>wR&%E;`TO{{TNg?|=xoBu+N?k9%Ld0*DY!3%U8)*}2lP@4wI_z;lL3{j2Ru_i-QA6J3R2P` zefRNwzx(^{z2lDIKOW9`p1s%3wbq<-p~0f?$17)d$S^~Y|2QD${hAKT@s+v)q#q1` zH$Y7VgJS*9tWk*8<9~^r=?|^$;xAIc8io1^@&u&smb)pW(;X)4Q8-VV`6cjVKj(qe zqHrJf)Pw@GgEg3HvIW9bJbV@Z2>BAG1Ynuw#T~I4U_*W>%P-~hEfg}f9>B@@dN2>e zXoTYgBI;m5qsc${T8gSKD}cowFekt=fqX-%=hA){6CUyn33GdgYx2G~hwP2D8QiRd z-%8Bm-oT)E3qa=J08r_=Xqb$b1j{sKurM6D8>-ZkI$t?^+Nv?x60!;e!Sjv755(sS zAQAyYz{ti@Jw^f~um9=_z_K(RR^`Qcj{GyEBODi+v6ky+H~%#QjFx?#8|)12QNZ%+ z2~DD6IPiyvY#^k`X($8hiKPGB6^0H2>VcM6<^_ZS%a?m2{axL>!#@&Hh^B8Q8MQ)M5OAH-{HsZgtNhgj5{; zMQIM8e)G%;!<<#WMu?#N+iShTx8E=Arift6x=Lw08y10tZh!7;+`kZGLNF5>7Wb_h zE-$ViHd6cr`q{0fq1I7ei1T+-7foYe2+bp7|Ew~()3ZU5@DQIy05&kkNh2nt=zr)7b&4H99q z04urQkky4595E2s?i&=qB`aFwxPrNwHh`l~tgbHOV8w+T1ddp$Kvg9RG}&RER`Sdk3n6#WJT>%V^fJHXoArZA?>sVC^}J9?=Bz!W{{)E)>f68 z(_&2>zlY=BZ9)NrX5bjZy(kVh5x^`6>oh=D)99cCNbmko8+^~)>M5f{WjsRS&(8O( z;91Txco(+`@qPNnKmdz}{Ez?6FOyL5K6J>gWd`~iQk@xMfpH(=jV218J+N%$)KFWg+)5KIULhKGHBvTh6Kukxi7@GgEJFx|T_8$N0_ zvF8jM6#Bz*NvLqzii5S-R5?XV*^YI6!oU96KY&?qBjIH^H&VXJKZkJ%Xeqn+vq2$3 zkyA5Wi4olNT0npO7sbE~@U?{=R3Is@rHvPHVAgcN7$8&^;=A8b67*$cWyxmW=zZ(GJxQsv3GH}-X-BG zDyz-QX-OcRK?WU7(xES>Wk86CB!_oVAY|rZ#J-U>5zBe`r3q9fXP6~s7(G!EfE`Yh7;M-=e-i~BtaKB zIUUyhjd&E;0M<{^b@_Y@x*XD)1LaE@1_nRv6Udha81J@E={jhjr`bN5aU zYmZP+d7^2WW!a)()tW@e_#dkjaKeR1vy?4iE8-3QCxBg$jHcN zXJ?@)Cm%n4aW&L}`i@6Lgz|c9Y)qXCKF8Q-eex8OI$2+0=XC*7&bF$HxJ` zOd!9@<7Egr)*K(8(w`V2DDa=xYUPGL*UX*m_&s#JD%0rA<8ZMH#3s&eT3r0@t9+K; zxF3O})7H+8eBpG4->G;55|u5`?VW8EI&IlZceDENL03oT!ZS#yW3Ack7)|hLWXr*Y zS2N4&tg8Ru;D8MAX1yEjl9xYS7?kz$+bJ&ODM(%NxVqSK%Io5o9 zxVGl*GtDoPWL38)NATuwp{DQ#wozyG?QvV_?7l&vEUeS$*V*Q$r5EE(cNzJAwQI+M zuGi4K*lf;!yRAm;5m0=VY}6Tx5%l)^GqEwZCM(yih=qLkEqhq;|3lX38`B2P#*50P zLw3AkI#G#eLnjZ!lmybBMWD=qy0Oan+1n#c(uzubFp)UuZ7vt<;tOS!2C&f?7+VjH zE(zXvpG``j@!t=01VEEn%-4Ltk@YLPo4#K*&-5_c%##Ae2iHZ>_zZ^IvgUpF!)Xjd zd(D9K5e#{#1c`@OzUt$}Ig3hx>`H?}w+llF;(uZRhwp28jZU{>1Q3fuVgw&x;^5TO z62G1Pc)S+m;;K*5bI(qU^1Hdgv2Qk)<43{f&;~Za=0)Ipz9K~| z4(5I%QJE1d(@Sp1DGT86bny7=Dg-N)g2Dp&Er~HTeUrpmOakb=ShwHJtW@<{SmPi z%AIuiK8u*0fl^8n3-lnr09~jfLDCy*4B-JK;Yr!;MMpF1L--rnDLn4+H!OJko{=7_ zLddLjtEPm#1_$BNo}Nt}dilzedr|GBif&ozc$jy*<XE5c*3Q1IvlmCsjio`osQ#sj*m46li+OYmygir2!;4bG&upsreV+#$ zgyYh-d#dyO=JWFMKs^1=4PG;QBq$Pvic0qTb9y3*xGx;DCb#qYv&`|B=pi!rmF?6&##*yIyELU7euGK&xO;f` z9Q(>`#pimH%FXv_r5=n6(8^(CW`5ipW-%Pa$?$8d%?qBVW@0KYD?0=Tt`LtZP4C?a z;pBzyE(g1lxpF8-$|{vJKe$}6Tg=BZ=u`?Hulh+8_3e-OuWPFpwj^R!eEW%5Z5A7V zMia^?*T6P@e+dc#s_ykK{gdbIf9{>8>^lb**B)8bcJJ>GDo=8b+nf+or3eL_Ee6xw zn6+APH$%sP9?Y_84wViu2|E{k1PsD{-9O6F(>H)&%CG6Vjt`08PCol5zsnQRhFANVag>RcQ ziWSa^*iTH|#zOl`=9iQVIg+K#0gd|6BvuZnZ8sqUgZL1~Vp+{4BL(#@1i@J#Y4IV6 z|CEx@T>L$c3AJP?so=|bnxd96jDwq>v}hRcxXLbOcIN|}`}8$E!U@&Y zO!MoL+-%euJ42`8l|)m;rYuRkFUVs0YjmFHpRLFoSzG#)Qu!S0AqEJY?3rhBzSq=L z{d0!I^8Etq0|5sX4)#lej?-V;JB!r?n5y#j9w9GUnT>?hfjid3yuI0&JRk7c=PngC zPiO#2O+($?>#o7W6A4@&M$gtCuH%_u)sQ1zF_IGHtJ3>E{pM0?{Wzam?`NQ^TP{LI zQ#8E$zd3gMdhC^YN~N<7r{Jm^jmQpY>87?B0=@(21^WjafHNs1-sY!>8yz~4pQdT8km)}aN1lk$k0l<( zY9Ykc;CM6v;)d-mdX(^RKs904|2;A*Z$R<&cVY>lS zAC4x{q=sky0)dCUsCRsH@Z$6m4K*V0+)&8|TR0sy{2dyLAn_Ux3yTDKMWMm<0~c_s zO}RL?sS5TvT2{{rq#E6AcLye`g2K}I9fC=J&eIRch`V%U31n9sWn7YH>rkr?vCZ3X zA%;9(c)`5(etln0L&b-aQ@qgW!t9=3iVOeS&}0y-p@)?2_Gt4r#DK14Yj6iA5QG7@ zTqfGYp|TNFyWo85|7Hx{4ppyS&W#bWxgYBv#(Bk6_ZfjbsiuxuE{YCvn$Z zT)6DiXO4TUpN&NFmG}HRYaRGT^yCX?fv9Cv-`EeUoD9SuSQGIfapMVAgMpJRxGVJF zChS(dN?RdFWKu(clmXDY8HS`oBXJ?ccCtVGy>P-n&~JG54JD}u_j~abwny17Cn27M z)%stxgf$TOG3csTv#lQf6`z&ibn;OQ=YX+l12=DT5cYXrs7$ZIq8~}b zojkftXQB+z=-~|_eu=H75ylkp8T&sP3-l%+ZkGx>lY=BhW9fXGmE8@gH^VFjf_H{- zGQE(Xp1+oAG7#`l<8kk?fcTh@Pu$q{@(PpO{_z554j>;nogP}It4EBIfpFVPWPHT~ zP#mdmmZ1td40uDJ1Bx11v01y1tc`cD==~6POwL0Jgwm4jJ4&>-yY{x6VJU1+SiuX5 zkp6Y7`Mg1Bfe;Ls(mQ(D`TFVdxcC(2ml2`SJv*_$?^^=P&1z{OzTfBm`Tg@C2v1%Q z8I0xk^TL<|=cep%V@Oy2e)J|qEY5SU%l}WdHEI|nvQZA^{Tm(+cfs^d+&5N)z^$9n z2H_BN>`Yd(Rg7d>)kr(r{7+MHIW1|RJo70U5XxwM_3GJxdSMI^Ao@d}EXqKlh^>0& z`#M<#K$7DPi2p9^?{AwZ>Hhx6hRK{RLk`@|!(O3Cek9ynI3@>caLjyvoyOza!$tZ{ zK@$e@$~!=}UEH`Y-m*%x`ZX z7A2Z|?~h?Y{PcS8OUUc(0%tLcRvceXm(mYm(#ZBjXMpk0=p^x(c}auz8;83Ym5?tD z(jrdKA|i*qE<6XHl_Dt>glvfa+X_NuMHI-M50ejGe61}&ct8xymrGQ@7T(W7k}5R8 z7;G4P4H>9aC>f&}VbAodo@}30-$$hfBgj}qv*RKcjJ^05;2}ihw)0b|QRj^-A~gYM z##UC>kC{dx2UlK5Bq%Eyc*BJ;#E9^Ss0c9-V|xOqtzuyszb{bph)&^4gfw#xG&4O% zabP^15C0Y377qH~23a@<@qL!H_wlsIESI-@);zSz``bC5<1Nd%6kx8x~*yOM4+eOvi7}TDd*o z^hi$td|OV2WDaT_mXmr z3ErnI@;{R8CiX5F@IMz-LB`Z_NZ}uc#>XhZb{E|B)vo|}Rzg&%=2fe_8?a^{ zUh5a`H=sM|Ky!uF@Z!&4&5l`KfdTca6?!bHl@(7T^R`moL|*(*yDj+? z`q~oVvlM)FD7n3jWS{+B_UDlRQJ(shY$g^B+m*6gJ2>H@7mz0g32jVN{H|YdS&I$s z0Ts4EBnLID`>P+E*Q(9pJ>j6a-G|o|=q3a~4XD(~liMamS2i@DT*rjiSl8Y9gX(>& zypO%0a1kC@5=jltkB7TbDxmzd@9BtC(Kk|f7bs~(l3#A>_%rl-*O?Z~+!w5ZEB;#f z0v?iy&XN2!%-5g$)2S6cx7~e*3Y%%7qgAy!{8+_GQASHQCQkvpvATO7N_rSFW|2zM+y8tOFd!A)#Xo$9?~=Wu{ib>$jZMW2J@_z;&5ZH- zG0ep8AxE?QYgUC}>@XFB{+v#0&(m6}>eI78MQC6g9D3$~VaZlLK8MJN)VIO|#1KB@g%pH97XYmN*(=+pB$51eTJ-^D+9Tq?`nBnwCX#;d z#V6#l)TIPG;x~JKJ{>bbV-F+!Jkd~SxPv{>PK|o z@ZLi|N=&A})kV9P8hdYp*Uo!^R`NoNwef>NIdk;cAzxi8_fwm>i}xi@-!W&J|H*@{ z6A%jHGv~76+AfU4>_>`vxgry?d(ZuLdpxp=4|(K zkRf#uNw`#`pZP7cViQ_2t4O}$*T7I=mHypYEqMIUk+17LX72^AH;;0aC^qk6h-{mX zCc7uzZ)vPNv5O&p`?hNZl3Z-Lp&j0G4vot6T$Pp>6I}OSU{HkOz17n*y7X!_8{KeT zRAwEmu&x9*rRmV~SNkRDe?3f-{7)>vz(D6-F;G#W>bOaQrA+a5t%p6gRkSXUXDDSEqk$MI?yj%C{BIxDb?33p5DLD6= zc!*_^lh8)a5O3tetktxrRX+XJPw_+@RBfm0^Y6FLk_Mpu_$KH`pH(9gNaq*ou9 zGu=Rzqf}8g9cdun2!e?e;tJBMT&myF52*RD`G*c<^o>zv{K?gQu3#EnlI7*?OJi~0 zN^xLs=x9J$wv*NLwfn52Mf&o-tg@(bG%`G_w1OTRW7#+8L#wo)V7)A%&HHD$qJ_S6+^^HWtcN~hy=ZR_Hx4vGDuAbN|Lw|hi7+8lhB6`nkr1vg@sH+%A4Omb=91ni{&YPW-7ONhIKQ7Mrs5kShZIMaqm7 zqKD-Tj~Y=&QVbl?Qqqk36-Ehm4Eo7XhbZ z$3CRq&SWM7;m{`$$Q5)IiVO)~kXG(n)_+KADhu-l_injgomLJo&Ct&FD6wJm!Do1u zn_Y2y$_;s~OW`~g6BmeyUD#&T@Ppfe9LBY0^}hub7qY{wd*7h!nl-!LZ1cg!OQBao zh0IRK#2JerKVyfIBZpPgR-fJY2t}KJwpqFmO~{4|Hjn3s5ps%lK#`|u;lgvJ!jJ3Z z1+y{D7U$XkHLO&3@42K`7cFhF)xe9@Db|I0Ql6r}bqb;*E zGf8jB$S$!HI%jRM#%x5_NqZq$uktzy`ABfi;jKtkQ^WqjKKy_1^}>d9wuC9R-yhp(qhb(_z7A$>rD|$T46s5*-C&! z>>58w3l=YH=r4N7WI?C^-(-#}ycHDf%rBZ&or zH)s;bg}7t$h@01w*c;W*Ft+~gz0|L(E-0$*Q#~kAD*6Zzt|*fx=E7<(gk7DKQlBOlb67Q$&KsOhrTiZ&mhQ0I$n%xt7O`G9vySf$~x70+kPanub zdsEI4M{gsXb+DL|c&y?)$NgX~ZNc`ZEvu>KaMd&U7z7(8CiXH|tKg3@3PlNv@d^Cq zJU4To6dJSpUS=hkSP?Tl=BuP`5hd}uZ+YaT^cQ1p89~}pE8lGOt%@pDj{2>7R#BJ0 z1CKlW-WqL%jq18zm!PTdUh;y>-R&pD?bVg#{Fqr?UYSXrdvrJoALGcC8Ch4}9(!nMdo?h_1TaHyPhdbQ?V?`n6h zZ`u;Bs}{!&=A-iT?QsGM!2s1|j+M%I*&oB-RWnxGkLgci+AYq&d8I);rh%^$I$f%a z6g~xQ82;fcN*LOrciX!%-W{pDIxneGIjx3M+l+VLPVyva&gvZfii0)%j{=KECQrT; zuejomtf^gxT$;~EtXIJhbts6KT)jJ=jx$icbn+Y+VB0DfYjNHvQ$3src+(Vu%-;C( zH&=T5{kx>peBK?QVn>H4q9(q;^&oEIRZJGlbm7|t8W=Kw5+m&Yet7^+{RDXcEPT~ZU;CqZKN|LRS^{AoKdqVA^((i^*%iU< zkaQp+Zld)034*=rxwDZIsGViRYEh@T0#bE!k2*J#pPzG&~hGbycM}30@eG0f1I2P4ud_b3H%7<*_9P zp38oGe=iGve+H}Q$(V+wnjs4;eiV;k=y1QF%AR~qVP?n2&d;Yh%f?~R`4hYEi<3$i zv?6e2vDn|MiCgw1njoex*bP`@)DTz-0zFc|EdiootwZ@vQr+*Oh`3Dq^3Tn`iBnpo zGjnNN{0TZ-!a3FV)=o{$o^R4i%@9%SXHCZq!sK>iq{1rMysj&Oo~H^DJwH3>b~_!A zZ53No(0tEaRsxTVVC>{RyDk3PlNms_!fI?Dn)>yb=ZIvKw`dC#lyO>2vSF=q-Bcoju_C64WFJ}x?NtBmonEscmSs?Oy#}aSLZ|c z8AX^diB~^OUIs5xz8dzsQ39^|PFCkg)s{P&fZV@6qL#~M@^1Z_%lxyOR{?yULxbHt z-=RwH1G|cy&D1>T_BiH0*6Tlu7^P#WcIj~f{wf7;t(W;>7TNi$mGesp24^knmzE)& z&+1&T0vQ#Zc}H(*ScPYqXNM#9x8*LcvOV3EE#}=z=|Fvu(vlesd>YZ#k6Ev93CqO4 zmxiJJ#2xzddu}eTx~zwVcD{E-o3eHfA2@@t6w0NE&Gj}q4HwyL@dZSEY>s7cZ8tzA3QkRCvXi^q#2@JW9ouiGcO#jb3XlU~d8fm>F>4#C zVNnJg0Q4)GWDy7d<*Zu=X`pRhk*ulxa+*%_8tE{+3liT`Cv2;{Qo4K-F#tupwnLCr z3c}FR>K`4htS(D-#+z?w)(}c91-=bnBJ9o2wHtQH<9in7-noVETbZwZkL@(UFcD*0 z`G_RH&mo<$2GBJ7&vn{6^_)iK}B&M3iGL){LwJTGM_3YR~ki-ECM9^?|03$Kg07QW_&udN)mMWUICU zll3~iRx2us;i=wyt>-kCf)XhUM&2NK z+C&Tx_?}v{I71FsKdlU&Wi)M?KkR$&KxIygX#nY-+Z_~{ShG%)^Jxq!cZOP*D z=EE@m?aG|_nS?4eYJBU3_-2Ub(Dof0aU4hm1PG#e)?(!A6#bt z>;Z~ABenH==K9MzMOsz-@+jY&D$nOG1R(XK!J(UlYQI$p)3xB(|7W;q-ab7@6swMDFMHj6tksf&dddr- zsd>^9L#A}Ts`t&+E8yk9430%f9_!4mX}>0Uh^sv`y1IQE^-{FvQ@Hm0*G`xrN8XjW zEW^Xym#J^;SeWTro#|Y*;W9B(g(tGqO11RE`b^$lBy$nB1$g7QCDRSHAmR}QdU8c+ z<=;=B4s z@|hZ8$gBHG95W9Tj~=((Zr;S&pA*g4H0_kI<+BCITuc@gxUF-DG;fk{Y3UQ? zuu=B#-uEj|s;SK$E;{+w!liakTh1ywd@y$2piL@DmEv`EpZNAt<=5)x&tG#?T@9Zs zP?3Dwk$s-`+5RUMzy&jbwKdO+;t(WUS|aci!D`y-^oLTfgZ0`M$vaF?3SDH5)~Y(c z*PLF#k7-cQ?4DRR2H94wX96*$VXV78rlIXa*s`;$ODX-Z9b}OzazSrz&$U0fABOy( z9?xhu-qO$0s3zu$?Mn#KV=9$dLX1B}4H7kP6dDQ``iUMK+nJ>zRXfC6Uc0|YK5QSr zZO|hWnUszsngbVGA--|?qA}-9Q!GIBxCok3iT_d{3X}eXRH)Fwx0k3DNg!#wYmml< z9`r6dKuY-?x=0jlRDHr1;wIN$X5z?L^qj6en#rIPB$j#Md)>mO92i8GVlmk!SOwCe z5?V_qPJrb8Ti*mpsvFx4t7RWUx5lpjOLBwo`IqJM6&eO9J5wfG(jTI5j-sN>f#_Cp z)5im&BWxXQ|KJ+(@?ETkBD(HS#-tRebh~LtY43&_-)J~pgvR36Y2^oh{lN1Mc_2=` zG*KoW0729Twy8jsvij<)=66-e=pyCc9!;}3NV#5`;0NYJ;>gH|*LA&;zjoneiWoIz zeXmH0;pOCTJyV2DZfKhNVUsGUs99RTt%;V!yepDNr_KMusQj@*$-WDr@C(g>KJ8}F zr*n2t;yn+EySX7@$9%CGoC!q)kXyPewejupTgghd^YJM3eZ!{iqyfdRNiQ+*L=WjX z=nJ@6R{9b_mVYJrTgm3kq^Lts7;KmXhVyR?v|PAg>mRLcoQRFJ)s%vy+zIni29lZ{ zN}w)yjf0Pb9sJ%AL5JHVY2R47GQ!pG;IBL_=D++qMSn3hna{#8TzG1SMgKl!wG}EV z#6V!+v{F;F5L427vzI1d_&NW@dnOcj!$jao@_9oC<{AU|87p02*+kK7^W)0y&IX(3 z6c)(iwED}Em(UJI9dh~i?ioBWSfg@PKlz{K9J-1l!`xX4@psG)<2cn!^~-gNgLJLq(%PVEtoq4(0=L}d?6BA38@LzXD?)99VT?Xlxc%IRv z&&{o*Y|LX8(a;W!%i;2mtqi~Ayx|iD{DR{ADw?v&vL8Rxk`A1;o&*fN&2i`xVb9V1 zG<8!tO?aCdJZ^45;a$})I~rKOI;W-X3=5zxfzb8Wt+1=8RCWsT0zcOz7hlkm=yy6A z(3s;3vkS8|3YwHN^U6i4x~(_~fKb5>p}vydvVw-A7&M zFzOM#Z$C?~*JdoM#3@CJZ~_()lckZWab;?`KoFl{8@1(TK_(+1%L_7_E>xWNmP!_+MRb93?|xM@@jO)t_89Q?qcNk<9ZmjC|3cv6 zKzS7EQj@pbcKm9TI75%3PaZ&he>TuU@Jx=y$&g%%qQVzfo<>p{FK~cDB7q>W24L%o zX!XX^`e6ADl`TPXdH|IUbqR3l*i!w`J!m8^(Xm88BO!?KqF--oy$WT?Q(6rWfLY+g z$b=^!3>~jgfJP}?nFxQTe4*L^WEUyMnf;Q)>)d_>^0ptPb9<@e?N3kUKGbnvi4}r^ z2cOuL4ZGUX70rP|*wm8eel~I=OC14e4m#j*wDv|v`8nO(1L1jyDT#oV^FEXGr!y9P z?o?LKwA3&fNSeqOOguf4<10TG-j$g~;1GhMrD5Qk;(435U{3d5#2jG00$Pvob@9Nu zN~Z|MJ4^xLBE5fL7dpd5LD>YCnq$pCXuyL|^y0atO8TD@QX1L)#fyDLkg!XX1OR5H zcuDC9B#_ozu?h{{lv7oqDk)avzB<8lzm4`xPe3vs{uBWcM!$asC+U+16Z!`L9|Zl& zTTcmg(8AT-cE2A^+{=Gc84w6GFzvhE7aov%29H@wO(_BBiwOZ31eQ9t{&p;Sm%jTK zkZENDg21f_Me6R47pDM*;(kLVva9~Op~0)G=O0jZDa|@jo^r8tV{J*^v#?B|E48#t zE_Zh$dy7AfD*a#_SIAZIeRh8?ton!)t9}ha`>Q+O@V%fUuc#WA0@lP&tNdNQdM_Hu zdkuy%+U`k~mm>ABs)?}TmqB=Rc|r~eGQos%H!A%fK9tamB|}3AK&(y=T3Ttwii>)* zx^cM4>wTdKb__`FENk^>sMkr6i_PrJ84@4_b_b#7;DI(G?FOCI-Eb91UiixfkfZ*b z7FpZ1eE8Cs`Wp`+PLGx*U#az+m`suxks`vs3_hb&NOvPM~ z{J&sGf{nrL#pH(IwnxFI6E1L%OYd?g`!-@1fcXKm8(vpK_x%DL$! z_;h7`JtJL}p3~u;610@-MdG{HF3jkhv;hDt2y&zUVzskV^P6(`C@vknyNW38+=lZ3 zN<(B9AJB4UW#TTRBf zZS(~hGpsBI#vhmr3hnrq4B70Iim(DFX)qw~?@P8>Uho$65YdI!zt~2^EmM zL`<~W*CAyk5B+OS5wg$l!_xE-XIPGO0GcXRAKWQKn~+T*VXoIo{_+PHylRI3+Pb?w zVL(}4OS-er}{Y9v%Y(HP&KD81cK{2Dy|(g>U|ic2841=d6EZEvHOCzus~5hDZC zG-$`u2bUla1>7nSc%JZ&mHVl@w|#DI42RmoKTPP>J(H{5?yfio3i{wp58{bcoAJOL|4i1`7yKX_4sEUAz(lLVmhQboba02>Or zRehdu*u1qoB#j2BUJ_&gkpb|5AB}S{`_)zSa+K+%M7NX!V~vYwnds;T2-uBe&lVul zJY6(@3Ubi_wUo3q^<;s>yE#4}#fak-v%YLu#^8y2-H!?f8|Hp<3$Z6BAOL1ZOSXC| z(Z52IAp}zWML&R=eReeK?j_Dx8X>DYchDfj%5Ndd5l&ZgLO-Jc z47uPz|0w*}pqI0VNRHKE(S(2?Q{-m<-~1SNIX*{jobik^w8J0>G^rH^M3H73iU)tG zNt<>RIe>-43jqAsCOQGde{np(0{h(M>PQZv*7u6msNvv$&}=Tuq>TNbam2qjQ&i*` z=Q_wBFsVyt$hxHK4Y>j2EYYfN*kDB#f57NScVXL0h|w1kQiKPFCPo2<=4H5Pae(;* zh#8Ox9Nan6_$-Wu^q<6co}Q{M6edV~$L7Y#0SPeFelzM{A9E7O}nyq?n`BbYHORD58Y`ZrVcU?C_vg`S-PsPVi$-X3&*t z=sK;G^v`o#w&;0ykR~faHVqPu`0*OevH=T;$~dvV{39r`JIQ881S{Ixel#**bWt8p zdQN(Q&VS47_Gf`*M3|_aJJ|FUW5w@TdZ)h!7;%0efPh||%8JWR547OLkWF?WUaxSp!I6%yi6njy z0Dxv{z)Xov7e;xJ4#12C=-}KT0M#Mb&cAeE{Xbjp5k+%$XwF(z=io1S$ifr`=Rj;a z9&+eNDcy$BBr0wF0Md1@stWYLH@Au zZwKXNLY4+B%Cd#v>j1q_q^O>Ofi6ypa)ZrBftUxt1&d4}6&F65nC68BOKgTD0i!^_ zM)@tAt+*$z3L7tCEMzJ*apEB?TA-zSy6?9(i><@9c6s!c+UP!RrxaU%S=-&S^oDu3 z*K0tR;cF#z#emGheK?RCMe`mpIZv(h*j(yoI)10%)k85N-5yN0)P|L0^7Z((PY#}- zHS5MIx8sx)eAm1=%e4|O&TGEN z+>ZLpfz0vE*Fl2SBsHAWV_4MGS@YeIoziXMwd72F4vXE7MGe{SQ}6=)iy9io-{_Z9 zbMY9DE7%ZcXp!+W-w??c4}z(0-F=>-|qGKs<4$`N{lPU_F)ZNWeey zyNSnum%_<2V`#Ja!lA6i_y(;F*1aO2WkJgZ*CMp!^}w0 zeWH6?D!<#bv=U+2yp*P4$*&kw`wkt88a`n{?K7q4a$qW^d0835eaYUux(F;DVfTC& zMp!;N?C?k`c50kF=G_|~vpUUzlg$&DMlL=KAm`oMoL}PJ9Rbtv!D)v@r`BXJwX$t$ zfsEoA#V49ClsILd#*zn(mON_`z1u4u4h15l6b$kv{XVC?N3zJNsVlCk4rav-V~InD zou*GrXOgo);na%y#M$Ded-hzUpv*@$E?Io~UC{T_-RoH|!F-%N@S=A?WOjX#%pp0A zRiB?l(ncuJRPxU%ImLZfp~WB8lE3fRIkn^unjN_yzRM*}9UV*l%7O*A&uN9vg$`@% zc^>?3Hh0=$U|rju1v?_qXVflms}EDVR7~au?V!$)4yr+{eCk!5G^ek3-v)FDj6YQE z*_X{I7R*=ukMTp;Ft|)+rGrAxTKol2GNQEIKWJJp%SnzOmebuM`YG8jl+e>xJ2|=Y zWlUO7K0`J@!YRX{muu`2ivJFGiL#CoIlT@Q(QQ-7sQi7-3hVb}7#Eq5e`iri*}9_# zouws=|L1vcVdYM%S4f4>4cs#v?j0{bUanND=s(1hV3|!7BXp1gRGk*%PQpy>(3#`& z4%W?qyl@6zI{1WSj+IfG@0k8jZ2YyzF>;baU&WFP52iXc&lb|0suG0hXr2WbPweG0 zO$FzfJn!K1OkDPTa@}7hSkNJc!bP7B3jH`AoKQyCgseS_mr6tWOkj3ik%RyTqz&0w zW28#0m~R89{}@SW?qfY?CFL->?A=*UBJz%eMX`SKmW=N6GggHUd%kzH+#8ng`0qk{ ztyh~*F`E)Hxy6z}X{dgd9%!3|eGjJ&=K$i?H=v z*6mr)j~UIiB^*chep=|0XyIu&Fgn`Iy7nPZSHZ#&f@CN8eYc^@bRKL~RbXhJQv`Qo zp7mn*3b7`!P(Kb@aZY2l2u~X;GJHH9D2c|am40r|1}atsgs*iJ;uBccNK;c&ky+sS zLK&W(#wYdu(tC-OBK8g`UTIC;L(J3DOM4G0!s8qC#3hHuL`VnxX)Z!(GBJm0Xlw zjP_nM_?I7_LkCh&VANDs`Wg%=JgR!Ri^^>j!n)uQGRCQ$W~)(Z428I7A>rm znw*nF^TSl5da?l^2kW(x;$8!!AWolV_-pQVL$2Uso?g3smdi-ERz&S>4w7I zCMP6BW*JI~n~sgOKk&R49ULTC<=pS@S!Oef&o+7bmClqHpR~+#P*{2BcPHQ&{zurb zYaRaUF6~>%XSZQs9Cw>cfAPYkutl)_(R4D-T`-ZC?6W`-rKP22vK!S;9f~1*xLPx& zG_uc9LxpR*l`yzyu>6oonM6xpL+W-3?M(Iz+6bWi(Qz3OV)7!euV4FT0@)B{OD7Do z3Vil^|JeJbObxfXjD<@wym;00DNOCP==54rpAB6Y19;X}4{|nRBWr11xx=N46dz~j z6Kq5Oq|CbSd#Ght@v zjQzR5>|5M!Y&CIh=aQ;b)4a`zf`-%S*RNK5?rUh^|3F79ID4+4ex0yPSuF_7>I`9} zR3`F9;+iTMKgWOG{PWSw|(y zR#J*itdldl89H`aedRuTG=@!FPE9&oxv_E1EB|rYLiOW&{V-vvO?C8*hK@1I`C)vF z?o)iJ<>t78!1ayBnvOD_`6yF)MAFmGM4XKGZPry3@!u1Mu~$g$k8A3Gvf_+V-2Adid|q$h!6n#9M=NKQ^2FpSMHn-HI!2jVaIa?Z|- zQ2G(+wMCC3ZDhBj*a#sXD)sr9nK)?`mlx-J8+QL3wca5FaV8Qcv)(l&AKpZXry}?t zuOEeX8r6&wi4rFrv`8!5v_D*q-(kIi|C6NEhnHmTg~XgRZ4O7?B}#Jt+XqeX55ZJ> z-UR}6Zg>XPoft9_4wFu!%B;3PyW#8 z=;&C6B(p|LOKx2iGaoOtB*wc?&C*&bUg}VPg^(UIm|(HNeffAYMONe6x0S8lv(*gj zeTBV!VhZVLPHX&bZMXMpy_?UvG}TMX+9+MSyq~YD0G#ba>-93;EBb5%nI~fd{n`;6 zeLF|SW1m0a=PGYqk9}^|>`3@@O!RfV9!efpsrY!AS-JDdi^r^fdtna!9BiB}P@oW? zLdB}oZ?`>aX@o;WYrEWO`hNBO>8@P@&Pn-Nk`{d=ji)<9&vkpMHv%VKc!IXsayOP+ zAifuGQSg&`F^3qra3;oD9HsnBF_v`WacOa2&~rbhwQ+YoTOZ?TlE;fAZC}r|Qo9N+ z+^9*VmrvLIYnZSfDg}wYCj2%v^oeOHZH!}vF%YuIz!j;LULV!S)c3j@AAMN6cKBbV zy=7EfL9{N|NC<>Lu;3mfxVr_n;K3b&ySoJo!9ob`9z3`zuQ7e zjTfL>)PVhs^Qt+2M@i{^G%t_Gj`)*g#8(9)oc6>#P)56#q8S69j`7D&z6h9M@$T+V zZY-qk5Os0MqFIRi8eKfCewCv^08ga1TA|}LuJm0E3s39aoj}aAjfO!=3Y-6ES;|#? zRO-SV%ss3h@BQ11&mU^Jf_`gzsTCn1Asx*>Zal%RodQy7Dc3q*lF1My6{^?>!)`XZ z9$$J2u5gSAtE=fIWr>^@;28|cC_SBTDDlo(^HPTKxmc|FLKN1sKWO{hw;TF_t0vB~ zq;+)m9^0El7#VBx^3Dxeo=S_0Q_PvQSfBd1cqToHDi^LE>jjRQg8>(QSf5QAx7`oK zaQu&bXoe2?y+^I*G4n1KE__RSB_&CQ{*tBBidk%SM@vl<6rHlN13>0OFN^~QD?0{Sz9|89eGOREOf=hmOL{&9gp}hMGqhAh|2fII|L&7Htza{_r zqs>tS>4k+VDas}D+3m6TpTDe`f2e7(*KM|h8=2jIZACXQk6jIWm|8uj*%|M8!BIG| zZp&?>w|7Wbe)V@PuV*$29Pb?QB~Lv=97{3iP1SrlAPuE{pV43!v^4TQmnf<&&N+Ck z|6pTFd&hA)RkKs!_jEgqounW34f%~5PV=d0)BFR~S=E{M?J3(Q? z%9cO1{t*!o3>D3L!Pmlfi}6Z^btYck-rfNz0Z;ce#OOPnFJZq;?_=(dpWMX6S_eMM zDJm*{jeI&c4bUjHyCg_RAl>7mRZ96dn8`Qdg^O^H<4 z^=2)c)XvV%XM4U#n{j5USnc?J3k+OOfAi=-wyWU^QMy=rNk*Vhh-c^-C&e^SJRmDu zuN@lzi}b-|Hn=&9WD&XhlhxJLo#k^xkV=4s#crb^s%>?P&>q0b#pQOGN+d)ImuPq6 zNRlK_YpUt`hktkNTZCi-k|7qN%y1zEbcJYq@w;d-D0lbrB zXIK59>ZVzpK~jt&8sAd9FQdKjY4rZcA+g>(O3CHIKGAK^;T8%`Yp^eZGT;us6YrSP z?d*8-iW<}wEQ}@|%1!)fc4|Vx==;sW+aZ>g;hcB<#6v5O%-vn3>UgO{i50EJJDGm@ zWc<-#v>3v}CJz6F1$>8_ATMk!d*~U!zTj^wskWY24<+RY4i3)C%L6XFPh!#^+&M=> z>ds}rov*BdoyG=C(g)3G&StzllX>CWOvg)Z zDA@?$nab<6-D_&t?>40+r6&7p3Ujb}86uB=xEF zepPs}s3^e7ArjVvws)}(dLwdSQpLoPdo7)^(Bjc9l~)Cxi8R2}V{XVh*AsuejMl6f z1YV0&bU7mXc|@Aje|@8ap47kQ%qcE1sOF=)zgg^Mi*6AW8^0!wq+UejEYr8M(sFDx z+JnMTs8Dc;_*Q*K=jRc4M=>YRfirb9F;QWpj!UvXtCIg)Y|XM#>8BDLeSOXx)zXIJ zyEvLg;+SHdJ_Y%D^@x;@^~OfS;(UYU%ETYZF6D+}klI30k?{1DoeQ!`gy19z9l%wT7zIzvTu<>X+*?5d~Tt@=>px0sPsp-6)} z$Z#2oc3d3h%QxP;K5p43uU&c1-8yd(&{MYK5nwp%PoGvVqx(|si zxu>RA{TIux0uQ!z?b!)ms}>*1O_+c^?-T95VVA0x5}ak{DA1eL%*XBIQQ`}NJ6dDu>JXnh##J>QuungL%^*jZKMrSbEH3%eaF9c#5s zx#Nx1>$jBJ?7Q*{*_Heb$Be`qPK)EIE0&ZClUJ62e-tK~GI)W80?{0Pyi9wR%Ec7A z$M5zbW0j50vW|}9W=T!Zu<6lKCBaLj9rcCgs;7>%rkZoByM!c|u*Za4EK%H0ew-7^ z1j@ij-Q$X?SwX@Jdm(8-b6^1u1w3>klxpb9SHf&;_C5*u3A{a8ZOH21dc4SNv2VIG zCo~>U4Q_63)^Bkqy10uPj%rx(51xVhDv>)T@>HGEDUQdK+GN}vR+I@#Q!K^)CZXG4 zSCEnwaAhVXh3m&Of`k0R0bEz%7(iji3i})UWWP{5Z*4Yjcs~}gA^P$ zv?aLeqZvBweEKzr`(ucd#6UhUNT0&GhQ73V<=RUcqm$;;p+>tU!@e#4;M#x|4LR=r5Ag~842yEjWB zE(@R7?dV5V>s|1mk7;`~evxJ}Z7!H7+WI5n0$K!7qKr;juZ({Ww`zCu8NZF}-gtp% zI4OU13}a?r;-(y5-sp^X<~R=q)=BBP$pa- z`Z^_q_pUsauKbsBG4n?ZN8rL7{knr!gztSH4-+?gdiGLvYHUi?K1+DYII@;|{?-W> zCU-NcN_>3S`j&C5as1Siwq9FELA}b&e^{|IgMsf}TjhMjRsW8qyqrz zSTFd#4weaiN!;0KG|2mKcOA=LIrvr|yKtBSFK-W8QputyKb%A1Rn+P#7T zPg=MDqpIZn!Edt1yl5fw7@ScQwW*@z2a3c=3E$241&SfoOxslg!K_tWvdD)#THLeh z9yh<>`{WN*t(vhOPoRMCBu z@hX*jh4Oeon3FTs0{uNbJ(QLwIg?~Fl2K`KHM{lki>uV#k_D%RewbH`Ay!2+O&PUniEa!%LZH|3|hIKf{B_eld zaQN`QtU&m1^k%VAc{yBYh`w^~9Qdy0<8K>8`ZrKZzlEJBzCwD19P_7TPZ(UiF%`D+ zhuWHcVUn{C9j{x9dQGKgX8L2f3S0A49Fz-<(99#LEP=VFohA#^h_CIVD}mGJaR$CR zLkQguh)->?yc;w;MHFYR=R}Y!Qp~K`RGTMY?pXcJx3uIXzxyLuIF6MFVnayC zAfHys)+-Pt_Nqyc0!U#djO4XkOlJ55Eo(8%3>d=R3g_ldBsGdtktatV$ZVi7*E8rn zx*qgEH?%;F*0?W?xe79wD3 z^i}zM)^pMr)j0eRvuEnF`ryUW7Z8#Y4&Vs&@-x%6rE|YiqY;hXyA9YOz(T@80R)T^ zH@>a#q~`7&ktxk+tV~*>@0OAzg$jRyUZo1Uvs5!CfK1)MiGB&h$W&g^_Gr%Ap6m1@ zbK^?F3^Wb`>aF!ulD>3&P4)Ui8ttyBrKOf%`Eijv=w*${s;{+xzGW&4I$G4nS5Y!p zNYWTjpV)2>WXt-g+mBvo`(a{kL>>5_? z@s!@bb-2=2-d3@Y*?v{u!eu?(K-88EZSjXOFpq87xZiv*J{>Sc@SQBs)Q<=5-+DNx zAgg!tpsTnYK+`C_jE{xM4~-8S$?m%GtmyfkHFo~W;xU7?{W3w(lD#5oI-b&L>=@CvF$U_s7(8dcp9B`CYTbyDE&+nQTn*l0Okm=#CL$Nkmc3PAUxR)sGDI9{1MJi&CE=}HV(M+oh)CSm+B~Rqkx=S_?^L8GDzxE?ug+;SE3&DMSLCDy&A!0&~G-Y zUXNz64yRD*r-VAMq&?#H1TooGx z>I3M38b_sym8FP>8!qh|WB^MY+0GEL%_%ClU>pXvsrdu|5{2Jm}zB>+ghyV7if^W2xI@PNi_l+b{o}sNX%Z&C;Bju|Lj7o*!fr41KI`ti% zF5up(dy=tCe)kK{31eq%M%?o_@q3FgeHmSu1>JjtamdFVo;!a?n1)r2soP(r1!-Ly z)W?Hcm+j-jasemzo4;*yHz8&W6^CjsOgtVJfXsWrrtfsyZWnH~gFYm4IbkV$`k6`H z{l|Y6xDx7pv?nqMv;nYWF+F84> z;kf4CuO^nW+XZ9*_>6INypkefLn>quaB3CyTfDRqPN!|=syW(yIKvc&w^0~ z%q%UW((m{ZijfF7TW*)}tznYVxc)s4Wt?eh!-4M%&CqVz3uDl%ze(f6FkNA9u;hDaW|UT2&@PPj=r;*B zHLbz0nc;%RTv1wlbUu}-FY<9LtIl?-ZX_DbFY|7*+e7HeY8ML4wG%@5LdBh?rYp20 zl4@NyXv8TeCXUkamHqveD+R0A9P#Lq&CGa6ZGH7ak7$?C$2Ww7v1BEJ+7b_H-eHI6 zUwn?+$7urwF9?o2%qMHe!BdK3seh3P6B*l6Gbi4V91vlT4+lJ+(>X_=A1v0ama_-E zKUisV8>}UeuV`MlPrA64eObS8e+(O z4@Ws7%Z`x4O2MZno&+9Y2?ioZgcqP2RM!w<`in0D9~dhtOKQkxMP2Y-C1PE zwBU0Bxl0!{O*hu_OijL_lhh`U^i*2b5qiUq4yXQcYAK$~8-nF;nOP(ZW?FGrG>O#h zhcn?uQd`K8HsSD>hxMrki3S0jDt=8eIBZ<`^)v_sgB!taV>4E@S62RQTGx7U@Us=l z>EyT?tNwOp`^P{^dQu!0o0fA0GrzE~mpAO-&+cy2Fp6uP<8jkqAoWmXP7xUFQ}6S* z9bz9owDk?aP8<^l$im?A4V~=5Q!STcVa}KZxH`a!gakE2EazN}FnaqUf->&Ck@Iml zWqr$QF)O&8q`AYnW;4~JpTZ6}jB&gU3JXiNWJo3LN^-GS;F}nw+GwE!9@E0=qN3cg ze5I7-#Rh$!<>($DE~ex?)4*Wn6m7s>ZHmyce$4c{@K^UZyo~|JOQD*KTCE4WISAd_ z^W>U;YN~6j{_qYj(}6(D2w#x!xbE951?vxg7?{*8gsBXsepkSgrV+w3H`|%)2Xe$p z(|}(U6?Lc6soBuma?H^b6)yA(<=bIPqvMhug2{f&D2)$8Xk&mZLJd579%P9IZgm^$ z{sU(T7gaY?PVs}5Wa|U4-8L>l&NFby<9D(Iu66EW-8TOQ0SCBZT8ff5GrQh_A4PXpcRmvnqEQGU zusf+fPfA>lUZZ??(pvwG(`CuX?Q=s(gd5(EicIrvCrtM!yR*L?c3La96`WI$YuX(0;SIaW;ts&nkvhSSd5m5M5Kf-^7I&M#3+4_tE4o6#$FyD+q43M@^|`u;lz#7YX-wga;ZVjBZ_N|=3xjo)@iP7ESd z;g4X0{=UTEYy>iUNqYN8UV2eEd2vZjvg#d?8g$wdgyie)+e0S_=u_nPkv>wLh@C|8J1 zh$5{H1?;<~k`ZN9nR9nPQ?=_`nBk;|5+;Q|iDP_03apAS;GTPlH_q)B^6B2lu0SY_?dTz-FE^4Vuq4;L0G zXI5$TVI1@>j0}h7bxd|d47-$)FX$b*XfUdN!?5iXcA#6$gcT1K|ypp6`bfnsCLIAxE zLn#GGWv*oB#fs%TF9AT42fiCvpaN#m9L4ZECVaR%QZG%8?aaVPabPme09*YoIebtc zC<^ia)h1)=Jw8rhS8W)w<}Z)md*SV)0Bq*Ks;?v4`JcC*xjL3;cebls8jf8#qR}VF zG!q^M+}ASP8vzSxaL>h50=3`#`;8Sw&3teJ4M zL;!y|6EW`xxDd{d&?ukkqoI?3R|ywlb^t(Zc=+H@N;ZY}{EOQ4ISwGH9G3>YGZhH1 z&iVjths`wCudBo_O}It}VCYebNWeMyEQi+Qc)ie*7CsD&2PN5dVSCg6Yq&G=pNU#H}M zsKi48QU08kMm6(-q+^ynb^@Rdr*@29K7%saGLFwpa z6|(#@%+L{{&WfuwT)&NiPQ--<>d*ra1S7=Ax(2T=!P#&|!&N%vSDi2Lg=G+c&E0`v zuI3;u1CT#TsFw86b^|2{uc zcKaV?uXLH`iJv=S$s#iKuACBt2ecE2dEkNL;&_c1g&3@=_{=ay)`r36Xq_SI!J7UL z%3A}J@T?0dO!!MEpk#EQpHW6fhma1jb3|Yd01Gw_=Pfn|mjk~7;)|EM<)8Oz3Fzpo zT-C{O4pyr4=ON-C5IzFntdr_z$Vs{=1uTd_mSlFjR8y$~Cn%IkXxW52DJg-{B+wX} zIEnPfcUkOdfmK@2qqzS24jF6PU#nGirJ|J<6ZH`*z1CHnGqVAY^F@e8jpNxAz+P>} z0GyM+g%oUlVxAx26>!LwObJcrqQ9&ZI>&g!g zGL7)-qHpHZNW?N1mzKe+;zKoc#+{V7t@nu1p@zd}7Fu3@^4yb!2Xz<$UPoW4;(pw? znzZO=N`pY44wNrQKymWw3le@_2r(AvhprGRnGVXoQWn+pm-)I5cC&wPqWp!J5-z3N z-~F4IzVGBgZf;0EZb-6kEF>c)Q0H_l%nGBo$|{G-Ms{~NH=x_ zb<==#jU3D-WNBIUK8|Y!64Gm8j;VLrVJ7#6x_!(-UnFR;g!8aO6{cKLs*aDNQzK@o zO6bT?`O+6%p7QfcR6YtZMT0N9sZOG?BX4oJ(hT|J>Sx!#!rfp+_Ex`P&Q@m=Vzuxd z&sMqIvADgds9)-uLw___H`=43s08U zJov>Pgv(7cl&;t0X?fUHyS~Fe4|vFCHFiW)aQ#U_1uQJ!ESP2DAUeh7C2aNKvXSK9 z0erYd3X&NnuPuXnGqSi_z4W_c7I|m=?5!lC4tH|dQB}_>b0YM|C@cemSiuNhp0;AD zGgQsl@(7;CDWSH6Y!44ZND{Bbi*)Q8w>G@<25vg(>+wx<;G)m~9!qJ0ty=B8+hwwb z#CI~NfIT3jHXm?Pe=C!h*rB{Po_xGIj)NyLV>r_1>kKl5OQkjXl=61W+llTzLp(#E z)`(cAs)n@#H~%6EcEsJ%AwDn^wAH0H0C;}$MF2S!k9 zU=5|8awb;;4u8gw9ulo)t~<>K=m?yDkR6J_M$^R0--?cOw#~`aK80qUnL&P_R+~Vr z8x|aMo9!H&+8dY_8jjP|rk5^HGucy`ykZ-7{XyvkN27CI@g{Dsc z4<;*n?pJw$jD~YH|3%1BChGOVNlzX8N>lsex5SF;0A6{dos4%Gvs*GSt&TQRYA>-xUn6jRhg_{mSLKXegc7wSG=i*udyVCyyN zl0^cIzx})DGf1?>nKMB|lG5&DikCFxe~O1X%lzkn#d6NKF>FR_(@f&&@yLs|WP$W? zOc*@CJvw>p|3jM0aNd)Vf^zq+iJ)CK!(%p5_mIWQ<$M5$y18sO(tTDer5sp@k1sqdCK!3 z*3=viiYTl|RT(kl`{0dN>!^eo#iE5%M0Pt?glx4Q`oG+B58*wSMvl}n%?x` zS}QfldHP~XIFw93%|WU4LVY4&tO36DZb*_c=#Zw@qduJ`>C4#GINSv_;(uWQfgj52 zrqS>%4~(k5-QdAO9NJCRN#tq5UPdn9>@C#$A9KCEZo8bnLtj_JWw6mKaF(@3w$D3} zuKp(etk1I=Cyf1vkEd0KwWKcH>(95m)nF6eKKwiHfUU{a&HbHx0gHOqlKn+*dwszi zCF6zRiE;bIQZgkTes-%DNN9w+vQPV6^v-mzX>`Y|(f7Ni1<{C!p})ySqz964=xABd3Fs-~ofo$NzNyMEXgfXaYYk@(I0P zS&=`l_{8?S74?x|?AFm@V50%&V&K8VP|_;6RcTv%|C)J7zRk&hJ8Ndt_hQ*^6YKYd zlv?0-Jo3L%Azv-a#XVv>PnQ^oV%u8|hb4I?Ci0@u-smN#os4u^Hxp8=)71&@&U_%T zRxZ8RW>D4I%J^jq!p|5lf|Ck9Kwj+is5)MtIpZ*0xm*5m^Yue2Y)1$c=GpDKV%B7^n@_lJB{!`#dZmez*e&3bC=m79^bSH6TxzT%2(qgU z2*2)GJB72NsrV%=7xS*w=6svSnXtU`Wlta(rU|aDwT(6DVE%1^Z9m7?xpWnaA zVEKhcbH2h+&(S>XP2r;|hY0krBH7y*RU=Y8kHbz-S+evM%=7UA&b@ojy%#q1gkI-L zPaPz-&>^ZzX|U)zsWQB$qr>=j^19$HR*!p{*-5MHPKlJ|`0vxe@^)Q+4O=}=<)q0Z z@P|!8mtPpuuR(dZ^2CW^_|d)QZw!fE{WH^IpYQ~{H(E`$GPv|dI~6}lK)X0#Av@6{ z#bo46Ef0qN>@coT%?(~`;cT-``|aZ?x*4K1@J(p~VPNcks0(2vY27J4(T9KJZ5W1> zSiMJC3$Lw^kzeC}>*37VwY4ywq~DbWjg@dFN07Zj!#VKsFZb~u1s}gTDT&GK)OeH3 zG-GYWb6Uq-o&wXw0O1z^4$V~NAEOki+|*VZpd6(yl34zx=!t)M;Xgk!Q!rBr+wT)j z(P$SsL_*~g68DENfTHlDAfUXUkK$bjydlMt8`KRKid3gZZ!8GSn6ZV%Z#wQ7VA3NHW}{?iC?uniQ0OCzQwDEv?27RU!UI{= z(1PI6V~Y)UPMvZzH>q8C58&vBjtmmP*S&RdSQDVd9J^QNF4!6OpV$>7Kn>!-U*Z0$ zRyFgRxla5F+h{xO`~YC_jZ2{eF946!KliZ&pPb?SbG6I`R207AqIZA&o^+Ui)-N#T z;h@LMXAH|nj320mDqp7DjqdLhj*S5>J|{H{E(>~Z{A(Dd~CVoa2A>waoJ<+ z9q&W4;iMwKXrC3W$BDupvi;v{+1fnpP2ji9>H7Z~=Kc%q-oJh{kvy`~{CKlfDzMPZ z8S{f=d4VW%K>~n!3hPZ`n&{xvog+VmeuXod5*r8Q^<;WGA9EW2`kFV+{b{sb(`ug zpddF-Z9xV<3Q9sDkgwoo*6RxBC#=88h!`)I6Vr<1kT=X|LhOW9T}BMKYX_%aV4EDK zT)he_@EX95?;@sVg1MZVxz`3VA7^&0(sfXq*6`73^SMTRHFhqdCi9SyPD z)O`VUybs$(!58Az_`W(?E6gjhmvgLxd|r0{I4RO@s5MFcWa7|U7_5%j38&gL=-fsx zTEJD|`Czkic9hfo@(t4)%yX3UvQczWywMh`JVW$B6wu1EoVrN8Z(TpKWy*E${J|fe zyM4ua-Z}n;cD|EnlzrEI=QwueiXcYTp_bF5mhOb{3sg*-R!62c$G^# zS{SiGCM*TG%41R(*Uqb&`RzAuMek#sVM`*0scL~NmeC@ZtgrlZG1zW+L>-fwX4)B}Wl^@kwMyo__@Tme?-d?m6Hbd3%RFq^8C-emLBS^f%_*V7ve(-> ztFE>CVSV!V!)7+moBHDl4P(!Z&Y^FcPtF=sT~6z9T&>y)>iwSRWtd8G~Z;OFKsC3@~8`b%@p4#R2?sgJvJ$29gA zyy!Rl)7DM5Hs?p)#8QE5FGUfeoYnQ~@97K}*dM+5kJlvG-i*fHwUzCBECqVOyY;3< zH~J?AoPa@>{OdJp8PD5@^#>}p5k_n7)yrrr8#F-4L;)&6DInQ|mCs0fq-vT~R}8&2 zU=^m4i>jzw;eS^n*s}Vdo>HeR3o>E^ly}pwgEBCWzB>_JNRIlSs*m3&ebG}lg&-+q zazfA<-9;{5i9AD}+ZxBuU;2t3-azw-PXbU(0sE18inyOWKS2ccp{A^+hrU@4}f ztL?u|Zp;dxY|#k?Bhv|hWCM~S1OO*Mfn`7@{Leyf>fk>2bdDPy#G3fuu~^4h0#JvR zba2=v0RvPFgw%798aCYeWe#Vt$L3$4myrQ62o#7Jyo~}Bai8mS4ueryeZM0Cu{a=* z(dP;83rJ`S3QgIWz<<-OU#FmgK#p(#)=ep!Pqi`=`lWXbKp{bn|K0<&J{Lx1`&Pwe zB6lQkjrfRYAdo2uAP)T-Tzb=N83i!gC;w?30bVr92jC>2{P*U+qEm7RDzsc)$7$R_ zjs{{iKMC#%>BQumQ0d!6a>I85G!GzX#5^w(fX1j*QeM#A&W`s~>;O#o!}CE_sDvCV zn;o$p>{Euz08|`^*#+QdvyC-QN z66X;axOs`s^!55*bR6I*F8}}me+JJ5>kQOqQ-37c2c8*S6agSNZ7HwB{}bn>4(SBC z#i{Z058-}9xl(b8S<60ve;9o-uF?W9rCR#JH&VkF*`j%S6IPr(+;Rw%06GyE7xFwW z|3C`7vpcM=wTTef*n1{mJbKT8IMa?A%M(DN?7kl%P=-+@t-3JKMJ#|O1M0ByFT1Xp zurrQi@8=OB0vN>CuL@rkWNE<-Dq7{Zz(deGL;&OliUAYujFpC98dn{ze<*keMcn$Y z&#Ajs<<#cyfTr-B%PJHJIvJDvY5!X|NILNHGj*Pee`~RiAK=>tz##*W#JH;jvyW0X zC4ToQ;aiL%U0(kyAV3FzS10#fIfI^uVD!o4AJ6BcC@+^7XMLYBNh7KIZ>r(|)(uqp z49(yzFsFcdzP}9y07p>c|HL^#`11dqHTFMGFRRvjEJ#RhO@^cvuv2^${%22-|Bjsk zef}y6KuVwvnQE?|}ad>xViyb;9@WPtKm!I~5>R=C@-t_K zClZ}PlY@hY$5??d0Bts&EWQoF1JF800y6*6h-#ev=sy{SyoS7yXID?@F&<)= zV`vascpET?Jj^s&IYZwfA^r0WTExF5bBIg3%{onDmCy_|kXFw52jqw=qD0Dm^CbwTYzmOe+P)P^u1) zM&EU=`1m-B`P|l|3GNjDa&R!hz!1EHFKImg&4V8 zzy}~W(2020cYLSMzA{TUzlOEV^I*F^u^772el@a?V4|MCKRk&zwZgaQv+S>Oox1;6 z3s>n+C}X9y$js|(q>I?EF^RHmeB^h_;%kv_Xtm?EBrXMl6+;TQ8y)J`c0Ghf-o{LS z?}>u1+uqUl_?~{}l#MZ2W?YRhvOHm*d zKd8)`@Ja<5Ri-uewa^p>BC@J`z{zFnTDk)U{q!QNf~Er`r0z;9I^fv?)2oouqYY$< zBkD0*-+3=Cr|oG9C+Jb{9=dP2b)`pHSb;+Hkp8Yg8TdfiXFgQc`~`&yG}7LUr7)3e z8rOfV+DG##wR_9Z_4)^@#>?LPX1vms`xK3pb*<<>$)p@knLbtZHKEmm?_$(dv<@0? zd7ALl>ZfPOmUh!QtS%9bdWUIDq1&_RE~-0AA4&(8l2L93xa5CV6 zW^swqPrr<_{I1rd6$C;fmX#3wllsMS;E{&zl2gwea*pTirxm}5d9O=TMU3Kmk ztO^9wXYz`$o2L3yZDR|(y~MMI!RJ9#&C8uxfUGzxpK5!n2G>t(G+_(iWR*O|Cu6Y7 zXk%zY1XbJ-HA8*7jj~~5yfBT2vBbisYZHb3fL&`|fSNJ#N~vCTK5UZ9DckXjB&Edu z9U*V8oADr}I0*tPE~B!B&PC*`!{E=*>-}NxI#VwD!MAZxNN}!d`jF%8mp^6j(Bcf- z;24k|W#yN!bIfk#9yG@7ezeq4b8k6wr`uYl@DVl{mwvSSast%GChT>aB3Y_p9)eR<99>iPLD1&rZ_1D2aChBz07vPQijI*+WMW z)TEJg`uASHn|xz?d5I0O(zBB}{Xbwd;X7HD?VvUL8;BbH>NmOY-ENf&U=YHsA$hAw zQ3b7KZAuRO>N)mA`~|e5Zfw-pZ}P2AHA!q#BUZSLEB!Tsq*qn5LU4cTK>7k_IHSCo@i{-;;o~=2l zxO=^7$_6eeRZ>*`q?%pyJ+je11wo8b$o_Zv!T0^67v7A8hd=l#C;6?%+7Z583G)T1 z6t9n40#W%d2M=oH81U~TUYqCTl-DYIJBRmv#mrlC)?463)AJ`kC5ac6dkx-w{q>;q}y6KSFCE#qx8~P#AN#d`s#m7A zU~%1?Hn{XA!|qxylFkf`xNRJa{}|!140az2mpnRaL#o?ZRvRF^KQb^SNb7IeJu24O zpJRM;O-3-q+)@O!zBIqS*kc}Rnbla_@dIW8Kia-UQ~VwJy76_heoUs`p4WBrf?jN9 zmuXez6+e&}A%FIYZU&-b$L-xX$z_>P5g^J$%Ja+RaTMZEwv)Hh>~n$DYswa^vDM}y zrNs0|Gy7xD-(6`HvexW#<`4U#*Y0Cmzf(@P<>ygZFqwTZ?iM%W*Gvo^mGaWBlC5Ne zPG1zsmVU2KAZF!Lmjvn2C-O3G<%SY-p^0N~&M}`Mm01~8&Ep3FcYI1Q=?rjQr*b`? z{Qu#D4H@f?fMR!eykIuOX>*&zBw42XmV%g&6umH?0NWs`pcRR9Mu zVEqLoo7(>r#7<8`)F&n;R_$-iA=}X^Dk}dZWz5xCPW)&o*Jo(}-!FMZ(0D3~=vPSp z2Ehe>*K43BL~Y8PW}WOc6LX*R>C4N>UjtUwoZ{v(aB-(CJK+WY^_o9$C_iL;c#riB z{_9sqUg9oWVPwMGJeJo%q?nj%GQ6?pb2Bqi%#or+Yy?qYS>PT75bLYckezJ^+iq>h zye|f4>*-88TG%;+;J1uKzMXZW$kQd8v%kql;aHDHH=Ackrx68NkcY0SL{~I<LQO|U{dc+K=0+pB`Oo{-vRR?0L1^Uwqmw>#S z?p4^Gt+e#ZQ#4eHdUI0Tv`{FZB^Yt8p@eqktZ`B}*ic061ZU@fAG`F9>-}GA=q`hz z@zc*=hQCeY7iQ+ltEsE1$WI1(6NP(f1-)VpJex7^^7Ln=q!LOVNQu7@i(@5M*3m7W zwFdmsI(}u(S_Aii*nPW>OhqD#Mdrg{#C6e!(xv`&iqedz&- zCovXWeTgQBo;0+9ne}5v-FjLs^{d>+2*r=jB2HfDz-MK8-)U4w%c>q@Iy@#<80-Z@ z5}Ax||7YcSX+t9~Cm%@}iHpr9`FUIJ=-yG{Imq-{Df&P8wcol<%Zem8!1a9RL=x** zzJ||tT>!VH^FCX&QibTU`D6|eHFBhtZz)Rq*MK;ZqK$oI>@u#h^$3U>%V2)>Iu}JfNpBib zu5xAhb6F}wV;;DRRN*^S)S(r8m3`B2lk->mZ!8$icxu9qJoQ0Osa}QLthVe{jj03gEUpcZA zsxU;?6MY$5JG}+&IzQ@t?G4tL-q0#gAwm1T9H~8Q?(oLBXxPi`_e-B z$Y*cQ=X>xA_#hv)ghf&G6W8x`_N$xO{^-tG4%Iyno?9&RYOy1|*!MV*p<+)We=Z^^ zuN-@Oe+COSW}$)=i}t}SBNgpgsNUbz?O&!GLdjbm^$^d6NH&dOO~3P!#)Zy?ZWTzg zIP}T+c^K5C<;5>kHbz%JimVrj21id@7rqssz+{VIk;|rvV!o=?n0ImA@fh8zDIB}H zN#H+OP8wYmT$sYiNZvCj1DKId(OUsR?n0%^HG{IY16#j&tNxPr?=8<-sgHVbs%O@_ zmPh$WBU2O#yG9Iock&emQKO^WS-fm#ad)y3=6*Uw5X>L-(kl@s%xLmy1b0!=z6H|n z%;*^EI<0>^}!!_d93?VxKe`+}$UT-4ry zLHPF&U;j|BATzBJ*4i35-r+)S(?u{bF=w+J zAK5$OjPTW11%j+(;R&$T*1)^TX6ycvhL_sotD^4rG}kWQQF#Kaxb<&nXf4d8z4-t1 zzPx(BpdY~O%<@D&w5U7wdP_7$o+Rrplw32NcTy*S@8$dk8R274u87(wAGY~$&gnOx zm1~(NdXmxs?f6`*AIp&wEToTjd>Y*w@sln^fHca&RKX&$p@oKg_TaMS{~bu4LlE_{ zzLEH|_w*iHD{r%DjfNXV;-01bSF)_)Pp+RbnD>q@Hd>yTnJi_pk`;W5E;fzXwPudc zttLhtx=paUOxLYEZ7O|$Er>50WA34g&|a5wR#ux+t)w3*at09wI0J}v>7nr%5&(r^ z{}1l~;M=n%`v0r=_U22NDQ&Dl?Qks}$Mf#L;UGgqlMIi1tyn|avT^S9d`dkKn>Rg| zmCxQpfTsBZ01^Jri>=8oVHXkeJsxsOq%=T%e`#5b-~OxjpVt5P?K30;`rj&65z+XX z_)0Y^b5Y7Q?z_%eCVR-pyp^e5Wk>kkUmearKBEL6k)5>cwWa{U(ob|ic-}|c8liBh z*Kq5BQ?);}UCaT;7l80De6cxy^QF5vl&{vgB)!`yZWmG@!(%bHILZ2tPCfw^Cg2}i zy8xYTCCS|7hV)!1i(g+ywPbexe$&H!@C}JDqfL^RZ$hta$I>(VhXDpM;FUnlxgH?6 zpn;aXhJERr_T!&irDx8363~W1c!qkmv4OpGZfa_ZYW^1E-(%r@tkGGL_Ox~o2rd}Q$_ad(E~I#?hCy1AMnrr zUeQ#WP2p$4eVQ>DAO3vg-$ck0Ek)dr0=|SmFW(qUbB@P*J1ntM6}dl)5Fr1~MQ!Hr z-Km(bz~DLz^~AD}(*FV<``DL+o+A<1kh@$)Itv@ S?lZmvl9g1Hs1P&y@_zyScF3#% literal 62006 zcma&NXH-*N)Gdsnq9ULOBK<*BI!Kcaf;8#96I6Qdy+lPsKtQ^*gx))ZPNG!lB?P2| zPADOS9$J!{_kQ>N|NYt{XPmKj_By-FHRoJ0dOB)U_nGdKk&#ioQ&%=1BfHs2Mn?Yi z?oHB@k#GL*$;cj(y;D{+3d-3--hTghmYw1tLzSt#gVNnO=}BNb%eAvgW~B(o}nlaWT7fxe-&eu=?MU9)$!3DT=e ztR7)H>I_Kysfyaia0d8@iWI6A7bsR6?VN`E-@aRAYYO$aAKu?ds^E>%vM@L4med~K zUT0t1WOsY@)Xv!0$2@K6&EYqbTDW(xtaR_DwATy4nlZr|YL@7Rg3jb_x0#R{M1^~G zMy7nf3BX_U%N+_q3GU8D)pA}wK?hOy(${41 zJ!}&<|GvKR@X_Opv>Yu)8q(Cg5c;>D3kad7i!JS)z1@q0Zw!2fL$-c4B!6^)y<(!O zlKOEc(#phLjH#!vBaLCR!J*xx5}JGpSgpvWX8NJ}gqG3J!tDEZ(!Z(^fEcVkerjN? zKO|WaX;&f7*?uxOJf_EE3A#O7h7d;}{yY+%YEZh`B6Z=BcG{2*b&Y0g9wNZh&N!WFIq^BFf^9d~8Fgn}O-Bklh&zA=k+ck7w}T zTiH5U+yYLjPp2eZlvlmDc?=vWTd8l}NPMRHHn*Ibnnf_f_0>~GGO{~*}N>Do`h7Zq8aF(2?#kicm??-x;E_2SPQwLIvljm;Qysc3ePk&zOC9u zaE6S0zae#@a_DGya!EP*YIXH9J~U8MV>DJF+a=*8_ZHn_RyG9B#=r98P#oB9He>6F zT*&gsjHFhLaAf4o8P7{BP)Mi}H$^$F5P|#QY~YNjn}q*^cxE2-O5PSV&hgyggIW<#Uj1>D7Uct=5?3cqII{@%^wVn zcRgx!o+Z`UU_DkjKBIX0=VLx5>DB15$%a{!x}KS{Va&I_>&VLk_V;V{hI*CNG@h?* zmvOsRes@YUZZi7>C-46fwf)BeJ_l6bDuV0fVIWhg22$aZ##!VM~m z3}%?Dkc%Zqf2^lMSfN2V6Lh{!Q-Tegk(BIqif|ns?8`*|uD+6LZR?0uRi;C2rqfxU zztGId+5VKbZ?$P}A1~oP#n16!HFKw&*B9V^!(Yi>Isnd=5j1M`1J8feRdsHlNb(j}D>v^CA9nf(?`37>ZYL!8Gng6ay*Jmf z)5_TRdTcrc9bP}~=sQgvt`s$xV%i~J84@RKcKUz-fF)?eyRGapH7SB zzT$|6cA+_9@a6dhMbx(^8z?ivlP6TL!REUvN)myIL$UY$F%-|dlkY|q3~7{Kpw*Uv z6_4Bm)VO`p(=)_z25&>R{iU5%+A?gsGUJEucjDjj4r|sDDi%DtMiK(uCzU5wxarEP zF|H_uAe^Y~SYeXFQDBXb^mD|};`vz1B~{iV$;&hb@WyeF0^!=Ur|pO`wz6U~N~L%w zGdMja_@d9ygDv>T=p$s$fHOWtndLEphpYDQzio3W@=ILEQT;`3cjV9zp9H>R{a7eM zOc%?7*x6(N*O&%jKlj)GkB5hep%uP%${&4pi|!S|E+YJmjLug+hiAZuJL$l{%($qp zw-!TjnDzb#fpiDQlo}?)vvCD<^DmnM&MSJXPz;7G0*(ID@xGpZ`K-m z{dB3plv6s2MKWyh&uT-8uAHnDd&D*&Kk_Oxq!sNq-!q`oRlgDLjEJ&nh-JTx3u`ML$9v@%i(3*V#+sFHNIO zOU5=4%|M(^K%bR0@=oH@wpHvh8k51Loh|RY>&KSpNVvAKJTX!Pu(`5J`zJtsXUJC{ zJ!+_^h@xZ@)6Kc~-KoF+^4CCR@szHDS$bwx$N~~a#VlU3-)U2Oeef@zyg6Mq;wW_i z3mw0{M?Bapr3l1+Y?eFi=CfX3b5bsx>^z=2zG#zb)-Vu|$Ajj=?>s2#lb7ED_!kEC|iFjj|`7R;7&7AH8y{L;M|XR4=Nt9ff1Vgd!$XS9NX>ZG1OLq0vEljZ*6LV zz%K>E>|X2rk4{blvfW}l&|zEZsRbEXTvQvji}I*xh>n!QwNAmgvCpNObDZ; z&6sK@?m}WY>_|Vwo9wo6Eew}bnjwL&E|0k!5K@rwc@M7cCOzc9tBfqic3*eSK9RG9 zI*b#>k87^Bet^6hgYSupH{bxkxog*kOKp$dy^F*troii#3miLC)cv<%+{bo*2_Pf) zM>E3QY?Cm}a%cu3*jiS$!7wE=+yf*A;_U;r%y&eW^9xb#&^gOE-5t}>{BX8I`&c}5 zW&|1@BL4~-lao_|lZvluH%GgF?q7zeJXR#{TcHY#N!VZ9sgK5%ChIF7o~Z-e+>qf~6VYP^KAOc!gt4g|NntdtVu+J87Aig6xP6)LY%oERPb&^oYAohT9F>w25gxJw_!N50awpaKu&A7GWi{-FG=tb8F;37f& z`Q;9S;d9&yc_0kmf1ExZ@4znBid|z^DkzPB0zA8*{~B&ttZ(bTbx=6(g%L5Y>8UA& zfgXjb)Tr4ducF7c@X}>1#U9@{HtX|^x2QJ4*O;eop9LE{#38;A$tVAhdfcfe&fQ? zUEl&l!CtUF`6D&;@2{sbslJXn;gB_aXHE`V_?3M7!NtNpbk>S_l4iA>!ZCB$NsK{o ztK|FYzx+sru*02y*`CmK(A;WvA-7S;=^R(ERZZJ(N>9OJwF+ccc(`*m(DD>HCXnr% zx$X(|$6#R=B8&k{(msBP^5HPNUtbdbiY2Oh)ph{EH*w&pw*1ba{UK80PSeutX*ccO z72#hNvTsy-ZEta-Go=Kn`lyFAZxa&(4faRj|Ha>;f<@r`Jpx{ao9GK$Kj~`!x^xP1 zCyJwwW$Qw>#()xrH%E{?>kyoY7A$mTV0hW#HFPk3d!{j3rxJto%#(6@Rj6?PHWg>T zuA7~zTGGEf(SPt81#^E_-~JeJ0#4*1%E~iyW(qvKp!s_I!rK@N@r>c{!;4Z+n7c?k z@ZvP_O!+~4)jZ);1g_swq$)_nWO(M}=6XO+1&`q`w_G-?XA#NFCdk+Bw8mdkZS%e> zZiI4}4+YXr{j{`Fh4UuH%`h1VH5!uTf@G0x98oXEBfOv#yW7_;!n;y{-KRt4z+9Z-MEZ z$`F3c7-}R`!@^uH_~`um!K-8bz-94K7Gb)K)RH1QYUX+H+*Zs0o0!@IFbbAMf+RIa{sN)z817Gj!)71;VJ~5=}f^I~HIxIOPJl*cvLxwu78IL zd5fW>2dwkUbMK}a9cM#odDAKkOUJ1g-C}t`mgjeGQzayPnFWXxt2S9+`UPbA6B%_D zUSBOS+Jr%PMMX`kCyk8MiRYpCrSNDZ(u#Dm`}4xi=LSX;BX7H}PTH1^y?744!$((Q zTcXC^4$eF)>hHQrc)&JY3V2=2;qo#MNyVyW(ECQW+@+~g%%xlVv1e|`*~uUWr>cIl zEfNfKH*X0Tq~IGJ$nyJniEgpU4E*kAx3{*tyNMQ{i;bhCOoyE%SGCV~{#?L<5S2tS zje5fIf=~xxK}pKeA@<_zmyGRli*JX$zu|t4)GEr7N3w*xL`XhJ;)U=ZSv+zaRxn>l z%*$_@H7Td76|y+Lyy7zv4CgCuR;*vn<7h-FbZ#fLr5csCdyRb==%c-dAK=%RzF^%TiZLL{bTbyr$aRXI+_g;?@!J&<1}Mq%fgh69EW?Yi5{;LQ|ahSN}oro zD2u>@$D|Q`OisUlezB)cJQuEvqM%{d2EVx; zTsQK)d+W=}#4AD4#oNks8IEW%`Yhk@5SExbrL>#>%?vSX7+V96cZt;zbMu*A&HkNJ`S> zC$Mk!|0*{wJ6X5)%%rJRxJ0R4Ug~#)UBWMeVCM(cCJXCJDdRA@IjO9rM_p(M8#6m+ z+X~%5DWm`80&tslkc+TO5ko#&cP$H_Bhn@>h!3{kxsoRkPIeauKsm<;>&1O4wFCm+AWEO)K9U}56p zzq0*T$8JwI=$RO3Vdzk$CL};RaaC-y4~AWtXyK3+w$zj619j7}UG9D4Ae zIRcOxm)%j-o(y?mo;Hmb?NBx+vQgFSFP$XIX_{Tm@U0KTizO0I$L}~uR8}?vyL4rx zv7e=IInurf)F5YulO73n-1cPndI=E_;qIJrJRdUa4|(pi&FET@Gegf>#PSy3_wJTh z?w32hnIUBnwD(wdz;AvR=0*hx?_~gM<9_ zz3K(r4<`9v2`kQ`P9ZuNz^8~;y7KbGQZO;>^c3gEfXjZ|Z>=uyfL%N-izb2X9}5$c z9cT@;d%cchmsnKKHPMYGyp4YFN&$le-V_knS(L9x6tIWlBg9!9kRijj?t5%IWiRn} z#g*Na{^nTj%rJi&H3CgJf+$p7;v2_-Wi7Ft*WFiJ@)u*4Lh`Q`=yVKNbp>9goASJS z135>XD!`df&d!Q>IKLUDy_YVrIU|&^1CLn6N2@N-G8XGUWIU{!ui-~NJCVm=^H;!` zpMUUuN@~98-LnH7OB%%M&~;l~s8jIn{=UX4L%iEk!|~?}-DL%|j^_P=^p%5GAzG5Y z?W>y8TKoH}bB%$pW#Ba^tG%xT9cUKfGbI5ID>LEsgy9HMiLw!>4dIGvo{xE5i1bs} zG6Zm@Gn%JSyYUypRJre#ZaVDk;DvMGXc68=RYL?5ec^t02zr9fgQ7s%q|;F>aE!6TOh3gYvI+rTEtv`|Dturpr3#W5jlYSPtnxt>exC8Ejjr5QbDoAkayDM`CW_yr~ zifZxmmovHlibMGk0LvL7^6w7-6l(NB??1>nq-82OMLKY27qjJ9Sy!6jX#VbAHJT93 zR;&@#&^vuc-(_7;H2t!cLt|HOgu{*o3F z{a`PEhSC>=YEEQmfOd}TX>J-AGv6G%e1=KCPU)TFX*Lzo2s*!WXG!Gr%pX`KC?rq} z?%Br>SrzJR_MT_r&P5Z22+Nd-3L{$d&EG#(fuR@4@?N}J?5yFRB(yVC+0Q9Fp#T$u zY1iMs+qWDLS3Xm8vG;DeL~=k2*I98R?Y?K^(-yd$Q0&3&FA_^O7qhhrV1@98!;}XB z9&?gG=ieEY!b)EW)e?VlbhO}S&uzXIoDq7y^_}H~m-L)zqnU}axjEKO_r}IDa?P}F zuyjRz9}_-VG9?Ca=uVtVw1E^k)h27FSXimqgk6T)#l`fiO|~}ebhCqnqWD9bJt6dB zdL3;>7Gv`U+S-t~O3j`frKF;vgrU%X6Mxdbb4WlWQ2mpu?;%6TUxqdHeiou(hxea<^Hd(N3=x^8X^$A5n; zaKT#k=qrjxDk-V&)urY$dG}FhIu$iFh3#nv&gACK(?K9I-f(qyvo~|0Ay)NAeC`-w zZ7c|>5QaVdvC)$_{kr!dkqn+xqm(ZO_VU`lE-qAMFm)XA6=NBpqL2raJcd@-i=)mt z1q2%R)5D0TYEAf_XsT^mc;*`Oafg?;FzYCbR0yxc_;m037W#OxTWuV?bbPvnMO?8o zG-xTf`3l2r)Vz2Gbq@!i_>#rbLHJ?SYr4XDWb&4oO(pPqqHVe^c!63)m4&yLKG z-|wxf^#{b|#|uX@By?ZqubyE-cjd)_>{^;KA1i2@uR9{e`>YuC=0CC704|qg*n#rc znBjy1sKo^b=DbX>6e-Ob6M>u4$TfMJ7HDjLJKQlW3_sdO=W~&TfUzvK;1)CC^>U%+ z4n)V(@l^Wda~!*o=A`#)?clA=EqHQr8OK?1F;??Hs;}SC;%Q&f`B!-!^rOkn;-$5EtsVU9Bv*bdp+Wtx^=x8H(W3kW9U)X`>A?5Dl;V|PN%YP zMA6Kymw~-Yllg5Z&@xJeHb%7?iu)5?QAE#7B*4WwG#_74R}vQLJQh$?bD5{hReIcE zK8Kn{0+{(rA-Pd4-9pvR5@2BZM|ll4J=p;lUC$y370hO;a`4F8^YV_LBzOjr z^B>9~=FJOo@x>jzA&-7gDn_$O?&h8xozYT_Ge`y7gwB6GY?i@>6Nj-5Gg6~#8yaP@VroC;$XXO$P5 zO)k0`ubzYChMDkjBup2GVN+A+`Lbx`YdrmTEBJcihDG;kcn4bWbHT;FT!?=2r-;5e zMu7_t!%AfhgPZsUZjEgTr!xCXLhb@jOj=S_0VG_=O|8DQ8e8KwfmZp*NA-4E>-~5I zw$nD&-m2K75mndjA~SmhrvdANUuQy_bmfm>k8C|yMI+|%H1eux$h!PU!o~4GdUZR< z!I5eEjmdMD_O93=v5|-B#RxwmfsD#dIix4(m8^j1mR6XL;)n9=I75J9d9g27?vh@i z-o#Z^Sye^golh$En^Ba;k7*6dXn=TZMZfZ{m5BLN@zKVHal%^LxDIRcGP)_rIzkfM#Yt?E!68NjW()UYSGl z*jOd|5ITS?exYzI?dQ@GTZ#wMsEch<;1d4)?`jIs;}Y>_L#Y!HxY8T!i*4JgaTcD` zZ;EQsVIyuSa5j5%7&$V#gLyPINi-Nw@XF?nw8oz z2@*me^Z_AO2#1wvI4YDNQPq-E(z|8J)&c#HP0v-!g|Np=^CxNPsBmt?;{B+#l_hIG zEq2-`4#8;&FAaCCOq8p;*~2abSkZJFTbYUfz7|kMYxglEy7@GStcBp}N0dTY;Mo;o ztZ|Z3GMapRJ9RsSflGN-hh;GmNN-%#>iPh&BcM9FBl=GsnrQ(p%fLDck63K@3Fi_V z-oO$(hqYUD(37R$P>eH?!c}+SM!RIwgEU4~hqlFJ90kbiy`_ zHHS4Z3k<4(m}bZsS^XoC%v5S)5(~FAt}tUXylrXhexUs9DJy1fo^xG#XO145fT4RSa z`b~qKVmdK#@=2TMDJ4|t$=1Gv(?PUnmkvU}{>QdENG5#91#^1X(30uSMa^FDnR)=5 zgr$$WM%3zU}RBKRiy9MyQAJL+IMu682dOHqf~xCWKNJR%}0czvxI7b`vR zE5R|q9XVC4h7H!uQu?5w9DcbkgL;^0PP%LZWkm7ayJZ11_o+XOifxW{kk|rnh}RQ* z9$U!nTr@a%#)puHfZc^mO#bJc+==UJ2^VTGI(kV#_ovg17KAdZ4KRq2E5ANAkl%J=!n{tVEBagR^FF8SsGTQS%+Y zk>ja2O4#{P^q1~uJ$)%EH_7qrSrVaxmRM(qc8-(M@RqsEWbAlg(^kTL?|LNvdPIbL zvjOU?b{=#pEhE(zfK@_Yp0>aOv2(B!j43z%x)&}K)_Qcj^+cX+GKQMH8$KnP-LV^D zF(vE$QodfziXjl{Yp(6xWf$43x;cgu&v2HsRWeXr1|Y|{idhvh-?V-8uzvQeCvyBn zNgr4hQVNjiZCr$EZgxF{P=Jm7@XjhyNm@sk5mAc7BGS zQOjjJxh}Zu(nU+FsT1Q54ykP1f&$@$z7~+9r#@%}y9_H<_)X%j%Lmt|GaFNB@=7bA zmTk5;f}n7Qw0d4_@cFL=Hvv(hmY>v%JIw#Xz3uGG`J;{U54uYOS61q4p@hsCGo0He zG9Y*?mlH}rF)(q5Al=kIg9uVfV8?R%g@x?nQ=b$d&4YRi(=+%Ff7-m!GtRx=Z&LM6 zA;z6~CNVe2cXnTn$LZ%_1$P>5iCM@}Kuay&A8bH*o0U6}MIk9m#R=vKwaY8$OeNTX zp;yht8fBWn_PMpX(DkuLw*A0M!qjxpaD;Xt*OC@rap6?^<0~pA5wCyW*Veif1e+)6 z7@p|YA5GB?`Rc(xIS=(!u9qx{i%LGfo}TPU=QAlw0?mgsd(NpFmt5F=ABxqmjAEW_ z^i*((lM3H+Qn`rQ6E?1iv$0g7fY2pOcl;jLD%58dWK+^tv9F2XUNpZzR($Eybgz8u znW@@nsF`x%j04H-)M|;dR92stC!^oH<{wZC7flYvWR2yrvcdqTnGUqq?SK%_@d+OjD2(YFTQ}3JRQ~$F(Tb8OD0@Hf664 zte6-jE=(*ND~&WPxfac~{X#14La!V)$$i1E9J|QLuc3Gs6%ChmInyJwpG6vi9bz!K zQGw2H@AL$NNIF|XV<*CRp%GxNJ!-m)ejtqgUoN1kpv-BjCfvH+59<77M}yDBjOd9L zyw5b_`EM$y_qQ7i-JXS%Rit%ItSCLFni)j1L*aB;9z2GLu@O`*R8*Vv#?gs=#IxD- z?zM)=o=a^Oi6X$FTFi~yvG)WKbN}=0!96!a2LkGy?NOu7%YJO}00Ss=F((3emU(+j zr=<7groTj$bs8w_`yH3N@3k|7XPZb&b{}}L9uHH9IG^!5dmI&Ax~3ia8K-dFz33zC za5B-d90VQo#q-NwTq{K`(=1p0YjJf)TEFq|Q1o`UWDxLO9uo)R&$N+@wjT>3h?~RH zy^$Twc>f^c%i|wv2@-{IBNPtHX<>v<(a}48@tlwkiUvMeQamDddJ31l`>^q87tZPm z!l{H|y(o)9sTR{N~QiO^JoJ9Y5zE z?^_|6(Zh>QuMGO$4g`Gu!{K+=0QW-rP0@_reEB4l5EdE9K`C7leBH+2Z0#o|`hNS> zJd%CUwt`5FUDnj5Eqtj{uv6pV(XuQPC+>nBbN5@+jc-jaYXEq}WhE^F5_YA=n-_i*%$+*Bse%IWNJB%uuZ3zRVvdasiv%kMM6d! z%!W=TJP%L{9;KbbO&tzXsfN)s^$tvuZs$Mde4YH8u4NpN<64fx`w-(_yw*1$#c|51 z?jjOK=6>ioPJWSO3*&9H-`aO)QEnj;XCM}iirHG*seKb26Yq8hLg|N{Op$+B(bmJs zX^75&DOIaPs{JVOyxTI#zJACV9fl|8W>8vwd+Am_DIjr00$K+`O4YAU1d3Z^KQ7*i zrPBqA*-tZF$d*49_%PC&Eui^J%v~D)P>Wq<8QP_EU+nV5CABq{DqQteg-7dNibJE8Otgx|k)vG} zke5MZH}z@W^^f3AkI0*oHY3d0%&{YhQfv@t(J#Etg;b%3 z!C;=Zi#sS|Nt8Uq(J&D#*?5^KF6#J8Ff1>MtF*{Jrp?dg5bfDXoJrn7B9YwXZ!rAR zu^g>IfSdM?J1KtN0lV{?N*5`mD7@ zLVAK2XpL{YDF9?Kq*T&kIBqY)aB|2K{ze$4VA3JPTTx#}bMRzTsABx-F)!b-WwYHt zv&?>`wx(pjc3$v(`&m=sIWiZATn5&aHa)V3w5;d-GbYg`wG-bUsNvu$3*6RjDF_(c7pNd?xULd{ ze5F%418wc~a|rY$cMH)>TQK)8rtT}vuFQZ`y^xKueL8{GvsjYRttmtXe(b1g-5U+}-mEh(xkjlLR&n2wZByA02Hj#~K3 zvBapEaSEvgU^26lYGx6h8SX{CTn_EZ2ZoioGHo4F%fRte(XHgb{c<2OV`uMg65g11 zbWBdIp@FjC+1r75rt>QWqWzYbcP)Q~U1+a=in?-nIb-m}sAS;mlZvzUUgd9JZy6Zk z+m5G|!+CmSub_;~5}w8VcOAJ7lgKT%zvpzP9*mLine)FG3hDJnc3{6FVxNnN={ByO#XgR+moVh-XAY7Zr_>0&dqGznSBV6zPh-gM=_XTEb`c-hl=_$R0R{9 zRQ$B|P^;$pCKfn9Du?#;sf>uoGjOzSd7MLT)AB>shlVCSW3b#ru!8vJG%^r)ILr>i zA7BnSDQ<@;B43he90XlmJfWwXpR;`7eh1^s$Crg?Zdu8$@%Hlg_h9m2__?4*P4HYB z6^uS00(4@W52Fh=o}Ml6Mf^VaTQPJ$%F03aLxni-njjjfs1Q14n-%~r=k)do@bMnh z)-98ed){CPX{s1BKECLzg3U3? ze5(4kMR3y3s>>1knF|zAKN#%ZMFLxQnZEQCY6F>FO%;~IXQ#J7!Dc}h<)=ny*wrcn ztO{W3?@WF*ppz*kA}r-Q`i-?A>ynDArbeeH`s^OnQEgdOLI3Gk5=SU?&cEhkudB9M z`|eCRI&M8qN)=wzG0F8I<+mkABi#CAMDgur$h53tb6RMrpXRkUlfk{8DXLc)eNvUhc=Dw0WJY>xmD zzLN>S z1bVF){L}&KXtr?qZ=6-$@YRA%c^VEX|B|cTp?| zp5DH`m}epynoZ!m)w7)zy>{r?{!+>J&rFp2z=L~f;e&!s{vWxxT;|6IN8XdoCV0MI z*;!XBHvP%*3008#L-&oBeWrDbj{^j`D2|I@kNC`?(#CjsCnMY-c~Ih2Q$y!Y1cR6b zrUrSH$RhWMiB>s&zSw>lF_rNf|a)7BAheV;MpqodvuSwPgnL z(r9-Ti|Xd4s)Eh}_t00j$v&y-!8?BIb7vSgzFyfu+gR&Yl+{DL5>hHVtY%&!3=1ng zdQKZkmQQbMTS=%p-#6Dz%fKu-X2;#U8LCrT7#Xxk$4o}XbaaN}6BzUL$88*0_}qBE z9wZATNt&Dzq5J|P-oCi@%Sw-qQxTaZl2<14PC@dpTzHtjbhRAvJ;_Yk#G0i1%sW7E zaJ)ddt0Tix+m(ws?3#Qy*4H?;-y@;~QC2%xvEbA-0u6MZ@uN{;p&lOAI(3a0FClqt ztA`aNp9^tDRg?@hJQJM#GuRgoVRJN1#{PY=J9G$rM12VD|m%}4mhNO&rDX22g#46a^LtU96%F3g);R;}Y z++lv06LR(o-$?TKw#$1Op+6yFNi`rGp)3LP9ACbhO6+zz9l5PZS$15?6&n~bbg z-YeKD$?Tc8cfjd^pO3%(j8Vphqj}d@S3}i*1)4O~-z=^z|H-}B+`>mHxuVBV#*U;( znnIVJ)V9Y&Fje`i9BvEo(7pTmvA$4mdLvhi6yhwEQbdKZMj8p;&2VpsyfthIy_=YT zU^a8sS8Uu@8eBi*ks4op+GwyhI^F^{ZgJ}}ZQV`3MMVlQCcdN8=6z6VQ$s;RmC?d< ze8#PtY7#>1rV_X>d#OVWd|k^!5DWjtnFZcTRnmGTo2Bt2z88W$)My*7DDp9f0BTE% zqI61&dt8U&WW3sR#%iXQ{(Q)3C|I28E(v|dGuZRBC}kTbHAVT{!@}oJE>Pn zQkGYN%d*(1a@dHhhCWG|_91OnHmJbp?^80efA43zxO&HGKuZx)j6125_GGiHmmf{j z(=Kn_+I1R903gW7JhZfznX)Zjd{N@O?`zq(!2c=WJ9I;FRiA}A`Ucr2acv3RTY<4P z{6eNfn^kh&-ngRF26g^&%%#R}i+ijN6?8r?sE)FBhwjg4nKl@kwz@dcpKSRaAN(EG z`am+#zj>?}nNpc;wq^h@7@DUV3j3d}ob#m%E7H*RT)tz-)%v+uRFBkBT zq9#(0n`C$sVcL_H+8=7E=&STd_S9>Qi*8AYV|J&F60a(*;2U=4bgd{x(7)&lHs6!p z+*vOyD=%mnBy9yB?ORlUh|j8pkxiXHAT+d&853oKZH(pjgQ;9?KXPsTJor13dP^mK zkJmE|U+IxksJ>W?`^oEkJBl*3M~|mg%=$T9<`FlYbZdL?^PGRR`aE;~1IXbxMk@Qh z3({T_ob8SI$+kp@&0?xn?U}z36IYo5eDC0M)BebOp)k#j44u* z^p!kTwim0WUH)eXlnlt4!{V-h21kZI?~4*O;?dg8+-B=A35!QB;&ZI5DvCG%cZ^g4 z(@LW%)>oTEPTM09_#7fFJCp4RBC4mJpa|J95r?>V1lcuJ2lEU}bP>Pzp0B6AfA9XL zyevP;Q16)+ow>l9IffbGNd^$~jMOEQQ-PW~8`u-#4s~@)jA_yF#~tts@>`Jr^5P!< zOuyCzaYW3rR;SC~z|XHJ*s9#1w4})W!jr<4T0+9KylH4xQ;M-XUtidq=U!E&<>_`0 z&ECH@As#8jwcp0~e5m{qjM(;Vt~$w>WOc^2dhQ>YGMMKkS-fa~r*(%HIsVOz zTtI7=zS(LvrzBhw3^o6X?3COid?tt$7`rB?7$&gD>8y8!;I@$+rWP9Wpsp)s9=*Up z81c-}XiI(A3Kc_2T3fV0&nuJhhg-|2O%jvmx!BZqWDp$OH!qH^7OXBQiO^HA3G(y5 zPxjteb6;+<&=WTBM7|d8GCVx=G4z!B!M*U+nA=qXZLPuFn@6fl=UehY?1+IE#U;K% zi;Gq{&yy{=mQN0B$3?Cdy|1bh1%tdc{_&XD6rXBvf54ys0@ZFyCURb2i$cgPsz9Wa zK!KrIO}n zV&0ODVU7DtRf3q_K||6q*n=nMeK=`-cXGb#tD8Ybf9KZi;fhLg=EqV}j1MmRho8SJ z9cd>%IzDHvl>?#$9^bwRRkd~bo4C)iv$5xQw82<7=_L3@h>B5mWv{Kbp}~hb8eXZ! zZ}Xex!O8fzP*b~?MTh#DRV}L7v9jv^gM-S7WPi+jTT_#)C|~Jew+U%OFwh7=;zc>W zD&-@3ws{Oa5W9X7%d&$kVv@g@04&h+>*1W7#ZP3!3rdti(|f`IpS*`;A)q$!^q_)4 ztoMx7?`UQJTa>6s!xS8@7SFVb+P^%~6#8fWDfvdJ4p=ym;R(I)RanDOk39YknrUOu zqM39&zZaln+VFwbpSp`;@wN!u?O+D!@Pc_K!ehz~zr;;RuPH+V`EbwjxQ?s0i3*P& zvXI2SbzSiF8Jym)?2;su1O;E{scf@9Ei&RIUT+SB%QR2!k^IT+j$^Vhjg1AW1bha# z7c2`1jDJ>NR8Ym35kA#VVo0k^)VzQ1f}uVE0R?~GyiC!}@+qxqM?p-V=w{05*Ge2* zbb7+Bf|1{VTtC=H*AL~d&XGJVNLT;Qyv5x}c*jyN$|J4M26+8@{fLD{vT5r0-eBOe z1T5+QhLVdR&^h26e$yJc_~lEa{H0f)p{@cW>*L&4aMA8Ln@ z+;J`ylD@mWf8;{HKI4cU4)z{2h}Xx*PaEbO|XGCP=7;zeOF7&KPb_`F>K2uJ%j zq6F_^=pND0wy%^smS0}%poKP$veZE4&%J#rI#lz`l>8mnEfLk4C;J$*lcdjk^m#p} zDgKCJlO6=zzn2S82%FxxC$YS`&HXDJn`?BT-E~@0JZyT#Dv831Gh@3PRReVPvB0YQ zw?NBBp~u$DfM@il^!gt015Q&5M$s{z8*LA zo`Rl*K?qJxQ~(YR*&U>32cBSX%jf6k5kw@7$(AwCMygwxO!3yIRp)z$CZWciSNk2b zW8i{MpZZ%okRFboYpg#8>|bYmlj~>^zRHmSt0(%R7PoeG^s&WH_(|~`u}F3X1;H4_tkb@oV>-U1!4eJX6K~jHEX!nFOEJ&*>a}#g5*RvN$vhpQ!h6n z#Q5Nw1R%(ya`Jgj9B}otg@T6p!>eBwR4#Vn^<7sJeu5dZZJI5H0||Agva-|~OPG|j zw9om(A0VMCVspS|s#lTxvevxiovN^o_UO*JZ;KX_(36<5WKpnL-BC(yiEfAe`GjJX z`-F@?os|paig#Q3rT^?co(b|&Sh!eKkX^Qwco|P@nCTHcef*+c!Q-j4pL&{6$iNSo zB4c9`um9*i>#4LM%wTTLoSr_-!(+cI3&v7Bpmuy z@)ekHTxu0fRUlya!yXz1Dwc_H&`sVn>6T^&Ur7H_rRr?;^2+AU>eg1rd0W&ez~#>r z2}@VKP$XZayv3EsRAgdTV_*CKXA(j2kBBGC1= zrG$lM!*Zj0f+h<_3?haB?Vnz!8L*~C=aGGxQ+u8)wx`}PSe-namY@G8y>w{_P+WXk zODLtOSiN_xUDNI@j!1h}Pr~0;iIVkZ{An7|)XX12N-@z0*tHI)>r9oXgt1np^d=}2 z+brE-w)eae>IYRZ!tnfT)}bzz{A9uY%iVcS-zlh0O_RQX_xbalYm zM)}DJ%DE-_TePDiz{!5=@FG#}>L$dVKWNCWZKa$uT9;K}#6^aB{s70`7j>J?;5k=L zZHMX$<8h@>zH^D?2v}3qb^I)dLHa%pqaf*UaI@Gie+)s~A+J6wr*aA|s+!0m?{HH0`wfw##6Ee#6t;aJ ze5|?N|Ks53s7RI~N<=1L-`$RbbcwW9#2RS47Bl!gI5;P(_j)@)#zROzApGdCbmXm) zQg_*;?MUCYG4DDStKfF7mlnS--6{+4?<;;R^YMyWHgxYlS7W)*zFfJ`McI)|-_`cS z1Dy{s_e!1rbqr{TQq2BYU2OX*K=gq4{!c&?)9sjO$8(EOkyofJ!A7G>BQO;9L)C;o z+;?@jR=Weu<{&Ml(-wZ*pST>pwd(j}6u8EirNq%!inW&fGL81n?Fb;*354RY^Jmz$ zAh@{a!fW@ZfyWyv5XUmsrIykq<9nof!I(zA#)Zeau)53A+9hkk?vy>>H)_UKZ%nP2 zFsJC%MaEKI&HxrzlS`_j5OadG&t~wKI(&JnrZW=00*wr9K4F#Y-@Vyp<)Lki&weD< zW=x}SwrB$kBmU_qsgk!xlD^IL9K&*^O+n-pD-r*eV_3me!u;92D^fU;KkcyuBR5RON*g1p5Dund5hZc*OudKy^FD%EUl zZ*MK#d%t_|o8Uf3slE|m_}?hMX>A>fE^p+ga#()Li(#qzseC?FR7WI)RXwJZI4*m< zSeC>&!dTLuL8=Npb6Q(^oMat}vMaL0Ec0+bPi3P#I@&ckAc;`ZKKdpGA2Zi>Fx4iN zu7ZH{iQdy8EyFz(Wfd>VG+6n}Q0loF}5r`=NeG7e)sUXTI0Vs6oew%@b zZ~2{K^26U`#JwC%+*L`_t>q-H%4UOMX{nC(;1K)Lm(6aKW#P}cU%lcK9TwS~AOL}c z%|sYsPLHR$;Ae4CFtfQhVunWO8eBb=drL`w{Leb=Iy0qOja3F4UI(*WVQizN;8^(QXIk=8I<`#5js;ZnLl(Bo%&;Yw z`JChf7EaecCS4a}6kB62Uz`6h$xX}oy()Qd+oaug?eKP!G0In6NbAvEZfDP6mkHN# z_GM=Jh1&KCB}eG+CjD}>5_ico^f7CkA*d(EHjj!#vL*i=dSVdw0}wh#fB&?3qMJ^B z=He@B*}MLEDaJcpP=MClF6D-dw1Mo#Ti_%h!`jf-4}IAV26*|k90+<-F_`_zO$ym< zsEqign>$z~)oCAJqSHyw^q7GOUj3o|dL;Eklxxp?C4Uq+8{gg2ae6ml*Tw$x&ft!t zt_5gnOT_Mo)r2AFeGm9##|)&}dq(}E&ZjnIar*1Xu_M1O&!nW&lwT#~Vn={KvhGR6`SK6-BfaN~8=70{lYyj$ zcE$sNZZ$H+0|(wUYyc`vkV1QH=YQiz)1$Kr9ut2rvrS2b>{dS`_KOrf@e_1=lSUJH zKjU&2&CtQb(OEN1eZEggn|-~fV}t5l-Jz-rZ`bye5CN)3!S<2~^3^$w*6i_zqj0wLzFn^@1 zBk1Ax*QE&gI+6NqeASES+KFB%s^_hSO--Fj9G(!n9{K`K>_pj9h=%>EiOI$v9}D9YIP z7b4Ob9+%;nUH%JV_%Qz4@bVWtrC(iy>bigD8&VFCosm(cSc)`G+e}3_$okX8D1YR` z$djt=6C8GRyc;L89gXeHk@0?XaXYokb-!Z&+Mn_3S?F5?4)CR_e^si7+~zgTAf~$u z)^&bGT*%*hp<_}@|9{wf%dn`zy>E07MI}{08Wd2vhi)X4l+od(7pz%v*Z)_yTs~GoUF=i4xJ3V=XIc~P1z%Ta zD<)3!6?(^mB;0dGQm4k}`%<3CMGNo~(x51e_n*Pj?f$7(*MceGhQDWd&_?!V0@JUZChGd}Zn`^?^07J_Ub z<)nl|37s&dcW@Y5Jt3!8diy!QCBX&7-eFa>&rD7_!!jqNYg0nQ6ayj^ujUOOYl-M$P8bfuPyciRCIWwTz#VT?cF}ucCPTR_T69KQ`ol3)sd=3)bKEq_Rvusb zeJpDsCr6Gp%Hpz~wrGwOVPz%mX-qP!Mf7LV^lf3v*X$4|EmW!3On;yj_Ov1+fL>D$ zbFeI@_!#6B8lX2^*UIH9uRFgox*CRu`hsY8+c zzya9+i&AeZ?xoZ3L4NX@hMK%iO&>&ouF={Hf#zSpKLaF7$f8J)Lw?fs_6c@?tbNk%oSi0#$D9PE ztQHX7V~boVz?h7KGzAf%Aq3Ro!EU!cKS;v?Bywp<;3|m#x&lskusP+TdxJWO0Q*9& zR~i`{JT*Pt(?dl=cjbo`fM6-0;2FJU$W<$!Sca*+L}_bF)iagBg?r z0J2}nbL@E$x8f*;zfwh;X2T1|V;u02Kt#m;ooINg8|$AkolOEwEau)XIHXMrwukty zE)BQMx*&iAxW(wOc>O{!xf3ldaXfWgMQjid0qbLX0YT9EMiLP2a5rKKHaWtvOv9YW zrtlG+c9m`qp?cR~Cu~j<0#~~_AC&^Iq88hO&1W@EPPHyqpEc&*gzoF=pnXT$ zp|!~o^)1H(rG2xrJv&54K1WBz4*IZro$*UCdSf$YV{`aLy&l4{EMKcGIKn#0Tk!>c zVforyYh-eey#^M&aL1WrQ6qwjqJfC2O{p|=WJl`xb|IPF(y@~pLh2C2*74=fpD#n; zTB>SMHv1I~+d-DE&8L?MMuc^NOq0Zwi-RSUAIB2`S_q(GW+3dNz{qoPi7{CzF*aFI zNx_L|@mEjh02w7u!%$veXRT^}Zdg^#fKd7`7GtdMNCZD6)s)&mAg*^@$YDgx;=5}R zvC*;`Dmv!leh-d$YHH!u1#PqZ?k+xQjChum?UHLrCD!T_j3pt=<6R|5;~e0bhBd_{iLTCY{$IUZ2p7v=LQlUJN{F& zVIhy@kyhDx1>{;GEqPVBtPzcBWxL8}Tmi3Nh=hicrv8%F64X`Qlu?LIuePlrZB4G1 zixf8bVxvy-UM7x_k2C{jl;zy_SZ5ZCT=NN;4UMc!945n=1YGqYWjwoEj^r zqT&?5z+6fS6t?$fAz&?_mz#71EThGeka))Qp6Ix+~mMop4}PHqD8e9M1g2G&##(V|VbLv&Sg7TpmwA;+cIAeg8lc z^6U2R&oD}7I{r|Qc+UK8nYC($uWTPrWy+}J&}uhHE>Svd_vB71Dr>}%yjkEpxy8#o zLgH=D9Di?YET!#!rrJ20*|Q$B-nXb;xoy-3wWoab`ZdgHxz*>n=k1XgTI@p~1611u zJ|4!e3KaMfGDd?92ZzgKG0LgV8}Ob;tDNvfkDFCr9IY~*4`KZGV}C*t=?K1r$(bmY zXx*6?Z9z+#-8c6P`jJw9y$Hg!g+(gHLVlEO)rtT%b#R7UfpjWo`F2-ojmCbPQR@Ac z4>omW!ZcluM1Rtak^CJI9`={?ahz1oo&=M%?$_0eHud%OaJS@$hzN$}OKK{r+9L;5 zQI(TQC+iEd?kePHt>d)=UrPL&ji+3?iZ#T=JiSX6X0 zW-M9AB+$%Z@v}JF4^iRTt4pP~ILyXqH7*$zU&vP`wLJ}n)4YqcYE)zB-4naal0hS~ zG`>FE)?5enmp zJ@i`}u1*{eX6`OmWk$cMD4gD+1gpEJes~kOU%P4P_-s~HS>y}C2Vzpa8zyv*h~YQH zP2R`&@j09$&UTy}9QJz?XH%uC%&H-PtK_v2g^_Z#qdRq@RxUKZ`1}w>e^~sNiLrZ> zM9tZR2_PYph-n~JQIG9Ua;B(!Hl^(Z%c0v)2GCi)`%6rTWtO9(LJ>+r)vDb+UzF5x z#k7SW>EyEMr(4*<&(YAMvnSL)1O*|>jK4V~y203@C<*638)GTVmQLdM@~PY~FfcF& zDRxrJm5hq1hsWS*6aufw9k)^h41av^jYN;D^~o3uBVH_+LJaovAELmZtr(k0BWKKJ z1i|o?{4?`ruaNJyB`VJCWZ;8ftDsf$9lF^^aSQ2Yi<$IxF+WtiHTbfsn%edBW@>J( z(eJ9Pyl~EXmnl__ccfg*RqP?V*RI%zX0N~%eAgz){HdSYbEFbChf*cv8{8Yzm1-Iq z%=c!_3Rxu++15{nnk6M9s;>*~Xx@BD8b_`z9g%2pcXz)&hij^839c@BTnzYN#4Su- z@ViyJUhI!#ipeI5XldPZTQL+BFlVpi%A|ViM5$B0mQ$6jHJ`4pt&JUg5*V`Qu~_Ju zs(yOgB8X^}%sef-w6(gbDJOS*)GGrp2!(^(j&oCOZ9)UJ!Hf-E8kLyuplcISo*xjBYNvPyWcJLA7^8RhAxxBZyex z)gqhqRpIwJ9W`~Cyf6j6Jy)YBG(8-$s3{F^xxICpFsx7ufz~$)B7$Gmeof5E76Ioa zE@tB^2Bmt`9bYVZ#&cgFoJ2)dVSFNBn5(u*jfy&ndC$!JomE>l9A4qZ6?3=|; zX!ryDD*7WjG1z#i>Zd(p~TRcig)dQ_(IHk(8={MVNYu7-CP zi&f$#>ks5k>hjd1>0%LORE3WhR%pwcl60_Oot&i8`VtpZhGvTJ~c{ji^#3MzA1>lf& z8~tUKcn-?sF#+au1D~-=_7olfzU=<`#;S49Mf+mRRELl3c;JH-td%{ri-cd7ure$Z zk2ffO5HY&GwhkGnBMQgHR)b7of26=oCMPkuDIO7`g@fv``eQt1jOr`o15|~VY3a6I5sbzg#MI9ENn?bY5*S|P;+S`M}y6EWW?5wTxJYP6$9cr>1fN@Y>z6=ZsVs6%U z9VSklDZnZ-MH+U)uN+lkbcvSohZz0~3nCnzwtmMd?|3i~^3ig>ZeH#k zHT7}GhY}ndY@oB0oo8DV(#cYm$fgJPEBU0QYX<-PSvVWkc6IVn+sy{v@MAMoTR|0Y z#+@HDKa^I!0#q-&gNYZz-iSGo$GfVpKTI{>?2AD^^qttw3oWz8JLSf(F<}Plz1Y;z z5fN{jAMT&u(NR)VY;TfW>@Fl)?>9Je=OcXh$aSs9G;+Sj9Y)MKV~wrE(o?L($Eq03 zs<_TU{{3xUxcI!=4BL>^h?9IbFjw8(-dUyCM{_~z&D$EJFgV*OH5`r~*&tUh}- z*W`Xf(8ExLTpB5l=Hh4hs0zjPLD~{)U1#GqAL{;`!^`&pBO{}3#$|l8R-Vk4LK63( z69<5Ng)A)>4wo}Ah-QrT=kkl2@2|T?MoKL=rD>Esj6Le?;q}@cSF9lohbt>rC&b`b zcF4ZInaJi4#e!`gmZ6Wbj+3>$xuf{^bWVumbvrkf$zR}vbxpSY8`YZTpA=lgKgeCxxscb8;yF-XiQstYo-1tlfHU9In#n0jn& z+jpnSbATm@!_I_N(-j{xH7OmdCe&hfe-r*If3l_ZWfyuB&c?KS)BcCpfQ6#R;kV{} zj{Nd5i+mr-?sZiqsd}^&8A6jc`T~PzrS39hLCdl0basw+j;^FiM6rihSM3XQfJ}-TO2xGMXP75ujOJE82Az`cQRNxp;DztTKyvE>nNihBTipWkFKNL z+2QdiMy~{~e*l6SP{9>W?r8Eh_Rfk;`k&Hpxb7znC|4$Q{1Bcv*Dzx+E1)gCV4?af zljH4e(G6A+i{8kC=b)fj$4aR8vlkZ7(u@=+aupT#+<@s_&f$>7n_q%-Tmj3r&OChD zyKDUrEW>1eRYj!^P_cmiP?P1t{iY1DRW+SPjAZ*J-L_rhv%1q=O?lNAw-swUqp_Vz z;4^$B5i7pR8kSXXEV6@pJ7Hp!me*>-ixcJikisJ+36;rGs5np8E2MptX~}u47$YtETOe_&Z}S zrL;*?%IDpnrG#E-z8yHutMP1Cp6z&0JSLKQ?F1EOoQ~~3#End4i&(8BN-RTF^oEvo1oujS7&i;zY(VlwujHojPE z!9(zUF>#7%w$L}o^F5;Q@@b1lyw3)s8F~H zdAcJmJB6|`ahS5EYKqgXj)@kVPt}jd%Dzr9A@vg==<NOg~i?Umk`-c>tx24#BE1R*JwxhWjz*)T?&nB8a zxpNwXuPBjti|`6OwYFi>yGpgjiXR<;0BSjtR+5d0wvX|)c!6&oM8Foa?579-IjE`z zoWNW7^eFNJIST&kFq~kSY@=O*@M*!*-A1bNEZ9@a$tYXk-Q{Xm3FfLyT&~mgCGYi| z*@l*|J(q>3>2Z&bYb53h!63K&=?^A$nVbDph+X;U-4mZpejwybL#>FO_5J-;>-@Ay zj$xD_*`Ltnv-3KZw>VgCNB0C^=9}f*cGApv_}k#ZhKkG65g!WlJ;m{qQeEdBAu45B z&viU}=atS6Zr+D?lW$q)vN|RBu(Ukz&xf>&P*Go!@Hs}PWdmsnoBa@*p8@+^C*EQg z`%`6*oj-NzmZb&*2Vxhi=aqo&k?6bM1o<0on_8ad1Vn+d^HgsFO|mY$-p8bQD?>91 z!F2GXM1N&rg;@G|*W&yA@{Y?$hs||sLQ%;Y5iPRJfL1V0tc+cBG?q~o`Q>we$DL{R zD#*j4=jH7!9P_GH)hLwYHDHLf-;q_71@ihdlr(g-0#sHc6UD~MGd~lKXW#swf}rB^ zZTL*4mN(cRcO&%SuiH-hvVX8$IlfX_9LZmO-l>;MZ_~Kt9={o_6eZ#ih{?e<%4mEU z=Tl!j?m_#;Mf?Muy7U1%bTFP&%Z=>ZX#R2o z*+)sX=V)jjQp4D-I6(q8uV1|;!kbMLb-Zf~@@B2k9UlhnidDc9z%IS9jLdR^aQ9V2e4qf7x={y#k?*%XIw?n5>!CAG4Qx$6)cpa zG;6{QM{8jlkr&>@>0Q+Q=chlHncqnh$uWN_8rbCEMWOV~JoC$V0s# zJ+$iEC&_YS@OIRX%e9lEF7(|h$=u(o{xXY3MVnLJysIA<**uQ-X4#7JFGi>3yR4-V zK?43hY0IXsxH;=xokqG>hnjWcr=SnNh!Q6!Xz~@h`y?cu2({74f0T|F9Qm_PM}SX% zJ{FERP~<|ze5nto*)0HKi(RWN(!pPZ6>tEsnTX`OA2eNgvGueDa>o=New=GALhNY`pIN6jS9 zT~0pBmd&hRbNsw<>BzimO-)>J){Bq;LQb2qiiX?MQXi?o&*8|}RXpQ6r#DqrY+-;| zq>cgaG)jmuxq#DnO~nOee?Nyjs20>XUDpTRa`3;{$7MUuaoIr*3o5Q}DXfSptk4H; zbdTT>m-hRa(RJHDcKn^E-iUd$xs|MIB3XC<&BI$T8r#4@hLeZHGs5&@zwtVr+w2$x z^&HwbC0C@B!fB&_GP7tr2PEH;)~SzPv7pH)F-{bBQwQOS$|UI#UjR~$qo6W5*Y8Mr z@gx0jz}B@5E)08%S0vA#u3FY63nkT^Y;5X}t8b)O5IhgV7n8`VU-v)|1grFZrG5s? zLK=3@;5}f*-yvj2FTM?XjdY7jrFIs>HR%uH&c2!-c+f1klr{)f1JbKu$5R)&>)2A{ zc)xR+56hCrS1bX5d^#;zV0hRgnbRZg(H}tYh**PK=>HxhljeEn-S14uPj0D@CYBy& zCeX)0Vl7>!Qs5JT{to>77(ou8_VJdlvVTni-3|nt?S+Xm6_8Ty75wTSg7N=(0OmmW zfT_%nvAif?oGgZv1(g+Ml|N2*I`VUjumS3lWq<+&)cz5QF|d{vw!h+d9i0Ds_=xa& zB)qiIM1OJ-imT!S%({RA^m|(CM-!9Ryamz7j~Ds^AOE$d4vv}8ju)ISwO~UFYvjLhHB#X=W~J@zbQnk;;S}EQzB1h0KHh*3y=Z`ftkEu{Y1;EJQq-qvckY05 zR(q7ny4}*t@Rf@ww?8U!@@Z2BW0Up6^MW#RBoLi%TKe6}i=;NotFODT#?!GdgUtth zQC>tZL%C=Q*w^ri){=+sdG$&-L{|-`Q_83ywWorgxYxH{zjoZAAVg<(A3#h<5JCbe z3zX0fEuO^C-UtkL$98(m+uduLkFAK>g9iSDJN;lXZZXzx^b5-k|3_1HbT~>z%rLwc zEftz*9>N<_1Wp_{RU+0sRjs(5kN41Tz(Ml@P>5C%qWky};!Z7X?1}kge(o=(f8Ipy zwvEGOV6c%x@tO%ByF^Cf3q5gy-0Pl&I42_rumBw!@+QWKzme< z!tsv=oeK@?L{{7uXf+GGM&vD^DaW1KXj!kVbA8eICjE2&s>4{K8$PNFV26Hp0C3kx`OUkP^(V{jU7U6vz=R4a16X$7aEoXD8{c-^pT3x4VZcR2>g$MSv2=AlVhIh69pAcoCUU`l>LhCD zxYC38#5+28uIYX`Hv6DRC&c#T5Irzp1LbMdy(~0J%|UDrDXx8)tG>qh2FcpFp`oy1 z<(3d>GC)wh9dgV%O5%$k0DHVIp3+>c%-_woQR*N0uDTmsF!KvMw!Eh|(w3XzAr0rv zB1%dft9(2M_u=jSbIfos(YEeEOEo?D#8 zSZ4XZ0&uOGy$XVkN82>MCF5p)vO76OLk_mTIF;t~oJs3K>nTR?QR-Q?mTcw|;Y9Sx zd1q|Q&M{|*-F#5Y-A@)Bt@z-2x0jaY)kTs3oyen*j2Fbbb91Lu)S*gBNU^zHi(hK- zYDK(>XTj9W$fT4wI>K2jGi1gO;lDqw&lF%Z?@mh-@Jtvj7lVWk%jV0;gJjwDI50i= zI9Yjf?DRFvl|w|iSDT*i&~Ki`+l>~O_QBf42)N_h`zBLK{o0a#CQzHq!`=8EIv;pR zu(3r}eSLi;V(A$e%uX~PHnrW(*CJ)i#!OFOJ=F_uaB(j?H?`I1cyw2siV-0v8+1zA z(J|P4&}_lwWFNAOa``v78V(zvC|JKXNedc^ppVpsgab`5ib3?=(JOLB$`&45`u9i8 zdpUz?9(Q{T;t(LSH0y5X!8Mc_dEAnXy^PF$GEV1bF+h2stkp`P?NNUi=&x#_?&n{x zE|ML^8W{=D?b9Z$KIH?i5f!Jz!cwzdGhjgMypvte)k%?#4;*QTH29hi1MA}b9vbgs zBn|J}&;i3$k&?WU!ti1C;h}WB<31Y@r0)U8p18j~g)wY|^SQfTz+qjcl9|60<-EZcWt4V+UBTM7(V%- zr!eZ?0tlxlX1&ACb&C%Mt=q=*J>vBun?=EA(j2#zx!MylE)kyNttS)|6v@&TfGSfi zQ79~hm)QAKmm*L&Th8<04&&xx&!~#`beP8oXEHDEMX5?sQc|7URsGlxo5fvMUqEyu z#AJSHO+UHZrMT#M*eYfuotn>XrD%Z1Dz{|M12Wzmu9X*yj*4)Ejm2+b%5MoQ^7w|{ z9Mo7GLmBuaR_lU|#sft%Tv)icxmEuRSl}t^-3&Hf^s5Sx*>+}^a{xMgQXdDi=TkczyG#oQa+1uEh9Ug*lUImI+ zT3UivC|~`6ATQRsZ_cwEWV^T@oeb?w*B=0shx_5Z7=pJqfOQY?UhD#F!hSvEyv|{V z*!@&DVYJ&(u46b?ro=!ZmY>nc()#moO=%8{yMd>XhnKhc_IPI?k!^Dmr{7)2<2L@% z?_?W{k6hdFh631)BJ{oSR?8?evsL5jLW+;5d@v%>P9lYLlgSg7WNa0EkC|#nn2X&& z64N}h$I`F-*Mgo$dQT;8p4iwqFokVZ)YX;C|2&2(FRG?kPFH2-{E2#>=7*8IFO z(xx&IHGM*Iz;51P(9J+uruMVlX34fz)XW4)$p09?|0W7=_7`hxV5jivdFM@3BO@aQ zh9Pz>_fOFAUbD5n1y$m=#DEvC9L(T|dj{N7c7_`0R1)L!Sdfegb-oGq`;2&Dl=hwwtjFqI*A5 zk+j*%WBS>M8GeMYMOoJrK;`oEyC3@Qm9Nax%Nx1myX7uzkK0c6jX=Fps!AQc9lM+4H&oRSl#D;cptBbyb=;iKR-SU z$ce)-Ailq`GILSmg6?gRk}|i+^$$&!s5vgLq4ufbW3?YS4b*Iw2^hQh^g_q)C_w^! z?~J$d__Ryi7Lr^cmRcw4y%#ASx9PPPi)Ja7eEObydys*bAZFd&JQgv>62QjOWI@n$ zd&%1u{~SfzX`Dxo^I7X`-$}>41=REQc+Hy#&?%Wtcvh=&LJs0PaR#}tf`9ZaHvCTN z!fDdUzj?TrgLR!-JPtZW=m!a$t5sJRa~J0X05kZbg#S)wGKMu~x!u5ukpK%hKC|1! zwJVsRkx{S1T4@#xtF_xKlf%pwKO6pjg~J99?4s_a*?RSGd4x$%KbSG|C&A`h5xEdL zG0)om{zNq!uK+w~4 z`+By@(nx9qZZDLcS)}Z%7p?>?9Y;n4DT@gRpC0D3Jfe!yKX!i!efkdMa`%|lE8}y! zaG=G+@?D>zD7k`fhcSolFUKi1P#BWQSEh=Y9AXbA6GH0Gi5bH@fp{v{{W@O8mMHJs ze&GkcM%vC%mNJjKy8}OhU%#SkFSi1{?{0=K>DWVVcA*Dyqs+#nl^Q(f!@l>pJahBL zzx$bO`tv?mH5)l^Z|>Mlzu{z)L7=7S4cnTLU!oiXZ`st=y`AIV^dL?ZLqkh- zH*`4w`cBoQZ>J9uTGrv`Y`Mn!1S&!*1{xX3&)3I&Lls=^1_s%P7kV{rOubZ;l$YzV z+NmDbU!ujODsQgrHX-{{S34z89RB7!$DqTlk<5)IJU}DAz0+Ok zLOKb|P+-XtWH9%&KB(OvT_%xjFE`cmcBwH;I+@Sm$`xXLc1T6n57gLu1Y#?%|D++z z3|-*!rHKB;^Nas1%r(yLA+*2!cyAw>yiVZwx=0SXcy|aR@wnd`WuDh)zFzau;;oys z7%M3(blLD#KHuk8fS5>2M*v%1aM>Sv)nQhf&(`$_Zv|=9`hZ^k~k_QPR+du=x+ zF=pyFwok%0fK?H)5fBwMoQE$gEN~T7$x%1nT5!o~(wCSNmh7jcwE!|6(_=>dY<65M zEQPNsX_J~0-!j9(!ctSU^@K8%at+Rxk84QN1Joq9r7m8gz7F~T0Q^#+qf>ocGKV_Rv#J&ytlTwU2-RLPgBgioP1pVpO@fR?r7eF&^>e0`2rd z;9eSZJjt7fnT{{ z{5zNST$%=|Up$l&v=(JENkBCt0Gkk+MadtG(Ubm(3Z|C zus~O)EVNf52mlQn6>$tD=Cj>}XuHoG zX1~tt66vzP+uI~5fJ#AnL-$85Iw<8y0!%BpmfhTL^CP$WT))`bK~kCQCQ6`9(ERXu z{)^Y%URGdyyR!075^e=8HSuSE7Qvjf4UyTm+RYDYvRX5l%8Lj-lA2O9SV1flGD-ZN zf6^w^KPF&fzb)22@&8O-Yc)6rP z8g5qyc`hdTS3OjRSFPo!=REcQp^BW!W3zi1?&Gl7)_5_*?Xo2xUIs^gJ>v)XE$dvJ zqM~EWr)#RRrYc4~5T9cZf`5vJ67f1+dcj>H`P`rX5EH&TtIt1qsdo9}OSQ*IXRlY< zlDcJMNKRf% z4>?#e7q+>%?ijpxbSWP^aG^;{N0*Z@JH$WS>McRGu@HK9i|BUu#JE({$7Y5IB9&@W z?M#ZD$-I%CR;5iFBxH=3ltf?eo2itU{^aMX4!yP#fsB1nKoESCt~eLYWkMe-L9n{M zC$XwfUtd?J{#IR9O9>*YkYd>1)01(e<$fbmYawc4Gjh+%O?ArTDGYd|7I?0z`hQl8 zMP&s>=ETJwkYEwM9-nS_%FZ5^w)6_Ut95)lge_VreZr`k04%-R*3}Pzex0{K9+)$Eixcd!8#;2>~+55_< zF?hvBr*r~O2zti=q;lAl^}$kYa?Mfhr%g+rb1r?94prO!yl}p}pN_Y9SkAH}1&28Nl zuPJytJt`H?lf@kn&PPOWQG}9A*PNGivNZu1+a$?Tw8_K;_iIBXK!^L!Jq3I8$Hl@3 zlbjC-gNVU62N$0!^P!3AVGDPXT^9~N@%Y2lXa@gGmIx1A{IIvT*LPexc}B=34PhK; zTRqBm@8IF(XP}_Vb~eIJ=Ck=(_H3*nA~{+XQs*BVW>C60l#-tF{Dfou-;9JJN)7dMoeZ_!WT?`#3&q?3tpmZb_Z^290BJmRN`kx!!#(Biz*Y{u0^}c3NIYR{CH&g55Uxr~mA4Yu%^!^87~wHLE25}PvajIh zMTu^=Zn@IUI};`>gUP&&CU^X%(LoGLG>YPO2+?X%2X#jlaTkY}r>b9)lFoPMM6G(; z+k-zQ$h^wW-B-#c|3GRC+8X``+llubY4#OZLs>&ZBRN^qUQMdnl9$qRIMYbmZdd@J zgMx(4sB#lgZs)%An|~g4cJ3$tu$&DqGJl4h-T0wZ+0JIW*|%IO?3=d)g3)HWTKmle zlPYg;D;C1|HU1R0OwjG5x}1CJE{8i%Z0H*lUf)AqKIGH=>FPQ-SoAEF3|CTet6JfO zU<@@OA_3!$0(9I`OUECO=~2-bw`0XQwabZnu{R#R6aA_kdniIaPu%h-1NCL1kETz*23K31KNkUoqwP=cgw zVV)a|e|Cy@F~_{lW{ONj#bm(R)NTa0nr9lf1ss43dnMmCJ#MNRH|K+%yXo{|Ht>wYL94f_U$vBoM>Bh%rtMFCIE>uLRcOk}3P`}FZ=m@jE)hg|{Svv>UWzJ2{cU1+ zO5JunL)RiWe&L&vq04+FKqdVoWJ%Ff`Fxaf_AuPNpgGIcW$%8Q-wD=IQqyY!t{xjrxZsT#Y$!^Q@^}?>8mlw^-kP_)@6B| zU%7-!JCQ9fxN8+=!{3RyfyuHn*p|;bQnoJ~{u$WXFDf>6+$^)ScSLq;Wm`#0%e0mr zk&CO;Donb%Q1a3-Nm{FI$q(m|B{k!!bOy)-4nicf_b_W8@h_5FHGo5r8rUXJlQdGb zR?S<_SI(@uJVKk8UPB`^3CWPew2iVeqztr#iN_L?8F=`hM|z3vi$w62Y>~o0X{-Q1e+sO1K^l*ukiUe| z|LvhQXIb88^xMod<}*0eUq0&}jNE_S_djp{e>->uDhpT(IFW}W&D2MGv;Ko}drDfG zSWWV8j~p1D|3N!EKB`w>u#lQoFYw(G>3^WZ*nB(ebGv$1ga8Q%BB01gF3g~%fzv*o zaS97yIl{P#kRH`5AztU_Q_Jj+N|wKG=YKnR1qx8Ukw`MmYRK~PW<`Jec-#|Y)IdO_ zf&^HSV8G9hFAHEjDgubd#h*Q%;3-;2!2jRW{y*E)Dj<8nKDi(e&intC?DgMsz5p{C z6(ADh1za7y)P2ALRpUS(8z?1>@TML|zTa^wE@LKtTeIcUis~-(W}E*o=%gVoS#!Lh zpdd~i+I(4~L63NY8zP#ll{;z5YFa6juLByU{MUf@1>w=2AW*-tzPGcyyu7yCCP|TP zdgel>_#Jh(W7*pIqXxZ9F07{jDlQRhrq7H7ng9ky;Xmg&;XrY(_h@W0&Lw}7`|G!L z_-74G)$r8F_a*sk_^7CAKO(@=gO-4~HaW9iNg--;)6lF^4S;7Q|5ms~G|-lHc4ZO@ zN{*@7t`aph*TNTCN zrvU+jq@^4T+)}bW!Y(xO)N7pZFIr6q$r%~J$S5escDSHN4pV@;ZJ9$@R0QSnd(uz+ z5Vg)UizsXyV<3TN3GnJ;ZEP}uKsP{n?nn-9i2O|1D=sr?I)*wU=b-q^zwZp=g%VYC zw6PB&=!S#Q>%4V-9yUKu#z2Aix_w+$QI?vH;pIz|&7(_HPz(AC{ItdwsOZH7w936U z#O>qq8c{~WJ9mgr@IYQf!#uh$0CoE>FPTMu*JM~Iq)!4FPeV!+*wkLk2-ViaBOtgrAI)~iwdNocOaE2LtAdjVJWQv9@G}wF-5qTy>!s8SWSq=lxGTnH{)ZsErD1u~=B?ZAmz$d_0=SvP#10l3x#?J=4U-skg>Al!yh#jHA@` zV(QoMtAqv5B@m#|tr)9_!rFN$qdp7EwOUMRbiu}2d#HB~9x(vhHqfuIJmekb{Mj&7n!nLQjDf!1+Zk9nt7|K5ST?Gp3+?h2+NwdL%8q%w*mz znX#$`5$sakc1~)?U&j;|Conr~0~V=Lv(3Th#BRU7Bf7wIzC@au>SKPCZaCPlhr?@L zuKM`+P?1hoLrR<%WHZH{jisEjJI-;qWW}Y0r|I5*!od59#1#-Lo~>E$;JT5YyWnAD zBCP+EH=9!TuFipf((nbo^zLklHjv=rk}noUoXic`IC84`js%^x+tg$M3^a}6YU?Z8 zLQKPUD5=@88-uA7;h)!RYgK4-{scTb*@Sg;cXuaR)pkx!LUtyKfDG;s=XhW{25rhv&IEs0RhemW3-9KDo;0icwB3>-Y zaQbzTcPHjL+f*3PubJc zrB+0+n|eK0@N<$R^{-zAQV~O3U7VS?@+wh&Z|p^o@ZY9;j$Ggt=_kF%KQ1SN zk8%RBUb$VgV?aG0lF{?$dFKXT>j30YJZwD1%F5brUtZe2BJnRQfaawc+R;(&02+dV z1qLqo*UW2l5N z>0b>y@?@)Gme$tnx0VC}gN7Ek9Q?+57z!Sq-`k~>9(jLpJm!2TdXr3Fy)6tH+IsFS{sv!A31{etj0(Ar@-u!Tyf zi2wzfvbR#^`q7mrcLbUkI#D_q9O#s=8YpxpZzNNNC4R_gcfKCOEGMf&I9UmD!Fv%P zoMD6c5$o++xjjpVjM@hA>G$}-c-(>AmerSWaOpU}FFs89_z>i&u@zn;`|4GyO*{2S zC9<7wO`jZ5q&l4*b>$_0-`>^ahQw!}kwGV00IKs)jKuY){7yCh{cs*@`F?%ucnaRH zq@>&1V1{808ot{tpsj=y4z|#9!+@cwh+Qf{n3YKciH2Woq+1wvTBM%;orKSgqv*Sm zz8N-J^=25qho|9k8;Md8Ged`5#6mYks=GKDzyYLHe_knt4LPwcDt;PrKwo14(Q!Sb zo>yn8ts~V^k3DOuMoTf;U_D#p9P2FyvXGEaa4@n#8NQNv_iN9s4AR8JWlAih zr%&~b491J}ilhsxTZ#9H&p!69+s601q)uZ!|KaD0jfE9Al=luG71|egUD*rObJ_8; zqN59`PMeZ6HOk7%cY78eGdII~j%~}QL;fc=|4dj|>`y|S^7Pq7fs*N3!ve72-21LT z?O=C8%RtBGz&3`(HCUB&O|qJpXtBRWt`D`2+&Uu&T~-UgqyKucL) z&rZ>58qblLE$(BmqEvsl39Cd9XW^)?G03Wxor0E-y{Y(SQo=^&Nknd$aW4wk_R0mWnUk}Nq&yPvN9pHz(#VfK+)`|nAlOEM*`MtE!@+((+Vtz3e4H$w$auSlUc5k0}2+}u|+!sxmX&ekDFV1GpA=9aHMt-q4u(qy6kT%Od+%gW}A z6tr`TI0Wr~q+Ac4V_$l`|^ARms5i;j00IDN+(U}Wvx(3cnoPY z+dMB;3tBe~W5;MM=HHbcw*eSGI2gsm+7{S}!zTN=GKLH>&f=6I%ovO;0-%*mg>?yS z3_y34n|d}I1qkYi4Y0Semhk}=VMK>`^W^G@*!wz2Wn`<40#!5;qAd$(nCqVlH9_vo zqE4WoQhW3~{CoWgvd#ujU+lLF@RkK$Jh+9e3>C=B@rfW}OZ4&KAu2NR8wqk$5EpZZ z+I?Sq?}d#7Hh^IT6)Pit%I>?{Q>&m2!S5U^cW7X+Z0 z+5iLqCP*DhZC+v`eke;F3Xsh-VGPU7&AvNruSNwj8@>}LA%GK=p!2^yLR!<<@pqc_ z8S%&P&;B?(FoL#>8=ib$1(d$t-hlWMq_)zZAK4X3%!F%ymScx|v$vT_O+$kRvIjp2 zpBk7Ad#r+uLB{Ex>=v}Nl*2n`yLwH38Hj`C{>Q#(%?oG(|23WI01Lre=Wz`2>O29KaN10&hj*;J=`cDXcfJWa7WNug8GhVu-;NC$h=2|6cun z;%+@UT=Vm{OG+XnmnJOzLAJ#5yERV%@I2t7jw{x!k>`v6V#*-V>@2`z^;k2k*0{d# zL&rhIqu#PaUd?+8o*2VjW6pewoi0Tf9!HkG)jKUn%9J;r@J$R{?`RrE2yisYAiy=P zjqc%*5r4rIN@$?~1&d)QG&ib6S|`AM?-&~Y$oxF)8K84Wx%tqj7d82RQTEnxQGM&% z@BjiL5)u*;Dj+2(NOws~cPQQ6-O|!IbjKjwAky6o-5o=By&J#hoac8w&-2z_$S||_ zcJDQ7-S@Swpn80eto}x)P)q>gKLzTgiysxJt7>-sYh8P`m1Zr@vUdA#iw9|~@mXTj z3ukJeZHLKvVGnm;hny{(%im7kL8O3ipe}vkGDaRY=)Y zg6G4-Mbcgz5y@07dnDTFEv!~_-%N24yhEP>dZ1NdGQfKOWr@I+%t*^oLw7^VZ6+^6 z~3EHavoG&U}?cU3f8II!6XjsSR>)HXN8mlbFZ}V+$I;UCC_P;-227^sVG$ zLi6nlC=|L=k7q6N0yK>P+;IeWu`Ra6@2)(P--vi%*Y@Z5FHQ|e>0h0ZzD>FZJ#}4> zG@zxh?*`u;$tYQUWTr8lX8p5qYQ&&{GhbaPkvV-cX_f!5Ac>6!(atQ0_jnkQWO*1d zDrtHm342`+$LuROh!KN)!1xBRnH}kIv;X{!oL^d z)j0|&X*!w8C;dS%zjv6cBZ>jjvO*CLk|}*$=5nOl#u_Sk&=B*2KY!r4IeS{YfH}0T ziyf=nde>q%`_`d%Yr6WhCqdG;QFQc2$DqrmnXE*p#3xzGn?U59D!ifYmoO{}%%s@| zzbrCtzdMdpR1Z=7@UGwZ1mRa=0X8n0t`ZCZ_Mx^oD3=cnyd`c%cvcwYDW4G0-YsM| z`66(`yO(@?*ASw`71HX3_3{mEgOT#!n=)n)Xl{fX4w`5^dq6~@b9}0@Kf7|`j031{ z0%bQ_e!8B$lur7!Y^f2@>bgJK>1WAzHr&eM={`?j01cBbyt9kbd-R$A@f^t-VVnwgZ0!Btk@F9Hh>1CxB#^=+Kf-8Iak9i3cp~q3 z@EqKEMny;8&yi4ZFvn*yPur7Tt!Sdm`w5&s8bvSu^3be6j+q(zi^}YoU zJjP9;>e7*};I#fV6k$Qa6;wndzs%ze;GwCAE@?Q0NMzc78{m6i#m>{+*&UOon4t8_ zvG;4D*-vG8{Cp{C;NZaO=xr7lQRlL@4nklk|h{ju6>=e@wYii>E4)3FV%Wm02_4LrC z5Hvrf&fWyeua*$^usb|-esj7O3zP`$kESyEB78H22ofrOrZl;ImI`vcH`C9iy)e_QNmZP6_tR66fp zZ6Blw`%AKF&>{g z`QCR-&V?RsQ#smf0wQ|CSM`aUKOHZuQDIo(Led7fxYn1KrSyBCphHn)WNqQt?~k6q zGzMs4Qv|jp=g9QK8PLbOv7i7GwX?Grd^JXAzq6GVWTtZzGK8vbH3k~EDmdLxcP#<6FZ!P9ao5CHUEFS10A1l z{e$cKRR&S|ea_}^9ufHXs^j82amS$~Z{bIp;QcpTk83L51J6uy^i3Sw0?IEYJQT>D zc?6j%D1^mL>-`Cr%$Aqvm&}Ep0SAO;azK zhpRfqDsG;qcDGYZwQ<63Uza4I5%`7~yYEy5E!;JQi|Q%aB<22&IDE`%J7HmacYYph zw@bGUjHFP_)Cmb(GcTeh4-vf&)XMk2i-3y48z^IzXJfoB%IErq{S{z}rMKW}TG6%3 z;TECCvci%IshHQ*InAf(xjLLjbrMOb)t`U|nlFa;hK45A>=A}a^%NzR#kRCGeb`-eorx{EdACi5DTwCc}Hhp#W=6y1I^=9$#S+6(%B~t?s^iyf= zR{{?#|7fxJ2@G1_3!)l7s{7Wh>@J^glc^n*n9g}6)1?5N8u7pS8Kkp)`$_zb7c<3= zdV*1N(Q)%XjFBwFo%;_U!_9>}4)QIl2>)&r@n4)2lX?m3d|kfjYxI2(BB+8ROQ3ae zj?&-s3t3WuHl1@KfPTG^@%O*zq$(?P{T4N@C(F)v&3Aq*6td*Sh_lXUOo0;;3`;y% z-k@{ak{uR3zxI;NSsut>Kf3CMBQkNoE5yCv8gkJdQcL)34eJnEn*j*3*-ijTAU+tyP<# zh}O?jB@mdJCMvi8MvC|{5XH{%C6ygQatGtN24@*(-SoWM2@yLZI5=CC^){2qR{SCv z`qWYYwg&&POPi{fCspUKG($!km{b}mW^0x85|{@?#Q5(DBC|Om)eyu=m~Ll+`oC(G z@?e);t+*}JS4#OYqGm7|Al3s4I5Ytvw{H_PL|5L|q-UeXid^B3D<{@5PP zP+|oA0^C_H1dFM*tl7CUQ?w}z09DbEFo|gMP)6Z5Kth?&9m8IKf*8T=lWmYClRafR zX{#2eov)|z5;%0GLL#UCGRguFyQ0a8!(wb|Ekk8*j*hO$(E3&d!%8fwPF=k>OcWd; zh{)PZ4uI!462|1@6)6&h1rRD~+P+WtFH3Tt1US1z=6*6{XS*fwhCta$Bb)|~%ME^+ z(GDaV9-UwSjtSJ%AHUL=FJhHZ@u`qUv2! C9_~yv?U#@T-2#>14`wrmi;hZfm*i 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 L$cyK|b-n)!k;}?6 diff --git a/pyproject.toml b/pyproject.toml index da4b7a5..32615f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,3 +56,5 @@ artifacts = [ norecursedirs = "tests/helpers" addopts = "-p no:warnings" +[tool.uv.sources] +# ezmsg = { path = "../ezmsg", editable = true } \ No newline at end of file