{"version":3,"file":"index.umd.cjs","sources":["../src/array.ts","../src/hashSum.ts","../src/cache.ts","../src/debounce.ts","../src/dictionary.ts","../src/esp.ts","../src/graph.ts","../src/graph2.ts","../src/immutable.ts","../src/platform.ts","../src/stack.ts","../src/logging.ts","../src/math.ts","../src/object.ts","../src/observer.ts","../src/dispatch.ts","../src/saxParser.ts","../src/stateful.ts","../src/string.ts","../src/url.ts","../src/utf8ToBase64.ts","../src/__package__.ts"],"sourcesContent":["// Based on:  https://tc39.github.io/ecma262/#sec-array.prototype.find\nexport function find<T>(o: ReadonlyArray<T>, predicate: (value: T, index: number) => boolean) {\n    // 1. Let O be ? ToObject(this value).\n    if (o == null) {\n        throw new TypeError('\"o\" is null or not defined');\n    }\n\n    // 2. Let len be ? ToLength(? Get(O, \"length\")).\n    const len = o.length >>> 0;\n\n    // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n    if (typeof predicate !== \"function\") {\n        throw new TypeError(\"predicate must be a function\");\n    }\n\n    // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n    const thisArg = arguments[1];\n\n    // 5. Let k be 0.\n    let k = 0;\n\n    // 6. Repeat, while k < len\n    while (k < len) {\n        // a. Let Pk be ! ToString(k).\n        // b. Let kValue be ? Get(O, Pk).\n        // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n        // d. If testResult is true, return kValue.\n        const kValue = o[k];\n        if (predicate.call(thisArg, kValue, k)) {\n            return kValue;\n        }\n        // e. Increase k by 1.\n        k++;\n    }\n\n    // 7. Return undefined.\n    return undefined;\n}\nexport interface IDifferences2<T> {\n    update: T[];\n    exit: T[];\n    enter: T[];\n}\n\nexport function compare<T>(before: readonly T[], after: readonly T[]): IDifferences2<T> {\n    const retVal: IDifferences2<T> = {\n        update: [],\n        exit: [],\n        enter: [...after]\n    };\n    for (const row of before) {\n        const otherIdx = retVal.enter.indexOf(row);\n        if (otherIdx >= 0) {\n            retVal.update.push(row);\n            retVal.enter.splice(otherIdx, 1);\n        } else {\n            retVal.exit.push(row);\n        }\n    }\n    return retVal;\n}\n\nexport interface IDifferences2<T> {\n    enter: T[];\n    update: T[];\n    exit: T[];\n}\n\nexport function compare2<T>(before: readonly T[], after: readonly T[], idFunc: (itme: T) => string | number, updateFunc: (before: T, after: T) => T = (before, after) => after): IDifferences2<T> {\n    const retVal: IDifferences2<T> = {\n        update: [],\n        exit: [],\n        enter: []\n    };\n    if (before === after) {\n        retVal.update = before as T[];\n        return retVal;\n    }\n    const unknownMap: { [key: string]: T } = {};\n    after.forEach(item => {\n        unknownMap[idFunc(item)] = item;\n    });\n    for (const row of before) {\n        const id = idFunc(row);\n        const item = unknownMap[id];\n        if (item !== undefined) {\n            delete unknownMap[id];\n            retVal.update.push(updateFunc(row, item));\n        } else {\n            retVal.exit.push(row);\n        }\n    }\n    for (const key in unknownMap) {\n        retVal.enter.push(unknownMap[key]);\n    }\n    return retVal;\n}\n","//  Ported to TypeScript from:  https://github.com/bevacqua/hash-sum\n\nfunction pad(hash: string, len: number): string {\n    while (hash.length < len) {\n        hash = \"0\" + hash;\n    }\n    return hash;\n}\n\nfunction fold(hash: number, text: string): number {\n    if (text.length === 0) {\n        return hash;\n    }\n    for (let i = 0; i < text.length; ++i) {\n        const chr = text.charCodeAt(i);\n        hash = ((hash << 5) - hash) + chr;\n        hash |= 0;\n    }\n    return hash < 0 ? hash * -2 : hash;\n}\n\nfunction foldObject(hash: number, o: any, seen: any[]): number {\n    if (typeof o.hashSum === \"function\") {\n        return o.hashSum();\n    }\n    return Object.keys(o).sort().reduce((input: any, key: string) => {\n        return foldValue(input, o[key], key, seen);\n    }, hash);\n}\n\nfunction foldValue(input: number, value: any, key: string, seen: any[]): number {\n    const hash = fold(fold(fold(input, key), toString(value)), typeof value);\n    if (value === null) {\n        return fold(hash, \"null\");\n    }\n    if (value === undefined) {\n        return fold(hash, \"undefined\");\n    }\n    if (typeof value === \"object\") {\n        if (seen.indexOf(value) !== -1) {\n            return fold(hash, \"[Circular]\" + key);\n        }\n        seen.push(value);\n        return foldObject(hash, value, seen);\n    }\n    return fold(hash, value.toString());\n}\n\nfunction toString(o: any): string {\n    return Object.prototype.toString.call(o);\n}\n\nexport function hashSum(o: any): string {\n    return pad(foldValue(0, o, \"\", []).toString(16), 8);\n}\n","import { hashSum } from \"./hashSum.ts\";\n\nexport class Cache<I, C> {\n    private _cache: { [id: string]: C } = {};\n    private _calcID: (espObj: I | C) => string;\n\n    static hash(...args: any[]) {\n        return hashSum({ ...args });\n    }\n\n    constructor(calcID: (espObj: I | C) => string) {\n        this._calcID = calcID;\n    }\n\n    has(espObj: I): boolean {\n        return this._calcID(espObj) in this._cache;\n    }\n\n    set(obj: C): C {\n        this._cache[this._calcID(obj)] = obj;\n        return obj;\n    }\n\n    get(espObj: I): C | null;\n    get(espObj: I, factory: () => C): C;\n    get(espObj: I, factory?: () => C): C | null {\n        const retVal = this._cache[this._calcID(espObj)];\n        if (!retVal) {\n            return factory ? this.set(factory()) : null;\n        }\n        return retVal;\n    }\n}\n\nexport class AsyncCache<I, C> {\n    private _cache: { [id: string]: Promise<C> } = {};\n    private _calcID: (espObj: I | C) => string;\n\n    static hash(...args: any[]) {\n        return hashSum({ ...args });\n    }\n\n    constructor(calcID: (espObj: I | C) => string) {\n        this._calcID = calcID;\n    }\n\n    has(espObj: I): boolean {\n        return this._calcID(espObj) in this._cache;\n    }\n\n    set(espObj: I, obj: Promise<C>): Promise<C> {\n        this._cache[this._calcID(espObj)] = obj;\n        return obj;\n    }\n\n    get(espObj: I): Promise<C | null>;\n    get(espObj: I, factory: () => Promise<C>): Promise<C>;\n    get(espObj: I, factory?: () => Promise<C>): Promise<C | null> {\n        const retVal = this._cache[this._calcID(espObj)];\n        if (!retVal) {\n            return factory ? this.set(espObj, factory()) : Promise.resolve(null);\n        }\n        return retVal;\n    }\n}\n","import { hashSum } from \"./hashSum.ts\";\n\nexport function debounce<R extends Promise<any>>(fn: () => R, timeout?: number): () => R;\nexport function debounce<P1, R extends Promise<any>>(fn: (param1: P1) => R, timeout?: number): (param1: P1) => R;\nexport function debounce<P1, P2, R extends Promise<any>>(fn: (param1: P1, param2: P2) => R, timeout?: number): (param1: P1, param2: P2) => R;\nexport function debounce<P1, P2, P3, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3) => R, timeout?: number): (param1: P1, param2: P2, param3: P3) => R;\nexport function debounce<P1, P2, P3, P4, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3, param4: P4) => R, timeout?: number): (param1: P1, param2: P2, param3: P3, param4: P4) => R;\nexport function debounce<TParam, R extends Promise<any>>(fn: (...params: TParam[]) => R, timeout?: number): (...params: TParam[]) => R {\n    const promises: { [key: string]: { promise: R, clockStart: number } | null } = {};\n\n    return (...params) => {\n        const hash = hashSum(params);\n        if (!promises[hash]) {\n            promises[hash] = {\n                clockStart: Date.now(),\n                promise: fn(...params).then(response => {\n                    if (timeout === undefined) {\n                        promises[hash] = null;\n                    } else {\n                        setTimeout(() => {\n                            promises[hash] = null;\n                        }, Math.max(timeout - (Date.now() - promises[hash]!.clockStart), 0));\n                    }\n                    return response;\n                }).catch(e => {\n                    promises[hash] = null;\n                    throw e;\n                }) as R\n            };\n        }\n        return promises[hash]!.promise;\n    };\n}\n\nexport function promiseTimeout<T>(ms: number, promise: Promise<T>): Promise<T> {\n    let id: any;\n    const timeout = new Promise((resolve, reject) => {\n        id = setTimeout(() => {\n            clearTimeout(id);\n            reject(\"Timed out in \" + ms + \"ms.\");\n        }, ms);\n    });\n\n    return Promise.race([\n        promise,\n        timeout\n    ]).then((response: unknown) => {\n        clearTimeout(id);\n        return response as T;\n    }).catch(e => {\n        clearTimeout(id);\n        throw e;\n    });\n}\n\nexport class AsyncOrderedQueue {\n    private _q: Array<Promise<any>> = [];\n\n    private isTop(p: Promise<any>): boolean {\n        return this._q[0] === p;\n    }\n\n    push<T>(p: Promise<T>): Promise<T> {\n        const retVal = p.then(response => {\n            if (this.isTop(retVal)) {\n                this._q.shift();\n                return response;\n            }\n            return new Promise<T>((resolve, reject) => {\n                const intervalHandler = setInterval(() => {\n                    if (this.isTop(retVal)) {\n                        clearInterval(intervalHandler);\n                        this._q.shift();\n                        resolve(response);\n                    }\n                }, 20);\n            });\n        });\n        this._q.push(retVal);\n        return retVal;\n    }\n}\n\nexport function sleep(ms: number): Promise<void> {\n    return new Promise(resolve => {\n        setTimeout(() => resolve(), ms);\n    });\n}\n","export type StringAnyMap = { [key: string]: any };\n\nexport class Dictionary<T> {\n    private store: { [key: string]: T } = {};\n\n    constructor(attrs?: StringAnyMap) {\n        if (attrs) {\n            for (const key in attrs) {\n                this.set(key, attrs[key]);\n            }\n        }\n    }\n\n    set(key: string, value: T): T {\n        const retVal: T = this.store[key];\n        this.store[key] = value;\n        return retVal;\n    }\n\n    get(key: string): T {\n        return this.store[key];\n    }\n\n    has(key: string) {\n        return this.store[key] !== undefined;\n    }\n\n    remove(key: string) {\n        delete this.store[key];\n    }\n\n    keys(): string[] {\n        const retVal: string[] = [];\n        for (const key in this.store) {\n            retVal.push(key);\n        }\n        return retVal;\n    }\n\n    values(): T[] {\n        const retVal: T[] = [];\n        for (const key in this.store) {\n            retVal.push(this.store[key]);\n        }\n        return retVal;\n    }\n}\n\nexport class DictionaryNoCase<T> extends Dictionary<T> {\n    constructor(attrs?: StringAnyMap) {\n        super(attrs);\n    }\n\n    set(key: string, value: T): T {\n        return super.set(key.toLowerCase(), value);\n    }\n\n    get(key: string): T {\n        return super.get(key.toLowerCase());\n    }\n\n    has(key: string) {\n        return super.has(key.toLowerCase());\n    }\n\n    remove(key: string) {\n        return super.remove(key.toLowerCase());\n    }\n}\n","export function espTime2Seconds(duration: string): number {\n    if (!duration) {\n        return 0;\n    } else {\n        if (!isNaN(Number(duration))) {\n            return Number(duration);\n        }\n    }\n    //  GH:  <n>ns or <m>ms or <s>s or [<d> days ][<h>:][<m>:]<s>[.<ms>]\n    const nsIndex = duration.indexOf(\"ns\");\n    if (nsIndex !== -1) {\n        return parseFloat(duration.substr(0, nsIndex)) / 1000000000;\n    }\n    const msIndex = duration.indexOf(\"ms\");\n    if (msIndex !== -1) {\n        return parseFloat(duration.substr(0, msIndex)) / 1000;\n    }\n    const sIndex = duration.indexOf(\"s\");\n    if (sIndex !== -1 && duration.indexOf(\"days\") === -1) {\n        return parseFloat(duration.substr(0, sIndex));\n    }\n\n    const dayTimeParts = duration.split(\" days \");\n    const days: number = dayTimeParts.length > 1 ? parseFloat(dayTimeParts[0]) : 0.0;\n    const time: string = dayTimeParts.length > 1 ? dayTimeParts[1] : dayTimeParts[0];\n    let secs = 0.0;\n    const timeParts = time.split(\":\").reverse();\n    for (let j = 0; j < timeParts.length; ++j) {\n        secs += parseFloat(timeParts[j]) * Math.pow(60, j);\n    }\n    return (days * 24 * 60 * 60) + secs;\n}\n","export class GraphItem<S, V, E> {\n    protected _graph: Graph<S, V, E>;\n    readonly parent: Subgraph<S, V, E> | null;\n    readonly props: { [key: string]: any } = {};\n\n    constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null) {\n        this._graph = graph;\n        this.parent = parent;\n    }\n}\n\nexport class Subgraph<S, V, E> extends GraphItem<S, V, E> {\n    readonly subgraphs: Array<Subgraph<S, V, E>> = [];\n    readonly vertices: Array<Vertex<S, V, E>> = [];\n    readonly edges: Array<Edge<S, V, E>> = [];\n    readonly _?: S;\n\n    constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null, _?: S) {\n        super(graph, parent);\n        if (parent) {  //  Only needed for dummy root\n            parent._addSubgraph(this);\n        }\n        this._ = _;\n    }\n\n    remove(full: boolean = true): void {\n        this._graph.removeSubgraph(this, full);\n    }\n\n    createSubgraph(_?: S): Subgraph<S, V, E> {\n        return this._graph.createSubgraph(this, _);\n    }\n\n    _addSubgraph(subgraph: Subgraph<S, V, E>) {\n        if (this.subgraphs.indexOf(subgraph) >= 0) {\n            throw new Error(\"Subgraph already exists\");\n        }\n        this.subgraphs.push(subgraph);\n    }\n\n    _removeSubgraph(subgraph: Subgraph<S, V, E>) {\n        const idx = this.subgraphs.indexOf(subgraph);\n        if (idx < 0) {\n            throw new Error(\"Subgraph does not exist\");\n        }\n        this.subgraphs.splice(idx, 1);\n    }\n\n    removeAllSubgraphs() {\n        for (let i = this.subgraphs.length - 1; i >= 0; --i) {\n            this._graph.removeSubgraph(this.subgraphs[i], true);\n        }\n    }\n\n    createVertex(_?: V): Vertex<S, V, E> {\n        return this._graph.createVertex(this, _);\n    }\n\n    _addVertex(vertex: Vertex<S, V, E>) {\n        if (this.vertices.indexOf(vertex) >= 0) {\n            throw new Error(\"Vertex already exists\");\n        }\n        this.vertices.push(vertex);\n    }\n\n    _removeVertex(vertex: Vertex<S, V, E>) {\n        const idx = this.vertices.indexOf(vertex);\n        if (idx < 0) {\n            throw new Error(\"Vertex does not exist\");\n        }\n        this.vertices.splice(idx, 1);\n    }\n\n    removeAllVertices() {\n        for (let i = this.vertices.length - 1; i >= 0; --i) {\n            this._graph.removeVertex(this.vertices[i], true);\n        }\n    }\n\n    createEdge(source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\n        return this._graph.createEdge(this, source, target, _);\n    }\n\n    _addEdge(edge: Edge<S, V, E>) {\n        if (this.edges.indexOf(edge) >= 0) {\n            throw new Error(\"Edge already exists\");\n        }\n        this.edges.push(edge);\n    }\n\n    _removeEdge(edge: Edge<S, V, E>) {\n        const idx = this.edges.indexOf(edge);\n        if (idx < 0) {\n            throw new Error(\"Edge does not exist\");\n        }\n        this.edges.splice(idx, 1);\n    }\n\n    _add(item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) {\n        if (item instanceof Subgraph) {\n            this._addSubgraph(item);\n        } else if (item instanceof Vertex) {\n            this._addVertex(item);\n        } else {\n            this._addEdge(item);\n        }\n    }\n}\n\nexport class Vertex<S, V, E> extends GraphItem<S, V, E> {\n    readonly inEdges: Array<Edge<S, V, E>> = [];\n    readonly outEdges: Array<Edge<S, V, E>> = [];\n    get edges(): ReadonlyArray<Edge<S, V, E>> {\n        return [...this.inEdges, ...this.outEdges];\n    }\n    readonly _?: V;\n\n    constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, _?: V) {\n        super(graph, parent);\n        parent._addVertex(this);\n        this._ = _;\n    }\n\n    remove(full: boolean = true, _?: (source: V, target: V) => E) {\n        return this._graph.removeVertex(this, full, _);\n    }\n\n    addInEdge(edge: Edge<S, V, E>) {\n        this.inEdges.push(edge);\n    }\n\n    removeInEdge(edge: Edge<S, V, E>) {\n        const idx = this.inEdges.indexOf(edge);\n        if (idx < 0) {\n            throw new Error(\"In edge does not exist\");\n        }\n        this.inEdges.splice(idx, 1);\n    }\n\n    addOutEdge(edge: Edge<S, V, E>) {\n        this.outEdges.push(edge);\n    }\n\n    removeOutEdge(edge: Edge<S, V, E>) {\n        const idx = this.outEdges.indexOf(edge);\n        if (idx < 0) {\n            throw new Error(\"Out edge does not exist\");\n        }\n        this.outEdges.splice(idx, 1);\n    }\n}\n\nexport class Edge<S, V, E> extends GraphItem<S, V, E> {\n    readonly source: Vertex<S, V, E>;\n    readonly target: Vertex<S, V, E>;\n    readonly _?: E;\n\n    constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E) {\n        super(graph, parent);\n        if (!source) {\n            throw new Error(\"Missing source vertex\");\n        }\n        if (!target) {\n            throw new Error(\"Missing target vertex\");\n        }\n        parent._addEdge(this);\n        this.source = source;\n        this.source.addOutEdge(this);\n        this.target = target;\n        this.target.addInEdge(this);\n        this._ = _;\n    }\n\n    remove(): void {\n        this._graph.removeEdge(this);\n    }\n}\n\nexport class Graph<S = undefined, V = undefined, E = undefined> {\n    readonly root: Subgraph<S, V, E>;\n    private _allSubgraphs: Array<Subgraph<S, V, E>> = [];\n    private _allSubgraphsMap: { [id: string]: Subgraph<S, V, E> } = {};\n    private _allVertices: Array<Vertex<S, V, E>> = [];\n    private _allVerticesMap: { [id: string]: Vertex<S, V, E> } = {};\n    private _allEdges: Array<Edge<S, V, E>> = [];\n    private _allEdgesMap: { [id: string]: Edge<S, V, E> } = {};\n\n    idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string;\n\n    constructor(idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string = item => \"\" + item._, _?: S) {\n        this.root = new Subgraph(this, null, _);\n        this.idOf = idOf;\n    }\n\n    createSubgraph(parent?: Subgraph<S, V, E>, _?: S): Subgraph<S, V, E> {\n        const retVal = new Subgraph(this, parent || this.root, _);\n        this._allSubgraphs.push(retVal);\n        this._allSubgraphsMap[this.idOf(retVal)] = retVal;\n        return retVal;\n    }\n\n    removeSubgraph(subgraph: Subgraph<S, V, E>, full: boolean = true) {\n        const idx = this._allSubgraphs.indexOf(subgraph);\n        if (idx < 0) {\n            throw new Error(\"Subgraph does not exist\");\n        }\n        this._allSubgraphs.splice(idx, 1);\n        delete this._allSubgraphsMap[this.idOf(subgraph)];\n        if (subgraph.parent) {\n            subgraph.parent._removeSubgraph(subgraph);\n        }\n        subgraph.edges.forEach(edge => full ? this.removeEdge(edge) : subgraph.parent!._addEdge(edge));\n        subgraph.vertices.forEach(vertex => full ? this.removeVertex(vertex, full) : subgraph.parent!._addVertex(vertex));\n        subgraph.subgraphs.forEach(childSubgraph => full ? this.removeSubgraph(childSubgraph, full) : subgraph.parent!._addSubgraph(childSubgraph)\n        );\n    }\n\n    get subgraphs(): ReadonlyArray<Subgraph<S, V, E>> {\n        return this._allSubgraphs;\n    }\n\n    subgraph(id: string): Subgraph<S, V, E> {\n        return this._allSubgraphsMap[id];\n    }\n\n    createVertex(parent: Subgraph<S, V, E>, _?: V): Vertex<S, V, E> {\n        const retVal = new Vertex(this, parent, _);\n        this._allVertices.push(retVal);\n        this._allVerticesMap[this.idOf(retVal)] = retVal;\n        return retVal;\n    }\n\n    removeVertex(vertex: Vertex<S, V, E>, full: boolean = true, _?: (source: V, target: V) => E) {\n        const idx = this._allVertices.indexOf(vertex);\n        if (idx < 0) {\n            throw new Error(\"Vertex does not exist\");\n        }\n        this._allVertices.splice(idx, 1);\n        delete this._allVerticesMap[this.idOf(vertex)];\n        if (vertex.parent) {\n            vertex.parent._removeVertex(vertex);\n        }\n        if (!full) {\n            vertex.inEdges.forEach(inEdge => {\n                vertex.outEdges.forEach(outEdge => {\n                    this.createEdge(this.root, inEdge.source, outEdge.target, _ ? _(inEdge.source._!, outEdge.target._!) : undefined);\n                });\n            });\n        }\n        vertex.inEdges.forEach(edge => this.removeEdge(edge));\n        vertex.outEdges.forEach(edge => this.removeEdge(edge));\n    }\n\n    get vertices(): ReadonlyArray<Vertex<S, V, E>> {\n        return this._allVertices;\n    }\n\n    vertex(id: string): Vertex<S, V, E> {\n        return this._allVerticesMap[id];\n    }\n\n    createEdge(parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\n        const retVal = new Edge<S, V, E>(this, parent, source, target, _);\n        this._allEdges.push(retVal);\n        this._allEdgesMap[this.idOf(retVal)] = retVal;\n        return retVal;\n    }\n\n    removeEdge(edge: Edge<S, V, E>) {\n        const idx = this._allEdges.indexOf(edge);\n        if (idx < 0) {\n            throw new Error(\"Edge does not exist\");\n        }\n        this._allEdges.splice(idx, 1);\n        delete this._allEdgesMap[this.idOf(edge)];\n        if (edge.parent) {\n            edge.parent._removeEdge(edge);\n        }\n        edge.source.removeOutEdge(edge);\n        edge.target.removeInEdge(edge);\n    }\n\n    get edges(): ReadonlyArray<Edge<S, V, E>> {\n        return this._allEdges;\n    }\n\n    edge(id: string): Edge<S, V, E> {\n        return this._allEdgesMap[id];\n    }\n\n    private _walk(parent: Subgraph<S, V, E>, visitor: (item: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void): true | false | void {\n        for (const subgraph of parent.subgraphs) {\n            switch (visitor(subgraph)) {\n                case \"abort\":\n                    return true;\n                case \"stepover\":\n                    break;\n                default:\n                    if (this._walk(subgraph, visitor)) return true;\n            }\n        }\n        for (const vertex of parent.vertices) {\n            if (visitor(vertex) === \"abort\") return true;\n        }\n    }\n\n    walk(visitor: (visitor: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void) {\n        this._walk(this.root, visitor);\n        for (const edge of this._allEdges) {\n            if (visitor(edge) === \"abort\") return true;\n        }\n    }\n\n    clone(): Graph<S, V, E> {\n        const ctor: new (idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string, _?: S) => Graph<S, V, E> = this.constructor as any;\n        const retVal = new ctor(this.idOf, this.root._);\n        const map = ObjMap();\n        map.put(this.root, retVal.root);\n        this.walk(item => {\n            const parent = map.get(item.parent);\n            if (item instanceof Subgraph) {\n                map.put(item, parent.createSubgraph(item._));\n            } else if (item instanceof Vertex) {\n                map.put(item, parent.createVertex(item._));\n            } else if (item instanceof Edge) {\n                const source = map.get(item.source);\n                const target = map.get(item.target);\n                parent.createEdge(source, target, item._);\n            }\n        });\n        return retVal;\n    }\n}\n\nfunction ObjMap() {\n    const keys: any[] = [];\n    const values: any[] = [];\n\n    return {\n        put(key: any, value: any) {\n            const index = keys.indexOf(key);\n            if (index === -1) {\n                keys.push(key);\n                values.push(value);\n            } else {\n                values[index] = value;\n            }\n        },\n        get(key: any) {\n            return values[keys.indexOf(key)];\n        }\n    };\n}\n","import { compare2 } from \"./array.ts\";\n\ntype ID = string | number;\n\nclass GraphItem<T = any> {\n    protected _graph: Graph2;\n    _: T;\n    id(): ID {\n        return this._graph.id(this._);\n    }\n\n    constructor(g: Graph2, _: T) {\n        this._graph = g;\n        this._ = _;\n    }\n}\n\nclass ChildGraphItem<S = any> extends GraphItem<S> {\n\n    private _parent: Subgraph | undefined;\n\n    constructor(g: Graph2, _: S) {\n        super(g, _);\n    }\n\n    clearParent(): this {\n        if (this._parent) {\n            this._parent.removeChild(this);\n            delete this._parent;\n        }\n        return this;\n    }\n\n    parent(): Subgraph | undefined;\n    parent(_: Subgraph | undefined): this;\n    parent(_?: Subgraph): Subgraph | undefined | this {\n        if (arguments.length === 0) return this._parent;\n        if (this._parent !== _) {\n            if (this._parent) {\n                this._parent.removeChild(this);\n            }\n            this._parent = _;\n            if (this._parent) {\n                this._parent.addChild(this);\n            }\n        }\n        return this;\n    }\n}\n\nclass Subgraph<S = any> extends ChildGraphItem<S> {\n\n    private _children: ChildGraphItem[] = [];\n\n    constructor(g: Graph2, _: S) {\n        super(g, _);\n    }\n\n    children(): ChildGraphItem[] {\n        return this._children;\n    }\n\n    addChild(_: ChildGraphItem) {\n        this._children.push(_);\n    }\n\n    removeChild(_: ChildGraphItem) {\n        this._children = this._children.filter(row => row.id !== _.id);\n    }\n}\n\nclass Vertex<V = any> extends ChildGraphItem<V> {\n\n    private _inEdges: Edge[] = [];\n    private _outEdges: Edge[] = [];\n\n    constructor(g: Graph2, _: V) {\n        super(g, _);\n    }\n\n    edges() {\n        return [...this._inEdges, ...this._outEdges];\n    }\n\n    edgeCount() {\n        return this._outEdges.length + this._inEdges.length;\n    }\n\n    inEdges() {\n        return this._inEdges;\n    }\n\n    addInEdge(e: Edge) {\n        this._inEdges.push(e);\n    }\n\n    removeInEdge(id: ID) {\n        this._inEdges = this._inEdges.filter(e => e._.id !== id);\n    }\n\n    outEdges() {\n        return this._outEdges;\n    }\n\n    addOutEdge(e: Edge) {\n        this._outEdges.push(e);\n    }\n\n    removeOutEdge(id: ID) {\n        this._outEdges = this._outEdges.filter(e => e._.id !== id);\n    }\n}\n\nclass Edge<E = any> extends ChildGraphItem<E> {\n\n    _source: Vertex;\n    _target: Vertex;\n\n    constructor(g: Graph2, _: E, source: Vertex, target: Vertex) {\n        super(g, _);\n        this._source = source;\n        this._target = target;\n    }\n}\n\ntype SubgraphMap<T> = { [id: string]: Subgraph<T> };\ntype VertexMap<T> = { [id: string]: Vertex<T> };\ntype EdgeMap<T> = { [id: string]: Edge<T> };\n\nexport type HierarchyFormatter<V, S> = (type: \"subgraph\" | \"vertex\", item: V | S, children?: object[]) => object;\n\nexport class Graph2<V = any, E = any, S = any> {\n\n    private _directed: boolean;\n    private _subgraphMap: SubgraphMap<S> = {};\n    private _vertexMap: VertexMap<V> = {};\n    private _edgeMap: EdgeMap<E> = {};\n\n    constructor(directed = true) {\n        this._directed = directed;\n    }\n\n    clear(): this {\n        this._subgraphMap = {};\n        this._vertexMap = {};\n        this._edgeMap = {};\n        return this;\n    }\n\n    clearParents(): this {\n        for (const key in this._subgraphMap) {\n            this._subgraphMap[key].clearParent();\n        }\n        for (const key in this._vertexMap) {\n            this._vertexMap[key].clearParent();\n        }\n        return this;\n    }\n\n    isDirected(): boolean {\n        return this._directed;\n    }\n\n    _idFunc = (_: any): ID => typeof _.id === \"function\" ? _.id() : _.id;\n    idFunc(_: (_: S | V | E) => ID): this {\n        this._idFunc = _;\n        return this;\n    }\n\n    _sourceFunc = (_: any): ID => typeof _.source === \"function\" ? _.source() : _.source;\n    sourceFunc(_: (_: E) => ID): this {\n        this._sourceFunc = _;\n        return this;\n    }\n\n    _targetFunc = (_: any): ID => typeof _.target === \"function\" ? _.target() : _.target;\n    targetFunc(_: (_: E) => ID): this {\n        this._targetFunc = _;\n        return this;\n    }\n\n    _updateFunc = (before: S | V | E, after: S | V | E): S | V | E => after;\n    updateFunc(_: (before: S | V | E, after: S | V | E) => S | V | E): this {\n        this._updateFunc = _;\n        return this;\n    }\n\n    id(_: S | V | E): ID {\n        return this._idFunc(_);\n    }\n\n    type(id: ID): \"S\" | \"V\" | \"E\" | \"\" {\n        if (this.subgraphExists(id)) return \"S\";\n        if (this.vertexExists(id)) return \"V\";\n        if (this.edgeExists(id)) return \"E\";\n        return \"\";\n    }\n\n    isSubgraph(_: S | V | E): _ is S {\n        return this.subgraphExists(this.id(_));\n    }\n\n    isVertex(_: S | V | E): _ is V {\n        return this.vertexExists(this.id(_));\n    }\n\n    isEdge(_: S | V | E): _ is E {\n        return this.edgeExists(this.id(_));\n    }\n\n    allItems(): Array<S | V | E> {\n        return [...this.allSubgraphs(), ...this.allVertices(), ...this.allEdges()];\n    }\n\n    item(id: ID): S | V | E | undefined {\n        if (this.subgraphExists(id)) return this.subgraph(id);\n        if (this.vertexExists(id)) return this.vertex(id);\n        if (this.edgeExists(id)) return this.edge(id);\n        return undefined;\n    }\n\n    itemExists(id: ID): boolean {\n        return this.edgeExists(id) || this.vertexExists(id) || this.subgraphExists(id);\n    }\n\n    // Subgraphs  ---\n    allSubgraphs(): S[] {\n        const retVal: S[] = [];\n        for (const key in this._subgraphMap) {\n            retVal.push(this._subgraphMap[key]._);\n        }\n        return retVal;\n    }\n\n    subgraphs(): S[] {\n        const retVal: S[] = [];\n        for (const key in this._subgraphMap) {\n            if (this._subgraphMap[key].parent() === undefined) {\n                retVal.push(this._subgraphMap[key]._);\n            }\n        }\n        return retVal;\n    }\n\n    subgraphExists(id: ID): boolean {\n        return !!this._subgraphMap[id];\n    }\n\n    subgraph(id: ID): S {\n        return this._subgraphMap[id]._;\n    }\n\n    subgraphSubgraphs(id: ID): S[] {\n        return this._subgraphMap[id].children().filter(child => this.isSubgraph(child._)).map(child => child._);\n    }\n\n    subgraphVertices(id: ID): V[] {\n        return this._subgraphMap[id].children().filter(child => this.isVertex(child._)).map(child => child._);\n    }\n\n    subgraphEdges(id: ID): E[] {\n        return this._subgraphMap[id].children().filter(child => this.isEdge(child._)).map(child => child._);\n    }\n\n    addSubgraph(s: S, parent?: S): this {\n        const s_id = this._idFunc(s);\n        if (this._subgraphMap[s_id]) throw new Error(`Subgraph '${s_id}' already exists.`);\n        const subgraph = new Subgraph(this, s);\n        if (parent) {\n            const p_id = this._idFunc(parent);\n            if (!this._subgraphMap[p_id]) throw new Error(`Subgraph '${p_id}' does not exist.`);\n            subgraph.parent(this._subgraphMap[p_id]);\n        }\n        this._subgraphMap[s_id] = subgraph;\n        return this;\n    }\n\n    mergeSubgraphs(_subgraphs: S[] = []): this {\n        const sgDiff = compare2<S>(this.allSubgraphs(), _subgraphs, sg => this._idFunc(sg), this._updateFunc as any);\n        sgDiff.exit.forEach(sg => this.removeSubgraph(this._idFunc(sg)));\n        sgDiff.enter.forEach(sg => this.addSubgraph(sg));\n        sgDiff.update.forEach(sg => this.updateSubgraph(sg));\n        return this;\n    }\n\n    updateSubgraph(sg: S): this {\n        const sg_id = this._idFunc(sg);\n        const subgraph = this._subgraphMap[sg_id];\n        if (!subgraph) throw new Error(`Subgraph '${sg_id}' does not exist.`);\n        subgraph._ = sg;\n        return this;\n    }\n\n    removeSubgraph(id: ID, promoteChildren = true): this {\n        const sg = this._subgraphMap[id];\n        if (!sg) throw new Error(`Subgraph '${id}' does not exist.`);\n        sg.children().forEach(child => {\n            if (promoteChildren) {\n                child.parent(sg.parent());\n            } else {\n                if (child instanceof Subgraph) {\n                    this.removeSubgraph(child.id());\n                } else {\n                    this.removeVertex(child.id());\n                }\n            }\n        });\n        delete this._subgraphMap[id];\n        return this;\n    }\n\n    subgraphParent(id: ID): S | undefined;\n    subgraphParent(id: ID, parentID: ID): this;\n    subgraphParent(id: ID, parentID?: ID): S | undefined | this {\n        const item = this._subgraphMap[id];\n        if (!item) throw new Error(`Subgraph '${id}' does not exist.`);\n        if (parentID === void 0) {\n            const parent = item.parent();\n            return parent ? parent._ as S : undefined;\n        }\n        const parent = this._subgraphMap[parentID];\n        if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\n        item.parent(parent);\n        return this;\n    }\n\n    // Vertices  ---\n    allVertices(): V[] {\n        const retVal: V[] = [];\n        for (const key in this._vertexMap) {\n            retVal.push(this._vertexMap[key]._);\n        }\n        return retVal;\n    }\n\n    vertices(): V[] {\n        const retVal: V[] = [];\n        for (const key in this._vertexMap) {\n            if (this._vertexMap[key].parent() === undefined) {\n                retVal.push(this._vertexMap[key]._);\n            }\n        }\n        return retVal;\n    }\n\n    vertexExists(id: ID): boolean {\n        return !!this._vertexMap[id];\n    }\n\n    vertex(id: ID): V {\n        return this._vertexMap[id]._;\n    }\n\n    allEdges(): E[] {\n        const retVal: E[] = [];\n        for (const key in this._edgeMap) {\n            retVal.push(this._edgeMap[key]._);\n        }\n        return retVal;\n    }\n\n    edges(): E[] {\n        const retVal: E[] = [];\n        for (const key in this._edgeMap) {\n            if (this._edgeMap[key].parent() === undefined) {\n                retVal.push(this._edgeMap[key]._);\n            }\n        }\n        return retVal;\n    }\n\n    vertexEdges(vertexID: ID): E[] {\n        return this._vertexMap[vertexID].edges().map(e => e._);\n    }\n\n    inEdges(vertexID: ID): E[] {\n        return this._vertexMap[vertexID].inEdges().map(e => e._);\n    }\n\n    outEdges(vertexID: ID): E[] {\n        return this._vertexMap[vertexID].outEdges().map(e => e._);\n    }\n\n    private _neighbors(id: ID): Vertex[] {\n        return [...this._vertexMap[id].outEdges().map(e => e._target), ...this._vertexMap[id].inEdges().map(e => e._source)];\n    }\n\n    neighbors(id: ID): V[] {\n        return this._neighbors(id).map(n => n._);\n    }\n\n    singleNeighbors(id: ID): V[] {\n        return this._neighbors(id).filter(n => n.edgeCount() === 1).map(n => n._);\n    }\n\n    addVertex(v: V, parent?: S): this {\n        const v_id = this._idFunc(v);\n        if (this._vertexMap[v_id]) throw new Error(`Vertex '${v_id}' already exists.`);\n        const vertex = new Vertex(this, v);\n        if (parent) {\n            const p_id = this._idFunc(parent);\n            if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\n            vertex.parent(this._subgraphMap[p_id]);\n        }\n        this._vertexMap[v_id] = vertex;\n        return this;\n    }\n\n    mergeVertices(_vertices: V[]): this {\n        const vDiff = compare2(this.allVertices(), _vertices, v => this._idFunc(v), this._updateFunc as any);\n        vDiff.exit.forEach(v => this.removeVertex(this._idFunc(v)));\n        vDiff.enter.forEach(v => this.addVertex(v));\n        vDiff.update.forEach(v => this.updateVertex(v));\n        return this;\n    }\n\n    updateVertex(v: V): this {\n        const v_id = this._idFunc(v);\n        const vertex = this._vertexMap[v_id];\n        if (!vertex) throw new Error(`Vertex '${v_id}' does not exist.`);\n        vertex._ = v;\n        return this;\n    }\n\n    removeVertex(id: ID): this {\n        const v = this._vertexMap[id];\n        if (!v) throw new Error(`Vertex '${id}' does not exist.`);\n        v.edges().forEach(e => {\n            this.removeEdge(e.id());\n        });\n        delete this._vertexMap[id];\n        return this;\n    }\n\n    vertexParent(id: ID): S | undefined;\n    vertexParent(id: ID, parentID: ID): this;\n    vertexParent(id: ID, parentID?: ID): S | undefined | this {\n        const item = this._vertexMap[id];\n        if (!item) throw new Error(`Vertex '${id}' does not exist.`);\n        if (parentID === void 0) {\n            const parent = item.parent();\n            return parent ? parent._ as S : undefined;\n        }\n        const parent = this._subgraphMap[parentID];\n        if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\n        item.parent(parent);\n        return this;\n    }\n\n    // Edges  ---\n    edgeExists(id: ID): boolean {\n        return !!this._edgeMap[id];\n    }\n\n    edge(id: ID): E {\n        return this._edgeMap[id]._;\n    }\n\n    addEdge(e: E, parent?: S): this {\n        const e_id = this._idFunc(e);\n        const e_source = this._sourceFunc(e);\n        const e_target = this._targetFunc(e);\n        if (this._edgeMap[e_id]) throw new Error(`Edge '${e_id}' already exists.`);\n        if (!this.vertexExists(e_source)) throw new Error(`Edge Source '${e_source}' does not exist.`);\n        if (!this.vertexExists(e_target)) throw new Error(`Edge Target '${e_target}' does not exist.`);\n        const edge = new Edge(this, e, this._vertexMap[e_source], this._vertexMap[e_target]);\n        if (parent) {\n            const p_id = this._idFunc(parent);\n            if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\n            edge.parent(this._subgraphMap[p_id]);\n        }\n        this._edgeMap[e_id] = edge;\n        this._vertexMap[e_source].addOutEdge(edge);\n        this._vertexMap[e_target].addInEdge(edge);\n        return this;\n    }\n\n    mergeEdges(_edges: E[]): this {\n        const eDiff = compare2(this.allEdges(), _edges, e => this._idFunc(e), this._updateFunc as any);\n        eDiff.exit.forEach(e => this.removeEdge(this._idFunc(e)));\n        eDiff.enter.forEach(e => this.addEdge(e));\n        eDiff.update.forEach(e => this.updateEdge(e));\n        return this;\n    }\n\n    updateEdge(e: E): this {\n        const e_id = this._idFunc(e);\n        const edge = this._edgeMap[e_id];\n        if (!edge) throw new Error(`Edge '${e_id}' does not exist.`);\n        const old_source = edge._source.id();\n        const new_source = this._sourceFunc(e);\n        if (old_source !== new_source) {\n            this._vertexMap[old_source]?.removeOutEdge(e_id);\n            this._vertexMap[new_source]?.addOutEdge(edge);\n        }\n        const old_target = edge._target.id();\n        const new_target = this._targetFunc(e);\n        if (old_target !== new_target) {\n            this._vertexMap[old_target]?.removeInEdge(e_id);\n            this._vertexMap[new_target]?.addInEdge(edge);\n        }\n        edge._ = e;\n        edge._source = this._vertexMap[new_source];\n        edge._target = this._vertexMap[new_target];\n        return this;\n    }\n\n    removeEdge(id: ID): this {\n        const e: Edge<E> = this._edgeMap[id];\n        if (!e) throw new Error(`Edge '${id}' does not exist.`);\n\n        const e_sourceID = this._idFunc(e._source._);\n        if (!this.vertexExists(e_sourceID)) throw new Error(`Edge Source'${e_sourceID}' does not exist.`);\n        this._vertexMap[e_sourceID].removeOutEdge(id);\n\n        const e_targetID = this._idFunc(e._target._);\n        if (!this.vertexExists(e_targetID)) throw new Error(`Edge Target'${e_targetID}' does not exist.`);\n        this._vertexMap[e_targetID].removeInEdge(id);\n\n        delete this._edgeMap[id];\n        return this;\n    }\n\n    protected _hwalk(item: Subgraph<S> | Vertex<V>, formatter: HierarchyFormatter<V, S>): object {\n        if (item instanceof Subgraph) {\n            return formatter(\"subgraph\", item._, item.children().map(child => this._hwalk(child as Subgraph<S> | Vertex<V>, formatter)));\n        } else {\n            return formatter(\"vertex\", item._);\n        }\n    }\n\n    hierarchy(formatter: HierarchyFormatter<V, S>): object[] {\n        const retVal: object[] = [];\n        for (const id in this._subgraphMap) {\n            const sg = this._subgraphMap[id];\n            if (sg.parent() === undefined) {\n                retVal.push(this._hwalk(sg, formatter));\n            }\n        }\n        for (const id in this._vertexMap) {\n            const v = this._vertexMap[id];\n            if (v.parent() === undefined) {\n                retVal.push(this._hwalk(v, formatter));\n            }\n        }\n        return retVal;\n    }\n\n    dijkstra(source: ID, target: ID): { ids: ID[], len: number } {\n        const edges = this.allEdges();\n        const Q = new Set<string | number>();\n        const prev: { [key: string]: string } = {};\n        const dist: { [key: string]: number } = {};\n        const adj: { [key: string]: { [key: string]: number } } = {};\n\n        function vertex_with_min_dist(Q: Set<string | number>, dist: { [key: string]: number }) {\n            let min_distance = Infinity;\n            let u: string | number | null = null;\n\n            Q.forEach(v => {\n                if (dist[v] < min_distance) {\n                    min_distance = dist[v];\n                    u = v;\n                }\n            });\n            return u;\n        }\n\n        for (let i = 0; i < edges.length; i++) {\n            const v1 = this._sourceFunc(edges[i]);\n            const v2 = this._targetFunc(edges[i]);\n            const len = 1;\n\n            Q.add(v1);\n            Q.add(v2);\n\n            dist[v1] = Infinity;\n            dist[v2] = Infinity;\n\n            if (adj[v1] === undefined) adj[v1] = {};\n            if (adj[v2] === undefined) adj[v2] = {};\n\n            adj[v1][v2] = len;\n            adj[v2][v1] = len;\n        }\n\n        dist[source] = 0;\n\n        while (Q.size) {\n            const u = vertex_with_min_dist(Q, dist);\n            if (u === null) break;\n            const neighbors = Object.keys(adj[u]).filter(v => Q.has(v)); // Neighbor still in Q\n\n            Q.delete(u);\n\n            if (u === target) break; // Break when the target has been found\n\n            for (const v of neighbors) {\n                const alt = dist[u] + adj[u][v];\n                if (alt < dist[v]) {\n                    dist[v] = alt;\n                    prev[v] = u;\n                }\n            }\n        }\n\n        let u = target;\n        const ids = [u];\n        let len = 0;\n\n        while (prev[u] !== undefined) {\n            ids.unshift(prev[u]);\n            len += adj[u][prev[u]];\n            u = prev[u];\n        }\n        return { ids, len };\n    }\n\n    sort(v_id?: string): V[] {\n        const retVal: V[] = [];\n        const visited: { [id: string]: boolean } = {};\n\n        const visit = (vertex: Vertex<V>, ancestors: Vertex<V>[] = []) => {\n            const v_id = vertex.id();\n            if (visited[v_id]) return;\n            visited[v_id] = true;\n            ancestors.push(vertex);\n            vertex.outEdges().forEach(e => {\n                if (ancestors.indexOf(e._target) < 0) {\n                    visit(e._target, [...ancestors]);\n                }\n            });\n            retVal.unshift(vertex._);\n        };\n\n        if (v_id) {\n            visit(this._vertexMap[v_id]);\n        } else {\n            for (const key in this._vertexMap) {\n                visit(this._vertexMap[key]);\n            }\n        }\n\n        return retVal;\n    }\n}\n\nclass Set<T> {\n\n    private _content: T[] = [];\n    get size(): number {\n        return this._content.length;\n    }\n\n    has(_: T) {\n        return this._content.indexOf(_) >= 0;\n    }\n\n    add(_: T) {\n        if (!this.has(_)) {\n            this._content.push(_);\n        }\n    }\n\n    delete(_: T) {\n        const idx = this._content.indexOf(_);\n        if (idx >= 0) {\n            this._content.splice(idx, 1);\n        }\n    }\n\n    forEach(_: (value: T, index: number, array: T[]) => void) {\n        this._content.forEach(_);\n    }\n}\n","const isArray = Array.isArray;\nconst keyList = Object.keys;\nconst hasProp = Object.prototype.hasOwnProperty;\n\nexport function verboseDeepEquals(a: any, b: any, functionRefCompare: boolean = false) {\n    if (a === b) return true;\n\n    if (a && b) {\n        if (typeof a === \"object\" && typeof b === \"object\") {\n            const arrA = isArray(a);\n            const arrB = isArray(b);\n            let i;\n            let length;\n            let key;\n\n            if (arrA && arrB) {\n                length = a.length;\n                if (length !== b.length) {\n                    console.warn(`lengths not equal: ${length} !== ${b.length}`);\n                    return false;\n                }\n                for (i = length; i-- !== 0;)\n                    if (!verboseDeepEquals(a[i], b[i], functionRefCompare)) {\n                        return false;\n                    }\n                return true;\n            }\n\n            if (arrA !== arrB) {\n                console.warn(`arrays not equal: ${arrA} !== ${arrB}`);\n                return false;\n            }\n\n            const dateA = a instanceof Date;\n            const dateB = b instanceof Date;\n            if (dateA !== dateB) {\n                console.warn(`dates not equal: ${dateA} !== ${dateB}`);\n                return false;\n            }\n            if (dateA && dateB) {\n                const retVal = a.getTime() === b.getTime();\n                if (!retVal) {\n                    console.warn(`dates not equal: ${a.getTime()} !== ${b.getTime()}`);\n                }\n                return retVal;\n            }\n\n            const regexpA = a instanceof RegExp;\n            const regexpB = b instanceof RegExp;\n            if (regexpA !== regexpB) {\n                console.warn(`regexps not equal: ${regexpA} !== ${regexpB}`);\n                return false;\n            }\n            if (regexpA && regexpB) {\n                const retVal = a.toString() === b.toString();\n                if (!retVal) {\n                    console.warn(`regexps not equal: ${a.toString()} !== ${b.toString()}`);\n                }\n                return retVal;\n            }\n\n            const keys = keyList(a);\n            length = keys.length;\n\n            if (length !== keyList(b).length) {\n                console.warn(`key lengths not equal: ${length} !== ${keyList(b).length}`);\n                return false;\n            }\n\n            for (i = length; i-- !== 0;)\n                if (!hasProp.call(b, keys[i])) {\n                    console.warn(`${keys[i]} in a but not b`);\n                    return false;\n                }\n\n            for (i = length; i-- !== 0;) {\n                key = keys[i];\n                if (!verboseDeepEquals(a[key], b[key], functionRefCompare)) {\n                    return false;\n                }\n            }\n\n            return true;\n        } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\n            const retVal = a.toString() === b.toString();\n            if (!retVal) {\n                console.warn(`functions not equal: ${a.toString()} !== ${b.toString()}`);\n            }\n            return retVal;\n        }\n    }\n\n    const retVal = a !== a && b !== b;\n    if (!retVal) {\n        console.warn(`values not equal: ${a} !== ${b}`);\n    }\n    return retVal;\n}\n\nexport function deepEquals(a: any, b: any, functionRefCompare: boolean = false) {\n    if (a === b) return true;\n\n    if (a && b) {\n        if (typeof a === \"object\" && typeof b === \"object\") {\n            const arrA = isArray(a);\n            const arrB = isArray(b);\n            let i;\n            let length;\n            let key;\n\n            if (arrA && arrB) {\n                length = a.length;\n                if (length !== b.length) return false;\n                for (i = length; i-- !== 0;)\n                    if (!deepEquals(a[i], b[i], functionRefCompare)) return false;\n                return true;\n            }\n\n            if (arrA !== arrB) return false;\n\n            const dateA = a instanceof Date;\n            const dateB = b instanceof Date;\n            if (dateA !== dateB) return false;\n            if (dateA && dateB) return a.getTime() === b.getTime();\n\n            const regexpA = a instanceof RegExp;\n            const regexpB = b instanceof RegExp;\n            if (regexpA !== regexpB) return false;\n            if (regexpA && regexpB) return a.toString() === b.toString();\n\n            const keys = keyList(a);\n            length = keys.length;\n\n            if (length !== keyList(b).length)\n                return false;\n\n            for (i = length; i-- !== 0;)\n                if (!hasProp.call(b, keys[i])) return false;\n\n            for (i = length; i-- !== 0;) {\n                key = keys[i];\n                if (!deepEquals(a[key], b[key], functionRefCompare)) return false;\n            }\n\n            return true;\n        } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\n            return a.toString() === b.toString();\n        }\n    }\n\n    return a !== a && b !== b;\n}\n\nexport function update<T>(origItem: T, newItem: T, functionRefCompare: boolean = false): T {\n    return deepEquals(origItem, newItem, functionRefCompare) ? origItem : newItem;\n}\n","declare const process: any;\n\nexport const root: any = typeof globalThis !== \"undefined\" ? globalThis : window;\nexport const isBrowser: boolean = typeof window !== \"undefined\" && root === window;\nexport const isNode: boolean = typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\nexport const isCI: boolean = isNode && process.env != null && (process.env.TRAVIS != null || process.env.GITHUB_ACTIONS != null || process.env.CI != null);\n\nexport function getScriptSrc(partial: string) {\n    const scripts = document.scripts || [];\n    for (let i = document.scripts.length - 1; i >= 0; --i) {\n        const script = scripts[i];\n        if (script.src) {\n            const idx = script.src.indexOf(partial);\n            if (idx >= 0) {\n                return script.src.substring(0, idx);\n            }\n        }\n    }\n    return \"\";\n}\n","/**\n * A generic Stack\n */\nexport class Stack<T> {\n    private stack: T[] = [];\n\n    /**\n     * Push element onto the stack\n     *\n     * @param e - element to push\n     */\n    push(e: T) {\n        this.stack.push(e);\n        return e;\n    }\n\n    /**\n     * Pop element off the stack\n     */\n    pop(): T | undefined {\n        return this.stack.pop();\n    }\n\n    /**\n     * Top item on the stack\n     *\n     * @returns Top element on the stack\n     */\n    top(): T | undefined {\n        return this.stack.length ? this.stack[this.stack.length - 1] : undefined;\n    }\n\n    /**\n     * Depth of stack\n     *\n     * @returns Depth\n     */\n    depth(): number {\n        return this.stack.length;\n    }\n}\n","/* eslint-disable no-console */\nimport { isNode } from \"./platform.ts\";\nimport { Stack } from \"./stack.ts\";\n\nexport enum Level {\n    debug,\n    info,\n    notice,\n    warning,\n    error,\n    critical,\n    alert,\n    emergency\n}\n\nconst colours: { [key: string]: string } = {\n    debug: \"cyan\",\n    info: \"green\",\n    notice: \"grey\",\n    warning: \"blue\",\n    error: \"red\",\n    critical: \"magenta\",\n    alert: \"magenta\",\n    emergency: \"magenta\"\n};\n\nexport interface Writer {\n    write?(dateTime: string, level: Level, id: string, msg: string): void;\n    rawWrite?(dateTime: string, level: Level, id: string, msg: string | object): void;\n}\n\nclass ConsoleWriter implements Writer {\n    write(dateTime: string, level: Level, id: string, msg: string) {\n        if (isNode) {\n            console.log(`[${dateTime}] ${Level[level].toUpperCase()} ${id}:  ${msg}`);\n        } else {\n            console.log(`[${dateTime}] %c${Level[level].toUpperCase()}%c ${id}:  ${msg}`, `color:${colours[Level[level]]}`, \"\");\n        }\n    }\n}\n\nexport class Logging {\n    private static _instance: Logging;\n    private _levelStack = new Stack<Level>();\n    private _level = Level.info;\n    private _filter: string = \"\";\n    private _writer: Writer = new ConsoleWriter();\n\n    public static Instance() {\n        return this._instance || (this._instance = new this());\n    }\n\n    private constructor() {\n    }\n\n    private stringify(obj: object): string {\n        const cache: any[] = [];\n        return JSON.stringify(obj, function (_key, value) {\n            if (typeof value === \"object\" && value !== null) {\n                if (cache.indexOf(value) !== -1) {\n                    return;\n                }\n                cache.push(value);\n            }\n            return value;\n        }, 2);\n    }\n\n    writer(): Writer;\n    writer(_: Writer): Logging;\n    writer(_?: Writer): Writer | Logging {\n        if (_ === void 0) return this._writer;\n        this._writer = _;\n        return this;\n    }\n\n    log(level: Level, id: string, msg: string | object) {\n        if (level < this._level) return;\n        if (this._filter && this._filter !== id) return;\n\n        const dateTime = new Date().toISOString();\n\n        if (this._writer.rawWrite) {\n            this._writer.rawWrite(dateTime, level, id, msg);\n        } else {\n            if (typeof msg !== \"string\") {\n                msg = this.stringify(msg);\n            }\n\n            if (this._writer.write) {\n                this._writer.write(dateTime, level, id, msg);\n            }\n        }\n    }\n\n    debug(id: string, msg: string | object) {\n        this.log(Level.debug, id, msg);\n    }\n\n    info(id: string, msg: string | object) {\n        this.log(Level.info, id, msg);\n    }\n\n    notice(id: string, msg: string | object) {\n        this.log(Level.notice, id, msg);\n    }\n\n    warning(id: string, msg: string | object) {\n        this.log(Level.warning, id, msg);\n    }\n\n    error(id: string, msg: string | object) {\n        this.log(Level.error, id, msg);\n    }\n\n    critical(id: string, msg: string | object) {\n        this.log(Level.critical, id, msg);\n    }\n\n    alert(id: string, msg: string | object) {\n        this.log(Level.alert, id, msg);\n    }\n\n    emergency(id: string, msg: string | object) {\n        this.log(Level.emergency, id, msg);\n    }\n\n    level(): Level;\n    level(_: Level): this;\n    level(_?: Level): Level | this {\n        if (_ === void 0) return this._level;\n        this._level = _;\n        return this;\n    }\n\n    pushLevel(_: Level): this {\n        this._levelStack.push(this._level);\n        this._level = _;\n        return this;\n    }\n\n    popLevel(): this {\n        this._level = this._levelStack.pop()!;\n        return this;\n    }\n\n    filter(): string;\n    filter(_: string): this;\n    filter(_?: string): string | this {\n        if (_ === void 0) return this._filter;\n        this._filter = _;\n        return this;\n    }\n}\nexport const logger = Logging.Instance();\n\nexport class ScopedLogging {\n    protected _scopeID: string;\n\n    constructor(scopeID: string) {\n        this._scopeID = scopeID;\n    }\n\n    debug(msg: string | object) {\n        logger.debug(this._scopeID, msg);\n    }\n\n    info(msg: string | object) {\n        logger.info(this._scopeID, msg);\n    }\n\n    notice(msg: string | object) {\n        logger.notice(this._scopeID, msg);\n    }\n\n    warning(msg: string | object) {\n        logger.warning(this._scopeID, msg);\n    }\n\n    error(msg: string | object) {\n        logger.error(this._scopeID, msg);\n    }\n\n    critical(msg: string | object) {\n        logger.critical(this._scopeID, msg);\n    }\n\n    alert(msg: string | object) {\n        logger.alert(this._scopeID, msg);\n    }\n\n    emergency(msg: string | object) {\n        logger.emergency(this._scopeID, msg);\n    }\n\n    pushLevel(_: Level): this {\n        logger.pushLevel(_);\n        return this;\n    }\n\n    popLevel(): this {\n        logger.popLevel();\n        return this;\n    }\n}\n\nexport function scopedLogger(scopeID: string, filter: boolean = false) {\n    if (filter) {\n        logger.filter(scopeID);\n    }\n    return new ScopedLogging(scopeID);\n}\n","/**\n * degreesToRadians - converts degrees to radians\n * Usage: degreesToRadians(1080);\n *\n * @param degrees\n * @returns Number radians\n */\nexport function degreesToRadians(degrees: number): number {\n    return degrees * (Math.PI / 180);\n}\n\n/**\n * radiansToDegrees - converts radians to degrees\n * Usage: radiansToDegrees(7);\n *\n * @param radians\n * @returns Number degreees\n */\nexport function radiansToDegrees(radians: number): number {\n    return radians * (180 / Math.PI);\n}\n\n/**\n * polarToCartesian - converts (r, theta) to {x, y}\n * Usage: polarToCartesian(5, Math.PI);\n *\n * @param r radius\n * @param theta angle in radians\n * @returns { x: number, y: number }\n */\nexport function polarToCartesian(r: number, theta: number): { x:number, y:number } {\n    return {\n        x: r * Math.cos(theta),\n        y: r * Math.sin(theta)\n    };\n}\n\n/**\n * cartesianToPolar - converts (x, y) to {r, theta}\n * Usage: cartesianToPolar(100, 200);\n *\n * @param x\n * @param y\n * @returns { r: number, theta: number }\n */\nexport function cartesianToPolar(x: number, y: number): { r: number, theta: number } {\n    return {\n        r: Math.sqrt(x * x + y * y),\n        theta: Math.atan2(y, x)\n    };\n}\n\n/**\n * normalizeRadians - normalizes a radian value to within the provided range\n * Usage: normalizeRadians(7);\n *\n * @param radians value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalizeRadians(radians: number, min: number = -Math.PI, max: number = Math.PI): number {\n    return normalize(radians, min, max);\n}\n\n/**\n * normalizeDegrees - normalizes a degree value to within the provided range\n * Usage: normalizeDegrees(1080);\n *\n * @param degrees value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalizeDegrees(degrees: number, min: number = -180, max: number = 180): number {\n    return normalize(degrees, min, max);\n}\n\n/**\n * normalize - normalizes a value to within the provided range\n * Usage: normalize(1000, 0, 365);\n *\n * @param value value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalize(value: number, min: number, max: number): number {\n    const spread = max - min;\n    const offsetValue = value - min;\n    return (offsetValue - (Math.floor(offsetValue / spread) * spread)) + min;\n}\n","export type RecursivePartial<T> = {\n    [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] :\n    T[P] extends object | undefined ? RecursivePartial<T[P]> : T[P];\n};\n\n/**\n * inner - return inner property of Object\n * Usage:  inner(\"some.prop.to.locate\", obj);\n *\n * @param prop - property to locate\n * @param obj - object to locate property in\n */\nexport function inner(prop: string, obj: any): any {\n    if (prop === void 0 || obj === void 0) return void 0;\n    for (const item of prop.split(\".\")) {\n        if (!obj.hasOwnProperty(item)) {\n            return undefined;\n        }\n        obj = obj[item];\n    }\n    return obj;\n}\n\n/**\n * exists - return true if inner property of Object exists\n * Usage:  exists(\"some.prop.to.locate\", obj);\n *\n * @param prop - property to locate\n * @param obj - object to locate property in\n */\nexport function exists(prop: string, obj: any): boolean {\n    return inner(prop, obj) !== undefined;\n}\n\nfunction _mixin(dest: any, source: any): any {\n    const empty: any = {};\n    for (const key in source) {\n        if (!source.hasOwnProperty(key)) continue;\n        if (key === \"__proto__\" || key === \"constructor\") continue;\n        let s: any = source[key];\n        if (s instanceof Array) {\n            //  TODO:  Do we need to support arrays?\n        } else if (typeof s === \"object\") {\n            s = deepMixin(dest[key], s);\n        }\n        if (!(key in dest) || (dest[key] !== s && (!(key in empty) || empty[key] !== s))) {\n            dest[key] = s;\n        }\n    }\n    return dest;\n}\n\n/**\n * deepMixin - combine several objects from right to left\n * Usage:  deepMixin({a: \"a\"}, {b: \"b\"});\n *\n * @param dest - target object to mix into.\n * @param sources - objects to mix in\n */\nexport function deepMixin(dest: any = {}, ...sources: any[]): any {\n    if (typeof dest !== \"object\") throw new Error(`Destination \"${dest}\" must be an object.`);\n    for (const source of sources) {\n        _mixin(dest, source);\n    }\n    return dest;\n}\n\n/**\n * deepMixinT - combine several objects of Partial<T> from right to left\n * Usage:  deepMixinT<MyInterface>({a: \"a\"}, {b: \"b\"});\n *\n * Note:  Only provided as a convenience, so user gets auto completion based on destination type.\n *\n * @param dest - target object to mix into.\n * @param sources - objects to mix in\n */\nexport function deepMixinT<T>(dest: RecursivePartial<T> = {}, ...sources: Array<RecursivePartial<T>>): T {\n    return deepMixin(dest, ...sources);\n}\n\n/**\n * safeStingify - JSONsimilar to .stringify, except ignores circular references.\n * Usage:  safeStingify(object);\n *\n * @param obj - any object.\n */\nexport function safeStringify(obj: object) {\n    const cache: any[] = [];\n    return JSON.stringify(obj, function (key, value) {\n        if (typeof value === \"object\" && value !== null) {\n            if (cache.indexOf(value) !== -1) {\n                return;\n            }\n\n            cache.push(value);\n        }\n        return value;\n    });\n}\n\nexport function isArray(arg: any): arg is any[] {\n    if (Array.isArray !== undefined) {\n        return Array.isArray(arg);\n    }\n    return Object.prototype.toString.call(arg) === \"[object Array]\";\n}\n\nexport interface ClassMeta {\n    module: string;\n    file: string;\n    class: string;\n}\n\nexport function classID2Meta(classID: string): ClassMeta {\n    const info = classID.split(\"_\");\n    const classInfo = info[1].split(\".\");\n    return {\n        module: `@hpcc-js/${info[0]}`,\n        file: classInfo[0],\n        class: classInfo[1] || classInfo[0]\n    };\n}\n","/**\n * IObserverHandle - Reference to an observing instance\n */\nexport interface IObserverHandle {\n    release(): void;\n    unwatch(): void;\n}\n\nexport type CallbackFunction = (...args: any[]) => void;\n\nclass ObserverHandle<T extends string> implements IObserverHandle {\n    private eventTarget: Observable<T>;\n    private eventID: T;\n    private callback: CallbackFunction;\n\n    constructor(eventTarget: Observable<T>, eventID: T, callback: CallbackFunction) {\n        this.eventTarget = eventTarget;\n        this.eventID = eventID;\n        this.callback = callback;\n    }\n\n    release() {\n        this.eventTarget.removeObserver(this.eventID, this.callback);\n    }\n\n    unwatch() {\n        this.release();\n    }\n}\n\nexport type EventID = string;\nexport class Observable<T extends EventID> {\n    private _eventObservers: { [eventID: string]: CallbackFunction[] } = {};\n\n    constructor(...events: T[]) {\n    }\n\n    addObserver(eventID: T, callback: CallbackFunction): IObserverHandle {\n        let eventObservers: CallbackFunction[] = this._eventObservers[eventID];\n        if (!eventObservers) {\n            eventObservers = [];\n            this._eventObservers[eventID] = eventObservers;\n        }\n        eventObservers.push(callback);\n        return new ObserverHandle<T>(this, eventID, callback);\n    }\n\n    removeObserver(eventID: T, callback: CallbackFunction): this {\n        const eventObservers = this._eventObservers[eventID];\n        if (eventObservers) {\n            for (let i = eventObservers.length - 1; i >= 0; --i) {\n                if (eventObservers[i] === callback) {\n                    eventObservers.splice(i, 1);\n                }\n            }\n        }\n        return this;\n    }\n\n    dispatchEvent(eventID: T, ...args: any[]): this {\n        const eventObservers = this._eventObservers[eventID];\n        if (eventObservers) {\n            for (const observer of eventObservers) {\n                observer(...args);\n            }\n        }\n        return this;\n    }\n\n    private _hasObserver(eventID: string): boolean {\n        const eventObservers = this._eventObservers[eventID];\n        for (const observer in eventObservers) {\n            if (eventObservers[observer]) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    hasObserver(_eventID?: T): boolean {\n        if (_eventID !== void 0) {\n            return this._hasObserver(_eventID);\n        }\n        for (const eventID in this._eventObservers) {\n            if (this._hasObserver(eventID)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n","import type { IObserverHandle } from \"./observer.ts\";\nimport { root } from \"./platform.ts\";\n\nexport type RequestAnimationFrame = (callback: FrameRequestCallback) => number | undefined;\nexport type CancelAnimationFrame = (handle: number) => void | undefined;\n\nlet requestAnimationFrame: RequestAnimationFrame;\n// let cancelAnimationFrame: CancelAnimationFrame;\n\n(function () {\n    if (root.requestAnimationFrame) {\n        requestAnimationFrame = root.requestAnimationFrame;\n        // cancelAnimationFrame = root.cancelAnimationFrame;\n    } else {\n        let lastTime = 0;\n        requestAnimationFrame = function (callback: FrameRequestCallback): any {\n            const currTime = new Date().getTime();\n            const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n            const id = setTimeout(() => callback(currTime + timeToCall), timeToCall);\n            lastTime = currTime + timeToCall;\n            return id;\n        };\n        // cancelAnimationFrame = function (handle: number): void {\n        //     clearTimeout(handle);\n        // };\n    }\n})();\n\nexport class Message {\n\n    get canConflate(): boolean { return false; }\n    conflate(other: Message): boolean {\n        return false;\n    }\n\n    void(): boolean {\n        return false;\n    }\n}\ntype MessageConstructor<T extends Message> = new (...args: any[]) => T;\n\nexport type Callback<T extends Message> = (messages: T[]) => void;\nexport { IObserverHandle };\n\ntype ObserverAdapter<T extends Message = Message> = {\n    id: number;\n    type?: MessageConstructor<T>;\n    callback: Callback<T>;\n};\n\nexport class Dispatch<T extends Message = Message> {\n\n    private _observerID: number = 0;\n    private _observers: ObserverAdapter<T>[] = [];\n    private _messageBuffer: T[] = [];\n    private _rafHandle: number | undefined = undefined;\n\n    constructor() {\n    }\n\n    private observers(): ObserverAdapter<T>[] {\n        return this._observers;\n    }\n\n    private messages(): T[] {\n        const retVal: T[] = [];\n        this._messageBuffer.forEach(msg => {\n            if (!retVal.some(msg2 => msg2.canConflate && msg2.conflate(msg))) {\n                retVal.push(msg);\n            }\n        });\n        return retVal;\n    }\n\n    private dispatchAll() {\n        this._rafHandle = undefined;\n        this.dispatch(this.messages());\n        this.flush();\n    }\n\n    private dispatch(messages: T[]) {\n        if (messages.length === 0) return;\n        this.observers().forEach(o => {\n            const msgs = messages.filter(m => !m.void() && (o.type === undefined || m instanceof o.type));\n            if (msgs.length) {\n                o.callback(msgs);\n            }\n        });\n    }\n\n    hasObserver(): boolean {\n        return this._observers.length > 0;\n    }\n\n    flush() {\n        this._messageBuffer = [];\n    }\n\n    send(msg: T) {\n        if (!this.hasObserver()) return;\n        this.dispatch([msg]);\n    }\n\n    post(msg: T) {\n        if (!this.hasObserver()) return;\n        this._messageBuffer.push(msg);\n        if (this._rafHandle === undefined) {\n            this._rafHandle = requestAnimationFrame(() => this.dispatchAll());\n        }\n    }\n\n    attach(callback: Callback<T>, type?: MessageConstructor<T>): IObserverHandle {\n        const context = this;\n        const id = ++this._observerID;\n        this._observers.push({ id, type, callback });\n        return {\n            release() {\n                context._observers = context._observers.filter(o => o.id !== id);\n            },\n            unwatch() {\n                this.release();\n            }\n        };\n    }\n}\n","import { StringAnyMap } from \"./dictionary.ts\";\nimport { Stack } from \"./stack.ts\";\n\nexport class XMLNode {\n    name: string = \"\";\n    $: StringAnyMap = {};\n    protected _children: XMLNode[] = [];\n    content: string = \"\";\n\n    constructor(name: string) {\n        this.name = name;\n    }\n\n    appendAttribute(key: string, val: string) {\n        this.$[key] = val;\n    }\n\n    appendContent(content: string) {\n        this.content += content;\n    }\n\n    appendChild(child: XMLNode) {\n        this._children.push(child);\n    }\n\n    children(tag?: string): XMLNode[] {\n        if (tag === undefined) {\n            return this._children;\n        }\n        return this._children.filter((xmlNode) => {\n            return xmlNode.name === tag;\n        });\n    }\n}\n\nexport class SAXStackParser {\n    root?: XMLNode;\n    stack: Stack<XMLNode> = new Stack<XMLNode>();\n\n    constructor() {\n    }\n\n    private walkDoc(node: any) {\n        const xmlNode = this._startXMLNode(node);\n        if (node.attributes) {\n            for (let i = 0; i < node.attributes.length; ++i) {\n                const attribute = node.attributes.item(i);\n                this.attributes(attribute.nodeName, attribute.nodeValue);\n            }\n        }\n        this.startXMLNode(xmlNode);\n        if (node.childNodes) {\n            for (let i = 0; i < node.childNodes.length; ++i) {\n                const childNode = node.childNodes.item(i);\n                if (childNode.nodeType === childNode.TEXT_NODE) {\n                    this.characters(childNode.nodeValue!);\n                } else {\n                    this.walkDoc(childNode);\n                }\n            }\n        }\n        this.endXMLNode(this.stack.pop()!);\n    }\n\n    private _startXMLNode(node: Node): XMLNode {\n        const newNode = new XMLNode(node.nodeName);\n        if (!this.stack.depth()) {\n            this.root = newNode;\n        } else {\n            this.stack.top()!.appendChild(newNode);\n        }\n        return this.stack.push(newNode);\n    }\n\n    parse(xml: string) {\n        const domParser = new DOMParser();\n        const doc = domParser.parseFromString(xml, \"application/xml\");\n        this.startDocument();\n        this.walkDoc(doc);\n        this.endDocument();\n    }\n\n    //  Callbacks  ---\n    startDocument() {\n    }\n\n    endDocument() {\n    }\n\n    startXMLNode(node: XMLNode) {\n    }\n\n    endXMLNode(node: XMLNode) {\n    }\n\n    attributes(key: string, val: any) {\n        this.stack.top()!.appendAttribute(key, val);\n    }\n\n    characters(text: string) {\n        this.stack.top()!.appendContent(text);\n    }\n}\n\nclass XML2JSONParser extends SAXStackParser {\n    startXMLNode(node: XMLNode) {\n        super.startXMLNode(node);\n        switch (node.name) {\n            case \"xs:element\":\n                break;\n            case \"xs:simpleType\":\n                break;\n            default:\n                break;\n        }\n    }\n\n    endXMLNode(node: XMLNode) {\n        switch (node.name) {\n            case \"xs:element\":\n                break;\n            case \"xs:simpleType\":\n                break;\n            default:\n                break;\n        }\n        super.endXMLNode(node);\n    }\n}\n\nexport function xml2json(xml: string): XMLNode | undefined {\n    const saxParser = new XML2JSONParser();\n    saxParser.parse(xml);\n    return saxParser.root;\n}\n","import { Dispatch, IObserverHandle, Message } from \"./dispatch.ts\";\nimport { deepEquals } from \"./immutable.ts\";\n\nclass PropChangedMessage extends Message {\n\n    constructor(readonly property: string, public newValue: any, public oldValue?: any) {\n        super();\n    }\n\n    get canConflate(): boolean { return true; }\n    conflate(other: PropChangedMessage) {\n        if (this.property === other.property) {\n            this.newValue = other.newValue;\n            return true;\n        }\n        return false;\n    }\n\n    void(): boolean {\n        return deepEquals(this.newValue, this.oldValue);\n    }\n}\n\nexport interface IEvent {\n    id: string;\n    oldValue: any;\n    newValue: any;\n}\n\nexport type StatePropCallback = (changes: IEvent) => void;\nexport type StateCallback = (changes: IEvent[]) => void;\nexport type StateEvents = \"propChanged\" | \"changed\";\nexport class StateObject<U, I> {\n    private _espState: Partial<U> = {} as U;\n    private _dispatch = new Dispatch<PropChangedMessage>();\n    private _monitorHandle?: any;\n    protected _monitorTickCount: number = 0;\n\n    protected clear(newVals?: Partial<I>) {\n        this._espState = {} as U;\n        if (newVals !== void 0) {\n            this.set(newVals as I);\n        }\n        this._monitorTickCount = 0;\n    }\n\n    protected get(): U;\n    protected get<K extends keyof U>(key: K, defValue?: U[K]): U[K];\n    protected get<K extends keyof U>(key?: K, defValue?: U[K]): Partial<U> | U[K] | undefined {\n        if (key === void 0) {\n            return this._espState;\n        }\n        return this.has(key) ? this._espState[key] : defValue;\n    }\n\n    protected set(newVals: I): void;\n    protected set<K extends keyof U>(key: K, newVal: U[K], batchMode?: boolean): void;\n    protected set<K extends keyof U>(keyOrNewVals: K | U, newVal?: U[K]): void {\n        if (typeof keyOrNewVals === \"string\") {\n            return this.setSingle(keyOrNewVals as any, newVal as U[K]);  //  TODO:  \"as any\" should not be needed (TS >= 3.1.x)\n        }\n        this.setAll(keyOrNewVals as Partial<U>);\n    }\n\n    private setSingle<K extends keyof U>(key: K, newVal: U[K] | undefined): void {\n        const oldVal = this._espState[key];\n        this._espState[key] = newVal;\n        this._dispatch.post(new PropChangedMessage(key as string, newVal, oldVal));\n    }\n\n    private setAll(_: Partial<U>): void {\n        for (const key in _) {\n            if (_.hasOwnProperty(key)) {\n                this.setSingle(key, _[key]);\n            }\n        }\n    }\n\n    protected has<K extends keyof U>(key: K): boolean {\n        return this._espState[key] !== void 0;\n    }\n\n    addObserver(eventID: StateEvents, callback: StateCallback): IObserverHandle;\n    addObserver(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): IObserverHandle;\n    addObserver(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): IObserverHandle {\n        if (this.isCallback(propIDOrCallback)) {\n            if (eventID !== \"changed\") throw new Error(\"Invalid eventID:  \" + eventID);\n            return this._dispatch.attach((messages: PropChangedMessage[]) => {\n                propIDOrCallback(messages.map(m => ({\n                    id: m.property,\n                    oldValue: m.oldValue,\n                    newValue: m.newValue\n                })));\n            });\n        } else {\n            if (eventID !== \"propChanged\") throw new Error(\"Invalid eventID:  \" + eventID);\n            return this._dispatch.attach((messages: PropChangedMessage[]) => {\n                const filteredMessages = messages.filter(m => m.property === propIDOrCallback);\n                if (filteredMessages.length) {\n                    if (filteredMessages.length > 1) {\n                        console.warn(\"Should only be 1 message?\");\n                    }\n                    const event = filteredMessages[filteredMessages.length - 1];\n                    callback!({\n                        id: event.property,\n                        oldValue: event.oldValue,\n                        newValue: event.newValue\n                    });\n                }\n            });\n        }\n    }\n\n    on(eventID: StateEvents, callback: StateCallback): this;\n    on(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): this;\n    on(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): this {\n        this.addObserver(eventID, propIDOrCallback as any, callback as any);\n        return this;\n    }\n\n    protected isCallback(propIDOrCallback: StateCallback | keyof U): propIDOrCallback is StateCallback {\n        return (typeof propIDOrCallback === \"function\");\n    }\n\n    protected hasEventListener(): boolean {\n        return this._dispatch.hasObserver();\n    }\n\n    //  Monitoring  ---\n    protected async refresh(full: boolean = false): Promise<this> {\n        await Promise.resolve();\n        return this;\n    }\n\n    protected _monitor(): void {\n        if (this._monitorHandle) {\n            this._monitorTickCount = 0;\n            return;\n        }\n\n        this._monitorHandle = setTimeout(() => {\n            const refreshPromise: Promise<any> = this.hasEventListener() ? this.refresh() : Promise.resolve();\n            refreshPromise.then(() => {\n                this._monitor();\n            });\n            delete this._monitorHandle;\n        }, this._monitorTimeoutDuration());\n    }\n\n    protected _monitorTimeoutDuration(): number {\n        ++this._monitorTickCount;\n        if (this._monitorTickCount <= 1) {          //  Once\n            return 0;\n        }\n        return 30000;\n    }\n\n    watch(callback: StateCallback, triggerChange: boolean = true): IObserverHandle {\n        if (typeof callback !== \"function\") {\n            throw new Error(\"Invalid Callback\");\n        }\n        if (triggerChange) {\n            setTimeout(() => {\n                const props: any = this.get();\n                const changes: IEvent[] = [];\n                for (const key in props) {\n                    if (props.hasOwnProperty(props)) {\n                        changes.push({ id: key, newValue: props[key], oldValue: undefined });\n                    }\n                }\n                callback(changes);\n            }, 0);\n        }\n        const retVal = this.addObserver(\"changed\", callback);\n        this._monitor();\n        return retVal;\n    }\n}\n","export function trim(str: string, char: string): string {\n    if (typeof char !== \"string\") return str;\n    if (char.length === 0) return str;\n    while (str.indexOf(char) === 0) {\n        str = str.substring(1);\n    }\n    while (endsWith(str, char)) {\n        str = str.substring(0, str.length - 1);\n    }\n    return str;\n}\n\nexport function endsWith(origString: string, searchString: string, position?: number) {\n    const subjectString = origString.toString();\n    if (typeof position !== \"number\" || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n        position = subjectString.length;\n    }\n    position -= searchString.length;\n    const lastIndex = subjectString.lastIndexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n}\n","export function join(...segments: string[]) {\n    const parts: string[] = segments.reduce((parts: string[], segment) => {\n        // Remove leading slashes from non-first part.\n        if (parts.length > 0) {\n            segment = segment.replace(/^\\//, \"\");\n        }\n        // Remove trailing slashes.\n        segment = segment.replace(/\\/$/, \"\");\n        return [...parts, ...segment.split(\"/\")];\n    }, []);\n    const resultParts = [];\n    for (const part of parts) {\n        if (part === \".\") {\n            continue;\n        }\n        if (part === \"..\") {\n            resultParts.pop();\n            continue;\n        }\n        resultParts.push(part);\n    }\n    return resultParts.join(\"/\");\n}\n\nexport function dirname(path: string) {\n    return join(path, \"..\");\n}\n","const BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction toUTF8Bytes(value: string): Uint8Array {\n    if (typeof TextEncoder !== \"undefined\") {\n        return new TextEncoder().encode(value);\n    }\n\n    const encoded = encodeURIComponent(value);\n    const bytes: number[] = [];\n    for (let i = 0; i < encoded.length; ++i) {\n        if (encoded[i] === \"%\") {\n            bytes.push(parseInt(encoded.substring(i + 1, i + 3), 16));\n            i += 2;\n        } else {\n            bytes.push(encoded.charCodeAt(i));\n        }\n    }\n    return Uint8Array.from(bytes);\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n    let output = \"\";\n    for (let i = 0; i < bytes.length; i += 3) {\n        const byte1 = bytes[i];\n        const hasByte2 = i + 1 < bytes.length;\n        const hasByte3 = i + 2 < bytes.length;\n        const byte2 = hasByte2 ? bytes[i + 1] : 0;\n        const byte3 = hasByte3 ? bytes[i + 2] : 0;\n\n        output += BASE64_ALPHABET[byte1 >> 2];\n        output += BASE64_ALPHABET[((byte1 & 0x03) << 4) | (byte2 >> 4)];\n        output += hasByte2 ? BASE64_ALPHABET[((byte2 & 0x0f) << 2) | (byte3 >> 6)] : \"=\";\n        output += hasByte3 ? BASE64_ALPHABET[byte3 & 0x3f] : \"=\";\n    }\n    return output;\n}\n\nexport function utf8ToBase64(value: string = \"\"): string {\n    const normalized = value == null ? \"\" : String(value);\n\n    const maybeBuffer = (globalThis as any)?.Buffer;\n    if (maybeBuffer?.from) {\n        return maybeBuffer.from(normalized, \"utf8\").toString(\"base64\");\n    }\n\n    return bytesToBase64(toUTF8Bytes(normalized));\n}\n","export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n"],"names":["find","o","predicate","TypeError","len","length","thisArg","arguments","k","kValue","call","compare","before","after","retVal","update","exit","enter","row","otherIdx","indexOf","push","splice","compare2","idFunc","updateFunc","unknownMap","forEach","item","id","key","pad","hash","fold","text","i","charCodeAt","foldObject","seen","hashSum","Object","keys","sort","reduce","input","foldValue","value","toString","prototype","__name","_Cache","_cache","_calcID","args","constructor","calcID","this","has","espObj","set","obj","get","factory","Cache","_AsyncCache","Promise","resolve","AsyncCache","debounce","fn","timeout","promises","params","clockStart","Date","now","promise","then","response","setTimeout","Math","max","catch","e","promiseTimeout","ms","reject","clearTimeout","race","_AsyncOrderedQueue","_q","isTop","p","shift","intervalHandler","setInterval","clearInterval","AsyncOrderedQueue","sleep","_Dictionary","store","attrs","remove","values","Dictionary","_DictionaryNoCase","super","toLowerCase","DictionaryNoCase","espTime2Seconds","duration","isNaN","Number","nsIndex","parseFloat","substr","msIndex","sIndex","dayTimeParts","split","days","secs","timeParts","reverse","j","pow","GraphItem$1","_a","_graph","parent","props","graph","_b","GraphItem","subgraphs","vertices","edges","_","_addSubgraph","full","removeSubgraph","createSubgraph","subgraph","Error","_removeSubgraph","idx","removeAllSubgraphs","createVertex","_addVertex","vertex","_removeVertex","removeAllVertices","removeVertex","createEdge","source","target","_addEdge","edge","_removeEdge","_add","Vertex","_c","inEdges","outEdges","addInEdge","removeInEdge","addOutEdge","removeOutEdge","_d","removeEdge","_Graph","root","_allSubgraphs","_allSubgraphsMap","_allVertices","_allVerticesMap","_allEdges","_allEdgesMap","idOf","Subgraph","childSubgraph","inEdge","outEdge","Edge","_walk","visitor","walk","clone","ctor","map","ObjMap","put","Graph","index","_GraphItem","g","_ChildGraphItem","_parent","clearParent","removeChild","addChild","ChildGraphItem","_Subgraph","_children","children","filter","_Vertex","_inEdges","_outEdges","edgeCount","_Edge","_source","_target","_Graph2","_directed","_subgraphMap","_vertexMap","_edgeMap","directed","clear","clearParents","isDirected","_idFunc","_sourceFunc","sourceFunc","_targetFunc","targetFunc","_updateFunc","type","subgraphExists","vertexExists","edgeExists","isSubgraph","isVertex","isEdge","allItems","allSubgraphs","allVertices","allEdges","itemExists","subgraphSubgraphs","child","subgraphVertices","subgraphEdges","addSubgraph","s","s_id","p_id","mergeSubgraphs","_subgraphs","sgDiff","sg","updateSubgraph","sg_id","promoteChildren","subgraphParent","parentID","vertexEdges","vertexID","_neighbors","neighbors","n","singleNeighbors","addVertex","v","v_id","mergeVertices","_vertices","vDiff","updateVertex","vertexParent","addEdge","e_id","e_source","e_target","mergeEdges","_edges","eDiff","updateEdge","old_source","new_source","old_target","new_target","e_sourceID","e_targetID","_hwalk","formatter","hierarchy","dijkstra","Q","Set","prev","dist","adj","vertex_with_min_dist","min_distance","Infinity","u","v1","v2","add","size","delete","alt","ids","unshift","visited","visit","ancestors","Graph2","_Set","_content","isArray","Array","keyList","hasProp","hasOwnProperty","verboseDeepEquals","a","b","functionRefCompare","arrA","arrB","console","warn","dateA","dateB","getTime","regexpA","RegExp","regexpB","deepEquals","origItem","newItem","globalThis","window","isBrowser","isNode","process","versions","node","isCI","env","TRAVIS","GITHUB_ACTIONS","CI","getScriptSrc","partial","scripts","document","script","src","substring","_Stack","stack","pop","top","depth","Stack","Level","colours","debug","info","notice","warning","error","critical","alert","emergency","_ConsoleWriter","write","dateTime","level","msg","log","toUpperCase","ConsoleWriter","_Logging","_levelStack","_level","_filter","_writer","Instance","_instance","stringify","cache","JSON","_key","writer","toISOString","rawWrite","pushLevel","popLevel","Logging","logger","_ScopedLogging","_scopeID","scopeID","ScopedLogging","scopedLogger","degreesToRadians","degrees","PI","radiansToDegrees","radians","polarToCartesian","r","theta","x","cos","y","sin","cartesianToPolar","sqrt","atan2","normalizeRadians","min","normalize","normalizeDegrees","spread","offsetValue","floor","inner","prop","exists","_mixin","dest","empty","deepMixin","sources","deepMixinT","safeStringify","arg","classID2Meta","classID","classInfo","module","file","class","_ObserverHandle","eventTarget","eventID","callback","release","removeObserver","unwatch","ObserverHandle","_Observable","_eventObservers","events","addObserver","eventObservers","dispatchEvent","observer","_hasObserver","hasObserver","_eventID","requestAnimationFrame","Observable","lastTime","currTime","timeToCall","_Message","canConflate","conflate","other","Message","_Dispatch","_observerID","_observers","_messageBuffer","_rafHandle","observers","messages","some","msg2","dispatchAll","dispatch","flush","msgs","m","void","send","post","attach","context","Dispatch","_XMLNode","name","$","content","appendAttribute","val","appendContent","appendChild","tag","xmlNode","XMLNode","_SAXStackParser","walkDoc","_startXMLNode","attributes","attribute","nodeName","nodeValue","startXMLNode","childNodes","childNode","nodeType","TEXT_NODE","characters","endXMLNode","newNode","parse","xml","doc","DOMParser","parseFromString","startDocument","endDocument","SAXStackParser","_XML2JSONParser","XML2JSONParser","xml2json","saxParser","_PropChangedMessage","property","newValue","oldValue","PropChangedMessage","_StateObject","_espState","_dispatch","_monitorHandle","_monitorTickCount","newVals","defValue","keyOrNewVals","newVal","setSingle","setAll","oldVal","propIDOrCallback","isCallback","filteredMessages","event","on","hasEventListener","refresh","_monitor","_monitorTimeoutDuration","watch","triggerChange","changes","StateObject","trim","str","char","endsWith","origString","searchString","position","subjectString","isFinite","lastIndex","lastIndexOf","join","segments","parts","segment","replace","resultParts","part","dirname","path","BASE64_ALPHABET","toUTF8Bytes","TextEncoder","encode","encoded","encodeURIComponent","bytes","parseInt","Uint8Array","from","bytesToBase64","output","byte1","hasByte2","hasByte3","byte2","byte3","utf8ToBase64","normalized","String","maybeBuffer","Buffer"],"mappings":"0UACO,SAASA,EAAQC,EAAqBC,GAEzC,GAAS,MAALD,EACA,MAAM,IAAIE,UAAU,8BAIxB,MAAMC,EAAMH,EAAEI,SAAW,EAGzB,GAAyB,mBAAdH,EACP,MAAM,IAAIC,UAAU,gCAIxB,MAAMG,EAAUC,UAAU,GAG1B,IAAIC,EAAI,EAGR,KAAOA,EAAIJ,GAAK,CAKZ,MAAMK,EAASR,EAAEO,GACjB,GAAIN,EAAUQ,KAAKJ,EAASG,EAAQD,GAChC,OAAOC,EAGXD,GACJ,CAIJ,CAOO,SAASG,EAAWC,EAAsBC,GAC7C,MAAMC,EAA2B,CAC7BC,OAAQ,GACRC,KAAM,GACNC,MAAO,IAAIJ,IAEf,IAAA,MAAWK,KAAON,EAAQ,CACtB,MAAMO,EAAWL,EAAOG,MAAMG,QAAQF,GAClCC,GAAY,GACZL,EAAOC,OAAOM,KAAKH,GACnBJ,EAAOG,MAAMK,OAAOH,EAAU,IAE9BL,EAAOE,KAAKK,KAAKH,EAEzB,CACA,OAAOJ,CACX,CAQO,SAASS,EAAYX,EAAsBC,EAAqBW,EAAsCC,EAAyC,CAACb,EAAQC,IAAUA,GACrK,MAAMC,EAA2B,CAC7BC,OAAQ,GACRC,KAAM,GACNC,MAAO,IAEX,GAAIL,IAAWC,EAEX,OADAC,EAAOC,OAASH,EACTE,EAEX,MAAMY,EAAmC,CAAA,EACzCb,EAAMc,QAAQC,IACVF,EAAWF,EAAOI,IAASA,IAE/B,IAAA,MAAWV,KAAON,EAAQ,CACtB,MAAMiB,EAAKL,EAAON,GACZU,EAAOF,EAAWG,QACX,IAATD,UACOF,EAAWG,GAClBf,EAAOC,OAAOM,KAAKI,EAAWP,EAAKU,KAEnCd,EAAOE,KAAKK,KAAKH,EAEzB,CACA,IAAA,MAAWY,KAAOJ,EACdZ,EAAOG,MAAMI,KAAKK,EAAWI,IAEjC,OAAOhB,CACX,CC9FA,SAASiB,EAAIC,EAAc5B,GACvB,KAAO4B,EAAK3B,OAASD,GACjB4B,EAAO,IAAMA,EAEjB,OAAOA,CACX,CAEA,SAASC,EAAKD,EAAcE,GACxB,GAAoB,IAAhBA,EAAK7B,OACL,OAAO2B,EAEX,IAAA,IAASG,EAAI,EAAGA,EAAID,EAAK7B,SAAU8B,EAAG,CAElCH,GAASA,GAAQ,GAAKA,EADVE,EAAKE,WAAWD,GAE5BH,GAAQ,CACZ,CACA,OAAOA,EAAO,GAAW,EAAPA,EAAYA,CAClC,CAEA,SAASK,EAAWL,EAAc/B,EAAQqC,GACtC,MAAyB,mBAAdrC,EAAEsC,QACFtC,EAAEsC,UAENC,OAAOC,KAAKxC,GAAGyC,OAAOC,OAAO,CAACC,EAAYd,IACtCe,EAAUD,EAAO3C,EAAE6B,GAAMA,EAAKQ,GACtCN,EACP,CAEA,SAASa,EAAUD,EAAeE,EAAYhB,EAAaQ,GACvD,MAAMN,EAAOC,EAAKA,EAAKA,EAAKW,EAAOd,GAAMiB,EAASD,WAAgBA,GAClE,OAAc,OAAVA,EACOb,EAAKD,EAAM,aAER,IAAVc,EACOb,EAAKD,EAAM,aAED,iBAAVc,GACqB,IAAxBR,EAAKlB,QAAQ0B,GACNb,EAAKD,EAAM,aAAeF,IAErCQ,EAAKjB,KAAKyB,GACHT,EAAWL,EAAMc,EAAOR,IAE5BL,EAAKD,EAAMc,EAAMC,WAC5B,CAEA,SAASA,EAAS9C,GACd,OAAOuC,OAAOQ,UAAUD,SAASrC,KAAKT,EAC1C,CAEO,SAASsC,EAAQtC,GACpB,OAAO8B,EAAIc,EAAU,EAAG5C,EAAG,GAAI,IAAI8C,SAAS,IAAK,EACrD,CDrDgBE,EAAAjD,EAAA,QA2CAiD,EAAAtC,EAAA,WAwBAsC,EAAA1B,EAAA,YClEP0B,EAAAlB,EAAA,OAOAkB,EAAAhB,EAAA,QAYAgB,EAAAZ,EAAA,cASAY,EAAAJ,EAAA,aAkBAI,EAAAF,EAAA,YAIOE,EAAAV,EAAA,WClDT,MAAMW,EAAN,MAAMA,OACDC,OAA8B,CAAA,EAC9BC,QAER,WAAOpB,IAAQqB,GACX,OAAOd,EAAQ,IAAKc,GACxB,CAEA,WAAAC,CAAYC,GACRC,KAAKJ,QAAUG,CACnB,CAEA,GAAAE,CAAIC,GACA,OAAOF,KAAKJ,QAAQM,KAAWF,KAAKL,MACxC,CAEA,GAAAQ,CAAIC,GAEA,OADAJ,KAAKL,OAAOK,KAAKJ,QAAQQ,IAAQA,EAC1BA,CACX,CAIA,GAAAC,CAAIH,EAAWI,GACX,MAAMhD,EAAS0C,KAAKL,OAAOK,KAAKJ,QAAQM,IACxC,OAAK5C,IACMgD,EAAUN,KAAKG,IAAIG,KAAa,KAG/C,GA7BqBb,EAAAC,EAAA,SAAlB,IAAMa,EAANb,EAgCA,MAAMc,EAAN,MAAMA,YACDb,OAAuC,CAAA,EACvCC,QAER,WAAOpB,IAAQqB,GACX,OAAOd,EAAQ,IAAKc,GACxB,CAEA,WAAAC,CAAYC,GACRC,KAAKJ,QAAUG,CACnB,CAEA,GAAAE,CAAIC,GACA,OAAOF,KAAKJ,QAAQM,KAAWF,KAAKL,MACxC,CAEA,GAAAQ,CAAID,EAAWE,GAEX,OADAJ,KAAKL,OAAOK,KAAKJ,QAAQM,IAAWE,EAC7BA,CACX,CAIA,GAAAC,CAAIH,EAAWI,GACX,MAAMhD,EAAS0C,KAAKL,OAAOK,KAAKJ,QAAQM,IACxC,OAAK5C,IACMgD,EAAUN,KAAKG,IAAID,EAAQI,KAAaG,QAAQC,QAAQ,MAGvE,GA7B0BjB,EAAAe,EAAA,cAAvB,IAAMG,EAANH,EC3BA,SAASI,EAAyCC,EAAgCC,GACrF,MAAMC,EAAyE,CAAA,EAE/E,MAAO,IAAIC,KACP,MAAMxC,EAAOO,EAAQiC,GAmBrB,OAlBKD,EAASvC,KACVuC,EAASvC,GAAQ,CACbyC,WAAYC,KAAKC,MACjBC,QAASP,KAAMG,GAAQK,KAAKC,SACR,IAAZR,EACAC,EAASvC,GAAQ,KAEjB+C,WAAW,KACPR,EAASvC,GAAQ,MAClBgD,KAAKC,IAAIX,GAAWI,KAAKC,MAAQJ,EAASvC,GAAOyC,YAAa,IAE9DK,IACRI,MAAMC,IAEL,MADAZ,EAASvC,GAAQ,KACXmD,MAIXZ,EAASvC,GAAO4C,QAE/B,CAEO,SAASQ,EAAkBC,EAAYT,GAC1C,IAAI/C,EACJ,MAAMyC,EAAU,IAAIL,QAAQ,CAACC,EAASoB,KAClCzD,EAAKkD,WAAW,KACZQ,aAAa1D,GACbyD,EAAO,gBAAkBD,EAAK,QAC/BA,KAGP,OAAOpB,QAAQuB,KAAK,CAChBZ,EACAN,IACDO,KAAMC,IACLS,aAAa1D,GACNiD,IACRI,MAAMC,IAEL,MADAI,aAAa1D,GACPsD,GAEd,CA9CgBlC,EAAAmB,EAAA,YA2BAnB,EAAAmC,EAAA,kBAqBT,MAAMK,EAAN,MAAMA,mBACDC,GAA0B,GAE1B,KAAAC,CAAMC,GACV,OAAOpC,KAAKkC,GAAG,KAAOE,CAC1B,CAEA,IAAAvE,CAAQuE,GACJ,MAAM9E,EAAS8E,EAAEf,KAAKC,GACdtB,KAAKmC,MAAM7E,IACX0C,KAAKkC,GAAGG,QACDf,GAEJ,IAAIb,QAAW,CAACC,EAASoB,KAC5B,MAAMQ,EAAkBC,YAAY,KAC5BvC,KAAKmC,MAAM7E,KACXkF,cAAcF,GACdtC,KAAKkC,GAAGG,QACR3B,EAAQY,KAEb,OAIX,OADAtB,KAAKkC,GAAGrE,KAAKP,GACNA,CACX,GAzB2BmC,EAAAwC,EAAA,qBAAxB,IAAMQ,EAANR,EA4BA,SAASS,EAAMb,GAClB,OAAO,IAAIpB,QAAQC,IACfa,WAAW,IAAMb,IAAWmB,IAEpC,CAJgBpC,EAAAiD,EAAA,SCjFT,MAAMC,EAAN,MAAMA,YACDC,MAA8B,CAAA,EAEtC,WAAA9C,CAAY+C,GACR,GAAIA,EACA,IAAA,MAAWvE,KAAOuE,EACd7C,KAAKG,IAAI7B,EAAKuE,EAAMvE,GAGhC,CAEA,GAAA6B,CAAI7B,EAAagB,GACb,MAAMhC,EAAY0C,KAAK4C,MAAMtE,GAE7B,OADA0B,KAAK4C,MAAMtE,GAAOgB,EACXhC,CACX,CAEA,GAAA+C,CAAI/B,GACA,OAAO0B,KAAK4C,MAAMtE,EACtB,CAEA,GAAA2B,CAAI3B,GACA,YAA2B,IAApB0B,KAAK4C,MAAMtE,EACtB,CAEA,MAAAwE,CAAOxE,UACI0B,KAAK4C,MAAMtE,EACtB,CAEA,IAAAW,GACI,MAAM3B,EAAmB,GACzB,IAAA,MAAWgB,KAAO0B,KAAK4C,MACnBtF,EAAOO,KAAKS,GAEhB,OAAOhB,CACX,CAEA,MAAAyF,GACI,MAAMzF,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAK4C,MACnBtF,EAAOO,KAAKmC,KAAK4C,MAAMtE,IAE3B,OAAOhB,CACX,GA3CuBmC,EAAAkD,EAAA,cAApB,IAAMK,EAANL,EA8CA,MAAMM,EAAN,MAAMA,0BAA4BD,EACrC,WAAAlD,CAAY+C,GACRK,MAAML,EACV,CAEA,GAAA1C,CAAI7B,EAAagB,GACb,OAAO4D,MAAM/C,IAAI7B,EAAI6E,cAAe7D,EACxC,CAEA,GAAAe,CAAI/B,GACA,OAAO4E,MAAM7C,IAAI/B,EAAI6E,cACzB,CAEA,GAAAlD,CAAI3B,GACA,OAAO4E,MAAMjD,IAAI3B,EAAI6E,cACzB,CAEA,MAAAL,CAAOxE,GACH,OAAO4E,MAAMJ,OAAOxE,EAAI6E,cAC5B,GAnBmD1D,EAAAwD,EAAA,oBAAhD,IAAMG,EAANH,EChDA,SAASI,EAAgBC,GAC5B,IAAKA,EACD,OAAO,EAEP,IAAKC,MAAMC,OAAOF,IACd,OAAOE,OAAOF,GAItB,MAAMG,EAAUH,EAAS1F,QAAQ,MACjC,IAAgB,IAAZ6F,EACA,OAAOC,WAAWJ,EAASK,OAAO,EAAGF,IAAY,IAErD,MAAMG,EAAUN,EAAS1F,QAAQ,MACjC,IAAgB,IAAZgG,EACA,OAAOF,WAAWJ,EAASK,OAAO,EAAGC,IAAY,IAErD,MAAMC,EAASP,EAAS1F,QAAQ,KAChC,IAAe,IAAXiG,IAA8C,IAA7BP,EAAS1F,QAAQ,QAClC,OAAO8F,WAAWJ,EAASK,OAAO,EAAGE,IAGzC,MAAMC,EAAeR,EAASS,MAAM,UAC9BC,EAAeF,EAAajH,OAAS,EAAI6G,WAAWI,EAAa,IAAM,EAE7E,IAAIG,EAAO,EACX,MAAMC,GAFeJ,EAAajH,OAAS,EAAIiH,EAAa,GAAKA,EAAa,IAEvDC,MAAM,KAAKI,UAClC,IAAA,IAASC,EAAI,EAAGA,EAAIF,EAAUrH,SAAUuH,EACpCH,GAAQP,WAAWQ,EAAUE,IAAM5C,KAAK6C,IAAI,GAAID,GAEpD,OAAe,GAAPJ,EAAY,GAAK,GAAMC,CACnC,CA/BgBxE,EAAA4D,EAAA,mBCAT,IAAAiB,GAAyB7E,EAAzB8E,EAAA,MACOC,OACDC,OACAC,MAAgC,CAAA,EAEzC,WAAA5E,CAAY6E,EAAuBF,GAC/BzE,KAAKwE,OAASG,EACd3E,KAAKyE,OAASA,CAClB,GAR4B,aAAzBF,MAWmD9E,EAAnDmF,gBAAgCC,EAC1BC,UAAsC,GACtCC,SAAmC,GACnCC,MAA8B,GAC9BC,EAET,WAAAnF,CAAY6E,EAAuBF,EAAkCQ,GACjE/B,MAAMyB,EAAOF,GACTA,GACAA,EAAOS,aAAalF,MAExBA,KAAKiF,EAAIA,CACb,CAEA,MAAAnC,CAAOqC,GAAgB,GACnBnF,KAAKwE,OAAOY,eAAepF,KAAMmF,EACrC,CAEA,cAAAE,CAAeJ,GACX,OAAOjF,KAAKwE,OAAOa,eAAerF,KAAMiF,EAC5C,CAEA,YAAAC,CAAaI,GACT,GAAItF,KAAK8E,UAAUlH,QAAQ0H,IAAa,EACpC,MAAM,IAAIC,MAAM,2BAEpBvF,KAAK8E,UAAUjH,KAAKyH,EACxB,CAEA,eAAAE,CAAgBF,GACZ,MAAMG,EAAMzF,KAAK8E,UAAUlH,QAAQ0H,GACnC,GAAIG,EAAM,EACN,MAAM,IAAIF,MAAM,2BAEpBvF,KAAK8E,UAAUhH,OAAO2H,EAAK,EAC/B,CAEA,kBAAAC,GACI,IAAA,IAAS/G,EAAIqB,KAAK8E,UAAUjI,OAAS,EAAG8B,GAAK,IAAKA,EAC9CqB,KAAKwE,OAAOY,eAAepF,KAAK8E,UAAUnG,IAAI,EAEtD,CAEA,YAAAgH,CAAaV,GACT,OAAOjF,KAAKwE,OAAOmB,aAAa3F,KAAMiF,EAC1C,CAEA,UAAAW,CAAWC,GACP,GAAI7F,KAAK+E,SAASnH,QAAQiI,IAAW,EACjC,MAAM,IAAIN,MAAM,yBAEpBvF,KAAK+E,SAASlH,KAAKgI,EACvB,CAEA,aAAAC,CAAcD,GACV,MAAMJ,EAAMzF,KAAK+E,SAASnH,QAAQiI,GAClC,GAAIJ,EAAM,EACN,MAAM,IAAIF,MAAM,yBAEpBvF,KAAK+E,SAASjH,OAAO2H,EAAK,EAC9B,CAEA,iBAAAM,GACI,IAAA,IAASpH,EAAIqB,KAAK+E,SAASlI,OAAS,EAAG8B,GAAK,IAAKA,EAC7CqB,KAAKwE,OAAOwB,aAAahG,KAAK+E,SAASpG,IAAI,EAEnD,CAEA,UAAAsH,CAAWC,EAAyBC,EAAyBlB,GACzD,OAAOjF,KAAKwE,OAAOyB,WAAWjG,KAAMkG,EAAQC,EAAQlB,EACxD,CAEA,QAAAmB,CAASC,GACL,GAAIrG,KAAKgF,MAAMpH,QAAQyI,IAAS,EAC5B,MAAM,IAAId,MAAM,uBAEpBvF,KAAKgF,MAAMnH,KAAKwI,EACpB,CAEA,WAAAC,CAAYD,GACR,MAAMZ,EAAMzF,KAAKgF,MAAMpH,QAAQyI,GAC/B,GAAIZ,EAAM,EACN,MAAM,IAAIF,MAAM,uBAEpBvF,KAAKgF,MAAMlH,OAAO2H,EAAK,EAC3B,CAEA,IAAAc,CAAKnI,GACGA,aAAgBwG,EAChB5E,KAAKkF,aAAa9G,GACXA,aAAgBoI,EACvBxG,KAAK4F,WAAWxH,GAEhB4B,KAAKoG,SAAShI,EAEtB,GA/FsD,YAAnDwG,MAkGiDnF,EAAjDgH,gBAA8B5B,EACxB6B,QAAgC,GAChCC,SAAiC,GAC1C,SAAI3B,GACA,MAAO,IAAIhF,KAAK0G,WAAY1G,KAAK2G,SACrC,CACS1B,EAET,WAAAnF,CAAY6E,EAAuBF,EAA2BQ,GAC1D/B,MAAMyB,EAAOF,GACbA,EAAOmB,WAAW5F,MAClBA,KAAKiF,EAAIA,CACb,CAEA,MAAAnC,CAAOqC,GAAgB,EAAMF,GACzB,OAAOjF,KAAKwE,OAAOwB,aAAahG,KAAMmF,EAAMF,EAChD,CAEA,SAAA2B,CAAUP,GACNrG,KAAK0G,QAAQ7I,KAAKwI,EACtB,CAEA,YAAAQ,CAAaR,GACT,MAAMZ,EAAMzF,KAAK0G,QAAQ9I,QAAQyI,GACjC,GAAIZ,EAAM,EACN,MAAM,IAAIF,MAAM,0BAEpBvF,KAAK0G,QAAQ5I,OAAO2H,EAAK,EAC7B,CAEA,UAAAqB,CAAWT,GACPrG,KAAK2G,SAAS9I,KAAKwI,EACvB,CAEA,aAAAU,CAAcV,GACV,MAAMZ,EAAMzF,KAAK2G,SAAS/I,QAAQyI,GAClC,GAAIZ,EAAM,EACN,MAAM,IAAIF,MAAM,2BAEpBvF,KAAK2G,SAAS7I,OAAO2H,EAAK,EAC9B,GAxCoD,UAAjDgB,MA2C+ChH,EAA/CuH,gBAA4BnC,EACtBqB,OACAC,OACAlB,EAET,WAAAnF,CAAY6E,EAAuBF,EAA2ByB,EAAyBC,EAAyBlB,GAE5G,GADA/B,MAAMyB,EAAOF,IACRyB,EACD,MAAM,IAAIX,MAAM,yBAEpB,IAAKY,EACD,MAAM,IAAIZ,MAAM,yBAEpBd,EAAO2B,SAASpG,MAChBA,KAAKkG,OAASA,EACdlG,KAAKkG,OAAOY,WAAW9G,MACvBA,KAAKmG,OAASA,EACdnG,KAAKmG,OAAOS,UAAU5G,MACtBA,KAAKiF,EAAIA,CACb,CAEA,MAAAnC,GACI9C,KAAKwE,OAAOyC,WAAWjH,KAC3B,GAvBkD,QAA/CgH,GA0BA,MAAME,EAAN,MAAMA,OACAC,KACDC,cAA0C,GAC1CC,iBAAwD,CAAA,EACxDC,aAAuC,GACvCC,gBAAqD,CAAA,EACrDC,UAAkC,GAClCC,aAAgD,CAAA,EAExDC,KAEA,WAAA5H,CAAY4H,EAA8EtJ,GAAQ,GAAKA,EAAK6G,EAAGA,GAC3GjF,KAAKmH,KAAO,IAAIQ,EAAS3H,KAAM,KAAMiF,GACrCjF,KAAK0H,KAAOA,CAChB,CAEA,cAAArC,CAAeZ,EAA4BQ,GACvC,MAAM3H,EAAS,IAAIqK,EAAS3H,KAAMyE,GAAUzE,KAAKmH,KAAMlC,GAGvD,OAFAjF,KAAKoH,cAAcvJ,KAAKP,GACxB0C,KAAKqH,iBAAiBrH,KAAK0H,KAAKpK,IAAWA,EACpCA,CACX,CAEA,cAAA8H,CAAeE,EAA6BH,GAAgB,GACxD,MAAMM,EAAMzF,KAAKoH,cAAcxJ,QAAQ0H,GACvC,GAAIG,EAAM,EACN,MAAM,IAAIF,MAAM,2BAEpBvF,KAAKoH,cAActJ,OAAO2H,EAAK,UACxBzF,KAAKqH,iBAAiBrH,KAAK0H,KAAKpC,IACnCA,EAASb,QACTa,EAASb,OAAOe,gBAAgBF,GAEpCA,EAASN,MAAM7G,QAAQkI,GAAQlB,EAAOnF,KAAKiH,WAAWZ,GAAQf,EAASb,OAAQ2B,SAASC,IACxFf,EAASP,SAAS5G,QAAQ0H,GAAUV,EAAOnF,KAAKgG,aAAaH,EAAQV,GAAQG,EAASb,OAAQmB,WAAWC,IACzGP,EAASR,UAAU3G,QAAQyJ,GAAiBzC,EAAOnF,KAAKoF,eAAewC,EAAezC,GAAQG,EAASb,OAAQS,aAAa0C,GAEhI,CAEA,aAAI9C,GACA,OAAO9E,KAAKoH,aAChB,CAEA,QAAA9B,CAASjH,GACL,OAAO2B,KAAKqH,iBAAiBhJ,EACjC,CAEA,YAAAsH,CAAalB,EAA2BQ,GACpC,MAAM3H,EAAS,IAAIkJ,EAAOxG,KAAMyE,EAAQQ,GAGxC,OAFAjF,KAAKsH,aAAazJ,KAAKP,GACvB0C,KAAKuH,gBAAgBvH,KAAK0H,KAAKpK,IAAWA,EACnCA,CACX,CAEA,YAAA0I,CAAaH,EAAyBV,GAAgB,EAAMF,GACxD,MAAMQ,EAAMzF,KAAKsH,aAAa1J,QAAQiI,GACtC,GAAIJ,EAAM,EACN,MAAM,IAAIF,MAAM,yBAEpBvF,KAAKsH,aAAaxJ,OAAO2H,EAAK,UACvBzF,KAAKuH,gBAAgBvH,KAAK0H,KAAK7B,IAClCA,EAAOpB,QACPoB,EAAOpB,OAAOqB,cAAcD,GAE3BV,GACDU,EAAOa,QAAQvI,QAAQ0J,IACnBhC,EAAOc,SAASxI,QAAQ2J,IACpB9H,KAAKiG,WAAWjG,KAAKmH,KAAMU,EAAO3B,OAAQ4B,EAAQ3B,OAAQlB,EAAIA,EAAE4C,EAAO3B,OAAOjB,EAAI6C,EAAQ3B,OAAOlB,QAAM,OAInHY,EAAOa,QAAQvI,QAAQkI,GAAQrG,KAAKiH,WAAWZ,IAC/CR,EAAOc,SAASxI,QAAQkI,GAAQrG,KAAKiH,WAAWZ,GACpD,CAEA,YAAItB,GACA,OAAO/E,KAAKsH,YAChB,CAEA,MAAAzB,CAAOxH,GACH,OAAO2B,KAAKuH,gBAAgBlJ,EAChC,CAEA,UAAA4H,CAAWxB,EAA2ByB,EAAyBC,EAAyBlB,GACpF,MAAM3H,EAAS,IAAIyK,EAAc/H,KAAMyE,EAAQyB,EAAQC,EAAQlB,GAG/D,OAFAjF,KAAKwH,UAAU3J,KAAKP,GACpB0C,KAAKyH,aAAazH,KAAK0H,KAAKpK,IAAWA,EAChCA,CACX,CAEA,UAAA2J,CAAWZ,GACP,MAAMZ,EAAMzF,KAAKwH,UAAU5J,QAAQyI,GACnC,GAAIZ,EAAM,EACN,MAAM,IAAIF,MAAM,uBAEpBvF,KAAKwH,UAAU1J,OAAO2H,EAAK,UACpBzF,KAAKyH,aAAazH,KAAK0H,KAAKrB,IAC/BA,EAAK5B,QACL4B,EAAK5B,OAAO6B,YAAYD,GAE5BA,EAAKH,OAAOa,cAAcV,GAC1BA,EAAKF,OAAOU,aAAaR,EAC7B,CAEA,SAAIrB,GACA,OAAOhF,KAAKwH,SAChB,CAEA,IAAAnB,CAAKhI,GACD,OAAO2B,KAAKyH,aAAapJ,EAC7B,CAEQ,KAAA2J,CAAMvD,EAA2BwD,GACrC,IAAA,MAAW3C,KAAYb,EAAOK,UAC1B,OAAQmD,EAAQ3C,IACZ,IAAK,QACD,OAAO,EACX,IAAK,WACD,MACJ,QACI,GAAItF,KAAKgI,MAAM1C,EAAU2C,GAAU,OAAO,EAGtD,IAAA,MAAWpC,KAAUpB,EAAOM,SACxB,GAAwB,UAApBkD,EAAQpC,GAAqB,OAAO,CAEhD,CAEA,IAAAqC,CAAKD,GACDjI,KAAKgI,MAAMhI,KAAKmH,KAAMc,GACtB,IAAA,MAAW5B,KAAQrG,KAAKwH,UACpB,GAAsB,UAAlBS,EAAQ5B,GAAmB,OAAO,CAE9C,CAEA,KAAA8B,GACI,MACM7K,EAAS,IAAI8K,EADsGpI,KAAKF,aACtGE,KAAK0H,KAAM1H,KAAKmH,KAAKlC,GACvCoD,EAAMC,IAcZ,OAbAD,EAAIE,IAAIvI,KAAKmH,KAAM7J,EAAO6J,MAC1BnH,KAAKkI,KAAK9J,IACN,MAAMqG,EAAS4D,EAAIhI,IAAIjC,EAAKqG,QAC5B,GAAIrG,aAAgBuJ,EAChBU,EAAIE,IAAInK,EAAMqG,EAAOY,eAAejH,EAAK6G,SAC7C,GAAW7G,aAAgBoI,EACvB6B,EAAIE,IAAInK,EAAMqG,EAAOkB,aAAavH,EAAK6G,SAC3C,GAAW7G,aAAgB2J,EAAM,CAC7B,MAAM7B,EAASmC,EAAIhI,IAAIjC,EAAK8H,QACtBC,EAASkC,EAAIhI,IAAIjC,EAAK+H,QAC5B1B,EAAOwB,WAAWC,EAAQC,EAAQ/H,EAAK6G,EAC3C,IAEG3H,CACX,GAzJ4DmC,EAAAyH,EAAA,SAAzD,IAAMsB,EAANtB,EA4JP,SAASoB,IACL,MAAMrJ,EAAc,GACd8D,EAAgB,GAEtB,MAAO,CACH,GAAAwF,CAAIjK,EAAUgB,GACV,MAAMmJ,EAAQxJ,EAAKrB,QAAQU,IACb,IAAVmK,GACAxJ,EAAKpB,KAAKS,GACVyE,EAAOlF,KAAKyB,IAEZyD,EAAO0F,GAASnJ,CAExB,EACAe,IAAI/B,GACOyE,EAAO9D,EAAKrB,QAAQU,IAGvC,CAlBSmB,EAAA6I,EAAA,UC1UT,MAAMI,EAAN,MAAMA,WACQlE,OACVS,EACA,EAAA5G,GACI,OAAO2B,KAAKwE,OAAOnG,GAAG2B,KAAKiF,EAC/B,CAEA,WAAAnF,CAAY6I,EAAW1D,GACnBjF,KAAKwE,OAASmE,EACd3I,KAAKiF,EAAIA,CACb,GAVqBxF,EAAAiJ,EAAA,aAAzB,IAAM7D,EAAN6D,EAaA,MAAME,EAAN,MAAMA,wBAAgC/D,EAE1BgE,QAER,WAAA/I,CAAY6I,EAAW1D,GACnB/B,MAAMyF,EAAG1D,EACb,CAEA,WAAA6D,GAKI,OAJI9I,KAAK6I,UACL7I,KAAK6I,QAAQE,YAAY/I,aAClBA,KAAK6I,SAET7I,IACX,CAIA,MAAAyE,CAAOQ,GACH,OAAyB,IAArBlI,UAAUF,OAAqBmD,KAAK6I,SACpC7I,KAAK6I,UAAY5D,IACbjF,KAAK6I,SACL7I,KAAK6I,QAAQE,YAAY/I,MAE7BA,KAAK6I,QAAU5D,EACXjF,KAAK6I,SACL7I,KAAK6I,QAAQG,SAAShJ,OAGvBA,KACX,GA9B+CP,EAAAmJ,EAAA,kBAAnD,IAAMK,EAANL,EAiCA,MAAMM,EAAN,MAAMA,kBAA0BD,EAEpBE,UAA8B,GAEtC,WAAArJ,CAAY6I,EAAW1D,GACnB/B,MAAMyF,EAAG1D,EACb,CAEA,QAAAmE,GACI,OAAOpJ,KAAKmJ,SAChB,CAEA,QAAAH,CAAS/D,GACLjF,KAAKmJ,UAAUtL,KAAKoH,EACxB,CAEA,WAAA8D,CAAY9D,GACRjF,KAAKmJ,UAAYnJ,KAAKmJ,UAAUE,UAAc3L,EAAIW,KAAO4G,EAAE5G,GAC/D,GAlB8CoB,EAAAyJ,EAAA,YAAlD,IAAMvB,EAANuB,EAqBA,MAAMI,EAAN,MAAMA,gBAAwBL,EAElBM,SAAmB,GACnBC,UAAoB,GAE5B,WAAA1J,CAAY6I,EAAW1D,GACnB/B,MAAMyF,EAAG1D,EACb,CAEA,KAAAD,GACI,MAAO,IAAIhF,KAAKuJ,YAAavJ,KAAKwJ,UACtC,CAEA,SAAAC,GACI,OAAOzJ,KAAKwJ,UAAU3M,OAASmD,KAAKuJ,SAAS1M,MACjD,CAEA,OAAA6J,GACI,OAAO1G,KAAKuJ,QAChB,CAEA,SAAA3C,CAAUjF,GACN3B,KAAKuJ,SAAS1L,KAAK8D,EACvB,CAEA,YAAAkF,CAAaxI,GACT2B,KAAKuJ,SAAWvJ,KAAKuJ,SAASF,UAAY1H,EAAEsD,EAAE5G,KAAOA,EACzD,CAEA,QAAAsI,GACI,OAAO3G,KAAKwJ,SAChB,CAEA,UAAA1C,CAAWnF,GACP3B,KAAKwJ,UAAU3L,KAAK8D,EACxB,CAEA,aAAAoF,CAAc1I,GACV2B,KAAKwJ,UAAYxJ,KAAKwJ,UAAUH,UAAY1H,EAAEsD,EAAE5G,KAAOA,EAC3D,GAvC4CoB,EAAA6J,EAAA,UAAhD,IAAM9C,EAAN8C,EA0CA,MAAMI,EAAN,MAAMA,cAAsBT,EAExBU,QACAC,QAEA,WAAA9J,CAAY6I,EAAW1D,EAAMiB,EAAgBC,GACzCjD,MAAMyF,EAAG1D,GACTjF,KAAK2J,QAAUzD,EACflG,KAAK4J,QAAUzD,CACnB,GAT0C1G,EAAAiK,EAAA,QAA9C,IAAM3B,EAAN2B,EAkBO,MAAMG,EAAN,MAAMA,QAEDC,UACAC,aAA+B,CAAA,EAC/BC,WAA2B,CAAA,EAC3BC,SAAuB,CAAA,EAE/B,WAAAnK,CAAYoK,GAAW,GACnBlK,KAAK8J,UAAYI,CACrB,CAEA,KAAAC,GAII,OAHAnK,KAAK+J,aAAe,CAAA,EACpB/J,KAAKgK,WAAa,CAAA,EAClBhK,KAAKiK,SAAW,CAAA,EACTjK,IACX,CAEA,YAAAoK,GACI,IAAA,MAAW9L,KAAO0B,KAAK+J,aACnB/J,KAAK+J,aAAazL,GAAKwK,cAE3B,IAAA,MAAWxK,KAAO0B,KAAKgK,WACnBhK,KAAKgK,WAAW1L,GAAKwK,cAEzB,OAAO9I,IACX,CAEA,UAAAqK,GACI,OAAOrK,KAAK8J,SAChB,CAEAQ,QAAU7K,EAACwF,GAA+B,mBAATA,EAAE5G,GAAoB4G,EAAE5G,KAAO4G,EAAE5G,GAAxD,WACV,MAAAL,CAAOiH,GAEH,OADAjF,KAAKsK,QAAUrF,EACRjF,IACX,CAEAuK,YAAc9K,EAACwF,GAAmC,mBAAbA,EAAEiB,OAAwBjB,EAAEiB,SAAWjB,EAAEiB,OAAhE,eACd,UAAAsE,CAAWvF,GAEP,OADAjF,KAAKuK,YAActF,EACZjF,IACX,CAEAyK,YAAchL,EAACwF,GAAmC,mBAAbA,EAAEkB,OAAwBlB,EAAEkB,SAAWlB,EAAEkB,OAAhE,eACd,UAAAuE,CAAWzF,GAEP,OADAjF,KAAKyK,YAAcxF,EACZjF,IACX,CAEA2K,YAAclL,EAAA,CAACrC,EAAmBC,IAAgCA,EAApD,eACd,UAAAY,CAAWgH,GAEP,OADAjF,KAAK2K,YAAc1F,EACZjF,IACX,CAEA,EAAA3B,CAAG4G,GACC,OAAOjF,KAAKsK,QAAQrF,EACxB,CAEA,IAAA2F,CAAKvM,GACD,OAAI2B,KAAK6K,eAAexM,GAAY,IAChC2B,KAAK8K,aAAazM,GAAY,IAC9B2B,KAAK+K,WAAW1M,GAAY,IACzB,EACX,CAEA,UAAA2M,CAAW/F,GACP,OAAOjF,KAAK6K,eAAe7K,KAAK3B,GAAG4G,GACvC,CAEA,QAAAgG,CAAShG,GACL,OAAOjF,KAAK8K,aAAa9K,KAAK3B,GAAG4G,GACrC,CAEA,MAAAiG,CAAOjG,GACH,OAAOjF,KAAK+K,WAAW/K,KAAK3B,GAAG4G,GACnC,CAEA,QAAAkG,GACI,MAAO,IAAInL,KAAKoL,kBAAmBpL,KAAKqL,iBAAkBrL,KAAKsL,WACnE,CAEA,IAAAlN,CAAKC,GACD,OAAI2B,KAAK6K,eAAexM,GAAY2B,KAAKsF,SAASjH,GAC9C2B,KAAK8K,aAAazM,GAAY2B,KAAK6F,OAAOxH,GAC1C2B,KAAK+K,WAAW1M,GAAY2B,KAAKqG,KAAKhI,QAA1C,CAEJ,CAEA,UAAAkN,CAAWlN,GACP,OAAO2B,KAAK+K,WAAW1M,IAAO2B,KAAK8K,aAAazM,IAAO2B,KAAK6K,eAAexM,EAC/E,CAGA,YAAA+M,GACI,MAAM9N,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAK+J,aACnBzM,EAAOO,KAAKmC,KAAK+J,aAAazL,GAAK2G,GAEvC,OAAO3H,CACX,CAEA,SAAAwH,GACI,MAAMxH,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAK+J,kBACqB,IAApC/J,KAAK+J,aAAazL,GAAKmG,UACvBnH,EAAOO,KAAKmC,KAAK+J,aAAazL,GAAK2G,GAG3C,OAAO3H,CACX,CAEA,cAAAuN,CAAexM,GACX,QAAS2B,KAAK+J,aAAa1L,EAC/B,CAEA,QAAAiH,CAASjH,GACL,OAAO2B,KAAK+J,aAAa1L,GAAI4G,CACjC,CAEA,iBAAAuG,CAAkBnN,GACd,OAAO2B,KAAK+J,aAAa1L,GAAI+K,WAAWC,OAAOoC,GAASzL,KAAKgL,WAAWS,EAAMxG,IAAIoD,IAAIoD,GAASA,EAAMxG,EACzG,CAEA,gBAAAyG,CAAiBrN,GACb,OAAO2B,KAAK+J,aAAa1L,GAAI+K,WAAWC,OAAOoC,GAASzL,KAAKiL,SAASQ,EAAMxG,IAAIoD,IAAIoD,GAASA,EAAMxG,EACvG,CAEA,aAAA0G,CAActN,GACV,OAAO2B,KAAK+J,aAAa1L,GAAI+K,WAAWC,OAAOoC,GAASzL,KAAKkL,OAAOO,EAAMxG,IAAIoD,IAAIoD,GAASA,EAAMxG,EACrG,CAEA,WAAA2G,CAAYC,EAAMpH,GACd,MAAMqH,EAAO9L,KAAKsK,QAAQuB,GAC1B,GAAI7L,KAAK+J,aAAa+B,SAAa,IAAIvG,MAAM,aAAauG,sBAC1D,MAAMxG,EAAW,IAAIqC,EAAS3H,KAAM6L,GACpC,GAAIpH,EAAQ,CACR,MAAMsH,EAAO/L,KAAKsK,QAAQ7F,GAC1B,IAAKzE,KAAK+J,aAAagC,SAAa,IAAIxG,MAAM,aAAawG,sBAC3DzG,EAASb,OAAOzE,KAAK+J,aAAagC,GACtC,CAEA,OADA/L,KAAK+J,aAAa+B,GAAQxG,EACnBtF,IACX,CAEA,cAAAgM,CAAeC,EAAkB,IAC7B,MAAMC,EAASnO,EAAYiC,KAAKoL,eAAgBa,EAAYE,GAAMnM,KAAKsK,QAAQ6B,GAAKnM,KAAK2K,aAIzF,OAHAuB,EAAO1O,KAAKW,QAAQgO,GAAMnM,KAAKoF,eAAepF,KAAKsK,QAAQ6B,KAC3DD,EAAOzO,MAAMU,QAAQgO,GAAMnM,KAAK4L,YAAYO,IAC5CD,EAAO3O,OAAOY,QAAQgO,GAAMnM,KAAKoM,eAAeD,IACzCnM,IACX,CAEA,cAAAoM,CAAeD,GACX,MAAME,EAAQrM,KAAKsK,QAAQ6B,GACrB7G,EAAWtF,KAAK+J,aAAasC,GACnC,IAAK/G,EAAU,MAAM,IAAIC,MAAM,aAAa8G,sBAE5C,OADA/G,EAASL,EAAIkH,EACNnM,IACX,CAEA,cAAAoF,CAAe/G,EAAQiO,GAAkB,GACrC,MAAMH,EAAKnM,KAAK+J,aAAa1L,GAC7B,IAAK8N,EAAI,MAAM,IAAI5G,MAAM,aAAalH,sBAatC,OAZA8N,EAAG/C,WAAWjL,QAAQsN,IACda,EACAb,EAAMhH,OAAO0H,EAAG1H,UAEZgH,aAAiB9D,EACjB3H,KAAKoF,eAAeqG,EAAMpN,MAE1B2B,KAAKgG,aAAayF,EAAMpN,eAI7B2B,KAAK+J,aAAa1L,GAClB2B,IACX,CAIA,cAAAuM,CAAelO,EAAQmO,GACnB,MAAMpO,EAAO4B,KAAK+J,aAAa1L,GAC/B,IAAKD,EAAM,MAAM,IAAImH,MAAM,aAAalH,sBACxC,QAAiB,IAAbmO,EAAqB,CACrB,MAAM/H,EAASrG,EAAKqG,SACpB,OAAOA,EAASA,EAAOQ,OAAS,CACpC,CACA,MAAMR,EAASzE,KAAK+J,aAAayC,GACjC,IAAK/H,EAAQ,MAAM,IAAIc,MAAM,kBAAkBd,sBAE/C,OADArG,EAAKqG,OAAOA,GACLzE,IACX,CAGA,WAAAqL,GACI,MAAM/N,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAKgK,WACnB1M,EAAOO,KAAKmC,KAAKgK,WAAW1L,GAAK2G,GAErC,OAAO3H,CACX,CAEA,QAAAyH,GACI,MAAMzH,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAKgK,gBACmB,IAAlChK,KAAKgK,WAAW1L,GAAKmG,UACrBnH,EAAOO,KAAKmC,KAAKgK,WAAW1L,GAAK2G,GAGzC,OAAO3H,CACX,CAEA,YAAAwN,CAAazM,GACT,QAAS2B,KAAKgK,WAAW3L,EAC7B,CAEA,MAAAwH,CAAOxH,GACH,OAAO2B,KAAKgK,WAAW3L,GAAI4G,CAC/B,CAEA,QAAAqG,GACI,MAAMhO,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAKiK,SACnB3M,EAAOO,KAAKmC,KAAKiK,SAAS3L,GAAK2G,GAEnC,OAAO3H,CACX,CAEA,KAAA0H,GACI,MAAM1H,EAAc,GACpB,IAAA,MAAWgB,KAAO0B,KAAKiK,cACiB,IAAhCjK,KAAKiK,SAAS3L,GAAKmG,UACnBnH,EAAOO,KAAKmC,KAAKiK,SAAS3L,GAAK2G,GAGvC,OAAO3H,CACX,CAEA,WAAAmP,CAAYC,GACR,OAAO1M,KAAKgK,WAAW0C,GAAU1H,QAAQqD,IAAI1G,GAAKA,EAAEsD,EACxD,CAEA,OAAAyB,CAAQgG,GACJ,OAAO1M,KAAKgK,WAAW0C,GAAUhG,UAAU2B,IAAI1G,GAAKA,EAAEsD,EAC1D,CAEA,QAAA0B,CAAS+F,GACL,OAAO1M,KAAKgK,WAAW0C,GAAU/F,WAAW0B,IAAI1G,GAAKA,EAAEsD,EAC3D,CAEQ,UAAA0H,CAAWtO,GACf,MAAO,IAAI2B,KAAKgK,WAAW3L,GAAIsI,WAAW0B,IAAI1G,GAAKA,EAAEiI,YAAa5J,KAAKgK,WAAW3L,GAAIqI,UAAU2B,IAAI1G,GAAKA,EAAEgI,SAC/G,CAEA,SAAAiD,CAAUvO,GACN,OAAO2B,KAAK2M,WAAWtO,GAAIgK,IAAIwE,GAAKA,EAAE5H,EAC1C,CAEA,eAAA6H,CAAgBzO,GACZ,OAAO2B,KAAK2M,WAAWtO,GAAIgL,OAAOwD,GAAuB,IAAlBA,EAAEpD,aAAmBpB,IAAIwE,GAAKA,EAAE5H,EAC3E,CAEA,SAAA8H,CAAUC,EAAMvI,GACZ,MAAMwI,EAAOjN,KAAKsK,QAAQ0C,GAC1B,GAAIhN,KAAKgK,WAAWiD,SAAa,IAAI1H,MAAM,WAAW0H,sBACtD,MAAMpH,EAAS,IAAIW,EAAOxG,KAAMgN,GAChC,GAAIvI,EAAQ,CACR,MAAMsH,EAAO/L,KAAKsK,QAAQ7F,GAC1B,IAAKzE,KAAK6K,eAAekB,SAAa,IAAIxG,MAAM,aAAawG,sBAC7DlG,EAAOpB,OAAOzE,KAAK+J,aAAagC,GACpC,CAEA,OADA/L,KAAKgK,WAAWiD,GAAQpH,EACjB7F,IACX,CAEA,aAAAkN,CAAcC,GACV,MAAMC,EAAQrP,EAASiC,KAAKqL,cAAe8B,EAAWH,GAAKhN,KAAKsK,QAAQ0C,GAAIhN,KAAK2K,aAIjF,OAHAyC,EAAM5P,KAAKW,QAAQ6O,GAAKhN,KAAKgG,aAAahG,KAAKsK,QAAQ0C,KACvDI,EAAM3P,MAAMU,QAAQ6O,GAAKhN,KAAK+M,UAAUC,IACxCI,EAAM7P,OAAOY,QAAQ6O,GAAKhN,KAAKqN,aAAaL,IACrChN,IACX,CAEA,YAAAqN,CAAaL,GACT,MAAMC,EAAOjN,KAAKsK,QAAQ0C,GACpBnH,EAAS7F,KAAKgK,WAAWiD,GAC/B,IAAKpH,EAAQ,MAAM,IAAIN,MAAM,WAAW0H,sBAExC,OADApH,EAAOZ,EAAI+H,EACJhN,IACX,CAEA,YAAAgG,CAAa3H,GACT,MAAM2O,EAAIhN,KAAKgK,WAAW3L,GAC1B,IAAK2O,EAAG,MAAM,IAAIzH,MAAM,WAAWlH,sBAKnC,OAJA2O,EAAEhI,QAAQ7G,QAAQwD,IACd3B,KAAKiH,WAAWtF,EAAEtD,eAEf2B,KAAKgK,WAAW3L,GAChB2B,IACX,CAIA,YAAAsN,CAAajP,EAAQmO,GACjB,MAAMpO,EAAO4B,KAAKgK,WAAW3L,GAC7B,IAAKD,EAAM,MAAM,IAAImH,MAAM,WAAWlH,sBACtC,QAAiB,IAAbmO,EAAqB,CACrB,MAAM/H,EAASrG,EAAKqG,SACpB,OAAOA,EAASA,EAAOQ,OAAS,CACpC,CACA,MAAMR,EAASzE,KAAK+J,aAAayC,GACjC,IAAK/H,EAAQ,MAAM,IAAIc,MAAM,kBAAkBd,sBAE/C,OADArG,EAAKqG,OAAOA,GACLzE,IACX,CAGA,UAAA+K,CAAW1M,GACP,QAAS2B,KAAKiK,SAAS5L,EAC3B,CAEA,IAAAgI,CAAKhI,GACD,OAAO2B,KAAKiK,SAAS5L,GAAI4G,CAC7B,CAEA,OAAAsI,CAAQ5L,EAAM8C,GACV,MAAM+I,EAAOxN,KAAKsK,QAAQ3I,GACpB8L,EAAWzN,KAAKuK,YAAY5I,GAC5B+L,EAAW1N,KAAKyK,YAAY9I,GAClC,GAAI3B,KAAKiK,SAASuD,SAAa,IAAIjI,MAAM,SAASiI,sBAClD,IAAKxN,KAAK8K,aAAa2C,SAAiB,IAAIlI,MAAM,gBAAgBkI,sBAClE,IAAKzN,KAAK8K,aAAa4C,SAAiB,IAAInI,MAAM,gBAAgBmI,sBAClE,MAAMrH,EAAO,IAAI0B,EAAK/H,KAAM2B,EAAG3B,KAAKgK,WAAWyD,GAAWzN,KAAKgK,WAAW0D,IAC1E,GAAIjJ,EAAQ,CACR,MAAMsH,EAAO/L,KAAKsK,QAAQ7F,GAC1B,IAAKzE,KAAK6K,eAAekB,SAAa,IAAIxG,MAAM,aAAawG,sBAC7D1F,EAAK5B,OAAOzE,KAAK+J,aAAagC,GAClC,CAIA,OAHA/L,KAAKiK,SAASuD,GAAQnH,EACtBrG,KAAKgK,WAAWyD,GAAU3G,WAAWT,GACrCrG,KAAKgK,WAAW0D,GAAU9G,UAAUP,GAC7BrG,IACX,CAEA,UAAA2N,CAAWC,GACP,MAAMC,EAAQ9P,EAASiC,KAAKsL,WAAYsC,EAAQjM,GAAK3B,KAAKsK,QAAQ3I,GAAI3B,KAAK2K,aAI3E,OAHAkD,EAAMrQ,KAAKW,QAAQwD,GAAK3B,KAAKiH,WAAWjH,KAAKsK,QAAQ3I,KACrDkM,EAAMpQ,MAAMU,QAAQwD,GAAK3B,KAAKuN,QAAQ5L,IACtCkM,EAAMtQ,OAAOY,QAAQwD,GAAK3B,KAAK8N,WAAWnM,IACnC3B,IACX,CAEA,UAAA8N,CAAWnM,GACP,MAAM6L,EAAOxN,KAAKsK,QAAQ3I,GACpB0E,EAAOrG,KAAKiK,SAASuD,GAC3B,IAAKnH,EAAM,MAAM,IAAId,MAAM,SAASiI,sBACpC,MAAMO,EAAa1H,EAAKsD,QAAQtL,KAC1B2P,EAAahO,KAAKuK,YAAY5I,GAChCoM,IAAeC,IACfhO,KAAKgK,WAAW+D,IAAahH,cAAcyG,GAC3CxN,KAAKgK,WAAWgE,IAAalH,WAAWT,IAE5C,MAAM4H,EAAa5H,EAAKuD,QAAQvL,KAC1B6P,EAAalO,KAAKyK,YAAY9I,GAQpC,OAPIsM,IAAeC,IACflO,KAAKgK,WAAWiE,IAAapH,aAAa2G,GAC1CxN,KAAKgK,WAAWkE,IAAatH,UAAUP,IAE3CA,EAAKpB,EAAItD,EACT0E,EAAKsD,QAAU3J,KAAKgK,WAAWgE,GAC/B3H,EAAKuD,QAAU5J,KAAKgK,WAAWkE,GACxBlO,IACX,CAEA,UAAAiH,CAAW5I,GACP,MAAMsD,EAAa3B,KAAKiK,SAAS5L,GACjC,IAAKsD,EAAG,MAAM,IAAI4D,MAAM,SAASlH,sBAEjC,MAAM8P,EAAanO,KAAKsK,QAAQ3I,EAAEgI,QAAQ1E,GAC1C,IAAKjF,KAAK8K,aAAaqD,SAAmB,IAAI5I,MAAM,eAAe4I,sBACnEnO,KAAKgK,WAAWmE,GAAYpH,cAAc1I,GAE1C,MAAM+P,EAAapO,KAAKsK,QAAQ3I,EAAEiI,QAAQ3E,GAC1C,IAAKjF,KAAK8K,aAAasD,SAAmB,IAAI7I,MAAM,eAAe6I,sBAInE,OAHApO,KAAKgK,WAAWoE,GAAYvH,aAAaxI,UAElC2B,KAAKiK,SAAS5L,GACd2B,IACX,CAEU,MAAAqO,CAAOjQ,EAA+BkQ,GAC5C,OAAIlQ,aAAgBuJ,EACT2G,EAAU,WAAYlQ,EAAK6G,EAAG7G,EAAKgL,WAAWf,IAAIoD,GAASzL,KAAKqO,OAAO5C,EAAkC6C,KAEzGA,EAAU,SAAUlQ,EAAK6G,EAExC,CAEA,SAAAsJ,CAAUD,GACN,MAAMhR,EAAmB,GACzB,IAAA,MAAWe,KAAM2B,KAAK+J,aAAc,CAChC,MAAMoC,EAAKnM,KAAK+J,aAAa1L,QACT,IAAhB8N,EAAG1H,UACHnH,EAAOO,KAAKmC,KAAKqO,OAAOlC,EAAImC,GAEpC,CACA,IAAA,MAAWjQ,KAAM2B,KAAKgK,WAAY,CAC9B,MAAMgD,EAAIhN,KAAKgK,WAAW3L,QACP,IAAf2O,EAAEvI,UACFnH,EAAOO,KAAKmC,KAAKqO,OAAOrB,EAAGsB,GAEnC,CACA,OAAOhR,CACX,CAEA,QAAAkR,CAAStI,EAAYC,GACjB,MAAMnB,EAAQhF,KAAKsL,WACbmD,EAAI,IAAIC,EACRC,EAAkC,CAAA,EAClCC,EAAkC,CAAA,EAClCC,EAAoD,CAAA,EAE1D,SAASC,EAAqBL,EAAyBG,GACnD,IAAIG,EAAeC,IACfC,EAA4B,KAQhC,OANAR,EAAEtQ,QAAQ6O,IACF4B,EAAK5B,GAAK+B,IACVA,EAAeH,EAAK5B,GACpBiC,EAAIjC,KAGLiC,CACX,CAXSxP,EAAAqP,EAAA,wBAaT,IAAA,IAASnQ,EAAI,EAAGA,EAAIqG,EAAMnI,OAAQ8B,IAAK,CACnC,MAAMuQ,EAAKlP,KAAKuK,YAAYvF,EAAMrG,IAC5BwQ,EAAKnP,KAAKyK,YAAYzF,EAAMrG,IAC5B/B,EAAM,EAEZ6R,EAAEW,IAAIF,GACNT,EAAEW,IAAID,GAENP,EAAKM,GAAMF,IACXJ,EAAKO,GAAMH,aAEPH,EAAIK,KAAmBL,EAAIK,GAAM,CAAA,YACjCL,EAAIM,KAAmBN,EAAIM,GAAM,CAAA,GAErCN,EAAIK,GAAIC,GAAMvS,EACdiS,EAAIM,GAAID,GAAMtS,CAClB,CAIA,IAFAgS,EAAK1I,GAAU,EAERuI,EAAEY,MAAM,CACX,MAAMJ,EAAIH,EAAqBL,EAAGG,GAClC,GAAU,OAANK,EAAY,MAChB,MAAMrC,EAAY5N,OAAOC,KAAK4P,EAAII,IAAI5F,OAAO2D,GAAKyB,EAAExO,IAAI+M,IAIxD,GAFAyB,EAAEa,OAAOL,GAELA,IAAM9I,EAAQ,MAElB,IAAA,MAAW6G,KAAKJ,EAAW,CACvB,MAAM2C,EAAMX,EAAKK,GAAKJ,EAAII,GAAGjC,GACzBuC,EAAMX,EAAK5B,KACX4B,EAAK5B,GAAKuC,EACVZ,EAAK3B,GAAKiC,EAElB,CACJ,CAEA,IAAIA,EAAI9I,EACR,MAAMqJ,EAAM,CAACP,GACb,IAAIrS,EAAM,EAEV,UAAmB,IAAZ+R,EAAKM,IACRO,EAAIC,QAAQd,EAAKM,IACjBrS,GAAOiS,EAAII,GAAGN,EAAKM,IACnBA,EAAIN,EAAKM,GAEb,MAAO,CAAEO,MAAK5S,MAClB,CAEA,IAAAsC,CAAK+N,GACD,MAAM3P,EAAc,GACdoS,EAAqC,CAAA,EAErCC,EAAQlQ,EAAA,CAACoG,EAAmB+J,EAAyB,MACvD,MAAM3C,EAAOpH,EAAOxH,KAChBqR,EAAQzC,KACZyC,EAAQzC,IAAQ,EAChB2C,EAAU/R,KAAKgI,GACfA,EAAOc,WAAWxI,QAAQwD,IAClBiO,EAAUhS,QAAQ+D,EAAEiI,SAAW,GAC/B+F,EAAMhO,EAAEiI,QAAS,IAAIgG,MAG7BtS,EAAOmS,QAAQ5J,EAAOZ,KAVZ,SAad,GAAIgI,EACA0C,EAAM3P,KAAKgK,WAAWiD,SAEtB,IAAA,MAAW3O,KAAO0B,KAAKgK,WACnB2F,EAAM3P,KAAKgK,WAAW1L,IAI9B,OAAOhB,CACX,GAjgB2CmC,EAAAoK,EAAA,UAAxC,IAAMgG,EAANhG,EAogBP,MAAMiG,EAAN,MAAMA,KAEMC,SAAgB,GACxB,QAAIV,GACA,OAAOrP,KAAK+P,SAASlT,MACzB,CAEA,GAAAoD,CAAIgF,GACA,OAAOjF,KAAK+P,SAASnS,QAAQqH,IAAM,CACvC,CAEA,GAAAmK,CAAInK,GACKjF,KAAKC,IAAIgF,IACVjF,KAAK+P,SAASlS,KAAKoH,EAE3B,CAEA,OAAOA,GACH,MAAMQ,EAAMzF,KAAK+P,SAASnS,QAAQqH,GAC9BQ,GAAO,GACPzF,KAAK+P,SAASjS,OAAO2H,EAAK,EAElC,CAEA,OAAAtH,CAAQ8G,GACJjF,KAAK+P,SAAS5R,QAAQ8G,EAC1B,GA1BSxF,EAAAqQ,EAAA,OAAb,IAAMpB,EAANoB,ECvoBA,MAAME,EAAUC,MAAMD,QAChBE,EAAUlR,OAAOC,KACjBkR,EAAUnR,OAAOQ,UAAU4Q,eAE1B,SAASC,GAAkBC,EAAQC,EAAQC,GAA8B,GAC5E,GAAIF,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,EAAG,CACR,GAAiB,iBAAND,GAA+B,iBAANC,EAAgB,CAChD,MAAME,EAAOT,EAAQM,GACfI,EAAOV,EAAQO,GACrB,IAAI5R,EACA9B,EACAyB,EAEJ,GAAImS,GAAQC,EAAM,CAEd,GADA7T,EAASyT,EAAEzT,OACPA,IAAW0T,EAAE1T,OAEb,OADA8T,QAAQC,KAAK,sBAAsB/T,SAAc0T,EAAE1T,WAC5C,EAEX,IAAK8B,EAAI9B,EAAgB,IAAR8B,KACb,IAAK0R,GAAkBC,EAAE3R,GAAI4R,EAAE5R,GAAI6R,GAC/B,OAAO,EAEf,OAAO,CACX,CAEA,GAAIC,IAASC,EAET,OADAC,QAAQC,KAAK,qBAAqBH,SAAYC,MACvC,EAGX,MAAMG,EAAQP,aAAapP,KACrB4P,EAAQP,aAAarP,KAC3B,GAAI2P,IAAUC,EAEV,OADAH,QAAQC,KAAK,oBAAoBC,SAAaC,MACvC,EAEX,GAAID,GAASC,EAAO,CAChB,MAAMxT,EAASgT,EAAES,YAAcR,EAAEQ,UAIjC,OAHKzT,GACDqT,QAAQC,KAAK,oBAAoBN,EAAES,iBAAiBR,EAAEQ,aAEnDzT,CACX,CAEA,MAAM0T,EAAUV,aAAaW,OACvBC,EAAUX,aAAaU,OAC7B,GAAID,IAAYE,EAEZ,OADAP,QAAQC,KAAK,sBAAsBI,SAAeE,MAC3C,EAEX,GAAIF,GAAWE,EAAS,CACpB,MAAM5T,EAASgT,EAAE/Q,aAAegR,EAAEhR,WAIlC,OAHKjC,GACDqT,QAAQC,KAAK,sBAAsBN,EAAE/Q,kBAAkBgR,EAAEhR,cAEtDjC,CACX,CAEA,MAAM2B,EAAOiR,EAAQI,GAGrB,GAFAzT,EAASoC,EAAKpC,OAEVA,IAAWqT,EAAQK,GAAG1T,OAEtB,OADA8T,QAAQC,KAAK,0BAA0B/T,SAAcqT,EAAQK,GAAG1T,WACzD,EAGX,IAAK8B,EAAI9B,EAAgB,IAAR8B,KACb,IAAKwR,EAAQjT,KAAKqT,EAAGtR,EAAKN,IAEtB,OADAgS,QAAQC,KAAK,GAAG3R,EAAKN,sBACd,EAGf,IAAKA,EAAI9B,EAAgB,IAAR8B,KAEb,GADAL,EAAMW,EAAKN,IACN0R,GAAkBC,EAAEhS,GAAMiS,EAAEjS,GAAMkS,GACnC,OAAO,EAIf,OAAO,CACX,CAAA,IAAYA,GAAmC,mBAANF,GAAiC,mBAANC,EAAkB,CAClF,MAAMjT,EAASgT,EAAE/Q,aAAegR,EAAEhR,WAIlC,OAHKjC,GACDqT,QAAQC,KAAK,wBAAwBN,EAAE/Q,kBAAkBgR,EAAEhR,cAExDjC,CACX,CACJ,CAEA,MAAMA,EAASgT,GAAMA,GAAKC,GAAMA,EAIhC,OAHKjT,GACDqT,QAAQC,KAAK,qBAAqBN,SAASC,KAExCjT,CACX,CAEO,SAAS6T,GAAWb,EAAQC,EAAQC,GAA8B,GACrE,GAAIF,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,EAAG,CACR,GAAiB,iBAAND,GAA+B,iBAANC,EAAgB,CAChD,MAAME,EAAOT,EAAQM,GACfI,EAAOV,EAAQO,GACrB,IAAI5R,EACA9B,EACAyB,EAEJ,GAAImS,GAAQC,EAAM,CAEd,GADA7T,EAASyT,EAAEzT,OACPA,IAAW0T,EAAE1T,OAAQ,OAAO,EAChC,IAAK8B,EAAI9B,EAAgB,IAAR8B,KACb,IAAKwS,GAAWb,EAAE3R,GAAI4R,EAAE5R,GAAI6R,GAAqB,OAAO,EAC5D,OAAO,CACX,CAEA,GAAIC,IAASC,EAAM,OAAO,EAE1B,MAAMG,EAAQP,aAAapP,KACrB4P,EAAQP,aAAarP,KAC3B,GAAI2P,IAAUC,EAAO,OAAO,EAC5B,GAAID,GAASC,EAAO,OAAOR,EAAES,YAAcR,EAAEQ,UAE7C,MAAMC,EAAUV,aAAaW,OACvBC,EAAUX,aAAaU,OAC7B,GAAID,IAAYE,EAAS,OAAO,EAChC,GAAIF,GAAWE,EAAS,OAAOZ,EAAE/Q,aAAegR,EAAEhR,WAElD,MAAMN,EAAOiR,EAAQI,GAGrB,GAFAzT,EAASoC,EAAKpC,OAEVA,IAAWqT,EAAQK,GAAG1T,OACtB,OAAO,EAEX,IAAK8B,EAAI9B,EAAgB,IAAR8B,KACb,IAAKwR,EAAQjT,KAAKqT,EAAGtR,EAAKN,IAAK,OAAO,EAE1C,IAAKA,EAAI9B,EAAgB,IAAR8B,KAEb,GADAL,EAAMW,EAAKN,IACNwS,GAAWb,EAAEhS,GAAMiS,EAAEjS,GAAMkS,GAAqB,OAAO,EAGhE,OAAO,CACX,CAAA,IAAYA,GAAmC,mBAANF,GAAiC,mBAANC,EAChE,OAAOD,EAAE/Q,aAAegR,EAAEhR,UAElC,CAEA,OAAO+Q,GAAMA,GAAKC,GAAMA,CAC5B,CAEO,SAAShT,GAAU6T,EAAaC,EAAYb,GAA8B,GAC7E,OAAOW,GAAWC,EAAUC,EAASb,GAAsBY,EAAWC,CAC1E,CAvJgB5R,EAAA4Q,GAAA,qBA+FA5Q,EAAA0R,GAAA,cAsDA1R,EAAAlC,GAAA,UCvJT,MAAM4J,GAAkC,oBAAfmK,WAA6BA,WAAaC,OAC7DC,GAAuC,oBAAXD,QAA0BpK,KAASoK,OAC/DE,GAAqC,oBAAZC,SAA+C,MAApBA,QAAQC,UAA6C,MAAzBD,QAAQC,SAASC,KACjGC,GAAgBJ,IAAyB,MAAfC,QAAQI,MAAsC,MAAtBJ,QAAQI,IAAIC,QAAgD,MAA9BL,QAAQI,IAAIE,gBAA4C,MAAlBN,QAAQI,IAAIG,IAExI,SAASC,GAAaC,GACzB,MAAMC,EAAUC,SAASD,SAAW,GACpC,IAAA,IAASzT,EAAI0T,SAASD,QAAQvV,OAAS,EAAG8B,GAAK,IAAKA,EAAG,CACnD,MAAM2T,EAASF,EAAQzT,GACvB,GAAI2T,EAAOC,IAAK,CACZ,MAAM9M,EAAM6M,EAAOC,IAAI3U,QAAQuU,GAC/B,GAAI1M,GAAO,EACP,OAAO6M,EAAOC,IAAIC,UAAU,EAAG/M,EAEvC,CACJ,CACA,MAAO,EACX,CAZgBhG,EAAAyS,GAAA,gBCJT,MAAMO,GAAN,MAAMA,OACDC,MAAa,GAOrB,IAAA7U,CAAK8D,GAED,OADA3B,KAAK0S,MAAM7U,KAAK8D,GACTA,CACX,CAKA,GAAAgR,GACI,OAAO3S,KAAK0S,MAAMC,KACtB,CAOA,GAAAC,GACI,OAAO5S,KAAK0S,MAAM7V,OAASmD,KAAK0S,MAAM1S,KAAK0S,MAAM7V,OAAS,QAAK,CACnE,CAOA,KAAAgW,GACI,OAAO7S,KAAK0S,MAAM7V,MACtB,GApCkB4C,EAAAgT,GAAA,SAAf,IAAMK,GAANL,GCCA,IAAKM,IAAAA,IACRA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,SAAA,GAAA,WACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,UAAA,GAAA,YARQA,IAAAA,IAAA,CAAA,GAWZ,MAAMC,GAAqC,CACvCC,MAAO,OACPC,KAAM,QACNC,OAAQ,OACRC,QAAS,OACTC,MAAO,MACPC,SAAU,UACVC,MAAO,UACPC,UAAW,WAQTC,GAAN,MAAMA,eACF,KAAAC,CAAMC,EAAkBC,EAAcvV,EAAYwV,GAC1CpC,GACAd,QAAQmD,IAAI,IAAIH,MAAaZ,GAAMa,GAAOG,iBAAiB1V,OAAQwV,KAEnElD,QAAQmD,IAAI,IAAIH,QAAeZ,GAAMa,GAAOG,mBAAmB1V,OAAQwV,IAAO,SAASb,GAAQD,GAAMa,MAAW,GAExH,GAPkCnU,EAAAgU,GAAA,iBAAtC,IAAMO,GAANP,GAUO,MAAMQ,GAAN,MAAMA,SAEDC,YAAc,IAAIpB,GAClBqB,OAAS,EACTC,QAAkB,GAClBC,QAAkB,IAAIL,GAE9B,eAAcM,GACV,OAAOtU,KAAKuU,YAAcvU,KAAKuU,UAAY,IAAIvU,KACnD,CAEQ,WAAAF,GACR,CAEQ,SAAA0U,CAAUpU,GACd,MAAMqU,EAAe,GACrB,OAAOC,KAAKF,UAAUpU,EAAK,SAAUuU,EAAMrV,GACvC,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,CAC7C,IAA6B,IAAzBmV,EAAM7W,QAAQ0B,GACd,OAEJmV,EAAM5W,KAAKyB,EACf,CACA,OAAOA,CACX,EAAG,EACP,CAIA,MAAAsV,CAAO3P,GACH,YAAU,IAANA,EAAqBjF,KAAKqU,SAC9BrU,KAAKqU,QAAUpP,EACRjF,KACX,CAEA,GAAA8T,CAAIF,EAAcvV,EAAYwV,GAC1B,GAAID,EAAQ5T,KAAKmU,OAAQ,OACzB,GAAInU,KAAKoU,SAAWpU,KAAKoU,UAAY/V,EAAI,OAEzC,MAAMsV,GAAA,IAAezS,MAAO2T,cAExB7U,KAAKqU,QAAQS,SACb9U,KAAKqU,QAAQS,SAASnB,EAAUC,EAAOvV,EAAIwV,IAExB,iBAARA,IACPA,EAAM7T,KAAKwU,UAAUX,IAGrB7T,KAAKqU,QAAQX,OACb1T,KAAKqU,QAAQX,MAAMC,EAAUC,EAAOvV,EAAIwV,GAGpD,CAEA,KAAAZ,CAAM5U,EAAYwV,GACd7T,KAAK8T,IAAI,EAAazV,EAAIwV,EAC9B,CAEA,IAAAX,CAAK7U,EAAYwV,GACb7T,KAAK8T,IAAI,EAAYzV,EAAIwV,EAC7B,CAEA,MAAAV,CAAO9U,EAAYwV,GACf7T,KAAK8T,IAAI,EAAczV,EAAIwV,EAC/B,CAEA,OAAAT,CAAQ/U,EAAYwV,GAChB7T,KAAK8T,IAAI,EAAezV,EAAIwV,EAChC,CAEA,KAAAR,CAAMhV,EAAYwV,GACd7T,KAAK8T,IAAI,EAAazV,EAAIwV,EAC9B,CAEA,QAAAP,CAASjV,EAAYwV,GACjB7T,KAAK8T,IAAI,EAAgBzV,EAAIwV,EACjC,CAEA,KAAAN,CAAMlV,EAAYwV,GACd7T,KAAK8T,IAAI,EAAazV,EAAIwV,EAC9B,CAEA,SAAAL,CAAUnV,EAAYwV,GAClB7T,KAAK8T,IAAI,EAAiBzV,EAAIwV,EAClC,CAIA,KAAAD,CAAM3O,GACF,YAAU,IAANA,EAAqBjF,KAAKmU,QAC9BnU,KAAKmU,OAASlP,EACPjF,KACX,CAEA,SAAA+U,CAAU9P,GAGN,OAFAjF,KAAKkU,YAAYrW,KAAKmC,KAAKmU,QAC3BnU,KAAKmU,OAASlP,EACPjF,IACX,CAEA,QAAAgV,GAEI,OADAhV,KAAKmU,OAASnU,KAAKkU,YAAYvB,MACxB3S,IACX,CAIA,MAAAqJ,CAAOpE,GACH,YAAU,IAANA,EAAqBjF,KAAKoU,SAC9BpU,KAAKoU,QAAUnP,EACRjF,KACX,aA/GiBP,EAAAwU,GAAA,iGAARA,uBACM,0BADZ,IAAMgB,GAANhB,GAiHA,MAAMiB,GAASD,GAAQX,WAEjBa,GAAN,MAAMA,eACCC,SAEV,WAAAtV,CAAYuV,GACRrV,KAAKoV,SAAWC,CACpB,CAEA,KAAApC,CAAMY,GACFqB,GAAOjC,MAAMjT,KAAKoV,SAAUvB,EAChC,CAEA,IAAAX,CAAKW,GACDqB,GAAOhC,KAAKlT,KAAKoV,SAAUvB,EAC/B,CAEA,MAAAV,CAAOU,GACHqB,GAAO/B,OAAOnT,KAAKoV,SAAUvB,EACjC,CAEA,OAAAT,CAAQS,GACJqB,GAAO9B,QAAQpT,KAAKoV,SAAUvB,EAClC,CAEA,KAAAR,CAAMQ,GACFqB,GAAO7B,MAAMrT,KAAKoV,SAAUvB,EAChC,CAEA,QAAAP,CAASO,GACLqB,GAAO5B,SAAStT,KAAKoV,SAAUvB,EACnC,CAEA,KAAAN,CAAMM,GACFqB,GAAO3B,MAAMvT,KAAKoV,SAAUvB,EAChC,CAEA,SAAAL,CAAUK,GACNqB,GAAO1B,UAAUxT,KAAKoV,SAAUvB,EACpC,CAEA,SAAAkB,CAAU9P,GAEN,OADAiQ,GAAOH,UAAU9P,GACVjF,IACX,CAEA,QAAAgV,GAEI,OADAE,GAAOF,WACAhV,IACX,GA/CuBP,EAAA0V,GAAA,iBAApB,IAAMG,GAANH,GAkDA,SAASI,GAAaF,EAAiBhM,GAAkB,GAI5D,OAHIA,GACA6L,GAAO7L,OAAOgM,GAEX,IAAIC,GAAcD,EAC7B,CC5MO,SAASG,GAAiBC,GAC7B,OAAOA,GAAWjU,KAAKkU,GAAK,IAChC,CASO,SAASC,GAAiBC,GAC7B,OAAOA,GAAW,IAAMpU,KAAKkU,GACjC,CAUO,SAASG,GAAiBC,EAAWC,GACxC,MAAO,CACHC,EAAGF,EAAItU,KAAKyU,IAAIF,GAChBG,EAAGJ,EAAItU,KAAK2U,IAAIJ,GAExB,CAUO,SAASK,GAAiBJ,EAAWE,GACxC,MAAO,CACHJ,EAAGtU,KAAK6U,KAAKL,EAAIA,EAAIE,EAAIA,GACzBH,MAAOvU,KAAK8U,MAAMJ,EAAGF,GAE7B,CAWO,SAASO,GAAiBX,EAAiBY,GAAehV,KAAKkU,GAAIjU,EAAcD,KAAKkU,IACzF,OAAOe,GAAUb,EAASY,EAAK/U,EACnC,CAWO,SAASiV,GAAiBjB,EAAiBe,GAAc,IAAM/U,EAAc,KAChF,OAAOgV,GAAUhB,EAASe,EAAK/U,EACnC,CAWO,SAASgV,GAAUnX,EAAekX,EAAa/U,GAClD,MAAMkV,EAASlV,EAAM+U,EACfI,EAActX,EAAQkX,EAC5B,OAAQI,EAAepV,KAAKqV,MAAMD,EAAcD,GAAUA,EAAWH,CACzE,CC/EO,SAASM,GAAMC,EAAc3W,GAChC,QAAa,IAAT2W,QAA2B,IAAR3W,EAAvB,CACA,IAAA,MAAWhC,KAAQ2Y,EAAKhT,MAAM,KAAM,CAChC,IAAK3D,EAAIgQ,eAAehS,GACpB,OAEJgC,EAAMA,EAAIhC,EACd,CACA,OAAOgC,CAPuC,CAQlD,CASO,SAAS4W,GAAOD,EAAc3W,GACjC,YAA4B,IAArB0W,GAAMC,EAAM3W,EACvB,CAEA,SAAS6W,GAAOC,EAAWhR,GACvB,MAAMiR,EAAa,CAAA,EACnB,IAAA,MAAW7Y,KAAO4H,EAAQ,CACtB,IAAKA,EAAOkK,eAAe9R,GAAM,SACjC,GAAY,cAARA,GAA+B,gBAARA,EAAuB,SAClD,IAAIuN,EAAS3F,EAAO5H,GAChBuN,aAAaoE,OAEO,iBAANpE,IACdA,EAAIuL,GAAUF,EAAK5Y,GAAMuN,IAEvBvN,KAAO4Y,IAAUA,EAAK5Y,KAASuN,GAAQvN,KAAO6Y,GAAUA,EAAM7Y,KAASuN,KACzEqL,EAAK5Y,GAAOuN,EAEpB,CACA,OAAOqL,CACX,CASO,SAASE,GAAUF,EAAY,MAAOG,GACzC,GAAoB,iBAATH,EAAmB,MAAM,IAAI3R,MAAM,gBAAgB2R,yBAC9D,IAAA,MAAWhR,KAAUmR,EACjBJ,GAAOC,EAAMhR,GAEjB,OAAOgR,CACX,CAWO,SAASI,GAAcJ,EAA4B,MAAOG,GAC7D,OAAOD,GAAUF,KAASG,EAC9B,CAQO,SAASE,GAAcnX,GAC1B,MAAMqU,EAAe,GACrB,OAAOC,KAAKF,UAAUpU,EAAK,SAAU9B,EAAKgB,GACtC,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,CAC7C,IAA6B,IAAzBmV,EAAM7W,QAAQ0B,GACd,OAGJmV,EAAM5W,KAAKyB,EACf,CACA,OAAOA,CACX,EACJ,CAEO,SAAS0Q,GAAQwH,GACpB,YAAsB,IAAlBvH,MAAMD,QACCC,MAAMD,QAAQwH,GAEsB,mBAAxCxY,OAAOQ,UAAUD,SAASrC,KAAKsa,EAC1C,CAQO,SAASC,GAAaC,GACzB,MAAMxE,EAAOwE,EAAQ3T,MAAM,KACrB4T,EAAYzE,EAAK,GAAGnP,MAAM,KAChC,MAAO,CACH6T,OAAQ,YAAY1E,EAAK,KACzB2E,KAAMF,EAAU,GAChBG,MAAOH,EAAU,IAAMA,EAAU,GAEzC,CFqFgBlY,EAAA8V,GAAA,gBCvMA9V,EAAA+V,GAAA,oBAWA/V,EAAAkW,GAAA,oBAYAlW,EAAAoW,GAAA,oBAeApW,EAAA2W,GAAA,oBAgBA3W,EAAA8W,GAAA,oBAaA9W,EAAAiX,GAAA,oBAaAjX,EAAAgX,GAAA,aC3EAhX,EAAAqX,GAAA,SAkBArX,EAAAuX,GAAA,UAIPvX,EAAAwX,GAAA,UAyBOxX,EAAA2X,GAAA,aAiBA3X,EAAA6X,GAAA,cAUA7X,EAAA8X,GAAA,iBAcA9X,EAAAuQ,GAAA,WAaAvQ,EAAAgY,GAAA,gBCvGhB,MAAMM,GAAN,MAAMA,gBACMC,YACAC,QACAC,SAER,WAAApY,CAAYkY,EAA4BC,EAAYC,GAChDlY,KAAKgY,YAAcA,EACnBhY,KAAKiY,QAAUA,EACfjY,KAAKkY,SAAWA,CACpB,CAEA,OAAAC,GACInY,KAAKgY,YAAYI,eAAepY,KAAKiY,QAASjY,KAAKkY,SACvD,CAEA,OAAAG,GACIrY,KAAKmY,SACT,GAjB8D1Y,EAAAsY,GAAA,kBAAlE,IAAMO,GAANP,GAqBO,MAAMQ,GAAN,MAAMA,YACDC,gBAA6D,CAAA,EAErE,WAAA1Y,IAAe2Y,GACf,CAEA,WAAAC,CAAYT,EAAYC,GACpB,IAAIS,EAAqC3Y,KAAKwY,gBAAgBP,GAM9D,OALKU,IACDA,EAAiB,GACjB3Y,KAAKwY,gBAAgBP,GAAWU,GAEpCA,EAAe9a,KAAKqa,GACb,IAAII,GAAkBtY,KAAMiY,EAASC,EAChD,CAEA,cAAAE,CAAeH,EAAYC,GACvB,MAAMS,EAAiB3Y,KAAKwY,gBAAgBP,GAC5C,GAAIU,EACA,IAAA,IAASha,EAAIga,EAAe9b,OAAS,EAAG8B,GAAK,IAAKA,EAC1Cga,EAAeha,KAAOuZ,GACtBS,EAAe7a,OAAOa,EAAG,GAIrC,OAAOqB,IACX,CAEA,aAAA4Y,CAAcX,KAAepY,GACzB,MAAM8Y,EAAiB3Y,KAAKwY,gBAAgBP,GAC5C,GAAIU,EACA,IAAA,MAAWE,KAAYF,EACnBE,KAAYhZ,GAGpB,OAAOG,IACX,CAEQ,YAAA8Y,CAAab,GACjB,MAAMU,EAAiB3Y,KAAKwY,gBAAgBP,GAC5C,IAAA,MAAWY,KAAYF,EACnB,GAAIA,EAAeE,GACf,OAAO,EAGf,OAAO,CACX,CAEA,WAAAE,CAAYC,GACR,QAAiB,IAAbA,EACA,OAAOhZ,KAAK8Y,aAAaE,GAE7B,IAAA,MAAWf,KAAWjY,KAAKwY,gBACvB,GAAIxY,KAAK8Y,aAAab,GAClB,OAAO,EAGf,OAAO,CACX,GA1DuCxY,EAAA8Y,GAAA,cAApC,ICzBHU,GDyBSC,GAANX,ICzBH,WAIA,GAAIpR,GAAK8R,sBACLA,GAAwB9R,GAAK8R,0BAE1B,CACH,IAAIE,EAAW,EACfF,cAAkCf,GAC9B,MAAMkB,GAAA,IAAelY,MAAO6P,UACtBsI,EAAa7X,KAAKC,IAAI,EAAG,IAAM2X,EAAWD,IAC1C9a,EAAKkD,WAAW,IAAM2W,EAASkB,EAAWC,GAAaA,GAE7D,OADAF,EAAWC,EAAWC,EACfhb,CACX,EANwB,wBAU5B,CACJ,CApBI,GAsBG,MAAMib,GAAN,MAAMA,SAET,eAAIC,GAAyB,OAAO,CAAO,CAC3C,QAAAC,CAASC,GACL,OAAO,CACX,CAEA,OACI,OAAO,CACX,GATiBha,EAAA6Z,GAAA,WAAd,IAAMI,GAANJ,GAsBA,MAAMK,GAAN,MAAMA,UAEDC,YAAsB,EACtBC,WAAmC,GACnCC,eAAsB,GACtBC,gBAAiC,EAEzC,WAAAja,GACA,CAEQ,SAAAka,GACJ,OAAOha,KAAK6Z,UAChB,CAEQ,QAAAI,GACJ,MAAM3c,EAAc,GAMpB,OALA0C,KAAK8Z,eAAe3b,QAAQ0V,IACnBvW,EAAO4c,KAAKC,GAAQA,EAAKZ,aAAeY,EAAKX,SAAS3F,KACvDvW,EAAOO,KAAKgW,KAGbvW,CACX,CAEQ,WAAA8c,GACJpa,KAAK+Z,gBAAa,EAClB/Z,KAAKqa,SAASra,KAAKia,YACnBja,KAAKsa,OACT,CAEQ,QAAAD,CAASJ,GACW,IAApBA,EAASpd,QACbmD,KAAKga,YAAY7b,QAAQ1B,IACrB,MAAM8d,EAAON,EAAS5Q,OAAOmR,IAAMA,EAAEC,cAAsB,IAAXhe,EAAEmO,MAAsB4P,aAAa/d,EAAEmO,OACnF2P,EAAK1d,QACLJ,EAAEyb,SAASqC,IAGvB,CAEA,WAAAxB,GACI,OAAO/Y,KAAK6Z,WAAWhd,OAAS,CACpC,CAEA,KAAAyd,GACIta,KAAK8Z,eAAiB,EAC1B,CAEA,IAAAY,CAAK7G,GACI7T,KAAK+Y,eACV/Y,KAAKqa,SAAS,CAACxG,GACnB,CAEA,IAAA8G,CAAK9G,GACI7T,KAAK+Y,gBACV/Y,KAAK8Z,eAAejc,KAAKgW,QACD,IAApB7T,KAAK+Z,aACL/Z,KAAK+Z,WAAad,GAAsB,IAAMjZ,KAAKoa,gBAE3D,CAEA,MAAAQ,CAAO1C,EAAuBtN,GAC1B,MAAMiQ,EAAU7a,KACV3B,IAAO2B,KAAK4Z,YAElB,OADA5Z,KAAK6Z,WAAWhc,KAAK,CAAEQ,KAAIuM,OAAMsN,aAC1B,CACH,OAAAC,GACI0C,EAAQhB,WAAagB,EAAQhB,WAAWxQ,OAAO5M,GAAKA,EAAE4B,KAAOA,EACjE,EACA,OAAAga,GACIrY,KAAKmY,SACT,EAER,GAzE+C1Y,EAAAka,GAAA,YAA5C,IAAMmB,GAANnB,GC/CA,MAAMoB,GAAN,MAAMA,SACTC,KAAe,GACfC,EAAkB,CAAA,EACR9R,UAAuB,GACjC+R,QAAkB,GAElB,WAAApb,CAAYkb,GACRhb,KAAKgb,KAAOA,CAChB,CAEA,eAAAG,CAAgB7c,EAAa8c,GACzBpb,KAAKib,EAAE3c,GAAO8c,CAClB,CAEA,aAAAC,CAAcH,GACVlb,KAAKkb,SAAWA,CACpB,CAEA,WAAAI,CAAY7P,GACRzL,KAAKmJ,UAAUtL,KAAK4N,EACxB,CAEA,QAAArC,CAASmS,GACL,YAAY,IAARA,EACOvb,KAAKmJ,UAETnJ,KAAKmJ,UAAUE,OAAQmS,GACnBA,EAAQR,OAASO,EAEhC,GA7BiB9b,EAAAsb,GAAA,WAAd,IAAMU,GAANV,GAgCA,MAAMW,GAAN,MAAMA,gBACTvU,KACAuL,MAAwB,IAAII,GAE5B,WAAAhT,GACA,CAEQ,OAAA6b,CAAQ/J,GACZ,MAAM4J,EAAUxb,KAAK4b,cAAchK,GACnC,GAAIA,EAAKiK,WACL,IAAA,IAASld,EAAI,EAAGA,EAAIiT,EAAKiK,WAAWhf,SAAU8B,EAAG,CAC7C,MAAMmd,EAAYlK,EAAKiK,WAAWzd,KAAKO,GACvCqB,KAAK6b,WAAWC,EAAUC,SAAUD,EAAUE,UAClD,CAGJ,GADAhc,KAAKic,aAAaT,GACd5J,EAAKsK,WACL,IAAA,IAASvd,EAAI,EAAGA,EAAIiT,EAAKsK,WAAWrf,SAAU8B,EAAG,CAC7C,MAAMwd,EAAYvK,EAAKsK,WAAW9d,KAAKO,GACnCwd,EAAUC,WAAaD,EAAUE,UACjCrc,KAAKsc,WAAWH,EAAUH,WAE1Bhc,KAAK2b,QAAQQ,EAErB,CAEJnc,KAAKuc,WAAWvc,KAAK0S,MAAMC,MAC/B,CAEQ,aAAAiJ,CAAchK,GAClB,MAAM4K,EAAU,IAAIf,GAAQ7J,EAAKmK,UAMjC,OALK/b,KAAK0S,MAAMG,QAGZ7S,KAAK0S,MAAME,MAAO0I,YAAYkB,GAF9Bxc,KAAKmH,KAAOqV,EAITxc,KAAK0S,MAAM7U,KAAK2e,EAC3B,CAEA,KAAAC,CAAMC,GACF,MACMC,GADY,IAAIC,WACAC,gBAAgBH,EAAK,mBAC3C1c,KAAK8c,gBACL9c,KAAK2b,QAAQgB,GACb3c,KAAK+c,aACT,CAGA,aAAAD,GACA,CAEA,WAAAC,GACA,CAEA,YAAAd,CAAarK,GACb,CAEA,UAAA2K,CAAW3K,GACX,CAEA,UAAAiK,CAAWvd,EAAa8c,GACpBpb,KAAK0S,MAAME,MAAOuI,gBAAgB7c,EAAK8c,EAC3C,CAEA,UAAAkB,CAAW5d,GACPsB,KAAK0S,MAAME,MAAOyI,cAAc3c,EACpC,GAlEwBe,EAAAic,GAAA,kBAArB,IAAMsB,GAANtB,GAqEP,MAAMuB,GAAN,MAAMA,wBAAuBD,GACzB,YAAAf,CAAarK,GACT1O,MAAM+Y,aAAarK,GACXA,EAAKoJ,IAQjB,CAEA,UAAAuB,CAAW3K,GACCA,EAAKoJ,KAQb9X,MAAMqZ,WAAW3K,EACrB,GAvBwCnS,EAAAwd,GAAA,kBAA5C,IAAMC,GAAND,GA0BO,SAASE,GAAST,GACrB,MAAMU,EAAY,IAAIF,GAEtB,OADAE,EAAUX,MAAMC,GACTU,EAAUjW,IACrB,CAJgB1H,EAAA0d,GAAA,YC/HhB,MAAME,GAAN,MAAMA,4BAA2B3D,GAE7B,WAAA5Z,CAAqBwd,EAAyBC,EAAsBC,GAChEta,QADiBlD,KAAAsd,SAAAA,EAAyBtd,KAAAud,SAAAA,EAAsBvd,KAAAwd,SAAAA,CAEpE,CAFqBF,SAAyBC,SAAsBC,SAIpE,eAAIjE,GAAyB,OAAO,CAAM,CAC1C,QAAAC,CAASC,GACL,OAAIzZ,KAAKsd,WAAa7D,EAAM6D,WACxBtd,KAAKud,SAAW9D,EAAM8D,UACf,EAGf,CAEA,OACI,OAAOpM,GAAWnR,KAAKud,SAAUvd,KAAKwd,SAC1C,GAjBqC/d,EAAA4d,GAAA,sBAAzC,IAAMI,GAANJ,GA6BO,MAAMK,GAAN,MAAMA,aACDC,UAAwB,CAAA,EACxBC,UAAY,IAAI9C,GAChB+C,eACEC,kBAA4B,EAE5B,KAAA3T,CAAM4T,GACZ/d,KAAK2d,UAAY,CAAA,OACD,IAAZI,GACA/d,KAAKG,IAAI4d,GAEb/d,KAAK8d,kBAAoB,CAC7B,CAIU,GAAAzd,CAAuB/B,EAAS0f,GACtC,YAAY,IAAR1f,EACO0B,KAAK2d,UAET3d,KAAKC,IAAI3B,GAAO0B,KAAK2d,UAAUrf,GAAO0f,CACjD,CAIU,GAAA7d,CAAuB8d,EAAqBC,GAClD,GAA4B,iBAAjBD,EACP,OAAOje,KAAKme,UAAUF,EAAqBC,GAE/Cle,KAAKoe,OAAOH,EAChB,CAEQ,SAAAE,CAA6B7f,EAAQ4f,GACzC,MAAMG,EAASre,KAAK2d,UAAUrf,GAC9B0B,KAAK2d,UAAUrf,GAAO4f,EACtBle,KAAK4d,UAAUjD,KAAK,IAAI8C,GAAmBnf,EAAe4f,EAAQG,GACtE,CAEQ,MAAAD,CAAOnZ,GACX,IAAA,MAAW3G,KAAO2G,EACVA,EAAEmL,eAAe9R,IACjB0B,KAAKme,UAAU7f,EAAK2G,EAAE3G,GAGlC,CAEU,GAAA2B,CAAuB3B,GAC7B,YAA+B,IAAxB0B,KAAK2d,UAAUrf,EAC1B,CAIA,WAAAoa,CAAYT,EAAsBqG,EAA2CpG,GACzE,GAAIlY,KAAKue,WAAWD,GAAmB,CACnC,GAAgB,YAAZrG,EAAuB,MAAM,IAAI1S,MAAM,qBAAuB0S,GAClE,OAAOjY,KAAK4d,UAAUhD,OAAQX,IAC1BqE,EAAiBrE,EAAS5R,IAAImS,IAAA,CAC1Bnc,GAAImc,EAAE8C,SACNE,SAAUhD,EAAEgD,SACZD,SAAU/C,EAAE+C,cAGxB,CACI,GAAgB,gBAAZtF,EAA2B,MAAM,IAAI1S,MAAM,qBAAuB0S,GACtE,OAAOjY,KAAK4d,UAAUhD,OAAQX,IAC1B,MAAMuE,EAAmBvE,EAAS5Q,OAAOmR,GAAKA,EAAE8C,WAAagB,GAC7D,GAAIE,EAAiB3hB,OAAQ,CACrB2hB,EAAiB3hB,OAAS,GAC1B8T,QAAQC,KAAK,6BAEjB,MAAM6N,EAAQD,EAAiBA,EAAiB3hB,OAAS,GACzDqb,EAAU,CACN7Z,GAAIogB,EAAMnB,SACVE,SAAUiB,EAAMjB,SAChBD,SAAUkB,EAAMlB,UAExB,GAGZ,CAIA,EAAAmB,CAAGzG,EAAsBqG,EAA2CpG,GAEhE,OADAlY,KAAK0Y,YAAYT,EAASqG,EAAyBpG,GAC5ClY,IACX,CAEU,UAAAue,CAAWD,GACjB,MAAoC,mBAArBA,CACnB,CAEU,gBAAAK,GACN,OAAO3e,KAAK4d,UAAU7E,aAC1B,CAGA,aAAgB6F,CAAQzZ,GAAgB,GAEpC,aADM1E,QAAQC,UACPV,IACX,CAEU,QAAA6e,GACF7e,KAAK6d,eACL7d,KAAK8d,kBAAoB,EAI7B9d,KAAK6d,eAAiBtc,WAAW,MACQvB,KAAK2e,mBAAqB3e,KAAK4e,UAAYne,QAAQC,WACzEW,KAAK,KAChBrB,KAAK6e,oBAEF7e,KAAK6d,gBACb7d,KAAK8e,0BACZ,CAEU,uBAAAA,GAEN,QADE9e,KAAK8d,kBACH9d,KAAK8d,mBAAqB,EACnB,EAEJ,GACX,CAEA,KAAAiB,CAAM7G,EAAyB8G,GAAyB,GACpD,GAAwB,mBAAb9G,EACP,MAAM,IAAI3S,MAAM,oBAEhByZ,GACAzd,WAAW,KACP,MAAMmD,EAAa1E,KAAKK,MAClB4e,EAAoB,GAC1B,IAAA,MAAW3gB,KAAOoG,EACVA,EAAM0L,eAAe1L,IACrBua,EAAQphB,KAAK,CAAEQ,GAAIC,EAAKif,SAAU7Y,EAAMpG,GAAMkf,cAAU,IAGhEtF,EAAS+G,IACV,GAEP,MAAM3hB,EAAS0C,KAAK0Y,YAAY,UAAWR,GAE3C,OADAlY,KAAK6e,WACEvhB,CACX,GAhJ2BmC,EAAAie,GAAA,eAAxB,IAAMwB,GAANxB,GChCA,SAASyB,GAAKC,EAAaC,GAC9B,GAAoB,iBAATA,EAAmB,OAAOD,EACrC,GAAoB,IAAhBC,EAAKxiB,OAAc,OAAOuiB,EAC9B,KAA6B,IAAtBA,EAAIxhB,QAAQyhB,IACfD,EAAMA,EAAI5M,UAAU,GAExB,KAAO8M,GAASF,EAAKC,IACjBD,EAAMA,EAAI5M,UAAU,EAAG4M,EAAIviB,OAAS,GAExC,OAAOuiB,CACX,CAEO,SAASE,GAASC,EAAoBC,EAAsBC,GAC/D,MAAMC,EAAgBH,EAAWhgB,YACT,iBAAbkgB,IAA0BE,SAASF,IAAaje,KAAKqV,MAAM4I,KAAcA,GAAYA,EAAWC,EAAc7iB,UACrH4iB,EAAWC,EAAc7iB,QAE7B4iB,GAAYD,EAAa3iB,OACzB,MAAM+iB,EAAYF,EAAcG,YAAYL,EAAcC,GAC1D,WAAOG,GAAoBA,IAAcH,CAC7C,CCpBO,SAASK,MAAQC,GACpB,MAAMC,EAAkBD,EAAS5gB,OAAO,CAAC6gB,EAAiBC,KAElDD,EAAMnjB,OAAS,IACfojB,EAAUA,EAAQC,QAAQ,MAAO,KAGrCD,EAAUA,EAAQC,QAAQ,MAAO,IAC1B,IAAIF,KAAUC,EAAQlc,MAAM,OACpC,IACGoc,EAAc,GACpB,IAAA,MAAWC,KAAQJ,EACF,MAATI,IAGS,OAATA,EAIJD,EAAYtiB,KAAKuiB,GAHbD,EAAYxN,OAKpB,OAAOwN,EAAYL,KAAK,IAC5B,CAEO,SAASO,GAAQC,GACpB,OAAOR,GAAKQ,EAAM,KACtB,CD1BgB7gB,EAAA0f,GAAA,QAYA1f,EAAA6f,GAAA,YCZA7f,EAAAqgB,GAAA,QAwBArgB,EAAA4gB,GAAA,WCxBhB,MAAME,GAAkB,mEAExB,SAASC,GAAYlhB,GACjB,GAA2B,oBAAhBmhB,YACP,OAAO,IAAIA,aAAcC,OAAOphB,GAGpC,MAAMqhB,EAAUC,mBAAmBthB,GAC7BuhB,EAAkB,GACxB,IAAA,IAASliB,EAAI,EAAGA,EAAIgiB,EAAQ9jB,SAAU8B,EACf,MAAfgiB,EAAQhiB,IACRkiB,EAAMhjB,KAAKijB,SAASH,EAAQnO,UAAU7T,EAAI,EAAGA,EAAI,GAAI,KACrDA,GAAK,GAELkiB,EAAMhjB,KAAK8iB,EAAQ/hB,WAAWD,IAGtC,OAAOoiB,WAAWC,KAAKH,EAC3B,CAEA,SAASI,GAAcJ,GACnB,IAAIK,EAAS,GACb,IAAA,IAASviB,EAAI,EAAGA,EAAIkiB,EAAMhkB,OAAQ8B,GAAK,EAAG,CACtC,MAAMwiB,EAAQN,EAAMliB,GACdyiB,EAAWziB,EAAI,EAAIkiB,EAAMhkB,OACzBwkB,EAAW1iB,EAAI,EAAIkiB,EAAMhkB,OACzBykB,EAAQF,EAAWP,EAAMliB,EAAI,GAAK,EAClC4iB,EAAQF,EAAWR,EAAMliB,EAAI,GAAK,EAExCuiB,GAAUX,GAAgBY,GAAS,GACnCD,GAAUX,IAA0B,EAARY,IAAiB,EAAMG,GAAS,GAC5DJ,GAAUE,EAAWb,IAA0B,GAARe,IAAiB,EAAMC,GAAS,GAAM,IAC7EL,GAAUG,EAAWd,GAAwB,GAARgB,GAAgB,GACzD,CACA,OAAOL,CACX,CAEO,SAASM,GAAaliB,EAAgB,IACzC,MAAMmiB,EAAsB,MAATniB,EAAgB,GAAKoiB,OAAOpiB,GAEzCqiB,EAAerQ,YAAoBsQ,OACzC,OAAID,GAAaX,KACNW,EAAYX,KAAKS,EAAY,QAAQliB,SAAS,UAGlD0hB,GAAcT,GAAYiB,GACrC,CA5CShiB,EAAA+gB,GAAA,eAkBA/gB,EAAAwhB,GAAA,iBAiBOxhB,EAAA+hB,GAAA,qECnCa,iLAFL,8BACG"}