{"version":3,"file":"loxia-rijwegen.mjs","names":[],"sources":["../../../projects/rijwegen/src/lib/storing-symbool-util.ts","../../../projects/rijwegen/src/lib/util/document-token.ts","../../../projects/rijwegen/src/lib/signaleringsbeeld-svg-utility.service.ts","../../../projects/rijwegen/src/lib/rijwegen.module.ts"],"sourcesContent":["export class StoringSymboolUtil {\n\n    public static zetClassOpStoringSymbolenMetMap(wisselPuicEnStoringKaderPuic: Map<string, string>) {\n        wisselPuicEnStoringKaderPuic.forEach((storingskaderPuic, wisselPuic) => {\n            const elements = Array.from(document.querySelectorAll('#p' + wisselPuic));\n            elements.forEach((wissel) => this.setClassOpStoringSymbool(<HTMLElement>wissel, 'p' + storingskaderPuic));\n        });\n    }\n\n    private static setClassOpStoringSymbool(wissel: HTMLElement, puic: string) {\n        const storingSymbool = this.findStoringSymbool(wissel);\n\n        if (storingSymbool) {\n            storingSymbool.id = puic;\n            storingSymbool.classList.add('storingsymbool');\n        }\n    }\n\n    private static findStoringSymbool(wissel: HTMLElement) {\n        const numberOfChildren = wissel.childNodes.length;\n        let polylineCount = 0;\n\n        for (let i = 0; i < numberOfChildren; i++) {\n            const elementNode = (<HTMLElement>wissel.childNodes[i]);\n\n            if (this.isPolyline(elementNode)) {\n                polylineCount++;\n                if (this.isWisselStoringSymbool(polylineCount, numberOfChildren)\n                    || this.isEngelsWisselStoringSymbool(polylineCount, numberOfChildren)) {\n                    return elementNode;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    private static isEngelsWisselStoringSymbool(polylineCount: number, numberOfChildren: number) {\n        return polylineCount === 9 && numberOfChildren === 23;\n    }\n\n    private static isPolyline(node: Node) {\n        return node.nodeName.toUpperCase() === 'polyline'.toUpperCase();\n    }\n\n    private static isWisselStoringSymbool(polylineCount: number, numberOfChildren: number) {\n        return polylineCount === 6 && numberOfChildren === 15;\n    }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const DocumentToken = new InjectionToken('Document');\nexport function documentProvider(): Document {\n    return document;\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { SvgSein, SvgSignaleringsElement } from './rpe';\nimport { StoringSymboolUtil } from './storing-symbool-util';\nimport { DocumentToken } from './util/document-token';\n\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\nexport const COLOR_INDEX_WIT = 'ci0';\nexport const COLOR_INDEX_BLAUW = 'ci1';\nexport const COLOR_INDEX_ROOD = 'ci3';\nexport const COLOR_INDEX_CYAN = 'ci7';\nexport const COLOR_INDEX_BLAUW2 = 'ci17';\nexport const COLOR_INDEX_OKER = 'ci62';\nexport const COLOR_INDEX_GRIJS = 'ci144';\n\n@Injectable()\nexport class SignaleringsbeeldSvgUtilityService {\n\n    constructor(\n        @Inject(DocumentToken) private readonly document: Document\n    ) {\n    }\n\n    private static hideElement(elementNode: Element) {\n        (elementNode as HTMLElement | SVGElement).style.display = 'none';\n    }\n\n    maakOngewensteElementenOnzichtbaar(): void {\n        this.maakAlgemeneElementenOnzichtbaar();\n        this.maakPerSvgOngewensteElementenOnzichtbaar();\n    }\n\n    private maakAlgemeneElementenOnzichtbaar() {\n        this.maakRodePolySymbolenOnzichtbaar();\n        this.maakOngewensteTekstenOnzichtbaar();\n    }\n\n    maakPerSvgOngewensteElementenOnzichtbaar() {\n        const childnodes = Array.from(this.document.getElementsByTagNameNS(SVG_NS, 'g'));\n        childnodes.filter(item => item.id === 'symbols')\n                  .forEach(item => this.maakWitteLijnenBinnenSymbolenOnzichtbaar(item));\n    }\n\n    addSvgDefs() {\n        const svgContainer = this.document.getElementById('svgContainer');\n        if (!svgContainer) {\n            return;\n        }\n        const childnodes = svgContainer.children;\n\n        if (childnodes.length !== 1) {\n            return;\n        }\n        const svg = childnodes[0];\n        const defs = this.document.createElementNS(SVG_NS, 'defs');\n        const pattern = this.createSvgDefsPattern();\n        pattern.appendChild(this.document.createComment('Two instances of the same checker, only positioned apart on the `x` and `y` axis'));\n        pattern.appendChild(this.document.createComment('We will define the `fill` in the CSS for flexible use'));\n        pattern.appendChild(this.createPatternRect('checker1', '0', '2', '2', '0'));\n        pattern.appendChild(this.createPatternRect('checker1', '2', '2', '2', '2'));\n        pattern.appendChild(this.createPatternRect('checker2', '0', '2', '2', '2'));\n        pattern.appendChild(this.createPatternRect('checker2', '2', '2', '2', '0'));\n        defs.appendChild(pattern);\n        svg.appendChild(defs);\n    }\n\n    private createSvgDefsPattern() {\n        const pattern = this.document.createElementNS(SVG_NS, 'pattern');\n        pattern.id = 'checkers';\n        pattern.setAttribute('x', '0');\n        pattern.setAttribute('y', '0');\n        pattern.setAttribute('width', '4');\n        pattern.setAttribute('height', '4');\n        pattern.setAttribute('patternUnits', 'userSpaceOnUse');\n        return pattern;\n    }\n\n    private createPatternRect(className: string, x: string, w: string, h: string, y: string) {\n        const rect = this.document.createElementNS(SVG_NS, 'rect');\n        rect.setAttribute('class', className);\n        rect.setAttribute('x', x);\n        rect.setAttribute('width', w);\n        rect.setAttribute('height', h);\n        rect.setAttribute('y', y);\n        return rect;\n    }\n\n    // Polylines & Polygonen\n    private maakRodePolySymbolenOnzichtbaar() {\n        Array.from(this.document.querySelectorAll('polyline,polygon'))\n             .filter(line => line.classList.contains(COLOR_INDEX_ROOD))\n             .forEach(line => SignaleringsbeeldSvgUtilityService.hideElement(line));\n    }\n\n    maakWitteLijnenBinnenSymbolenOnzichtbaar(symbols: SVGElement) {\n        if (symbols) {\n            const symbolLijnen = Array.from(symbols.getElementsByTagName('polyline'));\n            symbolLijnen\n            .filter(line => line.classList.contains(COLOR_INDEX_WIT))\n            .forEach(line => SignaleringsbeeldSvgUtilityService.hideElement(line)\n            );\n        }\n    }\n\n    maakOngewensteTekstenOnzichtbaar() {\n        const teksten = Array.from(this.document.getElementsByTagName('text'));\n        teksten.filter(element => element.id !== 'nummer' && element.id !== 'tekst')\n               .forEach(element => SignaleringsbeeldSvgUtilityService.hideElement(element));\n    }\n\n    maakSignaleringsElementenOnzichtbaar(signaleringsElementen: SvgSignaleringsElement[]) {\n        signaleringsElementen.forEach(signaleringsElement => {\n            const puic = signaleringsElement.getPuic();\n            const elements = Array.from(this.document.querySelectorAll('#p' + puic));\n            elements.forEach(element => SignaleringsbeeldSvgUtilityService.hideElement(element));\n        });\n    }\n\n    maakOngewensteSeindelenOnzichtbaar(seinen: SvgSein[]) {\n        seinen.filter(sein => !!sein).forEach(sein => {\n            const elements = Array.from(this.document.querySelectorAll('#p' + sein.getPuic()));\n            elements.forEach((element) => this.verwerkSeinOpType(sein, <HTMLElement>element));\n        });\n    }\n\n    private verwerkSeinOpType(sein: SvgSein, seinElement: HTMLElement) {\n        const type = sein.getType();\n        switch (type) {\n            case 'sb_bed_sein':\n                this.verwerkSein(seinElement, this.verwerkBedSeinPolyline);\n                return;\n            case 'sb_bed_sein_3':\n                // hide sb_bed_3 Sein: 6, 7 -> kader\n                // hide rijrichting polygon\n                this.verwerkSein(seinElement, this.verwerkBedSein3En3a_Ertms2_Polyline, SignaleringsbeeldSvgUtilityService.hideElement);\n                return;\n            case 'sb_bed_sein_3a':\n                // hide sb_bed_3a Sein: 6 -> kader,  7 -> richting\n                this.verwerkSein(seinElement, this.verwerkBedSein3En3a_Ertms2_Polyline);\n                return;\n            case 'sb_stoppl_sein':\n                this.verwerkSein(seinElement, this.verwerkStopplaatsSeinPolyline);\n                return;\n            default:\n                if (type?.startsWith('sb_fict_sein')) {\n                    // converteer seinElement driehoek van polyline naar polygon\n                    this.verwerkSein(seinElement, this.verwerkFictieveSeinenPolyline.bind(this));\n                } else if (type?.startsWith('sb_ertms2')) {\n                    // mogelijk moet nog aparte afhandelijk voor sb_ertms2_sein_3 en sb_ertms2_sein_3a\n                    // hide kader\n                    this.verwerkSein(seinElement, this.verwerkErtmsSein2Polyline.bind(this));\n                } else if (type?.startsWith('sb_ertms12')) {\n                    // mogelijk moet nog aparte afhandelijk voor sb_ertms12_sein_3 en sb_ertms12_sein_3a\n                    // hide rode circle/ellipse\n                    this.verwerkSein(seinElement, this.verwerkBedSeinPolyline, null, SignaleringsbeeldSvgUtilityService.hideElement);\n                }\n        }\n    }\n\n    private verwerkStopplaatsSeinPolyline(polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null): SVGPolygonElement | null {\n        if (polylineCount === 5) {\n            SignaleringsbeeldSvgUtilityService.hideElement(elementNode);\n        }\n        return poly;\n    }\n\n    private verwerkErtmsSein2Polyline(polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null): SVGPolygonElement | null {\n        poly = this.verwerkBedSein3En3a_Ertms2_Polyline(polylineCount, elementNode, poly);\n        poly = this.verwerkBedSeinPolyline(polylineCount, elementNode, poly);\n        if (polylineCount === 6) {\n            // save to convert lines to polygon\n            poly = this.createPolygon(elementNode);\n            SignaleringsbeeldSvgUtilityService.hideElement(elementNode);\n        }\n        return poly;\n    }\n\n    private verwerkBedSeinPolyline(polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null): SVGPolygonElement | null {\n        if (polylineCount === 3 || polylineCount === 5) {\n            SignaleringsbeeldSvgUtilityService.hideElement(elementNode);\n        }\n        return poly;\n    }\n\n    private verwerkBedSein3En3a_Ertms2_Polyline(polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null): SVGPolygonElement | null {\n        if (polylineCount === 6 || polylineCount === 7) {\n            SignaleringsbeeldSvgUtilityService.hideElement(elementNode);\n        }\n        return poly;\n    }\n\n    private verwerkFictieveSeinenPolyline(polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null): SVGPolygonElement | null {\n        if (polylineCount === 3) {\n            // save to convert lines to polygon\n            poly = this.createPolygon(elementNode);\n            SignaleringsbeeldSvgUtilityService.hideElement(elementNode);\n        }\n        return poly;\n    }\n\n    private verwerkSein(\n        sein: HTMLElement,\n        polylineFunc: (polylineCount: number, elementNode: HTMLElement, poly: SVGPolygonElement | null) => SVGPolygonElement | null,\n        polygonFunc?: ((elementNode: HTMLElement) => void) | null,\n        ellipseFunc?: (elementNode: HTMLElement) => void\n    ) {\n        if (!sein) {\n            return;\n        }\n        let poly: SVGPolygonElement | null = null;\n        let polylineCount = 0;\n        Array.from(sein.childNodes).forEach(element => {\n            const elementNode = (<HTMLElement>element);\n\n            if (elementNode.nodeName.toUpperCase() === 'polyline'.toUpperCase()) {\n                polylineCount++;\n                poly = polylineFunc(polylineCount, elementNode, poly);\n            } else if (elementNode.nodeName.toUpperCase() === 'polygon'.toUpperCase() && polygonFunc) {\n                polygonFunc(elementNode);\n            } else if (elementNode.nodeName.toUpperCase() === 'ellipse'.toUpperCase() && ellipseFunc) {\n                ellipseFunc(elementNode);\n            }\n        });\n        if (poly) {\n            sein.appendChild(poly);\n        }\n    }\n\n    private createPolygon(elementNode: HTMLElement): SVGPolygonElement {\n        const poly = this.document.createElementNS(SVG_NS, 'polygon') as SVGPolygonElement;\n        const points = elementNode.getAttribute('points');\n        const className = elementNode.getAttribute('class');\n        if (points) {\n            poly.setAttribute('points', points);\n        }\n        if (className) {\n            poly.setAttribute('class', className);\n        }\n        poly.setAttribute('style', 'fill:transparent');\n        return poly;\n    }\n\n    zetClassOpStoringSymbolenMetMap(wisselPuicEnStoringSymboolPuic: Map<string, string>) {\n        StoringSymboolUtil.zetClassOpStoringSymbolenMetMap(wisselPuicEnStoringSymboolPuic);\n    }\n\n    zetClassOpLangeText() {\n        Array.from(this.document.querySelectorAll('#tekst'))\n             .filter((t) => t.textContent.length > 2)\n             .forEach((t) => t.classList.add('largetext'));\n    }\n\n    zetClassOpSpoornummers(spoornummerPuics: string[]) {\n        spoornummerPuics.forEach(element => {\n            const spoornummer_elems = Array.from(this.document.querySelectorAll('[class=p' + element + ']'));\n            spoornummer_elems.forEach((spoornummer) => {\n                spoornummer.classList.add('spoornummer');\n            });\n        });\n    }\n\n    zetClassOpRijrichtingen(seinen: SvgSein[]) {\n        for (const sein of seinen) {\n            const puic = sein.getPuic();\n            const seinElement = this.document.getElementById('p' + puic);\n            if (seinElement && typeof puic === 'string') {\n                const rijrichtingElement = this.geefRijrichtingVanSein(seinElement);\n                if (rijrichtingElement && sein.isBediend()) {\n                    this.addRijrichtingClass(rijrichtingElement, puic);\n                }\n            }\n        }\n    }\n\n    private geefRijrichtingVanSein(seinElement: HTMLElement): HTMLElement | undefined {\n        let rijrichtingElement: HTMLElement | undefined;\n        let polylineCount = 0;\n        for (const childNode of seinElement.childNodes) {\n            if (childNode.nodeName.toUpperCase() === 'polyline'.toUpperCase()) {\n                if (++polylineCount === 5) {\n                    rijrichtingElement = <HTMLElement>childNode;\n                }\n            }\n        }\n        return rijrichtingElement;\n    }\n\n    private addRijrichtingClass(elementNode: HTMLElement, seinPuic: string) {\n        elementNode.id = 'p' + seinPuic + '_rijrichting';\n        elementNode.classList.add('rijrichting');\n    }\n}\n\n","import { NgModule } from '@angular/core';\nimport { SignaleringsbeeldSvgUtilityService } from './signaleringsbeeld-svg-utility.service';\nimport { documentProvider, DocumentToken } from './util/document-token';\n\n@NgModule({\n  declarations: [],\n  imports: [],\n  exports: [],\n  providers: [\n    { provide: DocumentToken, useFactory: documentProvider },\n    SignaleringsbeeldSvgUtilityService\n  ]\n})\nexport class RijwegenModule {\n}\n"],"mappings":";;AAAA,IAAa,qBAAb,MAA+B;CAEpB,OAAO,gCAAgC,8BAAiD;EAC3F,6BAA6B,SAAS,mBAAmB,eAAc;GAEnE,AADiB,MAAM,KAAK,SAAS,iBAAiB,OAAO,UAAU,CACvE,CAAA,CAAS,SAAS,WAAW,KAAK,yBAAsC,QAAQ,MAAM,iBAAiB,CAAC;EAC5G,CAAC;CACL;CAEQ,OAAO,yBAAyB,QAAqB,MAAY;EACrE,MAAM,iBAAiB,KAAK,mBAAmB,MAAM;EAErD,IAAI,gBAAgB;GAChB,eAAe,KAAK;GACpB,eAAe,UAAU,IAAI,gBAAgB;EACjD;CACJ;CAEQ,OAAO,mBAAmB,QAAmB;EACjD,MAAM,mBAAmB,OAAO,WAAW;EAC3C,IAAI,gBAAgB;EAEpB,KAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,KAAK;GACvC,MAAM,cAA4B,OAAO,WAAW;GAEpD,IAAI,KAAK,WAAW,WAAW,GAAG;IAC9B;IACA,IAAI,KAAK,uBAAuB,eAAe,gBAAgB,KACxD,KAAK,6BAA6B,eAAe,gBAAgB,GACpE,OAAO;GAEf;EACJ;EAEA,OAAO;CACX;CAEQ,OAAO,6BAA6B,eAAuB,kBAAwB;EACvF,OAAO,kBAAkB,KAAK,qBAAqB;CACvD;CAEQ,OAAO,WAAW,MAAU;EAChC,OAAO,KAAK,SAAS,YAAW,MAAO,WAAW,YAAW;CACjE;CAEQ,OAAO,uBAAuB,eAAuB,kBAAwB;EACjF,OAAO,kBAAkB,KAAK,qBAAqB;CACvD;AACH;AC9CD,MAAa,gBAAgB,IAAI,eAAe,UAAU;AAC1D,SAAgB,mBAAgB;CAC5B,OAAO;AACX;ACAA,MAAa,SAAS;AACtB,MAAa,kBAAkB;AAC/B,MAAa,oBAAoB;AACjC,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,qBAAqB;AAClC,MAAa,mBAAmB;AAChC,MAAa,oBAAoB;AAGjC,IAAa,qCAAb,MAAa,mCAAkC;CAE3C,YAC4C,UAAkB;EAAlB,KAAA,WAAA;CAE5C;CAEQ,OAAO,YAAY,aAAoB;EAC1C,YAAyC,MAAM,UAAU;CAC9D;CAEA,qCAAkC;EAC9B,KAAK,iCAAgC;EACrC,KAAK,yCAAwC;CACjD;CAEQ,mCAAgC;EACpC,KAAK,gCAA+B;EACpC,KAAK,iCAAgC;CACzC;CAEA,2CAAwC;EAEpC,AADmB,MAAM,KAAK,KAAK,SAAS,uBAAuB,QAAQ,GAAG,CAC9E,CAAA,CAAW,QAAO,SAAQ,KAAK,OAAO,SAAS,CAAC,CACrC,SAAQ,SAAQ,KAAK,yCAAyC,IAAI,CAAC;CAClF;CAEA,aAAU;EACN,MAAM,eAAe,KAAK,SAAS,eAAe,cAAc;EAChE,IAAI,CAAC,cACD;EAEJ,MAAM,aAAa,aAAa;EAEhC,IAAI,WAAW,WAAW,GACtB;EAEJ,MAAM,MAAM,WAAW;EACvB,MAAM,OAAO,KAAK,SAAS,gBAAgB,QAAQ,MAAM;EACzD,MAAM,UAAU,KAAK,qBAAoB;EACzC,QAAQ,YAAY,KAAK,SAAS,cAAc,kFAAkF,CAAC;EACnI,QAAQ,YAAY,KAAK,SAAS,cAAc,uDAAuD,CAAC;EACxG,QAAQ,YAAY,KAAK,kBAAkB,YAAY,KAAK,KAAK,KAAK,GAAG,CAAC;EAC1E,QAAQ,YAAY,KAAK,kBAAkB,YAAY,KAAK,KAAK,KAAK,GAAG,CAAC;EAC1E,QAAQ,YAAY,KAAK,kBAAkB,YAAY,KAAK,KAAK,KAAK,GAAG,CAAC;EAC1E,QAAQ,YAAY,KAAK,kBAAkB,YAAY,KAAK,KAAK,KAAK,GAAG,CAAC;EAC1E,KAAK,YAAY,OAAO;EACxB,IAAI,YAAY,IAAI;CACxB;CAEQ,uBAAoB;EACxB,MAAM,UAAU,KAAK,SAAS,gBAAgB,QAAQ,SAAS;EAC/D,QAAQ,KAAK;EACb,QAAQ,aAAa,KAAK,GAAG;EAC7B,QAAQ,aAAa,KAAK,GAAG;EAC7B,QAAQ,aAAa,SAAS,GAAG;EACjC,QAAQ,aAAa,UAAU,GAAG;EAClC,QAAQ,aAAa,gBAAgB,gBAAgB;EACrD,OAAO;CACX;CAEQ,kBAAkB,WAAmB,GAAW,GAAW,GAAW,GAAS;EACnF,MAAM,OAAO,KAAK,SAAS,gBAAgB,QAAQ,MAAM;EACzD,KAAK,aAAa,SAAS,SAAS;EACpC,KAAK,aAAa,KAAK,CAAC;EACxB,KAAK,aAAa,SAAS,CAAC;EAC5B,KAAK,aAAa,UAAU,CAAC;EAC7B,KAAK,aAAa,KAAK,CAAC;EACxB,OAAO;CACX;CAGQ,kCAA+B;EACnC,MAAM,KAAK,KAAK,SAAS,iBAAiB,kBAAkB,CAAC,CAAC,CACxD,QAAO,SAAQ,KAAK,UAAU,SAAA,KAAyB,CAAC,CAAC,CACzD,SAAQ,SAAQ,mCAAmC,YAAY,IAAI,CAAC;CAC9E;CAEA,yCAAyC,SAAmB;EACxD,IAAI,SAEA,AADqB,MAAM,KAAK,QAAQ,qBAAqB,UAAU,CACvE,CAAA,CACC,QAAO,SAAQ,KAAK,UAAU,SAAA,KAAwB,CAAC,CAAC,CACxD,SAAQ,SAAQ,mCAAmC,YAAY,IAAI,CAAC;CAG7E;CAEA,mCAAgC;EAE5B,AADgB,MAAM,KAAK,KAAK,SAAS,qBAAqB,MAAM,CACpE,CAAA,CAAQ,QAAO,YAAW,QAAQ,OAAO,YAAY,QAAQ,OAAO,OAAO,CAAC,CACpE,SAAQ,YAAW,mCAAmC,YAAY,OAAO,CAAC;CACtF;CAEA,qCAAqC,uBAA+C;EAChF,sBAAsB,SAAQ,wBAAsB;GAChD,MAAM,OAAO,oBAAoB,QAAO;GAExC,AADiB,MAAM,KAAK,KAAK,SAAS,iBAAiB,OAAO,IAAI,CACtE,CAAA,CAAS,SAAQ,YAAW,mCAAmC,YAAY,OAAO,CAAC;EACvF,CAAC;CACL;CAEA,mCAAmC,QAAiB;EAChD,OAAO,QAAO,SAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAQ,SAAO;GAEzC,AADiB,MAAM,KAAK,KAAK,SAAS,iBAAiB,OAAO,KAAK,QAAO,CAAE,CAChF,CAAA,CAAS,SAAS,YAAY,KAAK,kBAAkB,MAAmB,OAAO,CAAC;EACpF,CAAC;CACL;CAEQ,kBAAkB,MAAe,aAAwB;EAC7D,MAAM,OAAO,KAAK,QAAO;EACzB,QAAQ,MAAR;GACI,KAAK;IACD,KAAK,YAAY,aAAa,KAAK,sBAAsB;IACzD;GACJ,KAAK;IAGD,KAAK,YAAY,aAAa,KAAK,qCAAqC,mCAAmC,WAAW;IACtH;GACJ,KAAK;IAED,KAAK,YAAY,aAAa,KAAK,mCAAmC;IACtE;GACJ,KAAK;IACD,KAAK,YAAY,aAAa,KAAK,6BAA6B;IAChE;GACJ,SACI,IAAI,MAAM,WAAW,cAAc,GAE/B,KAAK,YAAY,aAAa,KAAK,8BAA8B,KAAK,IAAI,CAAC;QACxE,IAAI,MAAM,WAAW,WAAW,GAGnC,KAAK,YAAY,aAAa,KAAK,0BAA0B,KAAK,IAAI,CAAC;QACpE,IAAI,MAAM,WAAW,YAAY,GAGpC,KAAK,YAAY,aAAa,KAAK,wBAAwB,MAAM,mCAAmC,WAAW;EAE3H;CACJ;CAEQ,8BAA8B,eAAuB,aAA0B,MAA8B;EACjH,IAAI,kBAAkB,GAClB,mCAAmC,YAAY,WAAW;EAE9D,OAAO;CACX;CAEQ,0BAA0B,eAAuB,aAA0B,MAA8B;EAC7G,OAAO,KAAK,oCAAoC,eAAe,aAAa,IAAI;EAChF,OAAO,KAAK,uBAAuB,eAAe,aAAa,IAAI;EACnE,IAAI,kBAAkB,GAAG;GAErB,OAAO,KAAK,cAAc,WAAW;GACrC,mCAAmC,YAAY,WAAW;EAC9D;EACA,OAAO;CACX;CAEQ,uBAAuB,eAAuB,aAA0B,MAA8B;EAC1G,IAAI,kBAAkB,KAAK,kBAAkB,GACzC,mCAAmC,YAAY,WAAW;EAE9D,OAAO;CACX;CAEQ,oCAAoC,eAAuB,aAA0B,MAA8B;EACvH,IAAI,kBAAkB,KAAK,kBAAkB,GACzC,mCAAmC,YAAY,WAAW;EAE9D,OAAO;CACX;CAEQ,8BAA8B,eAAuB,aAA0B,MAA8B;EACjH,IAAI,kBAAkB,GAAG;GAErB,OAAO,KAAK,cAAc,WAAW;GACrC,mCAAmC,YAAY,WAAW;EAC9D;EACA,OAAO;CACX;CAEQ,YACJ,MACA,cACA,aACA,aAAgD;EAEhD,IAAI,CAAC,MACD;EAEJ,IAAI,OAAiC;EACrC,IAAI,gBAAgB;EACpB,MAAM,KAAK,KAAK,UAAU,CAAC,CAAC,SAAQ,YAAU;GAC1C,MAAM,cAA4B;GAElC,IAAI,YAAY,SAAS,YAAW,MAAO,WAAW,YAAW,GAAI;IACjE;IACA,OAAO,aAAa,eAAe,aAAa,IAAI;GACxD,OAAO,IAAI,YAAY,SAAS,YAAW,MAAO,UAAU,YAAW,KAAM,aACzE,YAAY,WAAW;QACpB,IAAI,YAAY,SAAS,YAAW,MAAO,UAAU,YAAW,KAAM,aACzE,YAAY,WAAW;EAE/B,CAAC;EACD,IAAI,MACA,KAAK,YAAY,IAAI;CAE7B;CAEQ,cAAc,aAAwB;EAC1C,MAAM,OAAO,KAAK,SAAS,gBAAgB,QAAQ,SAAS;EAC5D,MAAM,SAAS,YAAY,aAAa,QAAQ;EAChD,MAAM,YAAY,YAAY,aAAa,OAAO;EAClD,IAAI,QACA,KAAK,aAAa,UAAU,MAAM;EAEtC,IAAI,WACA,KAAK,aAAa,SAAS,SAAS;EAExC,KAAK,aAAa,SAAS,kBAAkB;EAC7C,OAAO;CACX;CAEA,gCAAgC,gCAAmD;EAC/E,mBAAmB,gCAAgC,8BAA8B;CACrF;CAEA,sBAAmB;EACf,MAAM,KAAK,KAAK,SAAS,iBAAiB,QAAQ,CAAC,CAAC,CAC9C,QAAQ,MAAM,EAAE,YAAY,SAAS,CAAC,CAAC,CACvC,SAAS,MAAM,EAAE,UAAU,IAAI,WAAW,CAAC;CACrD;CAEA,uBAAuB,kBAA0B;EAC7C,iBAAiB,SAAQ,YAAU;GAE/B,AAD0B,MAAM,KAAK,KAAK,SAAS,iBAAiB,aAAa,UAAU,GAAG,CAC9F,CAAA,CAAkB,SAAS,gBAAe;IACtC,YAAY,UAAU,IAAI,aAAa;GAC3C,CAAC;EACL,CAAC;CACL;CAEA,wBAAwB,QAAiB;EACrC,KAAK,MAAM,QAAQ,QAAQ;GACvB,MAAM,OAAO,KAAK,QAAO;GACzB,MAAM,cAAc,KAAK,SAAS,eAAe,MAAM,IAAI;GAC3D,IAAI,eAAe,OAAO,SAAS,UAAU;IACzC,MAAM,qBAAqB,KAAK,uBAAuB,WAAW;IAClE,IAAI,sBAAsB,KAAK,UAAS,GACpC,KAAK,oBAAoB,oBAAoB,IAAI;GAEzD;EACJ;CACJ;CAEQ,uBAAuB,aAAwB;EACnD,IAAI;EACJ,IAAI,gBAAgB;EACpB,KAAK,MAAM,aAAa,YAAY,YAChC,IAAI,UAAU,SAAS,YAAW,MAAO,WAAW,YAAW,GAC3D;OAAI,EAAE,kBAAkB,GACpB,qBAAkC;EACtC;EAGR,OAAO;CACX;CAEQ,oBAAoB,aAA0B,UAAgB;EAClE,YAAY,KAAK,MAAM,WAAW;EAClC,YAAY,UAAU,IAAI,aAAa;CAC3C;CAlRS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAkC,MAAA,CAAA,EAAA,OAG/B,cAAa,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAHhB;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;EAAkC,CAAA;CAAA;;AAAlC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkC,YAAA,CAAA,EAD9C,MAAA,WAAA,CAAA;;;;GAIQ,MAAA;GAAO,MAAA,CAAA,aAAa;;;;ACL7B,IAAa,iBAAb,MAAa,eAAc;CAAd;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAc,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAd;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;EAAc,CAAA;CAAA;CAAd;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAc,WALd,CACT;IAAE,SAAS;IAAe,YAAY;GAAgB,GACtD,kCACD;EAAA,CAAA;CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAT1B,MAAA;EAAS,MAAA,CAAA;GACR,cAAc,CAAA;GACd,SAAS,CAAA;GACT,SAAS,CAAA;GACT,WAAW,CACT;IAAE,SAAS;IAAe,YAAY;GAAgB,GACtD,kCACD;EACF,CAAA"}