commit 5c01660f974fefae455586578485ebbe84c8fe50 Author: shinsh84 Date: Wed Aug 12 14:21:28 2026 +0900 Init WebCG diff --git a/LOG/.gitignore b/LOG/.gitignore new file mode 100644 index 0000000..86d0cb2 --- /dev/null +++ b/LOG/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..1ae93f9 --- /dev/null +++ b/dockerfile @@ -0,0 +1,23 @@ +# 가볍고 안정적인 Node.js 18 Alpine 이미지 사용 +FROM node:18-alpine + +# GitHub 소스를 가져오기 위해 git 설치 +RUN apk add --no-cache git + +# 컨테이너 내 작업 디렉토리 설정 +WORKDIR /app + +# 공식 WebCG 저장소 복제 (최신 소스코드) +RUN git clone https://gitea.shworld.uk/shinsh/WebCG.git . + +# Node.js 의존성 패키지 설치 +RUN npm install + +# 데이터 영구 저장을 위한 볼륨 포인트 선언 +VOLUME ["/app/ASSETS", "/app/DATAROOT"] + +# 기본 웹 서비스 포트 노출 +EXPOSE 5656 + +# 서버 실행 +CMD ["node", "server.js"] \ No newline at end of file diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..dbd4af3 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,14 @@ +module.exports = { + apps : [ + { + 'name': 'GC1', + 'script': 'server.js', + 'args': 'config.json' + }, + { + 'name': 'GC2', + 'script': 'server.js', + 'args': 'config2.json' + } + ] +}; diff --git a/locales/dutch.json b/locales/dutch.json new file mode 100644 index 0000000..be22517 --- /dev/null +++ b/locales/dutch.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "Hoi", + "slogan": "Bediening en beheer van afbeeldingen voor CasparCG en streamingtoepassingen.", + "folder": "Map", + "file": "Bestand", + "up": "Omhoog", + "field": "Veld", + "pcs": "stuks", + "help": "Help", + "home": "Home", + "yes": "Ja", + "no": "Nee", + "none": "None", + "all": "All", + "fromFolder": "van map" + }, + "color": { + "red": "Rood", + "green": "Groen", + "grey": "Grijs", + "orange": "Oranje", + "blue": "Blauw", + "black": "Zwart", + "light": "Licht", + "white": "Wit", + "transparent": "Transparent" + }, + "button": { + "add": "Nieuw", + "addplaylist": "Maak rundown", + "addRow": "Rij toevoegen", + "back": "◂ Terug", + "cancel": "Annuleren", + "config": "Instellingen applicatie", + "continue": "Verder ►", + "delete": "Wissen", + "deletetemplate": "Verwijder sjabloon", + "deletebutton": "Verwijder button", + "docs": "Documentatie", + "duplicate": "Duplicate", + "help": "Help", + "edit": "Wijzigen", + "edittemplates": "Wijzig sjablonen", + "exploredataroot": "Verken map dataroot", + "exploretemplates": "Verken map sjablonen", + "filterprojects": "Start typing to filter projects...", + "launch": "Projecten", + "overlayon": "FX play", + "overlayoff": "FX syop", + "open": "Open rundown", + "play": "Play ►", + "playmaster": "Play ► spatiebalk", + "rename": "Rename", + "replacetemplate": "Re-import", + "selectemplate": "Kiezen", + "select": "Open project", + "settings": "Projectinstellingen", + "shortcuts": "Sneltoetsen", + "showwebrenderer": "Open web playout venster", + "stop": "Stop ■", + "stopmaster": "Stop ◄ spatieblak", + "update": "Bijwerken ► F5", + "save": "Opslaan" + }, + "headline": { + "edit": "Wijzig rundown", + "select": "Kies een project", + "selectfile": "Kies een rundown", + "createrundowntip": "Create a new rundown to this project" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Configureer gebruikerstoegang", + "home": "Welkom", + "login": "Inloggen", + "pickAllTemplates": "Voeg alle sjablonen toe aan het overzicht", + "picktemplate": "Voeg sjabloon toe aan rundown", + "selectshow": "Kies een project", + "select": "Kies een rundown", + "selectshowextra": "Voeg een extra functie toe aan het project", + "selectemplate": "Kies een sjabloon", + "selectfile": "Choose a file", + "shortcuts": "Sneltoeten", + "controller": "Controller", + "configapp": "Instellingen applicatie", + "configshow": "Projectinstellingen", + "shows": "Projecten", + "f1ShortcutTip" : "Dit helpscherm", + "upDownShortcutTip" : "Focus op vorig / volgend item", + "homeEndShortcutTip" : "Focus op eerste / laatste item", + "enterShortcutTip" : "Open / sluit gefocust item om te bewerken", + "spaceShortcutTip" : "Afspelen / doorgaan / stoppen van gefocust playlistitem", + "tipContinue" : "Ondersteuning voor het next-commando moet in de template worden geïmplementeerd om continue te gebruiken", + "ctrlDShortcutTip" : "Dupliceer een template-item", + "shiftSpaceShortcutTip" : "Afspelen / stoppen van gefocust playlistitem", + "f5ShortcutTip" : "Stuur een directe update naar de template (om bijvoorbeeld typfouten te corrigeren).", + "supportUpdateCommandTip" : "Ondersteuning voor het update-commando moet in de template worden geïmplementeerd.", + "capsShortcutTip" : "Toon item-overlays voor snelle info en om API-commando's snel te kopiëren.", + "escShortcutTip": "Stop alle lagen die door de huidige rundown worden gebruikt." + }, + "config": { + "addnewtip": "Voeg nieuw item toe door invullen en opslaan", + "addfirsttemplate": "Klik + om een sjabloon toe te voegen aan dit project", + "addfirstextra": "Klik + om een extra functie toe te voegen aan dit project", + "audioplayer": "Audiospeler", + "authpolicy": "Configuratie gbruikerstoegang. Gebruikersnaam en wachtwoord gebruiken?", + "authinfo": "Dit wordt getoond als er een gebruiksnaam is ingevoerd zoner een wachtwoord in het config-bestand.", + "authnone": "Gebruikersnaam of wachtwoord zijn niet vereist voor de applicatie.", + "backgroundImage": "Static background image (usually transparent)", + "playerflags": "Instellingen player", + "buttoncolor": "Buttonkleur", + "buttontext": "Buttontekst", + "buttontexts": "Buttonwteksten", + "buttontype": "Buttontype", + "casparcg": "CasparCG instellingen", + "ccgtemplates": "sjabloonmap (casparcg.config)", + "ccgplayout": "CasparCG playout", + "ccgservers": "CasparCG servers", + "coloraccent": "Accentkleur", + "dataformat": "Gegevensformaat", + "dataroot": "Gegevensmap", + "defaultvalue": "Standaardwaarde", + "description": "Beschrijving", + "extrabutton": "Extra button", + "extrabuttondescription": "Eenvoudige button die een functie uitvoert", + "extratoggle": "Toggle button", + "extratoggledescription": "Button voor aparte aan- en uit status", + "extraselectbutton": "Selectie keuzelijst met een button", + "extraselectdescription": "Keuzelijst met verschillende opties", + "functionlibrary": "Functiebibliotheek (/js/myFunctions.js)", + "functiondescription": "Beschrijving functie", + "functionhandler": "Event handler (functie)", + "general": "Algemene instellingen", + "globalbuttons": "Extra functies", + "inputfields": "Sjabloonvelden", + "javascriptfile": "Javascript-bestand (/js/...)", + "language": "Taal gebruikersinterface", + "logfolder": "Logmap", + "loglevel": "Logniveau", + "openchrome": "Open Chrome bij herstarten", + "options": "Opties keuzelijst (tekst, waarde)", + "optionalBgImage": "Optional background image from folder", + "restartinfo": "SPX moet opnieuw worden gestart om de wijzigingen door te voeren.", + "resolution": "Resolution", + "resolutioninfo": "Please note, templates are designed for HD by default and may need changes to support other resolutions.", + "serverport": "Poort", + "showextras": "Extra functies project", + "stopmode": "Stop animatie", + "templatefile": "Sjabloonbestand", + "templates": "Aan dit project gekoppelde sjablonen", + "templatepathinfo": "Let op, sjablonen moeten beschikbaar zijn voor zowel CasparCG- als SPX-applicaties. Configureer dit als de CasparCG-sjabloonmap of kopieer indien nodig sjabloonbestanden naar beide toepassingen.", + "templateroot": "HTML-sjablonenmap", + "text": "Zichtbare tekst", + "updated": "Updated", + "value": "Waarde", + "webplayout": "Web playout laag", + "webplayurl": "Browser URL", + "preview": "Preview action", + "projectvariables": "Project variables", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "Bestand bestaat, probeer opnieuw aub", + "preventBrowseUp": "Dit is de basissjabloonmap.", + "templateDefinitionMissing": "SPXGCTemplateDefinition{} ontbreekt in het gekozen bestand. Raadpleeg het onderdeel sjablonen in de documentatie." + }, + "warning": { + "notemplates": "There are no templates linked to this project yet", + "showprofilebackup": "Het wordt aangeraden om een reserverkopie van het profielbestand te maken voor wijzigingen aan te brengen.", + "severalControllers": "Er zijn meerdere controllers verbonden met de SPX-server! Slechts één aanbevolen." + }, + "hover": { + "accent": "Accentkleur voor rundowns in sjabloon", + "addrundownitem": "Voeg een item to aan rundown", + "addshow": "Maak een nieuw project", + "addrundown": "Voeg nieuwe rundown toe aan project", + "addccgserver": "Voor nieuwe CasparCG-server toe door NAME, IP en PORT-gegevens toe te voegen", + "buttontype": "Extra functietype (knop, schakelknop ...)", + "browsetemplate": "Zoek een nieuw sjabloon om aan dit project te koppelen", + "browseextras": "Zoek een nieuwe functie om aan dit project te koppelen", + "browseglobalextras": "Voeg een nieuwe globale functie toe", + "cancelconfig": "Sluit config zonder de wijzigingen op te slaan", + "ccgserver": "CasparCG servernaam in SPX", + "ccgchannel": "CasparCG playout-kanaal", + "ccglayer": "CasparCG playout-laag", + "ccgtemplatepath": "Waarde sjabloonmap van casparcg.config-bestand", + "ccghost": "CasparCG server netwerk naam of IP-adres", + "ccgport": "CasparCG serverpoort (meestal 5250)", + "colors": "De standaardkleur van de functietoets in de gebruikersinterface", + "config": "Open applicatie-configuratie", + "confitem": "Sjablooninstellingen", + "confjsfile": "Javascript bibliotheek en algemene extra functies", + "dataformat": "In welk formaat worden de gegevens naar het sjabloon gestuurd?", + "dataroot": "Ggevensmap om project- en rundownbestanden op te slaan?", + "defaultvalue": "De standaardwaarde moet een van de opties zijn", + "delete": "Verwijder item", + "deletethis": "Verwijder dit item uit de rundown", + "deletepisode": "Wis gekozen rundown met alle items", + "deleteshow": "Wis gekozen projct met instellingen en alle rundowns", + "docs": "Open documentatie", + "duplicateitem": "Kopieer dit item", + "duplicaterundown": "Maakt een kopie van de gekozen rundown", + "epslist": "Kies of dubbelklik een rundown om te openen", + "extradescr": "Beschrijving extra functie", + "fcall": "Event handler functie in functiebibliotheek (bijvoorbeeld helloWorld)", + "fields": "Gescande SPXGCTemplateDefinition velden", + "github": "Open de SPX project pagina in GitHub", + "help": "Open help over dit onderdeel", + "htmlfolder": "Absoluut pad naar map met CasparCG-sjablonen?", + "item": "dubbelklik (of Enter) om item editor te openen of sluiten. Sleep om items te sorteren.", + "lang": "Taal gebruikersinterface? (U kunt desgewenst nieuwe taalbestanden toevoegen aan de map 'locales')", + "logfolder": "Map voor logbestanden", + "loglevel": "Logging lvel? Standaardlevel: info. Meste loginformatie: debug.", + "masterplay": "Play / Stop gekozen item (spatiebalk)", + "masterupdate": "Update teksten van item (F5)", + "mastercontinue": "Ga verder met volgende stap animatie (Shift + Spatiebalk)", + "navishows": "Projecten", + "navishow": "Rundowns", + "newversavailable": "Er is een nieuwe versie. Lees hier meer.", + "openbrowser": "Moet Chrome starten als de server start?", + "openrundown": "Open gekozen rundown in controller", + "options": "Instellingen keuzelijst", + "outmode": "Eindanimatie van de afbeelding", + "port": "Poort om de applicatie te gebruiken? (Bijvoorbeeld 3000 5000 ...) Let op: DIT PAGINA-ADRES zal ook veranderen!", + "profile": "Open instellingen van dit project", + "playthis": "Speel of stop dit item", + "playouturl": "Lokaal webplayout-adres gegenereerd door GC voor grafische afbeeldingen", + "removeglobalextra": "Verwijder deze button uit alle projecten", + "removetemplate": "Verwijder dit sjabloon uit dit project", + "remoteplayouturl": "Webrender geïnstalleerd op een externe server. (Let op dat machines openbare IP-adressen moeten hebben.)", + "replacetemplate": "Re-import template if changes made to source code.", + "resolution": "Output resolution. The default is HD (1920x1080).", + "saveconfig": "Sla instelingen op in een config bestand", + "saveprofile": "Opslaan projectinstellingen", + "showjsfile": "Javascript functiebibliotheek van dit projeect", + "showlist": "Kies of dubbelklik project om te openen", + "submitthis": "Opslaan en editor afsluiten", + "templatepath": "Relatief bestandspad HTML-sjablonen", + "templatedescr": "Korte beschrijving van het item for de GUI", + "text": "Buttontekst", + "text1": "Buttontekst als actief", + "updated": "Timestamp when template was last imported", + "updatethis": "Update dit item", + "weblayer": "Webplayout laag", + "preview": "Control when graphics are rendered to the preview channel", + "exportitem": "Create a CSV file from fields of this template ", + "importitems": "Create rundown items from a CSV file", + "renameepisode": "Rename selected rundown" + } +} \ No newline at end of file diff --git a/locales/english.json b/locales/english.json new file mode 100644 index 0000000..8a7cf47 --- /dev/null +++ b/locales/english.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "Howdy", + "slogan": "Manage and control graphics for live broadcast, live streaming and live events.", + "folder": "Folder", + "file": "File", + "up": "Up", + "field": "Field", + "pcs": "pcs", + "help": "Help", + "home": "Home", + "yes": "Yes", + "no": "No", + "none": "None", + "all": "All", + "fromFolder": "from folder" + }, + "color": { + "red": "Red", + "green": "Green", + "grey": "Gray", + "orange": "Orange", + "blue": "Blue", + "black": "Black", + "light": "Light", + "white": "White", + "transparent": "Transparent" + }, + "button": { + "add": "New", + "addplaylist": "Add rundown", + "addRow": "Add row", + "back": "◂ Back", + "cancel": "Cancel", + "config": "Application config", + "continue": "Continue ►", + "delete": "Delete", + "deletetemplate": "Remove template", + "deletebutton": "Remove button", + "docs": "Documentation", + "duplicate": "Duplicate", + "help": "Help", + "edit": "Edit", + "edittemplates": "Edit templates", + "exploredataroot": "Explore dataroot folder", + "exploretemplates": "Explore templates folder", + "filterprojects": "Start typing to filter projects...", + "launch": "Projects", + "overlayon": "FX PLAY", + "overlayoff": "FX STOP", + "open": "Open rundown", + "play": "Play ►", + "playmaster": "Play ►", + "rename": "Rename", + "replacetemplate": "Re-import", + "selectemplate": "Select", + "select": "Open project", + "settings": "Project settings", + "shortcuts": "Keyboard shortcuts", + "showwebrenderer": "Open output window...", + "stop": "Stop ■", + "stopmaster": "Stop ■", + "update": "Update ► F5", + "save": "Save" + }, + "headline": { + "createrundowntip": "Create a new rundown to this project", + "edit": "Edit rundown", + "select": "Choose a project", + "selectfile": "Choose a rundown" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Configure user access", + "home": "Welcome", + "login": "Login", + "pickAllTemplates": "Add all templates to the rundown", + "picktemplate": "Add template to rundown", + "selectshow": "Choose a project", + "select": "Choose a rundown", + "selectshowextra": "Add extra control to the project", + "selectemplate": "Choose a template", + "selectfile": "Choose a file", + "shortcuts": "Keyboard shortcuts", + "controller": "Controller", + "configapp": "Application configuration", + "configshow": "Project settings", + "shows": "Projects", + "f1ShortcutTip" : "This help screen", + "upDownShortcutTip" : "Focus previous / next item", + "homeEndShortcutTip" : "Focus first / last item", + "enterShortcutTip" : "Open / close focused item for editing", + "spaceShortcutTip" : "Play / continue / stop focused playlist item", + "tipContinue" : "Support for next -command must be implemented in the template", + "ctrlDShortcutTip" : "Duplicate a template item", + "shiftSpaceShortcutTip" : "Play / stop focused playlist item", + "f5ShortcutTip" : "Send an instant update to the template (to fix typos, for instance).", + "supportUpdateCommandTip" : "Support for update command must be implemented in the template.", + "capsShortcutTip" : "Show item overlays for quick info and for copying API commands quickly.", + "escShortcutTip": "Stop all layers used by current rundown." + }, + "config": { + "addnewtip": "Add new item by filling in and saving", + "addfirsttemplate": "Click + to add a template to this project", + "addfirstextra": "Click + to add an extra control to this project", + "audioplayer": "Audioplayer", + "authpolicy": "User access configuration. Should username and password be used?", + "authinfo": "This dialog will be shown if a username is set without a password in config-file.", + "authnone": "Application does not require username or password.", + "backgroundImage": "Static background image (usually transparent)", + "playerflags": "Player parameters", + "preview": "Preview action", + "buttoncolor": "Button color", + "buttontext": "Button caption", + "buttontexts": "Button captions", + "buttontype": "Button type", + "casparcg": "CasparCG settings", + "ccgtemplates": "template-folder (casparcg.config)", + "ccgplayout": "CasparCG playout", + "ccgservers": "CasparCG servers", + "coloraccent": "Accent color", + "dataformat": "Data format", + "dataroot": "Data folder", + "defaultvalue": "Default value", + "description": "Description", + "extrabutton": "Button", + "extrabuttondescription": "Simple push button which executes a function", + "extratoggle": "Toggle button", + "extratoggledescription": "Button with separate functions for on and off states", + "extraselectbutton": "Selection dropdown with a button", + "extraselectdescription": "Dropdown selector with multiple options", + "functionlibrary": "Function library (/js/myFunctions.js)", + "functiondescription": "Function description", + "functionhandler": "Handler function", + "general": "General settings", + "globalbuttons": "Global extras", + "inputfields": "Template fields", + "javascriptfile": "Javascript file (/js/...)", + "language": "User interface language", + "logfolder": "Log folder", + "loglevel": "Log level", + "openchrome": "Open Chrome at restart", + "options": "Dropdown options (text, value)", + "optionalBgImage": "Optional background image from folder", + "projectvariables": "Project variables", + "resolution": "Output resolution", + "resolutioninfo": "Please note, most templates are designed for HD by default and may need changes to support other resolutions.", + "restartinfo": "SPX process will need to restart for changes to have effect", + "serverport": "Port", + "showextras": "Project extras", + "stopmode": "Stop animation", + "templatefile": "Template file", + "templates": "Templates assigned to this project", + "templatepathinfo": "Note, templates must be available to both CasparCG- and SPX-applications. Configure this to be the CasparCG template folder or copy templatefiles to both applications if necessary.", + "templateroot": "HTML template-folder", + "text": "Visible text", + "updated": "Updated", + "value": "Value", + "webplayout": "Web playout layer", + "webplayurl": "Browser URL", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "File existed, please try again.", + "preventBrowseUp": "This is the root template folder.", + "templateDefinitionMissing": "SPXGCTemplateDefinition{} missing from chosen file. Refer to section templates in documentation." + }, + "warning": { + "notemplates": "There are no templates linked to this project yet", + "showprofilebackup": "It is recommended to make a backup copy of profile file before making changes.", + "severalControllers": "Several controllers are connected to the SPX server! Only one recommended." + }, + "hover": { + "accent": "Template accent color on rundowns.", + "addrundownitem": "Add item to rundown", + "addshow": "Create new project", + "addrundown": "Add new rundown to project", + "addccgserver": "Add new CasparCG -server by entering NAME, IP and PORT -info", + "buttontype": "Type of an extra control.", + "browsetemplate": "Browse for a new template to assign to this project", + "browseextras": "Browse for a new extra control to assign to this project", + "browseglobalextras": "Add a global extra control", + "cancelconfig": "Close config without saving changes", + "ccgserver": "CasparCG server name in SPX", + "ccgchannel": "CasparCG playout channel", + "ccglayer": "CasparCG playout layer", + "ccgtemplatepath": "template-folder value from casparcg.config -file", + "ccghost": "CasparCG server network name or IP-address", + "ccgport": "CasparCG server port (usually 5250)", + "colors": "Extra control color in user interface", + "config": "Open application configuration", + "confitem": "Templaten settings", + "confjsfile": "Javascript -library of global extras", + "dataformat": "Data format to send to template", + "dataroot": "Data folder for storing project- and rundown files?", + "defaultvalue": "Default must be one of the available option values", + "delete": "Remove item", + "deletethis": "Remove this item from the rundown", + "deletepisode": "Delete selected rundown including all items", + "deleteshow": "Delete selected project including settings and all rundowns", + "docs": "Open documentation", + "duplicateitem": "Duplicate this item", + "duplicaterundown": "Creates a duplicate of the selected rundown", + "epslist": "Select or doubleclick rundown to open it", + "extradescr": "Extra function description", + "fcall": "Event handler function in function library (for example helloWorld)", + "fields": "Scanned SPXGCTemplateDefinition fields", + "github": "Open SPX project page in GitHub", + "help": "Open help about this section", + "htmlfolder": "Absolute folder path to CasparCG template folder?", + "item": "Double click (or Enter) to open / close item editor. Drag to sort items.", + "lang": "User interface language? (You can create new language files to locales-folder as needed)", + "logfolder": "Folder for log files", + "loglevel": "Logging level? Default level: info. Most log information: debug.", + "masterplay": "Play / stop selected item (Space)", + "masterupdate": "Update texts from selected item (F5)", + "mastercontinue": "Continue animation to next step (Shift + Space)", + "navishows": "Projects", + "navishow": "Rundowns", + "newversavailable": "A newer version is available. Click to read more.", + "openbrowser": "Should Chrome browser launch at server startup?", + "openrundown": "Open selected rundown in controller", + "options": "Dropdown settings", + "outmode": "Out animation of the graphic", + "port": "Application port to use? (For instance 3000 5000...) Please note: THIS PAGES ADDRESS will also change!", + "profile": "Open settings of this project", + "playthis": "Play or stop this item", + "playouturl": "Web playout URL for streaming graphics applications.", + "preview": "Control when graphics are rendered to the preview channel", + "removeglobalextra": "Remove this extra from all projects", + "removetemplate": "Remove this template from this project", + "remoteplayouturl": "Webrender installed to en external server. (Note, public IP addresses required)", + "replacetemplate": "Re-import template if changes made to source code.", + "resolution": "Output resolution. The default is HD (1920x1080).", + "saveconfig": "Save configurations to a config file", + "saveprofile": "Save project settings", + "showjsfile": "Javascript function library of this project", + "showlist": "Select or doubleclick project to open it", + "submitthis": "Save and close editor", + "templatepath": "HTML-templates relative filepath", + "templatedescr": "Short description of the item for the GUI", + "text": "Button text", + "text1": "Button text when active", + "updated": "Timestamp when template was last imported", + "updatethis": "Update this item", + "weblayer": "Webplayout layer", + "exportitem": "Create a CSV file from fields of this template ", + "importitems": "Create rundown items from a CSV file", + "renameepisode": "Rename selected rundown" + } +} \ No newline at end of file diff --git a/locales/finnish.json b/locales/finnish.json new file mode 100644 index 0000000..c262013 --- /dev/null +++ b/locales/finnish.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "Moikka", + "slogan": "Hallinnoi ja ohjaa grafiikoita CasparCG:lle tai streaming sovelluksiin.", + "folder": "Kansio", + "file": "Tiedosto", + "up": "Ylös", + "field": "Kenttä", + "pcs": "kpl", + "help": "Ohje", + "home": "Alkuun", + "yes": "Kyllä", + "no": "Ei", + "none": "Ei mitään", + "all": "Kaikki", + "fromFolder": "kansiosta" + }, + "color": { + "red": "Punainen", + "green": "Vihreä", + "grey": "Harmaa", + "orange": "Oranssi", + "blue": "Sininen", + "black": "Musta", + "light": "Vaalea", + "white": "Valkoinen", + "transparent": "Läpinäkyvä" + }, + "button": { + "add": "Uusi", + "addplaylist": "Lisää ajolista", + "addRow": "Lisää rivi", + "back": "◂ Takaisin", + "cancel": "Peruuta", + "config": "Sovelluksen asetukset", + "continue": "Jatka ►", + "delete": "Poista", + "deletetemplate": "Poista template", + "deletebutton": "Poista painike", + "docs": "Dokumentaatio", + "duplicate": "Monista", + "help": "Ohje", + "edit": "Muokkaa", + "edittemplates": "Muokkaa templateja", + "exploredataroot": "Selaa dataroot kansiota", + "exploretemplates": "Selaa templates kansiota", + "filterprojects": "Kirjoita suodattaaksesi projekteja...", + "launch": "Projektit", + "overlayon": "FX PLAY", + "overlayoff": "FX STOP", + "open": "Avaa ajolista", + "play": "Toista ►", + "playmaster": "Toista ► VÄLI", + "rename": "Nimeä uudelleen", + "replacetemplate": "Tuo uudelleen", + "selectemplate": "Valitse", + "select": "Avaa projekti", + "settings": "Projektin asetukset", + "shortcuts": "Näytä pikakomennot", + "showwebrenderer": "Avaa web playout ikkuna", + "stop": "Pois ■", + "stopmaster": "Pois ◄ VÄLI", + "update": "Päivitä ► F5", + "save": "Tallenna" + }, + "headline": { + "createrundowntip": "Luo uusi lista tähän projektiin", + "edit": "Muokkaa sisältölistaa", + "select": "Valitse projekti", + "selectfile": "Valitse ajolista" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Kirjautumisen määrittely", + "home": "Tervetuloa", + "login": "Kirjaudu", + "picktemplate": "Lisää template ajolistalle", + "pickAllTemplates": "Lisää kaikki templates ajolistalle", + "selectshow": "Valitse projekti", + "select": "Valitse sisältötiedosto", + "selectshowextra": "Lisää projektiin lisätoiminto", + "selectemplate": "Valitse templatetiedosto", + "selectfile": "Valitse tiedosto", + "shortcuts": "Pikakomennot", + "controller": "Controller", + "configapp": "Sovelluksen asetukset", + "configshow": "Projektin asetukset", + "shows": "Projektit", + "f1ShortcutTip" : "Tämä ohjenäyttö", + "upDownShortcutTip" : "Siirrä kohdistus edelliseen / seuraavaan kohteeseen", + "homeEndShortcutTip" : "Siirrä kohdistus ensimmäiseen / viimeiseen kohteeseen", + "enterShortcutTip" : "Avaa / sulje kohdistettu kohde muokkausta varten", + "spaceShortcutTip" : "Toista / jatka / pysäytä kohdistettu soittolistan kohde", + "tipContinue" : "Tuki next-komennolle täytyy toteuttaa templatessa käyttääksesi continue-komentoa", + "ctrlDShortcutTip" : "Monista templaten kohde", + "shiftSpaceShortcutTip" : "Toista / pysäytä kohdistettu soittolistan kohde", + "f5ShortcutTip" : "Lähetä välitön päivitys templateen (esimerkiksi kirjoitusvirheiden korjaamiseksi).", + "supportUpdateCommandTip" : "Tuki update-komennolle täytyy toteuttaa templatessa.", + "capsShortcutTip" : "Näytä kohdepeitteet nopeaa tietoa ja API-komentojen kopiointia varten.", + "escShortcutTip": "Pysäytä kaikki nykyisen rundownin käyttämät kerrokset." + }, + "config": { + "addnewtip": "Lisää uusi vaihtoehto täyttämällä tyhjä rivi ja tallentamalla", + "addfirsttemplate": "Klikkaa + lisätäksesi templaten tähän projektiin", + "addfirstextra": "Klikkaa + lisätäksesi extra kontrollin tähän projektiin", + "audioplayer": "Audioplayer", + "authpolicy": "Sisäänkirjautumisen määrittely: käytetäänkö käyttäjätunnusta ja salasanaa?", + "authinfo": "Tämä asetus tulee näkyiin, jos config -tiedostossa on määritettynä username mutta ei salasanaa.", + "authnone": "Sovelluksen käyttö ei vaadi käyttäjätunnusta ja salasanaa.", + "backgroundImage": "Staattinen tausta (yleensä läpinäkyvä)", + "playerflags": "Player parametrit", + "buttoncolor": "Painikkeen väri", + "buttontext": "Painikkeen teksti", + "buttontexts": "Painikkeen tekstit", + "buttontype": "Painikkeen tyyppi", + "casparcg": "CasparCG asetukset", + "ccgtemplates": "template-folder (casparcg.config)", + "ccgplayout": "CasparCG playout", + "ccgservers": "CasparCG palvelimet", + "coloraccent": "Korostusväri", + "dataformat": "Datan lähetysmuoto", + "dataroot": "Datakansio", + "defaultvalue": "Oletusarvo", + "description": "Kuvaus", + "extrabutton": "Painike", + "extrabuttondescription": "Yksinkertainen painike joka suorittaa klikatessa funktion", + "extratoggle": "On/Off painike", + "extratoggledescription": "Painike joka suorittaa erilliset päälle / pois funktiot", + "extraselectbutton": "Valintalista ja painike", + "extraselectdescription": "Alasvetovalikko jossa useita vaihtoehtoja sekä toimintopainike", + "functionlibrary": "Funktiokirjasto (/js/myFunctions.js)", + "functiondescription": "Toiminnon kuvaus", + "functionhandler": "Tapahtumakäsittelijä (funktio)", + "general": "Yleiset asetukset", + "globalbuttons": "Globaalit lisäpainikkeet", + "inputfields": "Templatekenttiä", + "javascriptfile": "Javascript tiedosto (/js/...)", + "language": "Käyttöliittymän kieli", + "logfolder": "Logituskansio", + "loglevel": "Logitustaso", + "openchrome": "Avaa Chrome käynnistyksessä", + "options": "Valikon vaihtoehdot (teksti, arvo)", + "optionalBgImage": "Vaihtoehtoinen taustakuva kansiosta", + "restartinfo": "SPX prosessi pitää uudelleenkäynnistää muutosten jälkeen.", + "resolution": "Resoluutio", + "resolutioninfo": "Huomaa: templatet on suunniteltu yleensä HD resoluutioon ja voivat vaatia muutoksia eri kokoja varten.", + "serverport": "Tämän sovelluksen portti", + "showextras": "Projektin lisätoiminnot", + "stopmode": "Stop animaatio", + "templatefile": "Template tiedosto", + "templates": "Projektiin linkitetyt templatet", + "templatepathinfo": "Huomaa, että templatet tulee olla käytettävissä sekä CasparCG- että SPX-sovelluksille. Konfiguroi tästä CasparCG kansio tai tarvittaessa kopioi templatet molempien sovelluksien kansioihin.", + "templateroot": "HTML template-kansio", + "text": "Näkyvä teksti", + "updated": "Päivitetty", + "value": "Arvo", + "webplayout": "Web playout taso", + "webplayurl": "Browser URL", + "preview": "Esikatselutoiminto", + "projectvariables": "Projektin muuttujat", + "autoplay": "Soita aktiiviset tasot ladattaessa" + }, + "error": { + "fileExisted": "Tiedosto oli jo olemassa. Yritä uudelleen.", + "preventBrowseUp": "Tämä on template kansio.", + "templateDefinitionMissing": "Valitusta template-tiedostosta puuttui window.SPXGCTemplateDefinition{}. Katso dokumentaatiosta kohta template-tiedostot." + }, + "warning": { + "notemplates": "Tähän projektiin ei ole linkitetty templateja", + "showprofilebackup": "On suositeltavaa ottaa profile.json tiedostosta varmuuskopio ennen muutosten tekemistä.", + "severalControllers": "Useita kontrollereita yhdistyneenä SPX serveriin! Vain yhtä suositellaan." + }, + "hover": { + "accent": "Templaten korostusväri ajolistoissa", + "addrundownitem": "Lisää elementti ajolistalle", + "addshow": "Luo uusi projekti", + "addrundown": "Lisää uusi ajolista projektiin", + "addccgserver": "Lisää uusi CasparCG -palvelin syöttämällä NIMI IP ja PORT -tiedot", + "buttontype": "Lisätoiminnon tyyppi (button, togglebutton...)", + "browsetemplate": "Lisää tähän projektiin uusi template selaamalla templatekansiota...", + "browseextras": "Lisää tähän projektiin uusi lisätoiminto...", + "browseglobalextras": "Lisää uusi globaali lisätoiminto...", + "cancelconfig": "Sulje config tallentamatta muutoksia", + "ccgserver": "CasparCG ulosajopalvelimen nimi", + "ccgchannel": "CasparCG kanava palvelimella", + "ccglayer": "CasparCG taso kanavalla", + "ccgtemplatepath": "Parametrin template-folder arvo casparcg.config -tiedostosta", + "ccghost": "CasparCG palvelimen verkkonimi tai IP-osoite", + "ccgport": "CasparCG palvelimen portti (yleensä 5250)", + "colors": "Toimintopainikkeen oletusväri käyttöliittymässä", + "config": "Avaa sovelluksen yleiset asetukset", + "confitem": "Templaten asetukset", + "confjsfile": "Kaikissa ohjelmaprofiileissa näkyvien lisäpainikkeiden javascript-kirjasto", + "dataformat": "Missä muodossa data lähetetään templatelle?", + "dataroot": "Mihin kansioon tallennetaan projekti- ja ajolistatiedostot?", + "defaultvalue": "Oletusarvon tulee olla yksi vaihtoehdoista", + "delete": "Poista elementti", + "deletethis": "Poista tämä elementti listalta", + "deletepisode": "Poista valittu ajolista ja kaikki sen elementit", + "deleteshow": "Poista valittu projekti ja kaikki sen asetukset ja ajolistat", + "docs": "Avaa dokumentaatio", + "duplicateitem": "Monista tämä elementti", + "duplicaterundown": "Luo valitusta ajolistasta kopion", + "epslist": "Valitse tai tuplaklikkaa haluamasi ajolista auki", + "extradescr": "Toimintopainikeen lyhyt kuvaus käyttöliittymään", + "fcall": "Funktiokirjastossa oleva tapahtumakäsittelijä funktio (esim helloWorld)", + "fields": "Templatesta skannatut SPXGCTemplateDefinition -tiedot", + "github": "Avaa SPX -projektin sivu Githubissa", + "help": "Avaa help tästä aihealueesta", + "htmlfolder": "Absoluuttinen polku CasparCG:n template-folder -kansioon?", + "item": "Tuplaklikkaa (tai Enter) muokkaustila auki / kiinni tai raahaa eri järjestykseen", + "lang": "Käyttöliittymän kieliversio-tiedosto? (Voit tarvittaessa lisätä kielitiedostoja kansioon locales.)", + "logfolder": "Kansio johon logitiedostot generoidaan", + "loglevel": "Mitä logitasoa käytetään? Oletus: info. Eniten tietoja tallentuu: debug.", + "masterplay": "Toista / pysäytä aktiivinen elementti (Space)", + "masterupdate": "Päivitä aktiivisen elementit tekstit (F5)", + "mastercontinue": "Jatka animaatiota seuraavaan vaiheeseen (Shift + Space)", + "navishows": "Projektilistaukseen", + "navishow": "Ajolistat", + "newversavailable": "Uudempi versio saatavilla. Klikkaa ja lue lisää.", + "openbrowser": "Avataanko Chrome-selain automaattisesti kun GC-palvelin käynnistetään?", + "openrundown": "Avaa valittu ajolista muokkausta tai ulosajoa varten", + "options": "Alasvetovalikon asetukset", + "outmode": "Grafiikan poistuminen", + "port": "Mitä tietoliikenneporttia käytetään? (Esim 3000 5000...) Huomaa että TÄMÄN SIVUN url-osoite muuttuu!", + "profile": "Avaa tämän projektin asetukset", + "playthis": "Toista / pysäytä tämä elementti", + "playouturl": "GC:n generoima paikallinen webplayout osoite streamgrafiikoita varten", + "removeglobalextra": "Poista tämä painike kaikista projekteista", + "removetemplate": "Poista tämä template projektista", + "remoteplayouturl": "Julkiselle palvelimelle asennettu webrender. (Huomaa että koneilla oltava julkiset IP-osoitteet.)", + "replacetemplate": "Tuo template uudelleen kun lähdekoodiin tehty muutoksia.", + "resolution": "Resoluutio. Oletus on HD (1920x1080).", + "saveconfig": "Tallenna asetukset sovelluksen config-tiedostoon", + "saveprofile": "Tallenna projektin asetukset", + "showjsfile": "Tämän projektin lisätoimintojen javascript-kirjasto", + "showlist": "Valitse tai tuplaklikkaa haluamasi projekti auki", + "submitthis": "Tallenna ja sulje muokkausnäkymä", + "templatepath": "HTML-grafiikkatemplaten suhteellinen tiedostopolku template-kansiossa", + "templatedescr": "Elementin lyhyt kuvaus GC:n käyttöliittymässä", + "text": "Painikkeen teksti", + "text1": "Painikkeen teksti painettuna", + "updated": "Viimeisimmän päivityksen aikaleima", + "updatethis": "Päivitä tämä elementti", + "weblayer": "Webplayout kanava", + "preview": "Määrittelee koska esikatselu päivitetään", + "exportitem": "Luo CSV tiedosto tämän templaten kentistä", + "importitems": "Tuo ajolistalle elementtejä CSV tiedostosta", + "renameepisode": "Nimeä ajolista uudelleen" + } +} \ No newline at end of file diff --git a/locales/german.json b/locales/german.json new file mode 100644 index 0000000..1034147 --- /dev/null +++ b/locales/german.json @@ -0,0 +1,252 @@ +{ + "general": { + "hello": "Hallo", + "slogan": "Verwaltung und Steuerung von Grafiken für Live-Übertragungen, Live-Streaming und Live-Events.", + "folder": "Ordner", + "file": "Datei", + "up": "Nach oben", + "field": "Feld", + "pcs": "Stk.", + "help": "Hilfe", + "home": "Start", + "yes": "Ja", + "no": "Nein", + "none": "None", + "all": "Alle", + "fromFolder": "von Ordner" + }, + "color": { + "red": "Rot", + "green": "Grün", + "grey": "Grau", + "orange": "Orange", + "blue": "Blau", + "black": "Schwarz", + "light": "Light", + "white": "Weiss", + "transparent": "Transparent" + }, + "button": { + "add": "Neu", + "addplaylist": "Hinzufügen", + "addRow": "Reihe hinzufügen", + "back": "◂ Zurück", + "cancel": "Abbrechen", + "config": "Anwendung konfigurieren", + "continue": "Weiter ►", + "delete": "Löschen", + "deletetemplate": "Template entfernen", + "deletebutton": "Taste entfernen", + "docs": "Dokumentation", + "duplicate": "Duplizieren", + "help": "Hilfe", + "edit": "Bearbeiten", + "edittemplates": "Templates bearbeiten", + "exploredataroot": "Dataroot Ordner durchsuchen", + "exploretemplates": "Templates Ordner durchsuchen", + "filterprojects": "Texteingabe zur Projektsuche...", + "launch": "Projekte", + "overlayon": "FX PLAY", + "overlayoff": "FX STOP", + "open": "Rundown öffnen", + "play": "Play ►", + "playmaster": "Play ► Leertaste", + "rename": "Umbenennen", + "replacetemplate": "Erneut Importieren", + "selectemplate": "Wählen", + "select": "Projekt öffnen", + "settings": "Projekteinstellungen", + "shortcuts": "Tastaturkürzel", + "showwebrenderer": "Ausgabefenster öffnen...", + "stop": "Stop ■", + "stopmaster": "Stop ■ Leertaste", + "update": "Aktualisieren ► F5", + "save": "Speichern" + }, + "headline": { + "createrundowntip": "Neuen Rundown für dieses Projekt erstellen", + "edit": "Rundown bearbeiten", + "select": "Wählen Sie ein Projekt aus", + "selectfile": "Wählen Sie einen Rundown aus" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Benutzerzugang konfigurieren", + "home": "Willkommen", + "login": "Login", + "pickAllTemplates": "Alle Templates zu Rundown hinzufügen", + "picktemplate": "Template zu Rundown hinzufügen", + "selectshow": "Wählen Sie ein Projekt aus", + "select": "Wählen Sie einen Rundown aus", + "selectshowextra": "Fügen Sie dem Projekt ein extra Steuerelement hinzu", + "selectemplate": "Wähle Sie ein Template aus", + "selectfile": "Wählen Sie eine Datei aus", + "shortcuts": "Tastaturkürzel", + "controller": "Controller", + "configapp": "Anwendung konfigurieren", + "configshow": "Projekteinstellungen", + "shows": "Projekte", + "f1ShortcutTip" : "Dieser Hilfebildschirm", + "upDownShortcutTip" : "Fokus auf vorheriges / nächstes Element", + "homeEndShortcutTip" : "Fokus auf erstes / letztes Element", + "enterShortcutTip" : "Fokussiertes Element zum Bearbeiten öffnen / schließen", + "spaceShortcutTip" : "Fokussiertes Playlist-Element abspielen / fortsetzen / stoppen", + "tipContinue" : "Unterstützung für den next-Befehl muss im Template implementiert werden um continue zu verwenden", + "ctrlDShortcutTip" : "Template-Element duplizieren", + "shiftSpaceShortcutTip" : "Fokussiertes Playlist-Element abspielen / stoppen", + "f5ShortcutTip" : "Sofortiges Update an das Template senden (z. B. um Tippfehler zu korrigieren).", + "supportUpdateCommandTip" : "Unterstützung für den update-Befehl muss im Template implementiert werden.", + "capsShortcutTip" : "Element-Overlays für schnelle Infos und zum schnellen Kopieren von API-Befehlen anzeigen.", + "escShortcutTip": "Alle vom aktuellen Rundown verwendeten Layer stoppen." + + }, + "config": { + "addnewtip": "Neues Item durch Ausfüllen und Speichern hinzufügen", + "addfirsttemplate": "Klicke auf +, um diesem Projekt ein Template hinzuzufügen", + "addfirstextra": "Klicke auf +, um diesem Projekt ein extra Steuerelement hinzuzufügen", + "audioplayer": "Audio-Player", + "authpolicy": "Konfiguration des Benutzerzugangs. Sollen Benutzername und Passwort verwendet werden?", + "authinfo": "Dieser Dialog wird angezeigt, wenn in der Konfigurationsdatei ein Benutzername ohne Passwort angegeben wurde.", + "authnone": "Anwendung erfordert keinen Benutzernamen oder Passwort.", + "backgroundImage": "Statisches Hintergrundbild (normalerweise Transparent)", + "playerflags": "Player-Parameter", + "preview": "Vorschau-Aktion", + "buttoncolor": "Tastenfarbe", + "buttontext": "Tastenbeschriftung", + "buttontexts": "Tastenbeschriftungen", + "buttontype": "Tastentyp", + "casparcg": "CasparCG Einstellungen", + "ccgtemplates": "template-folder (casparcg.config)", + "ccgplayout": "CasparCG Playout", + "ccgservers": "CasparCG Server", + "coloraccent": "Akzentfarbe", + "dataformat": "Datenformat", + "dataroot": "Datenordner", + "defaultvalue": "Standardwert", + "description": "Beschreibung", + "extrabutton": "Taste", + "extrabuttondescription": "Einfache Taste, die eine Funktion ausführt", + "extratoggle": "Toggle-Taste", + "extratoggledescription": "Taste mit getrennten Funktionen für Ein- und Aus-Status", + "extraselectbutton": "Auswahl-Dropdown mit einer Taste", + "extraselectdescription": "Dropdown-Selektor mit mehreren Optionen", + "functionlibrary": "Funktionsbibliothek (/js/myFunctions.js)", + "functiondescription": "Funktionsbeschreibung", + "functionhandler": "Handler-Funktion", + "general": "Allgemeine Einstellungen", + "globalbuttons": "Globale Extras", + "inputfields": "Template Felder", + "javascriptfile": "Javascript Datei (/js/...)", + "language": "Sprache der Benutzeroberfläche", + "logfolder": "Log Ordner", + "loglevel": "Log Level", + "openchrome": "Chrome-Browser beim Neustart öffnen", + "options": "Dropdown-Optionen (Text, Wert)", + "optionalBgImage": "Optionales Hintergrundbild aus Ordner", + "projectvariables": "Projektvariablen", + "resolution": "Ausgabeauflösung", + "resolutioninfo": "Bitte beachten Sie, dass die meisten Templates standardmäßig für HD ausgelegt sind und möglicherweise geändert werden müssen, um andere Auflösungen zu unterstützen.", + "restartinfo": "Der SPX-Prozess muss neu gestartet werden, damit die Änderungen wirksam werden.", + "serverport": "Port", + "showextras": "Projekt-Extras", + "stopmode": "Animation stoppen", + "templatefile": "Template Datei", + "templates": "Diesem Projekt zugewiesene Templates", + "templatepathinfo": "Beachten Sie, dass die Vorlagen sowohl für die CasparCG- als auch für die SPX-Anwendung verfügbar sein müssen. Konfigurieren Sie dazu den CasparCG-Vorlagenordner oder kopieren Sie ggf. Vorlagendateien in beide Anwendungen.", + "templateroot": "HTML Template-Ordner", + "text": "Sichtbarer Text", + "updated": "Aktualisiert", + "value": "Wert", + "webplayout": "Web Playout Ebene", + "webplayurl": "Browser URL", + "autoplay": "Autoplay aktiver Ebenen beim Laden" + }, + "error": { + "fileExisted": "Datei existiert bereits, bitte versuchen Sie es erneut.", + "preventBrowseUp": "Dies ist der Root Template Ordner.", + "templateDefinitionMissing": "SPXGCTemplateDefinition{} fehlt in der gewählten Datei. Siehe Abschnitt Templates in der Dokumentation." + }, + "warning": { + "notemplates": "Es sind noch keine Templates mit diesem Projekt verknüpft.", + "showprofilebackup": "Es wird empfohlen, eine Sicherungskopie der Profildatei zu erstellen, bevor Sie Änderungen vornehmen.", + "severalControllers": "Mehrere Controller sind mit dem SPX-Server verbunden! Es wird nur ein Controller empfohlen." + }, + "hover": { + "accent": "Template Akzentfarbe in Rundowns.", + "addrundownitem": "Item zu Rundown hinzufügen", + "addshow": "Neues Projekt erstellen", + "addrundown": "Neuer Rundown zu Projekt hinzufügen", + "addccgserver": "Neuen CasparCG Server hinzufügen, durch Angabe von NAME, IP und PORT Informationen", + "buttontype": "Art des extra Steuerelements.", + "browsetemplate": "Suchen Sie nach einem neuen Template, das Sie diesem Projekt zuweisen möchten", + "browseextras": "Suchen Sie nach einem neuen extra Steuerelement, das Sie diesem Projekt zuweisen möchten.", + "browseglobalextras": "Hinzufügen eines globalen extra Steuerelements", + "cancelconfig": "Konfiguration schliessen ohne zu Speichern", + "ccgserver": "CasparCG Servername in SPX", + "ccgchannel": "CasparCG Playout Channel", + "ccglayer": "CasparCG Playout Ebene", + "ccgtemplatepath": "template-folder Wert der casparcg.config -Datei", + "ccghost": "CasparCG Server Netzwerkname oder IP-Adresse", + "ccgport": "CasparCG Server Port (üblicherweise 5250)", + "colors": "Extra Kontrollfarbe im User Interface", + "config": "Anwendungskonfiguration öffnen", + "confitem": "Template-Einstellungen", + "confjsfile": "Javascript -library der globalen Extras", + "dataformat": "An das Template zu sendendes Datenformat", + "dataroot": "Datenordner zur Speicherung von Projekt- und Rundown-Dateien?", + "defaultvalue": "Standard muss einer der verfügbaren Optionswerte sein", + "delete": "Item entfernen", + "deletethis": "Dieses Item vom Rundown entfernen", + "deletepisode": "Ausgewählten Rundown einschließlich aller Items löschen", + "deleteshow": "Ausgewähltes Projekt einschließlich Einstellungen und aller Rundowns löschen", + "docs": "Dokumentation öffnen", + "duplicateitem": "Item duplizieren", + "duplicaterundown": "Erstellt Duplikat des gewählten Rundowns", + "epslist": "Wählen Sie den Rundown oder doppelklicken Sie darauf, um ihn zu öffnen.", + "extradescr": "Extra Funktionsbeschreibung", + "fcall": "Event Handler Function in Funktionsbibliothek (z.B. helloWorld)", + "fields": "Gescannte SPXGCTemplateDefinition Felder", + "github": "SPX-Projektseite auf GitHub öffnen", + "help": "Hilfe zu diesem Abschnitt öffnen", + "htmlfolder": "Absoluter Ordnerpfad zum CasparCG-Templateordner?", + "item": "Doppelklick (oder Enter) zum Öffnen/Schließen des Item-Editors. Ziehen zum Sortieren von Items.", + "lang": "Sprache der Benutzeroberfläche? (Sie können nach Bedarf neue Sprachdateien im locales-Ordner erstellen)", + "logfolder": "Order für Log-Dateien", + "loglevel": "Logging Level? Standard Level: info. Erweiterte Log-Informationen: debug.", + "masterplay": "Ausgewähltes Item abspielen/anhalten (Leertaste)", + "masterupdate": "Aktualisieren von Texten aus dem ausgewählten Item (F5)", + "mastercontinue": "Animation zum nächsten Schritt fortsetzen (Shift + Leertaste)", + "navishows": "Projekte", + "navishow": "Rundowns", + "newversavailable": "Eine neuere Version ist verfügbar. Klicken Sie, um mehr zu erfahren.", + "openbrowser": "Soll der Chrome-Browser beim Start des Servers gestartet werden?", + "openrundown": "Ausgewählten Rundown im Controller öffnen", + "options": "Dropdown-Einstellungen", + "outmode": "Out-Animation der Grafik", + "port": "Zu verwendender Anwendungs-Port? (z.B. 3000 5000...) Bitte beachten: Die Adresse dieser Seite wird sich ebenfalls ändern!", + "profile": "Einstellungen für dieses Projekt öffnen", + "playthis": "Dieses Item abspielen oder anhalten", + "playouturl": "Web-Playout-URL für Streaming-Grafikanwendungen.", + "preview": "Steuern, wann Grafiken in den Vorschaukanal gerendert werden", + "removeglobalextra": "Dieses extra Element aus allen Projekten entfernen", + "removetemplate": "Dieses Template von diesem Projekt entfernen", + "remoteplayouturl": "Webrender auf einem externen Server installiert. (Hinweis: öffentliche IP-Adressen erforderlich)", + "replacetemplate": "Template erneut importieren, wenn Änderungen am Quellcode vorgenommen wurden.", + "resolution": "Ausgabeauflösung. Die Standardeinstellung ist HD (1920x1080).", + "saveconfig": "Konfigurationen in einer Konfigurationsdatei speichern", + "saveprofile": "Projekteinstellungen speichern", + "showjsfile": "Javascript-Funktionsbibliothek dieses Projekts", + "showlist": "Wählen Sie ein Projekt aus oder doppelklicken Sie darauf, um es zu öffnen", + "submitthis": "Speichern und Editor schließen", + "templatepath": "HTML-Templates relativer Dateipfad", + "templatedescr": "Kurzbeschreibung des Items für die GUI", + "text": "Text der Taste", + "text1": "Text der Taste wenn Sie aktiv ist", + "updated": "Zeitstempel des letzten Imports des Templates", + "updatethis": "Dieses Item aktualisieren", + "weblayer": "Webplayout Ebene", + "exportitem": "Erstellen Sie eine CSV-Datei aus den Feldern dieses Templates ", + "importitems": "Erstellen von Rundown-Items aus einer CSV-Datei", + "renameepisode": "Ausgewählten Rundown umbenennen" + } +} \ No newline at end of file diff --git a/locales/japanese.json b/locales/japanese.json new file mode 100644 index 0000000..572491b --- /dev/null +++ b/locales/japanese.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "ようこそ", + "slogan": "あらゆるライブ配信向けのCGグラフィクス管理を提供", + "folder": "フォルダー", + "file": "ファイル", + "up": "アップ", + "field": "フィールド", + "pcs": "個数", + "help": "ヘルプ", + "home": "ホーム", + "yes": "はい", + "no": "いいえ", + "none": "無し", + "all": "すべて", + "fromFolder": "from folder" + }, + "color": { + "red": "赤", + "green": "緑", + "grey": "グレー", + "orange": "オレンジ", + "blue": "青", + "black": "黒", + "light": "ライト", + "white": "白", + "transparent": "透過" + }, + "button": { + "add": "新規", + "addplaylist": "新規 rundown", + "addRow": "新規 row", + "back": "◂ 戻る", + "cancel": "キャンセル", + "config": "アプリケーション設定", + "continue": "続き ►", + "delete": "削除", + "deletetemplate": "テンプレート削除", + "deletebutton": "ボタン削除", + "docs": "ドキュメント", + "duplicate": "複製", + "help": "ヘルプ", + "edit": "編集", + "edittemplates": "テンプレート編集", + "exploredataroot": "dataroot フォルダ確認", + "exploretemplates": "templates フォルダ確認", + "filterprojects": "プロジェクト検索フィルタ...", + "launch": "プロジェクト", + "overlayon": "FX 再生", + "overlayoff": "FX 停止", + "open": "開く rundown", + "play": "再生 ►", + "playmaster": "再生 ►", + "rename": "リネーム", + "replacetemplate": "再インポート", + "selectemplate": "選択", + "select": "プロジェクトを開く", + "settings": "プロジェクト設定", + "shortcuts": "ショートカット", + "showwebrenderer": "playout ウインドウを開く", + "stop": "停止 ■", + "stopmaster": "停止 ■", + "update": "更新 ► F5", + "save": "保存" + }, + "headline": { + "createrundowntip": "新規の rundown を作成", + "edit": "rundown 編集", + "select": "プロジェクトを選択", + "selectfile": "rundown の選択" + }, + "pagetitle": { + "admin": "管理者", + "authpolicy": "ユーザアクセス設定", + "home": "ようこそ", + "login": "ログイン", + "pickAllTemplates": "rundown へ全てのテンプレートを追加", + "picktemplate": "rundown へテンプレートを追加", + "selectshow": "プロジェクトを選択", + "select": "rundown を選択", + "selectshowextra": "プロジェクトへ拡張操作を追加", + "selectemplate": "テンプレートを選択", + "selectfile": "ファイル選択", + "shortcuts": "ショートカット", + "controller": "コントローラー", + "configapp": "アプリケーション設定", + "configshow": "プロジェクト設定", + "shows": "プロジェクト", + "f1ShortcutTip" : "このヘルプ画面", + "upDownShortcutTip" : "前 / 次の項目にフォーカス", + "homeEndShortcutTip" : "最初 / 最後の項目にフォーカス", + "enterShortcutTip" : "フォーカス中の項目を編集用に開く / 閉じる", + "spaceShortcutTip" : "フォーカス中のプレイリスト項目を再生 / 続行 / 停止", + "tipContinue" : "next コマンドのサポートはテンプレートに実装する必要があります continue を使用するには", + "ctrlDShortcutTip" : "テンプレート項目を複製", + "shiftSpaceShortcutTip" : "フォーカス中のプレイリスト項目を再生 / 停止", + "f5ShortcutTip" : "テンプレートへ即時更新を送信(例:タイプミスの修正)。", + "supportUpdateCommandTip" : "update コマンドのサポートはテンプレートに実装する必要があります。", + "capsShortcutTip" : "クイック情報表示や API コマンドのコピー用に項目オーバーレイを表示。", + "escShortcutTip": "現在のランダウンで使用中のすべてのレイヤーを停止。" + }, + "config": { + "addnewtip": "新規アイテムの書き込みと保存", + "addfirsttemplate": "+ をクリックしてこのプロジェクトにテンプレートを追加します", + "addfirstextra": "+ をクリックして、このプロジェクトに追加のコントロールを追加します", + "audioplayer": "オーディオプレイヤー", + "authpolicy": "ユーザーアクセス構成。ユーザー名とパスワードを使用する必要がありますか?", + "authinfo": "このダイアログは、設定ファイルにパスワードなしでユーザー名が設定されている場合に表示されます。", + "authnone": "アプリケーションにはユーザー名やパスワードは必要ありません。", + "backgroundImage": "静的な背景画像 (通常は透過)", + "playerflags": "プレーヤーパラメータ", + "preview": "プレビューアクション", + "buttoncolor": "ボタンの色", + "buttontext": "ボタンのキャプション", + "buttontexts": "ボタンのキャプション", + "buttontype": "ボタンの種類", + "casparcg": "CasparCGの設定", + "ccgtemplates": "テンプレートフォルダー (casparcg.config)", + "ccgplayout": "CasparCG 出力先", + "ccgservers": "CasparCGサーバー", + "coloraccent": "アクセントの色", + "dataformat": "データ形式", + "dataroot": "データフォルダ", + "defaultvalue": "デフォルト値", + "description": "概要説明", + "extrabutton": "ボタン", + "extrabuttondescription": "機能を実行するシンプルな押しボタン", + "extratoggle": "トグルボタン", + "extratoggledescription": "オンとオフの状態に個別の機能を備えたボタン", + "extraselectbutton": "ボタン付きの選択ドロップダウン", + "extraselectdescription": "複数のオプションを備えたドロップダウン セレクター", + "functionlibrary": "javascriptライブラリ (/js/myFunctions.js)", + "functiondescription": "機能説明", + "functionhandler": "ハンドラー関数", + "general": "一般設定", + "globalbuttons": "グローバルエクストラ", + "inputfields": "テンプレートフィールド", + "javascriptfile": "Javascript ファイル (/js/...)", + "language": "ユーザーインターフェース言語", + "logfolder": "ログフォルダー", + "loglevel": "ログレベル", + "openchrome": "再起動時にChromeを開く", + "options": "ドロップダウン オプション (テキスト、値)", + "optionalBgImage": "フォルダーからのオプションの背景画像", + "projectvariables": "プロジェクト変数", + "resolution": "出力解像度", + "resolutioninfo": "ほとんどのテンプレートはデフォルトで HD 用に設計されており、他の解像度をサポートするには変更が必要な場合があることに注意してください。", + "restartinfo": "変更を有効にするには、SPX プロセスを再起動する必要があります", + "serverport": "ポート", + "showextras": "プロジェクトのエキストラ", + "stopmode": "アニメーションを停止する", + "templatefile": "テンプレートファイル", + "templates": "このプロジェクトに割り当てられたテンプレート", + "templatepathinfo": "テンプレートは、CasparCG アプリケーションと SPX アプリケーションの両方で使用できる必要があることに注意してください。これを CasparCG テンプレート フォルダーになるように設定するか、必要に応じてテンプレート ファイルを両方のアプリケーションにコピーします。", + "templateroot": "HTMLテンプレートフォルダー", + "text": "表示されるテキスト", + "updated": "更新しました", + "value": "値", + "webplayout": "Web 出力先レイヤー", + "webplayurl": "ブラウザのURL", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "ファイルが存在しました。もう一度試してください。", + "preventBrowseUp": "これはルート テンプレート フォルダーです。", + "templateDefinitionMissing": "選択したファイルに SPXGCTemplateDefinition{} がありません。ドキュメントのセクション テンプレートを参照してください。" + }, + "warning": { + "notemplates": "There are no templates linked to this project yet", + "showprofilebackup": "変更を加える前に、プロファイル ファイルのバックアップ コピーを作成することをお勧めします。", + "severalControllers": "複数のコントローラーが SPX サーバーに接続されています。推奨されるのは 1 つだけです。" + }, + "hover": { + "accent": "rundown のテンプレートのアクセントカラー。", + "addrundownitem": "項目を概要に追加", + "addshow": "新しいプロジェクトを作成する", + "addrundown": "新しいrundown をプロジェクトに追加", + "addccgserver": "NAME、IP、PORT 情報を入力して、新しい CasparCG サーバーを追加します。", + "buttontype": "追加のコントロールのタイプ。", + "browsetemplate": "このプロジェクトに割り当てる新しいテンプレートを参照します", + "browseextras": "このプロジェクトに割り当てる新しい追加コントロールを参照します", + "browseglobalextras": "グローバル追加コントロールを追加する", + "cancelconfig": "変更を保存せずに構成を閉じます", + "ccgserver": "SPX の CasparCG サーバー名", + "ccgchannel": "CasparCG 出力先 チャンネル", + "ccglayer": "CasparCG 出力先 レイヤー", + "ccgtemplatepath": "casparcg.config -file からの template-folder の値", + "ccghost": "CasparCG サーバーのネットワーク名または IP アドレス", + "ccgport": "CasparCG サーバー ポート (通常は 5250)", + "colors": "ユーザーインターフェイスの追加のコントロールカラー", + "config": "アプリケーション構成を開く", + "confitem": "テンプレートの設定", + "confjsfile": "Javascript - グローバル エクストラのライブラリ", + "dataformat": "テンプレートに送信するデータ形式", + "dataroot": "プロジェクト ファイルとrundown ファイルを保存するためのデータ フォルダー?", + "defaultvalue": "デフォルトは、使用可能なオプション値のいずれかである必要があります", + "delete": "アイテムを削除する", + "deletethis": "この項目を概要から削除します", + "deletepisode": "すべてのアイテムを含む選択したrundown を削除します", + "deleteshow": "設定とすべての概要を含む選択したプロジェクトを削除します", + "docs": "オープンドキュメント", + "duplicateitem": "このアイテムを複製する", + "duplicaterundown": "選択したrundown の複製を作成します", + "epslist": "rundown を選択またはダブルクリックして開きます", + "extradescr": "追加機能の説明", + "fcall": "関数ライブラリ内のイベント ハンドラー関数 (例: helloWorld)", + "fields": "スキャンされた SPXGCTemplateDefinition フィールド", + "github": "GitHub で SPX プロジェクト ページを開く", + "help": "このセクションに関するヘルプを開く", + "htmlfolder": "CasparCGテンプレートフォルダーへの絶対フォルダーパス?", + "item": "ダブルクリック (または Enter) して、項目エディターを開く/閉じます。ドラッグして項目を並べ替えます。", + "lang": "ユーザーインターフェース言語? (必要に応じて、locales-folder に新しい言語ファイルを作成できます)", + "logfolder": "ログファイル用のフォルダー", + "loglevel": "ロギングレベル:デフォルトのレベル: 情報。ほとんどのログ情報: デバッグ。", + "masterplay": "選択した項目の再生/停止(スペース)", + "masterupdate": "選択した項目のテキストを更新 (F5)", + "mastercontinue": "アニメーションを次のステップに継続します (Shift + Space)", + "navishows": "プロジェクト", + "navishow": "rundown ", + "newversavailable": "新しいバージョンが利用可能です。クリックして詳細をご覧ください。", + "openbrowser": "Chrome ブラウザはサーバーの起動時に起動する必要がありますか?", + "openrundown": "選択したrundown をコントローラーで開く", + "options": "ドロップダウン設定", + "outmode": "グラフィックのアウトアニメーション", + "port": "使用するアプリケーションポート (例: 3000 5000...) 注意: このページのアドレスも変更されます。", + "profile": "このプロジェクトの設定を開く", + "playthis": "このアイテムを再生または停止します", + "playouturl": "ストリーミング グラフィックス アプリケーションの Web 出力先 URL", + "preview": "グラフィックスをプレビュー チャネルにいつレンダリングするかを制御します", + "removeglobalextra": "全てのプロジェクトからエクストラを削除", + "removetemplate": "このプロジェクトからテンプレートを削除", + "remoteplayouturl": "外部サーバへ Webrender をインストール完了 (※Public IP アドレスが必要)", + "replacetemplate": "ソースの変更によりテンプレートの再インポート", + "resolution": "出力解像度. デフォルト FHD (1920x1080).", + "saveconfig": "設定をコンフィグファイルへ保存", + "saveprofile": "プロジェクト設定の保存", + "showjsfile": "プロジェクト向け Javascript ファンクションライブラリ", + "showlist": "選択またはプロジェクトをダブルクリックで開く", + "submitthis": "エディターの保存と終了", + "templatepath": "HTMLテンプレート関連のファイルパス", + "templatedescr": "GUI向けアイテムの簡単な概要", + "text": "ボタンテキスト", + "text1": "アクティブなボタンテキスト", + "updated": "最後にインポートされたテンプレートのタイムスタンプ", + "updatethis": "このアイテムの保存", + "weblayer": "Web 出力先 レイヤー", + "exportitem": "Create a CSV file from fields of this template ", + "importitems": "Create rundown items from a CSV file", + "renameepisode": "Rename selected rundown" + } +} \ No newline at end of file diff --git a/locales/korean.json b/locales/korean.json new file mode 100644 index 0000000..4b8977e --- /dev/null +++ b/locales/korean.json @@ -0,0 +1,250 @@ +{ + "general": { + "hello": "안녕하세요", + "slogan": "실시간 방송, 스트리밍 및 이벤트의 그래픽을 관리하고 제어하세요.", + "folder": "폴더", + "file": "파일", + "up": "위로", + "field": "필드", + "pcs": "개", + "help": "도움말", + "home": "홈", + "yes": "예", + "no": "아니오", + "none": "없음", + "all": "전체", + "fromFolder": "폴더에서" + }, + "color": { + "red": "빨강", + "green": "초록", + "grey": "회색", + "orange": "주황", + "blue": "파랑", + "black": "검정", + "light": "밝음", + "white": "흰색", + "transparent": "투명" + }, + "button": { + "add": "추가", + "addplaylist": "룬 추가", + "addRow": "행 추가", + "back": "◂ 뒤로", + "cancel": "취소", + "config": "애플리케이션 설정", + "continue": "계속 ►", + "delete": "삭제", + "deletetemplate": "템플릿 제거", + "deletebutton": "버튼 제거", + "docs": "문서", + "duplicate": "복제", + "help": "도움말", + "edit": "편집", + "edittemplates": "템플릿 편집", + "exploredataroot": "데이터 루트 폴더 탐색", + "exploretemplates": "템플릿 폴더 탐색", + "filterprojects": "프로젝트 필터링을 위해 입력하세요...", + "launch": "프로젝트", + "overlayon": "FX 재생 중", + "overlayoff": "FX 정지", + "open": "룬 열기", + "play": "재생 ►", + "playmaster": "재생 ►", + "rename": "이름 변경", + "replacetemplate": "템플릿 재불러오기", + "selecttemplate": "선택", + "select": "프로젝트 열기", + "settings": "프로젝트 설정", + "shortcuts": "키보드 단축키", + "showwebrenderer": "출력 창 열기...", + "stop": "정지 ■", + "stopmaster": "마스터 정지 ■", + "update": "업데이트 ► F5", + "save": "저장" + }, + "headline": { + "createrundowntip": "이 프로젝트에 새로운 룬을 생성하세요", + "edit": "룬 편집", + "select": "프로젝트 선택", + "selectfile": "룬 선택" + }, + "pagetitle": { + "admin": "관리자", + "authpolicy": "사용자 액세스 구성", + "home": "환영합니다", + "login": "로그인", + "pickAllTemplates": "모든 템플릿을 룬에 추가", + "picktemplate": "템플릿을 룬에 추가", + "selectshow": "프로젝트 선택", + "select": "룬 선택", + "selectshowextra": "프로젝트에 추가 컨트롤 설정", + "selecttemplate": "템플릿 선택", + "selectfile": "파일 선택", + "shortcuts": "키보드 단축키", + "controller": "컨트롤러", + "configapp": "애플리케이션 구성", + "configshow": "프로젝트 설정", + "shows": "프로젝트 목록", + "f1ShortcutTip" : "이 도움말 화면입니다.", + "upDownShortcutTip" : "이전/다음 항목에 포커스", + "homeEndShortcutTip" : "첫 번째/마지막 항목에 포커스", + "enterShortcutTip" : "선택된 항목을 편집하기 위해 열기/닫기", + "spaceShortcutTip" : "포커스된 재생 목록 항목 재생/계속/중지", + "tipContinue" : "다음 명령 지원은 템플릿에서 구현되어야 합니다.", + "ctrlDShortcutTip" : "템플릿 항목 복제", + "shiftSpaceShortcutTip" : "포커스된 재생 목록 항목 재생/정지", + "f5ShortcutTip" : "항목에 즉시 업데이트 전송 (예: 오타 수정).", + "supportUpdateCommandTip" : "업데이트 명령 지원은 템플릿에서 구현되어야 합니다.", + "capsShortcutTip" : "빠른 정보 확인 및 API 명령어 복사를 위해 항목 오버레이 표시.", + "escShortcutTip": "현재 룬에 사용되는 모든 레이어 중지." + }, + "config": { + "addnewtip": "채우고 저장하여 새 항목 추가", + "addfirsttemplate": "클릭 + 를 눌러 이 프로젝트에 템플릿을 추가하세요.", + "addfirstextra": "클릭 + 를 눌러 이 프로젝트에 추가 컨트롤을 추가하세요.", + "audioplayer": "오디오 플레이어", + "authpolicy": "사용자 액세스 구성. 사용자 이름과 비밀번호를 사용해야 하나요?", + "authinfo": "config-file에 비밀번호 없이 사용자 이름이 설정된 경우 이 대화 상자가 표시됩니다.", + "authnone": "애플리케이션은 사용자 이름이나 암호를 요구하지 않습니다.", + "backgroundImage": "정적 배경 이미지 (보통 투명)", + "playerflags": "플레이어 매개변수", + "preview": "미리 보기 작업", + "buttoncolor": "버튼 색상", + "buttontext": "버튼 캡션", + "buttontexts": "버튼 캡션 목록", + "buttontype": "버튼 유형", + "casparcg": "CasparCG 설정", + "ccgtemplates": "템플릿 폴더 (casparcg.config)", + "ccgplayout": "CasparCG 플레이아웃", + "ccgservers": "CasparCG 서버", + "coloraccent": "강조 색상", + "dataformat": "데이터 형식", + "dataroot": "데이터 폴더", + "defaultvalue": "기본 값", + "description": "설명", + "extrabutton": "추가 버튼", + "extrabuttondescription": "함수를 실행하는 간단한 푸시 버튼", + "extratoggle": "토글 버튼", + "extratoggledescription": "켜짐 및 꺼짐 상태에 대한 별도의 기능을 가진 버튼", + "extraselectbutton": "버튼이 있는 선택 드롭다운", + "extraselectdescription": "여러 옵션을 가진 드롭다운 셀렉터", + "functionlibrary": "함수 라이브러리 (/js/myFunctions.js)", + "functiondescription": "함수 설명", + "functionhandler": "핸들러 함수", + "general": "일반 설정", + "globalbuttons": "전역 추가 컨트롤", + "inputfields": "템플릿 필드", + "javascriptfile": "자바스크립트 파일 (/js/...) ", + "language": "사용자 인터페이스 언어", + "logfolder": "로그 폴더", + "loglevel": "로그 수준", + "openchrome": "재시작 시 Chrome 열기", + "options": "드롭다운 옵션 (텍스트, 값)", + "optionalBgImage": "폴더의 선택적 배경 이미지", + "projectvariables": "프로젝트 변수", + "resolution": "출력 해상도", + "resolutioninfo": "참고: 대부분의 템플릿은 기본적으로 HD(1920x1080)용으로 설계되었으며 다른 해상도를 지원하려면 변경이 필요할 수 있습니다.", + "restartinfo": "변경 사항을 적용하려면 SPX 프로세스를 재시작해야 합니다.", + "serverport": "포트", + "showextras": "프로젝트 추가 기능", + "stopmode": "애니메이션 정지 모드", + "templatefile": "템플릿 파일", + "templates": "이 프로젝트에 할당된 템플릿", + "templatepathinfo": "참고: 템플릿은 CasparCG 및 SPX 애플리케이션 모두에서 사용 가능해야 합니다. 이를 위해 CasparCG 템플릿 폴더를 구성하거나 두 애플리케이션에 템플릿 파일을 복사하세요.", + "templateroot": "HTML 템플릿 폴더", + "text": "표시되는 텍스트", + "updated": "업데이트됨", + "value": "값", + "webplayout": "웹 플레이아웃 레이어", + "webplayurl": "브라우저 URL", + "autoplay": "로딩 시 자동 재생 활성화" + }, + "error": { + "fileExisted": "파일이 이미 존재합니다. 다시 시도해 주세요.", + "preventBrowseUp": "여기가 루트 템플릿 폴더입니다.", + "templateDefinitionMissing": "선택한 파일에서 SPXGCTemplateDefinition{}을 찾을 수 없습니다. 문서의 '템플릿' 섹션을 참조하세요." + }, + "warning": { + "notemplates": "이 프로젝트에 연결된 템플릿이 아직 없습니다.", + "showprofilebackup": "변경하기 전에 프로필 파일의 백업 복사본을 만드는 것이 좋습니다.", + "severalControllers": "SPX 서버에 여러 컨트롤러가 연결되어 있습니다! 하나만 권장됩니다." + }, + "hover": { + "accent": "룬에서의 템플릿 강조 색상.", + "addrundownitem": "룬 항목 추가", + "addshow": "새 프로젝트 생성", + "addrundown": "프로젝트에 새 룬 추가", + "addccgserver": "이름, IP 및 포트를 입력하여 새로운 CasparCG 서버를 추가하세요.", + "buttontype": "추가 컨트롤 유형.", + "browsetemplate": "이 프로젝트에 할당할 새 템플릿 검색", + "browseextras": "이 프로젝트에 할 새 추가 컨트롤 검색", + "browseglobalextras": "전역 추가 컨트롤 추가", + "cancelconfig": "변경 사항을 저장하지 않고 설정 닫기", + "ccgserver": "SPX 내 CasparCG 서버 이름", + "ccgchannel": "CasparCG 플레이아웃 채널", + "ccglayer": "CasparCG 플레이아웃 레이어", + "ccgtemplatepath": "casparcg.config 파일의 템플릿 폴더 값", + "ccghost": "CasparCG 서버 네트워크 이름 또는 IP 주소", + "ccgport": "CasparCG 서버 포트 (일반적으로 5250)", + "colors": "사용자 인터페이스의 추가 컨트롤 색상", + "config": "애플리케이션 설정 열기", + "confitem": "템플릿 설정", + "confjsfile": "전역 추가 기능 라이브러리 자바스크립트 파일", + "dataformat": "템플릿으로 전송할 데이터 형식", + "dataroot": "프로젝트 및 룬 파일을 저장할 데이터 폴더?", + "defaultvalue": "기본값은 사용 가능한 옵션 값 중 하나여야 합니다.", + "description": "설명", + "extrabutton": "버튼", + "extrabuttondescription": "함수를 실행하는 간단한 푸시 버튼", + "extratoggle": "토글 버튼", + "extratoggledescription": "켜짐 및 꺼짐 상태에 대한 별도의 기능을 가진 버튼", + "extraselectbutton": "버튼이 있는 선택 드롭다운", + "extraselectdescription": "여러 옵션을 가진 드롭다운 셀렉터", + "functionlibrary": "함수 라이브러리 (/js/myFunctions.js)", + "functiondescription": "함수 설명", + "functionhandler": "핸들러 함수", + "general": "일반 설정", + "globalbuttons": "전역 추가 기능", + "inputfields": "템플릿 필드", + "javascriptfile": "자바스크립트 파일 (/js/...)", + "language": "사용자 인터페이스 언어?", + "logfolder": "로그 파일 폴더", + "loglevel": "로깅 수준? 기본 수준: info. 대부분의 로그 정보: debug.", + "masterplay": "선택된 항목 재생/정지 (Space)", + "masterupdate": "선택된 항목 텍스트 업데이트 (F5)", + "mastercontinue": "다음 단계로 애니메이션 계속 진행 (Shift + Space)", + "navishows": "프로젝트 목록", + "navishow": "룬 목록", + "newversavailable": "새로운 버전이 있습니다. 클릭하여 더 읽기.", + "openbrowser": "서버 시작 시 Chrome 브라우저를 실행해야 하나요?", + "openrundown": "컨트롤러에서 선택된 룬 열기", + "options": "드롭다운 설정", + "outmode": "그래픽의 애니메이션 출력 모드", + "port": "사용할 애플리케이션 포트? (예: 3000 5000...). 참고: 이 페이지 주소도 변경될 수 있습니다!", + "profile": "이 프로젝트 설정 열기", + "playthis": "이 항목 재생 또는 정지", + "playouturl": "스트리밍 그래픽 애플리케이션을 위한 웹 플레이아웃 URL.", + "preview": "그래픽이 미리 보기 채널에 렌더링되는 시점 제어", + "removeglobalextra": "이 추가 기능을 모든 프로젝트에서 제거", + "removetemplate": "이 프로젝트에서 이 템플릿 제거", + "remoteplayouturl": "웹렌더가 외부 서버에 설치됨. (참고: 공용 IP 주소 필요)", + "replacetemplate": "소스 코드 변경 사항을 반영하여 템플릿 재불러오기.", + "resolution": "출력 해상도. 기본값은 HD(1920x1080)입니다.", + "saveconfig": "설정을 구성 파일에 저장", + "saveprofile": "프로젝트 설정 저장", + "showjsfile": "이 프로젝트의 자바스크립트 함수 라이브러리", + "showlist": "선택하거나 더블 클릭하여 프로젝트 열기", + "submitthis": "저장 및 편집기 닫기", + "templatepath": "HTML 템플릿 상대 경로", + "templatedescr": "GUI용 항목의 짧은 설명", + "text": "버튼 텍스트", + "text1": "활성화 시 버튼 텍스트", + "updated": "템플릿이 마지막으로 가져온 타임스탬프", + "updatethis": "이 항목 업데이트", + "weblayer": "웹 플레이아웃 레이어", + "exportitem": "이 템플릿 필드에서 CSV 파일 생성 ", + "importitems": "CSV 파일에서 룬 항목 생성", + "renameepisode": "선택된 룬 이름 변경" + } +} \ No newline at end of file diff --git a/locales/portuguese.json b/locales/portuguese.json new file mode 100644 index 0000000..2a1833c --- /dev/null +++ b/locales/portuguese.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "Olá", + "slogan": "Controle e opere gráficos com CasparCG e aplicações de streaming.", + "folder": "Pasta", + "file": "Ficheiro", + "up": "Topo", + "field": "Campo", + "pcs": "peças", + "help": "Ajuda", + "home": "Home", + "yes": "Sim", + "no": "Não", + "none": "None", + "all": "All", + "fromFolder": "da pasta" + }, + "color": { + "red": "Vermelho", + "green": "Verde", + "grey": "Cinzento", + "orange": "Laranja", + "blue": "Azul", + "black": "Preto", + "light": "Claro", + "white": "Branco", + "transparent": "Transparent" + }, + "button": { + "add": "Novo", + "addplaylist": "Adicionar rundown", + "addRow": "Adicionar linha", + "back": "◂ Voltar", + "cancel": "Cancelar", + "config": "Configurações da aplicação", + "continue": "Continuar ►", + "delete": "Apagar", + "deletetemplate": "Remover template", + "deletebutton": "Remover botão", + "docs": "Documentação", + "duplicate": "Duplicate", + "help": "Ajuda", + "edit": "Editar", + "edittemplates": "Editar templates", + "exploredataroot": "Explorar pasta de dataroot", + "exploretemplates": "Explorar pasta de templates", + "filterprojects": "Start typing to filter projects...", + "launch": "Projetos", + "overlayon": "INICIAR FX", + "overlayoff": "PARA FX", + "open": "Abir rundown", + "play": "Iniciar ►", + "playmaster": "Iniciar ► Espaço", + "rename": "Rename", + "replacetemplate": "Re-import", + "selectemplate": "Selecionar", + "select": "Abrir projeto", + "settings": "Definições do projeto", + "shortcuts": "Atalhos do teclado", + "showwebrenderer": "Abrir janela de playout web", + "stop": "Parar ■", + "stopmaster": "Parar ◄ ESPAÇO", + "update": "Atualizar ► F5", + "save": "Guardar" + }, + "headline": { + "edit": "Editar rundown", + "select": "Escolher projeto", + "selectfile": "Escolher rundown", + "createrundowntip": "Create a new rundown to this project" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Configurar acesso dos utilizadores", + "home": "Bem-vindo", + "login": "Autenticar", + "pickAllTemplates": "Adicione template os modelos ao resumo", + "picktemplate": "Adicionar template ao rundown", + "selectshow": "Escolher projeto", + "select": "Escolher rundown", + "selectshowextra": "Adicionar controlo extra ao projeto", + "selectemplate": "Escolher template", + "selectfile": "Choose a file", + "shortcuts": "Atalhos do teclado", + "controller": "Controlador", + "configapp": "Configurações da aplicação", + "configshow": "Definições do projeto", + "shows": "Projetos", + "f1ShortcutTip" : "Esta tela de ajuda", + "upDownShortcutTip" : "Focar item anterior / próximo", + "homeEndShortcutTip" : "Focar primeiro / último item", + "enterShortcutTip" : "Abrir / fechar item focado para edição", + "spaceShortcutTip" : "Reproduzir / continuar / parar item da playlist focado", + "tipContinue" : "O suporte para o comando next deve ser implementado no template para usar o comando continue", + "ctrlDShortcutTip" : "Duplicar um item do template", + "shiftSpaceShortcutTip" : "Reproduzir / parar item da playlist focado", + "f5ShortcutTip" : "Enviar uma atualização instantânea para o template (por exemplo, para corrigir erros de digitação).", + "supportUpdateCommandTip" : "O suporte para o comando update deve ser implementado no template.", + "capsShortcutTip" : "Mostrar sobreposições dos itens para informações rápidas e cópia rápida de comandos da API.", + "escShortcutTip": "Parar todas as camadas usadas pelo rundown atual." + }, + "config": { + "addnewtip": "Adicionar novo item preenchendo e gravando", + "addfirsttemplate": "Clique + para adicionar uma template a este projeto", + "addfirstextra": "Clique + para adicionar um contolo extra a este projeto", + "audioplayer": "Player de áudio", + "authpolicy": "Configuração de acesso de utilizador. Deverão ser utilizados nome de utilizador e palavra-passe?", + "authinfo": "Esta caixa de diálogo será apresentada se houver um utilizador sem palavra-passe definida em config-file.", + "authnone": "A apliação não necessida de nome de utilizador ou palavra-passe.", + "backgroundImage": "Static background image (usually transparent)", + "playerflags": "Parametros do player", + "buttoncolor": "Cor do botão", + "buttontext": "Texto do botão", + "buttontexts": "Legenda do botão", + "buttontype": "Tipo de botão", + "casparcg": "Configurações do CasparCG", + "ccgtemplates": "template-folder (casparcg.config)", + "ccgplayout": "Playout CasparCG", + "ccgservers": "Servidores CasparCG", + "coloraccent": "Cor de destaque", + "dataformat": "Formato de dados", + "dataroot": "Pasta de dados", + "defaultvalue": "Valor padrão", + "description": "Descrição", + "extrabutton": "Extra button", + "extrabuttondescription": "Um simples botão que executa uma função quando clicado", + "extratoggle": "Botão ligar/desligar", + "extratoggledescription": "Botão que executa funções separadas para ligar/desligar", + "extraselectbutton": "Lista de seleção com botão", + "extraselectdescription": "Menu suspenso com várias opções ", + "functionlibrary": "Biblioteca de funções (/js/myFunctions.js)", + "functiondescription": "Descrição da função", + "functionhandler": "Manipulador de eventos (função)", + "general": "Configurações gerais", + "globalbuttons": "Botões globais adicionais", + "inputfields": "Campos da template", + "javascriptfile": "Ficheiro Javascript (/js/…)", + "language": "Idioma da interface de utilizador", + "logfolder": "Pasta Log", + "loglevel": "Nível Log", + "openchrome": "Abrir o Chrome ao reiniciar", + "options": "Opções de menu (texto valor)", + "optionalBgImage": "Optional background image from folder", + "restartinfo": "Os processos do SPX irão necessitar de reiniciar para que as alterações tenham efeito", + "resolution": "Resolution", + "resolutioninfo": "Please note, templates are designed for HD by default and may need changes to support other resolutions.", + "serverport": "Porta", + "showextras": "Extras do projeto", + "stopmode": "Parar animação", + "templatefile": "Ficheiro template", + "templates": "Templates atribuídas ao projeto", + "templatepathinfo": "Nota: os modelos devem estar disponíveis para as aplicações CasparCG e GC. Configure esta pasta para ser a pasta de modelo CasparCG ou se necessário copie o modelo para a pasta de ambos os aplicativos.", + "templateroot": "Pasta de modelos HTML", + "text": "Texto visível", + "updated": "Updated", + "value": "Valor", + "webplayout": "Camada de playout web", + "webplayurl": "URL do browser", + "preview": "Preview action", + "projectvariables": "Project variables", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "Ficheiro existente, por favor tente novamente.", + "preventBrowseUp": "Esta é a pasta raiz do modelo.", + "templateDefinitionMissing": "SPXGCTemplateDefinition{} não encontrado no arquivo escolhido. Consulte na documentação a secção sobre os modelos." + }, + "warning": { + "notemplates": "There are no templates linked to this project yet", + "showprofilebackup": "É recomendado fazer um backup do arquivo profile.json antes de fazer qualquer alteração", + "severalControllers": "Vários controladores estão conectados ao servidor SPX! Apenas um recomendado." + }, + "hover": { + "accent": "Cor de destaque da template nos rundowns", + "addrundownitem": "Adicionar item ao rundown", + "addshow": "Criar novo projeto", + "addrundown": "Adicionar novo rundown ao projeto", + "addccgserver": "Para adicionar um novo servidor CasparCG insira as informações de NOME IP e PORTA", + "buttontype": "Tipo de controlo adicional", + "browsetemplate": "Procurar uma nova template para associar a este projeto", + "browseextras": "Procurar um novo controlo extra para associar a este projeto", + "browseglobalextras": "Adicionar um controlo extra global", + "cancelconfig": "Fechar config sem gravar as alterações", + "ccgserver": "Nome do servidor CasparCG na SPX", + "ccgchannel": "Canal de playout do CasparCG", + "ccglayer": "Camada de playout do CasparCG", + "ccgtemplatepath": "Valor do parâmetro template-folder no arquivo casparcg.config", + "ccghost": "Nome da rede ou endereço IP do servidor CasparCG", + "ccgport": "Porta do servidor CasparCG (geralmente 5250)", + "colors": "Cor do controlo extra na interface do utilizador", + "config": " Abrir configurações da aplicação", + "confitem": "Configurações da template", + "confjsfile": "Biblioteca de extras globais - Javascript", + "dataformat": "Formato dos dados a serem enviados para a template", + "dataroot": " Pasta de dados para armazenar projetos e ficheiros de rundown?", + "defaultvalue": " Prédefinido deverá ser um valor de opção disponível", + "delete": "Remover item", + "deletethis": "Remover este item do rundown", + "deletepisode": "Apagar o rundown selecionado incluindo todos os itens", + "deleteshow": "Apagar o projeto selecionado incluindo as configurações e todos os rundowns", + "docs": "Abrir documentação", + "duplicateitem": "Duplicar este item", + "duplicaterundown": "Criar uma cópia do rundown selecionado", + "epslist": "Selecione ou clique duas vezes para abir o rundown", + "extradescr": "Descrição da função extra / tecla de função na interface do utilizador", + "fcall": "Função de manipulador de eventos na biblioteca de funções (por exemplo helloWorld)", + "fields": "Campos de SPXGCTemplateDefinition digitalizados | digitalizado da template", + "github": "Abrir no GitHub a ppágina de projeto da SPX", + "help": "Abrir ajuda acerca desta secção", + "htmlfolder": "Endereço Absoluto para a pasta de modelos do CasparCG?", + "item": "Faça duplo clique (ou Enter) para abrir / fechar o item no editor. Arraste para ordenar os itens.", + "lang": "Idioma da interface de utilizador (Pode criar novos arquivos de idioma conforme necessário para tal basta adicionar à pasta locales)", + "logfolder": "Pasta para log files", + "loglevel": "Qual o nível de registo usado? Padrão: informações. A maioria das informações de log: depuração.", + "masterplay": "Iniciar / para o item selecionado (Espaço)", + "masterupdate": "Atualizar textos do item selecionado", + "mastercontinue": "Continuar a animação para o próximo passo (Shift + Espaço)", + "navishows": "Projetos", + "navishow": "Rundowns", + "newversavailable": "Está disponível uma nova versão. Clique aqui para ler mais.", + "openbrowser": "Deverá o browser Chrome abrir ao iniciar o servidor?", + "openrundown": "Abrir o rundown selecionado no controlador", + "options": "Definições de dropdown / lista", + "outmode": "Animação de saída do gráfico", + "port": "Porta da aplicação a utilizar (Por exemplo 3000 5000 …) Atenção: O ENDEREÇO DESTA PÁGINA (também) irá mudar / sofrer (a) alteração!", + "profile": "Abrir definições deste projeto", + "playthis": "Reproduzir ou para este item", + "playouturl": "URL do web playout para transmitir/a transmissão de gráficos / programa de transmissão de gráficos", + "removeglobalextra": "Remover este extra de todos os projetos", + "removetemplate": "Remover do projeto esta template deste projeto", + "remoteplayouturl": "Webrender instalado num servidor externo. (Atenção é necessário um adereço IP público)", + "replacetemplate": "Re-import template if changes made to source code.", + "resolution": "Re-import template from html file (changes will be overwritten with defaults)", + "saveconfig": "Guardar as configurações num config file / ficheiro config", + "saveprofile": "Guardar as configurações do projeto", + "showjsfile": "Biblioteca de funções Javascript deste projeto", + "showlist": "Selecione ou clique duas vezes para abrir o projeto / no projeto a abrir", + "submitthis": "Gravar e fechar o editor", + "templatepath": "Endereço / caminho de arquivo das templates HTML", + "templatedescr": "Breve descrição do item para a interface gráfica GUI", + "text": "Texto do botão", + "text1": "Texto do botão (quando ativo)", + "updated": "Atualizar este item", + "updatethis": "Timestamp when template was last imported", + "weblayer": "Camada / Canal / Layer de webplayout", + "preview": "Control when graphics are rendered to the preview channel", + "exportitem": "Create a CSV file from fields of this template ", + "importitems": "Create rundown items from a CSV file", + "renameepisode": "Rename selected rundown" + } +} \ No newline at end of file diff --git a/locales/simplifiedChinese.json b/locales/simplifiedChinese.json new file mode 100644 index 0000000..1f0e514 --- /dev/null +++ b/locales/simplifiedChinese.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "欢迎", + "slogan": "这是一款管理和控制 Caspar CG 和直播流图形的应用。", + "folder": "文件夹", + "file": "文件", + "up": "上一层", + "field": "字段", + "pcs": "数量", + "help": "帮助", + "yes": "是", + "no": "否", + "none": "无", + "all": "All", + "fromFolder": "从文件夹", + "home": "Home" + }, + "color": { + "red": "红色", + "green": "绿色", + "grey": "灰色", + "orange": "橙色", + "blue": "蓝色", + "black": "黑色", + "light": "亮色", + "white": "白色", + "transparent": "透明" + }, + "button": { + "add": "新建", + "addplaylist": "新建播出表", + "addRow": "新建行", + "back": "◂ 返回", + "cancel": "取消", + "config": "配置", + "continue": "继续 ►", + "delete": "删除", + "deletetemplate": "删除模板", + "deletebutton": "移除按钮", + "docs": "文档", + "duplicate": "复制", + "help": "帮助", + "edit": "编辑", + "edittemplates": "编辑模板", + "exploredataroot": "探索根数据文件夹", + "exploretemplates": "探索模板文件夹", + "launch": "工程", + "overlayon": "播放特技", + "overlayoff": "停止特辑", + "open": "打开播出表", + "play": "播放 ►", + "playmaster": "播放 ►", + "rename": "重命名", + "replacetemplate": "重新导入", + "selectemplate": "选择", + "select": "打开工程", + "settings": "工程设置", + "shortcuts": "快捷键设置", + "stop": "停止 ■", + "stopmaster": "停止 ◄", + "showwebrenderer": "打开网页预览窗口", + "update": "更新 ► F5", + "save": "保存", + "filterprojects": "Start typing to filter projects..." + }, + "headline": { + "createrundowntip": "在这里新建播出表", + "edit": "编辑播出表", + "select": "选择工程", + "selectfile": "选择播出表" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "管理用户访问", + "home": "欢迎", + "login": "登录", + "pickAllTemplates": "将所有模板添加到列表中", + "picktemplate": "新建模板到播出表", + "selectshow": "选择工程", + "select": "选择播出表", + "selectshowextra": "为工程添加额外控制", + "selectemplate": "选择模板", + "selectfile": "选择一个文件", + "shortcuts": "键盘快捷键", + "controller": "控制器", + "configapp": "配置", + "configshow": "工程设置", + "shows": "工程", + "f1ShortcutTip" : "此帮助界面", + "upDownShortcutTip" : "聚焦上一个 / 下一个项目", + "homeEndShortcutTip" : "聚焦第一个 / 最后一个项目", + "enterShortcutTip" : "打开 / 关闭当前聚焦项目进行编辑", + "spaceShortcutTip" : "播放 / 继续 / 停止当前聚焦的播放列表项目", + "tipContinue" : "必须在模板中实现对 next 命令的支持 要使用 continue", + "ctrlDShortcutTip" : "复制一个模板项目", + "shiftSpaceShortcutTip" : "播放 / 停止当前聚焦的播放列表项目", + "f5ShortcutTip" : "立即向模板发送更新(例如修正拼写错误)。", + "supportUpdateCommandTip" : "必须在模板中实现对 update 命令的支持。", + "capsShortcutTip" : "显示项目覆盖层以快速查看信息并快速复制 API 命令。", + "escShortcutTip": "停止当前 rundown 使用的所有图层。" + }, + "config": { + "addnewtip": "填写新工程并保存", + "addfirsttemplate": "单击+将模板添加到该工程", + "addfirstextra": "单击+将额外控件添加到该工程", + "audioplayer": "音频播放器", + "authpolicy": "用户访问配置。是否需要使用用户名和密码?", + "authinfo": "如果在 config-file 中设置了用户名但未设置密码,则会显示此提示。", + "authnone": "应用程序不需要用户名或密码。", + "backgroundImage": "静态背景图像(默认透明)", + "buttoncolor": "按钮颜色", + "buttontext": "按钮文字", + "buttontexts": "按钮文字", + "buttontype": "按钮类型", + "casparcg": "CasparCG 设置", + "ccgtemplates": "模板文件目录 (casparcg.config)", + "ccgplayout": "CasparCG 播放列表", + "ccgservers": "CasparCG 服务器", + "coloraccent": "强调色", + "dataformat": "数据格式", + "dataroot": "数据文件夹", + "defaultvalue": "默认数据值", + "description": "描述", + "extrabutton": "按钮", + "extrabuttondescription": "通过简单的按钮执行功能", + "extratoggle": "开关按钮", + "extratoggledescription": "开关按钮可以切换状态", + "extraselectbutton": "下拉菜单按钮", + "extraselectdescription": "具有多个选项的下拉菜单", + "functionlibrary": "函数库", + "functiondescription": "函数介绍", + "functionhandler": "处理函数", + "general": "通用设置", + "globalbuttons": "全局附加", + "inputfields": "模板字段", + "javascriptfile": "在 ASSETS 文件夹中的 Javascript 文件路径", + "language": "选择界面语言", + "logfolder": "日志文件夹", + "loglevel": "日志等级", + "openchrome": "重启时打开 Chrome", + "options": "下拉选项(文本,值)", + "optionalBgImage": "背景图像文件夹(可选)", + "playerflags": "播放器参数", + "restartinfo": "SPX 必须重新启动才能使更改生效", + "serverport": "端口", + "showextras": "工程附加", + "stopmode": "停止动画", + "templatefile": "模板文静", + "templates": "将模板分配给此工程", + "templatepathinfo": "注意,模板必须对 CasparCG 和 SPX 服务器均可用。将其配置为 CasparCG 模板文件夹,或者在必要时将模板文件复制到两个应用程序中。", + "templateroot": "HTML 模板文件夹", + "text": "可见文本", + "updated": "更新", + "value": "值", + "webplayout": "网络播出层", + "webplayurl": "浏览器 URL", + "resolution": "Resolution", + "resolutioninfo": "Please note, templates are designed for HD by default and may need changes to support other resolutions.", + "preview": "Preview action", + "projectvariables": "Project variables", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "文件已存在,请重试。", + "preventBrowseUp": "这是根模板文件夹。", + "templateDefinitionMissing": "所选文件中缺少 SPXGCTemplateDefinition{} 参数。请参考帮助文档中的《HTML 模板》章节。" + }, + "warning": { + "showprofilebackup": "建议在进行更改之前对工程文件进行备份。", + "notemplates": "There are no templates linked to this project yet", + "severalControllers": "多个控制器连接到 SPX 服务器!只推荐一款。" + }, + "hover": { + "accent": "播出表模板强调色", + "addrundownitem": "添加项到播出表", + "addshow": "创建新工程", + "addrundown": "创建新播出表到工程", + "addccgserver": "输入名称,IP地址和端口号来添加新的 Caspar CG 的服务器", + "buttontype": "按钮类型", + "browsetemplate": "浏览并将新模板分配给当前工程", + "browseextras": "浏览并将新的额外控件分配给当前工程", + "browseglobalextras": "添加全局额外控制", + "cancelconfig": "关闭配置,不保存更改", + "ccgserver": "SPX 中 CasparCG 服务器名称", + "ccgchannel": "CasparCG 播出频道", + "ccglayer": "CasparCG 播出层级", + "ccgtemplatepath": "Caspar CG 中模板文件夹路径", + "ccghost": "CasparCG 服务器网络名称或 IP 地址", + "ccgport": "CasparCG 服务器端口(默认为 5250)", + "colors": "额外控制的显示色彩", + "config": "打开应用配置", + "confitem": "模板设置", + "confjsfile": "附加全局的 Javascript 库", + "dataformat": "发送到模板的数据格式", + "dataroot": "用于存储工程和播出表的数据文件夹?", + "defaultvalue": "默认值必须是可用的选项值之一", + "delete": "移除项", + "deletethis": "将此项从播出表中移除", + "deletepisode": "删除所选择的播出表,包括播出表中的项", + "deleteshow": "删除选择的工程,包括工程中所有的播出表和设置", + "docs": "打开文档", + "duplicateitem": "复制此项", + "duplicaterundown": "创建所选播出表的副本", + "epslist": "选择或双击打开播出表", + "exportitem": "将此项导出为 CSV 文件", + "extradescr": "额外的函数描述", + "fcall": "函数库中的事件处理函数(例如 helloWorld)", + "fields": "扫描 SPXGCTemplateDefinition 字段", + "github": "打开网站", + "help": "打开关于此段的帮助内容", + "htmlfolder": "使用 CasparCG 模板文件夹的绝对路径?", + "importitems": "导入多个播出表项的 CVS 文件", + "item": "双击(或回车)打开/关闭工程编辑器。拖动可对工程进行排序。", + "lang": "用户界面语言。(您可以根据需要在 locale 文件夹中创建新的语言文件)", + "logfolder": "日志文件目录", + "loglevel": "日志级别。默认级别:信息。多数日志信息:调试。", + "masterplay": "播放/停止选定项(空格键)", + "masterupdate": "更新所选项的文本(F5)", + "mastercontinue": "继续执行动画到下一步(Shift+空格键)。仅在包含多步骤模板时操作有效。", + "navishows": "工程", + "navishow": "播出表", + "newversavailable": "有更新的版本。点击查看更多信息。", + "openbrowser": "Chrome 浏览器应该在服务器启动时启动吗?", + "openrundown": "在控制器中打开选定的播出表", + "options": "下拉菜单设置", + "outmode": "图形的出场动画", + "port": "要使用的应用程序端口(例如3000 5000…)。请注意:更改端口会导致网页地址更改。", + "profile": "打开工程设置", + "playthis": "播放或停止此项", + "playouturl": "流媒体图形应用程序的 Web 播放 URL。", + "removeglobalextra": "移除工程中的所有额外内容", + "removetemplate": "在此工程中移除该模板", + "remoteplayouturl": "Webrender 安装到外部服务器。(注意:需要公网IP地址)", + "renameepisode": "更改播出表名称", + "replacetemplate": "从 .html 文件重新导入模板(参数和值将被默认值覆盖)", + "saveconfig": "将程序配置保存到配置文件", + "saveprofile": "保存工程设置", + "showjsfile": "本工程的 Javascript 函数库", + "showlist": "选择或双击工程以打开它", + "submitthis": "保存并关闭编辑器", + "templatepath": "HTML 模板的相对文件路径", + "templatedescr": "GUI 工程的简短描述", + "text": "按钮文本", + "text1": "按钮激活时的文本", + "updated": "上次导入模板时的时间戳", + "updatethis": "更新此项", + "weblayer": "网络播出层", + "resolution": "Output resolution. The default is HD (1920x1080).", + "preview": "Control when graphics are rendered to the preview channel" + } +} \ No newline at end of file diff --git a/locales/swedish.json b/locales/swedish.json new file mode 100644 index 0000000..f807735 --- /dev/null +++ b/locales/swedish.json @@ -0,0 +1,251 @@ +{ + "general": { + "hello": "Hejssan", + "slogan": "Hantera och kontrollera grafik för CasparCG eller streamingapplikationer.", + "folder": "Mapp", + "file": "Fil", + "up": "Upp", + "field": "Fält", + "pcs": "st", + "help": "Hjälp", + "yes": "Ja", + "no": "Nej", + "none": "Ingen", + "all": "All", + "fromFolder": "från mappen", + "home": "Home" + }, + "color": { + "red": "Röd", + "green": "Grön", + "grey": "Grå", + "orange": "Orange", + "blue": "Blå", + "black": "Svart", + "light": "Ljus", + "white": "Vit", + "transparent": "Transparent" + }, + "button": { + "add": "Ny", + "addplaylist": "Lägg till rundown", + "addRow": "Lägg till en rad", + "back": "◂ Tillbaka", + "cancel": "Avbryt", + "config": "Applikationsinställningar", + "continue": "Fortsätt ►", + "delete": "Radera", + "deletetemplate": "Ta bort templaten ", + "deletebutton": "Ta bort knappen", + "docs": "Dokumentation", + "duplicate": "Duplicera", + "help": "Hjälp", + "edit": "Redigera", + "edittemplates": "Redigera templates / mallar", + "exploredataroot": "Utforska dataroot-mappen", + "exploretemplates": "Utforska template/mallarmappen", + "filterprojects": "Börja skriva för att filtrera projekt...", + "launch": "Projekt", + "overlayon": "FX PLAY", + "overlayoff": "FX STOP", + "open": "Öppna rundown", + "play": "Spela►", + "playmaster": "Spela►Mellanslag", + "rename": "Byt namn", + "replacetemplate": "Återimport", + "selectemplate": "Välj", + "select": "Öppna projekten", + "settings": "Projektinställningar", + "shortcuts": "Visa genvägar", + "showwebrenderer": "Öppna web playout fönster", + "stop": "Sluta ■", + "stopmaster": "Sluta ◄ Mellanslag", + "update": "Uppdatera ► F5", + "save": "Spara" + }, + "headline": { + "edit": "Redigera innehållslistan", + "select": "Välj projekten", + "selectfile": "Välj rundown", + "createrundowntip": "Create a new rundown to this project" + }, + "pagetitle": { + "admin": "Admin", + "authpolicy": "Inloggningsdefinition", + "home": "Välkommen", + "login": "Logga in", + "pickAllTemplates": "Lägg till alla templaten i rundown", + "picktemplate": "Lägg till templaten i rundown", + "selectshow": "Välj projekten", + "select": "Välj en innehållsfil", + "selectshowextra": "Lägg till extra kontroll till projektet", + "selectemplate": "Välj en template", + "selectfile": "Välj en fil", + "shortcuts": "Genvägar", + "controller": "Controller", + "configapp": "Applikationsinställningar", + "configshow": "Projektinställningar", + "shows": "Projekt", + "f1ShortcutTip" : "Den här hjälpskärmen", + "upDownShortcutTip" : "Fokusera föregående / nästa objekt", + "homeEndShortcutTip" : "Fokusera första / sista objektet", + "enterShortcutTip" : "Öppna / stäng fokuserat objekt för redigering", + "spaceShortcutTip" : "Spela / fortsätt / stoppa fokuserat spellisteobjekt", + "tipContinue" : "Stöd för next-kommandot måste implementeras i mallen för att använda continue", + "ctrlDShortcutTip" : "Duplicera ett mallobjekt", + "shiftSpaceShortcutTip" : "Spela / stoppa fokuserat spellisteobjekt", + "f5ShortcutTip" : "Skicka en omedelbar uppdatering till mallen (för att till exempel rätta stavfel).", + "supportUpdateCommandTip" : "Stöd för update-kommandot måste implementeras i mallen.", + "capsShortcutTip" : "Visa objektöverlägg för snabb info och snabb kopiering av API-kommandon.", + "escShortcutTip": "Stoppa alla lager som används av den aktuella rundownen." + }, + "config": { + "addnewtip": "Lägg till ett nytt alternativ genom att fylla i en tom rad och spara", + "addfirsttemplate": "Klicka + för att lägga till en template till detta projekt", + "addfirstextra": "Klicka + för att lägga till extra kontroll / funktion till projektet", + "audioplayer": "Audioplayer", + "authpolicy": "Inloggningsinställningar: Använd ett användarnamn och lösenord?", + "authinfo": "Den här inställningen visas om ett användarnamn men inget lösenord anges i konfigurationsfilen.", + "authnone": "Användning av applikationen kräver inget användarnamn eller lösenord.", + "backgroundImage": "Statisk bakgrund (vanligtvis genomskinlig)", + "playerflags": "Player parametrar", + "buttoncolor": "Knappens färg", + "buttontext": "Kanpp-text", + "buttontexts": "Knapptexter", + "buttontype": "Knapptyp", + "casparcg": "CasparCG-inställningar", + "ccgtemplates": "template-mapp (casparcg.config)", + "ccgplayout": "CasparCG playout", + "ccgservers": "CasparCG-servrar", + "coloraccent": "Markeringsfärg", + "dataformat": "Dataöverföringsformat", + "dataroot": "Datamapp", + "defaultvalue": "Standardvärde", + "description": "Beskrivning", + "extrabutton": "Knapp", + "extrabuttondescription": "Enkel tryckknapp som utför en funktion", + "extratoggle": "På/av-knapp", + "extratoggledescription": "Knapp som utför separata på/av-funktioner", + "extraselectbutton": "Urvalslista och knapp", + "extraselectdescription": "Rullgardinsmeny med flera alternativ och en funktionsknapp", + "functionlibrary": "Funktionsbibliotek (/js/myFunctions.js)", + "functiondescription": "Funktionsbeskrivning", + "functionhandler": "Händelsehanterare (funktion)", + "general": "Allmänna inställningar", + "globalbuttons": "Ytterligare globala knappar", + "inputfields": "Templatefält", + "javascriptfile": "Javascript-fil (/ js / ...)", + "language": "Användargränssnittsspråk", + "logfolder": "Loggmapp", + "loglevel": "Loggnivå", + "openchrome": "Öppna Chrome vid omstart", + "options": "Alternativ för rullgardinsmeny (text, värde)", + "optionalBgImage": "Valfri bakgrundsbild från mapp", + "restartinfo": "SPX-processen måste startas om efter ändringarna.", + "resolution": "Upplösning", + "resolutioninfo": "Observera att templaten är designade för HD som standard och kan behöva ändringar för att stödja högre upplösningar.", + "serverport": "Porten för denna applikation", + "showextras": "Avancerade projektfunktioner", + "stopmode": "Stop animation", + "templatefile": "Template fil", + "templates": "Templaten kopplade till projektet", + "templatepathinfo": "Observera att templaten måste vara tillgänglig för både CasparCG- och SPX-applikationer. Konfigurera CasparCG-mappen här eller, om nödvändigt, kopiera templaten till mapparna för båda applikationerna.", + "templateroot": "HTML-templatemapp", + "text": "Synlig text", + "updated": "Uppdaterad", + "value": "Värde", + "webplayout": "Webb playout nivå", + "webplayurl": "Browser URL", + "preview": "Preview action", + "projectvariables": "Project variables", + "autoplay": "Autoplay active layers on load" + }, + "error": { + "fileExisted": "Filen fanns redan. Försök igen.", + "preventBrowseUp": "Detta är en template mapp.", + "templateDefinitionMissing": "Den valda templatefilen saknade window.SPXGCTemplateDefinition {}. Se avsnittet templatefiler för dokumentation." + }, + "warning": { + "notemplates": "There are no templates linked to this project yet", + "showprofilebackup": "Det rekommenderas att du säkerhetskopierar filen profile.json innan du gör några ändringar.", + "severalControllers": "Flera kontroller är anslutna till SPX-servern! Endast en rekommenderas." + }, + "hover": { + "accent": "Templatens markeringsfärg i rundown", + "addrundownitem": "Lägg till ett element i rundown", + "addshow": "Skapa ett nytt projekt", + "addrundown": "Lägg till ett nytt rundown till projektet", + "addccgserver": "Ange NAME IP och PORT information för att lägga till en ny CasparCG server", + "buttontype": "Avancerad funktionstyp (knapp, växlingsknapp ...)", + "browsetemplate": "Lägg till en ny template till det här projektet genom att bläddra i templatemappen ...", + "browseextras": "Lägg till en ny funktion till det här projektet ...", + "browseglobalextras": "Lägg till en ny global funktion ...", + "cancelconfig": "Stäng konfigurationen utan att spara ändringarna", + "ccgserver": "CasparCG utloggningsservernamn", + "ccgchannel": "CasparCG-kanal på servern", + "ccglayer": "CasparCG-nivåkanal", + "ccgtemplatepath": "Template-mappvärde från casparcg.config -fil", + "ccghost": "CasparCG server nätverksnamn eller IP-adress", + "ccgport": "CasparCG serverport (vanligtvis 5250)", + "colors": "Extra kontrollfärg i användargränssnittet", + "config": "Öppna applikationskonfigurationen", + "confitem": "Template inställningar", + "confjsfile": "Javascript - bibliotek med globala extramaterial", + "dataformat": "I vilket format skickas data till templaten?", + "dataroot": "I vilken mapp lagras projekt- och rundownfiler?", + "defaultvalue": "Standardvärdet bör vara ett av alternativen", + "delete": "Ta bort objektet", + "deletethis": "Ta bort det här objektet från listan", + "deletepisode": "Ta bort det valda rundown och alla dess element", + "deleteshow": "Ta bort det valda projektet och alla dess inställningar och rundown", + "docs": "Öppna dokumentationen", + "duplicateitem": "Duplicera detta element", + "duplicaterundown": "Skapa en kopia av det valda rundownt", + "epslist": "Välj eller dubbelklicka på önskat rundown", + "extradescr": "Extra funktionsbeskrivning", + "fcall": "Händelsehanterarfunktion i funktionsbiblioteket (t.ex. helloWorld)", + "fields": "Skannade SPXGCTemplateDefinition-fält", + "github": "Öppna SPX-projektsidan i GitHub", + "help": "Öppna hjälp om detta avsnitt", + "htmlfolder": "Absolut mappsökväg till CasparCG templatemapp?", + "item": "Dubbelklicka (eller Enter) för att öppna/stänga objektredigeraren. Dra för att sortera objekt.", + "lang": "Gränssnittsspråkversionsfil? (Om det behövs kan du lägga till språkfiler i språkmappen.)", + "logfolder": "Mapp för loggfiler", + "loglevel": "Vilken loggnivå används? Standard: info. De flesta data lagras: debug.", + "masterplay": "Spela / stoppa aktivt element (mellanslag/Space)", + "masterupdate": "Uppdatera texter från valt objekt (F5)", + "mastercontinue": "Fortsätt animeringen till nästa steg (Skift + Mellanslag)", + "navishows": "Projekt", + "navishow": "Rundowns", + "newversavailable": "En nyare version finns tillgänglig. Klicka för att läsa mer.", + "openbrowser": "Bör webbläsaren Chrome startas vid serverstart?", + "openrundown": "Öppna det valda rundown för redigering eller avsluta", + "options": "Inställningar för rullgardinsmeny", + "outmode": "Ut animering av grafiken", + "port": "Programport att använda? (Till exempel 3000 5000...) Observera: ADRESSEN FÖR DENNA SIDA kommer också att ändras!", + "profile": "Öppna inställningarna för detta projekt", + "playthis": "Spela / stoppa detta objekt", + "playouturl": "Lokal webplayout-adress genererad av GC för stream-grafik", + "removeglobalextra": "Ta bort den här knappen från alla projekt", + "removetemplate": "Ta bort den här templaten från projektet", + "remoteplayouturl": "Webrender installerad på en extern server. (Obs, offentliga IP-adresser krävs)", + "replacetemplate": "Återimportera templaten om ändringar görs i källkoden.", + "resolution": "Upplösning. Standard är HD (1920x1080).", + "saveconfig": "Spara inställningarna i programmets konfigurationsfil", + "saveprofile": "Spara projektinställningarna", + "showjsfile": "Javascript-funktionsbibliotek för detta projekt", + "showlist": "Välj eller dubbelklicka på projekt för att öppna det", + "submitthis": "Spara och stäng editorn", + "templatepath": "Den relativa sökvägen till HTML-grafikmallen i templatemappen", + "templatedescr": "En kort beskrivning av elementet i GC-gränssnittet", + "text": "Knapp-text", + "text1": "Knapptext nedtryckt", + "updated": "Tidsstämpel för den senaste uppdateringen", + "updatethis": "Uppdatera detta objekt", + "weblayer": "Webplayout-kanal", + "preview": "Control when graphics are rendered to the preview channel", + "exportitem": "Create a CSV file from fields of this template ", + "importitems": "Create rundown items from a CSV file", + "renameepisode": "Rename selected rundown" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4833148 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3521 @@ +{ + "name": "spx-gc", + "version": "1.4.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "spx-gc", + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "axios": "^0.30.0", + "body-parser": "^1.20.3", + "cors": "^2.8.5", + "express": "^4.21.2", + "express-handlebars": "^8.0.1", + "express-session": "^1.18.1", + "glob": "^11.0.0", + "ip": "^2.0.1", + "jsdom": "^25.0.1", + "macaddress": "^0.5.1", + "moment": "^2.29.4", + "morgan": "^1.9.1", + "node-html-parser": "^6.1.13", + "node-wav-player": "^1.0.0", + "node-xlsx": "^0.24.0", + "open": "^10.1.0", + "openurl": "^1.1.1", + "osc": "^2.4.5", + "path": "^0.12.7", + "rotating-file-stream": "^3.2.5", + "socket.io": "^4.8.0", + "sox-play": "0.0.2", + "winston": "^3.17.0" + }, + "bin": { + "spx-gc": "server.js" + }, + "devDependencies": { + "nodemon": "^3.1.7" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@serialport/binding-mock": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", + "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/binding-mock/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@serialport/binding-mock/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/@serialport/bindings-cpp": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz", + "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "11.0.0", + "debug": "4.3.4", + "node-addon-api": "7.0.0", + "node-gyp-build": "4.6.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz", + "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz", + "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/parser-delimiter": "11.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/@serialport/bindings-interface": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", + "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz", + "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz", + "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz", + "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz", + "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/parser-delimiter": "12.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz", + "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz", + "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz", + "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz", + "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz", + "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "4.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@serialport/stream/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.30.0.tgz", + "integrity": "sha512-Z4F3LjCgfjZz8BMYalWdMgAQUnEtKDmpwNHjh/C8pQZWde32TF64cqnSeyL3xD/aTIASRU30RHTNzRiV/NpGMg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssstyle": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "dependencies": { + "rrweb-cssom": "^0.7.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-handlebars": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-8.0.1.tgz", + "integrity": "sha512-mdas0PTbgQnwSyAjcYM7OMaftM8nJ3Kqz6yAyK4iCFvMOGGvh6pv42IHwcE5PBpS6ffYeZRSsgAdYUMG4CSjhQ==", + "dependencies": { + "glob": "^11.0.0", + "graceful-fs": "^4.2.11", + "handlebars": "^4.7.8" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/express-session": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", + "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/express-session/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/macaddress": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.5.3.tgz", + "integrity": "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-wav-player": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-wav-player/-/node-wav-player-1.0.0.tgz", + "integrity": "sha512-2XHeCCsbmhsApo6rk2pSACA45kKVn1Y0joD4xLBjTdXGoOfWD4tM1nXpbXrZ8yzT6ehc33PJ8H5N2vrS15rN/A==" + }, + "node_modules/node-xlsx": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.24.0.tgz", + "integrity": "sha512-1olwK48XK9nXZsyH/FCltvGrQYvXXZuxVitxXXv2GIuRm51aBi1+5KwR4rWM4KeO61sFU+00913WLZTD+AcXEg==", + "dependencies": { + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" + }, + "bin": { + "node-xlsx": "dist/bin/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" + }, + "node_modules/osc": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/osc/-/osc-2.4.5.tgz", + "integrity": "sha512-Nc4/qcl+vA/CMxiKS1xrYgzjfnyB3W94gZnrkn3eTzihlndbEml6+wj1YQNKBI4r+qrw3obCcEoU7SVH/OxpxA==", + "license": "(MIT OR GPL-2.0)", + "dependencies": { + "long": "4.0.0", + "slip": "1.0.2", + "wolfy87-eventemitter": "5.2.9", + "ws": "8.18.0" + }, + "optionalDependencies": { + "serialport": "12.0.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rotating-file-stream": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/rotating-file-stream/-/rotating-file-stream-3.2.5.tgz", + "integrity": "sha512-T8iBxUA4SookMTU97cIHUPck7beLOvN4g+y4db9E2eLn54OFsdp4qMnxuqmmJ05lcQHzueEVnPRykxfnPG948g==", + "engines": { + "node": ">=14.0" + }, + "funding": { + "url": "https://www.blockchain.com/btc/address/12p1p5q7sK75tPyuesZmssiMYr4TKzpSCN" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==" + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialport": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz", + "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "12.0.1", + "@serialport/parser-byte-length": "12.0.0", + "@serialport/parser-cctalk": "12.0.0", + "@serialport/parser-delimiter": "12.0.0", + "@serialport/parser-inter-byte-timeout": "12.0.0", + "@serialport/parser-packet-length": "12.0.0", + "@serialport/parser-readline": "12.0.0", + "@serialport/parser-ready": "12.0.0", + "@serialport/parser-regex": "12.0.0", + "@serialport/parser-slip-encoder": "12.0.0", + "@serialport/parser-spacepacket": "12.0.0", + "@serialport/stream": "12.0.0", + "debug": "4.3.4" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/serialport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/serialport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/slip/-/slip-1.0.2.tgz", + "integrity": "sha512-XrcHe3NAcyD3wO+O4I13RcS4/3AF+S9RvGNj9JhJeS02HyImwD2E3QWLrmn9hBfL+fB6yapagwxRkeyYzhk98g==" + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sox-play": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/sox-play/-/sox-play-0.0.2.tgz", + "integrity": "sha1-D3U7SlcOqmXdsAcc4N22tWKJ2DQ=", + "dependencies": { + "split": "~0.3.2" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/tldts": { + "version": "6.1.60", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.60.tgz", + "integrity": "sha512-TYVHm7G9NCnhgqOsFalbX6MG1Po5F4efF+tLfoeiOGQq48Oqgwcgz8upY2R1BHWa4aDrj28RYx0dkYJ63qCFMg==", + "dependencies": { + "tldts-core": "^6.1.60" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.60", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.60.tgz", + "integrity": "sha512-XHjoxak8SFQnHnmYHb3PcnW5TZ+9ErLZemZei3azuIRhQLw4IExsVbL3VZJdHcLeNaXq6NqawgpDPpjBOg4B5g==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/wolfy87-eventemitter": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", + "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.20.2", + "resolved": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", + "integrity": "sha512-+nKZ39+nvK7Qq6i0PvWWRA4j/EkfWOtkP/YhMtupm+lJIiHxUrgTr1CcKv1nBk1rHtkRRQ3O2+Ih/q/sA+FXZA==", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c9b1d4b --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "spx-gc", + "version": "1.4.1", + "description": "SPX Graphics Controller", + "homepage": "https://spxgraphics.com", + "main": "server.js", + "bin": "server.js", + "pkg": { + "assets": [ + "views/**/*", + "static/**/*" + ] + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "devORG": "nodemon server.js -i config.json -i DATAROOT/", + "dev": "nodemon server.js -i DATAROOT/* -i ASSETS/* -i config.json -i DATAROOT_VIDEO/*", + "devdemo": "nodemon server.js config_demodataroot.json -i DATAROOT_DEMO/* -i config_demodataroot.json", + "dev2": "nodemon server.js config2.json -i DATAROOT/* -i config2.json", + "start": "pm2 start server.js --name GC", + "stop": "pm2 stop server.js", + "build": "BUILD_PACKAGES.BAT" + }, + "keywords": [], + "author": "Tuomo Kulomaa (https://spxgraphics.com)", + "license": "MIT", + "dependencies": { + "axios": "^0.30.0", + "body-parser": "^1.20.3", + "cors": "^2.8.5", + "express": "^4.21.2", + "express-handlebars": "^8.0.1", + "express-session": "^1.18.1", + "glob": "^11.0.0", + "ip": "^2.0.1", + "jsdom": "^25.0.1", + "macaddress": "^0.5.1", + "moment": "^2.29.4", + "morgan": "^1.9.1", + "node-html-parser": "^6.1.13", + "node-wav-player": "^1.0.0", + "node-xlsx": "^0.24.0", + "open": "^10.1.0", + "openurl": "^1.1.1", + "osc": "^2.4.5", + "path": "^0.12.7", + "rotating-file-stream": "^3.2.5", + "socket.io": "^4.8.0", + "sox-play": "0.0.2", + "winston": "^3.17.0" + }, + "devDependencies": { + "nodemon": "^3.1.7" + } +} diff --git a/routes/routes-api-v1.js b/routes/routes-api-v1.js new file mode 100644 index 0000000..943dbf7 --- /dev/null +++ b/routes/routes-api-v1.js @@ -0,0 +1,786 @@ + +/* ------------------------------------------ + + Public API routes for external controllers + such as Stream Deck or similar. + + /api/v1/ + + Home route is a list of available commands. + +--------------------------------------------- */ + +var express = require("express"); +const router = express.Router(); +const path = require('path'); +const fs = require('fs'); +const moment = require('moment'); +const directoryPath = path.normalize(config.general.dataroot); +const logger = require('../utils/logger'); +logger.debug('API-v1 route loading...'); +const spx = require('../utils/spx_server_functions.js'); +const xlsx = require('node-xlsx').default; +const axios = require('axios') +const PlayoutCCG = require('../utils/playout_casparCG.js'); +const { query } = require("../utils/logger"); +const spxAuth = require('../utils/spx_auth.js'); +let apiCache = [] // used to cache [undocumented] API calls +let ack = 'Sent request to SPX server. Acknowledgement is not to be expected.' +let ack2 = 'Sent request to SPX Controller. Acknowledgement is not to be expected.' +const apiHandler = require('../utils/api-handlers.js'); + +const notInSolo = { + status: 501, + message: 'Not Implemented', + info: 'This API endpoint is not available in WebCG.', + more: 'For advanced API features, please see WebCG Production or Broadcast' +} + +// ROUTES ------------------------------------------------------------------------------------------- +router.get('/', function (req, res) { + let functionsDoc = { + "sections": [ + + { + "section": "Common API", + "info": "Generic API endpoints and utilities available in all WebCG versions without a license.", + "commands": [ + { + "vers": "v1.1.2", + "method": "GET", + "param": "/api/v1/version", + "info": "Returns SPX version info and current host-id" + }, + { + "vers": "v1.1.0", + "method": "GET", + "param": "/api/v1/panic", + "info": "Force clear to all output layers without out-animations. (Note, this does NOT save on-air state of rundown items to false, so when UI is reloaded the items will show the state before panic was triggered.) This is to be used for emergency situations only and not as a normal STOP command substitute." + }, + { + "vers": "v1.0.14", + "method": "GET", + "param": "/api/v1/feedproxy?url=https://feeds.bbci.co.uk/news/rss.xml&format=xml", + "info": "A proxy endpoint for passing feed data from CORS protected datasources. (If you need to pass url parameters use %26 instead of & to separate them)." + }, + { + "vers": "v1.3.0", + "method": "POST", + "param": "/api/v1/feedproxy", + "info": "A POST version of the feedproxy endpoint. This endpoint is a helper for outgoing GET or POST requests requiring custom headers, such as Authorization or similar. Data is passed to the helper in the body of the POST request, in which url is the actual URL of the external endpoint. If the body contains a postBody -object, it will be passed to the outgoing API request as body. See principle in the example below, or search SPX Knowledge Base for more info with keyword feedproxy.", + "code": { url: "https://api.endpoint.com/requiring/customheaders/", headers: { "key1": "my first value", "key2": "second value" }, postBody: { info: "If postBody is found, the outgoing request will be done using POST method, otherwise as GET." } } + }, + ] + }, + + { + "section": "Controller API", + "restriction": "Some endpoints require WebCG Production license", + "info": "API endpoints for controlling the WebCG Graphics Controller rundown. Please note some endpoints will require a valid WebCG Production license.", + "commands": [ + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/focusPrevious", + "info": "Move focus up to previous item, will not circle back to bottom when top is reached." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/focusNext", + "info": "Move focus down to next item, will not circle back to top when end is reached." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/stopAllLayers", + "info": "Animate all layers (used by the current rundown) out, but does not clear layers." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/play", + "info": "Start focused item." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/continue", + "info": "Issue continue command to selected item. Notice this needs support from the template itself and does not work as play or stop." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/stop", + "info": "Stop focused item." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/load?file=MyFirstProject/MyFirstRundown", + "info": "Open rundown from project / file." + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/focusFirst", + "info": "Move focus to the first item on the rundown.", + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/focusLast", + "info": "Move focus to the last item on the rundown.", + }, + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/rundown/focusByID/1234567890", + "info": "Move focus by ID on the rundown.", + }, + + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/play/1234567890", + "info": "Start item by ID on the active rundown.", + "active": false, + }, + + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/continue/1234567890", + "info": "Continue to item by ID on the active rundown. Notice this needs support from the template itself and does not work as play or stop.", + "active": false, + }, + + { + "vers": "1.0", + "method": "GET", + "param": "/api/v1/item/stop/1234567890", + "info": "Stop item by ID on the active rundown.", + "active": false, + }, + { + "vers": "v1.0.12", + "method": "GET", + "param": "/api/v1/invokeTemplateFunction?playserver=OVERLAY&playchannel=1&playlayer=19&webplayout=19&function=myCustomTemplateFunction¶ms=Hello%20World", + "info": "Uses an invoke handler to call a function in a template. See required parameters in the example call above. JSON objects can be passed as params by urlEncoding stringified JSON. Search SPX Knowledge Base for more info with keyword invoke.", + "active": false, + }, + { + "vers": "v1.3.0", + "method": "GET", + "param": "/api/v1/invokeExtensionFunction?function=sendCmd¶ms=incrementNumber", + "info": "Uses SPX's messaging system to call a function in an extension. JSON objects can be passed as params by urlEncoding stringified JSON. The extension will need to implement SPX's messaging system, search SPX Knowledge Base for more info with keyword invokeExtensionFunction.", + "active": false, + }, + + ] + }, + + { + "section": "Server API", + "restriction": "SPX Broadcast license required", + "info": "API endpoints targeting the SPX server directly without going through the rundown controller. These endpoints are for advanced uses and require a SPX Broadcast license.", + "commands": [ + { + "vers": "v1.0.12, v.1.3.2", + "method": "POST", + "active": false, + "param": "/api/v1/directplayout", + "info": "Populate template and execute a play/continue/stop -command to it. Please note the optional updateRundownItem property. updateRundownItemitemID is an optional object for forcing UI updates and persisting to defined rundown file. Please note: special charaters in values does not work at the moment! Post request body example as JSON:", + "code": { casparServer: "OVERLAY", casparChannel: "1", casparLayer: "20", webplayoutLayer: "20", relativeTemplatePath: "/vendor/pack/template.html", out: "manual", DataFields: [{ field: "f0", value: "Firstname" }, { field: "f1", value: "Lastname" }], command: "play", updateRundownItem: { updateUI: true, itemID: "myItemID", persist: true, "project": "myFirstProject", "rundown": "myFirstRundown" } } + }, + { + "vers": "v1.1.0", + "active": false, + "method": "GET", + "param": "/api/v1/controlRundownItemByID?file=MyProject/FirstRundown&item=1234567890&command=play", + "info": "Play / stop an item from a known rundown. (Remember you can rename rundown items from WebCG GUI)" + }, + { + "vers": "v1.1.1", + "method": "GET", + "active": false, + "param": "/api/v1/getprojects", + "info": "Returns projects as an array of strings." + }, + { + "vers": "v1.1.1", + "method": "GET", + "active": false, + "param": "/api/v1/getrundowns?project=MyProject", + "info": "Returns rundown names of a given project as an array of strings." + }, + { + "vers": "v1.3.0", + "method": "GET", + "active": false, + "param": "/api/v1/allrundowns", + "info": "Returns all projects and rundowns" + }, + { + "vers": "v1.1.1", + "method": "GET", + "active": false, + "param": "/api/v1/rundown/get", + "info": "Returns current rundown as json. " + }, + { + "vers": "v1.3.0", + "method": "GET", + "active": false, + "param": "/api/v1/rundown/json?project=MyProject&rundown=FirstRundown", + "info": "Returns content of a specific rundown as json data." + }, + { + "vers": "v1.3.0", + "method": "POST", + "active": false, + "param": "/api/v1/rundown/json", + "info": "Creates or updates a rundown file. This can be used for example with application extensions. POST body:content must contain valid rundown JSON data, otherwise SPX controller may not be able to read it. For more info search SPX Knowledge Base with keyword api rundown/json", + "code": { project: "myProjectName", file: "newRundown.json", content: { comment: "Playlist generated by MyApp", templates: [{ "description": "First template", "playserver": "OVERLAY", "etc": "..." }, { "description": "Second template", "playserver": "OVERLAY", "etc": "..." }] } } + }, + { + "vers": "v1.1.1", + "method": "GET", + "active": false, + "param": "/api/v1/getlayerstate", + "info": "Returns current memory state of web-playout layers of the server (not UI). Please note, if API commands are used to load templates, this may not return them as expected!" + }, + + { + "vers": "v1.1.3", + "method": "GET", + "active": false, + "param": "/api/v1/gettemplates?project=MyProject", + "info": "Returns templates and their settings from a given project." + }, + { + "vers": "v1.3.0", + "method": "GET", + "active": false, + "param": "/api/v1/executeScript?file=win-open-calculator.bat", + "info": "Execute a shell script/batch file in ASSETS/scripts folder using a shell associated with a given file extension." + }, + + { + "vers": "v1.3.0", + "method": "GET", + "active": false, + "param": "/api/v1/getFileList?assetsfolder=excel", + "info": "Returns an array of filenames fround in a given subfolder of ASSETS, such as excel." + }, + { + "vers": "v1.3.0", + "method": "POST", + "active": false, + "param": "/api/v1/saveCustomJSON", + "info": "Creates or updates a JSON file in ASSETS/json folder. This can be used for persisting arbitrary data to a JSON file. The content property of the below example gets saved to ASSETS/json/todoApp/myTodo.json. Note the subfolder property is optional.", + "code": { subfolder: "todoApp", filename: "myData.json", content: { note: "Get these done by the end of month", items: [{ "task": "Grow a beard", "done": false }, { "task": "Get a haircut", "done": true }] } } + }, + ] + } + + ] + } + res.render('view-api-v1', { + layout: false, + functionList: functionsDoc, + version: global.vers + }); +}); + + +// COMMON API ---------------------------------------------------------- + +router.get('/version', async (req, res) => { + // let data = {}; + // data.vendor = "SPX Graphics"; + // data.product = "SPX Solo"; + // data.version = global.vers; + // data.id = global.pmac; + // data.os = process.platform; + // return res.status(200).json(data) + let data = {}; + data.vendor = 'SPX Graphics'; + data.product = 'SPX Solo'; + data.version = global.vers; + data.id = global.pmac; + data.hostname = config.general.hostname || ''; + data.os = process.platform; + data.rootFolder = spx.getStartUpFolder(); + data.uptime = {}; + let uptime = spx.getUpTime(); + data.uptime.seconds = uptime[0]; + data.uptime.text = uptime[1]; + + // await spx.checkLicense(); + // if (global.licensed) { + // data.license.type = global.license.productBrand; + // data.license.expiration = global.license.expiration; + // data.license.days = spx.getLicenseDaysRemaining(); + // } + + if (global.env && global.env.vendor) { + data.env = {}; + data.env.vendor = global.env.vendor; + data.env.product = global.env.product; + data.env.version = global.env.version; + } + return res.status(200).json(data); +}); // end version + + +router.get('/panic', spxAuth.CheckAPIKey, async (req, res) => { + io.emit('SPXMessage2Client', { spxcmd: 'clearAllLayers' }); // clear webrenderers + io.emit('SPXMessage2Controller', { APIcmd: 'RundownAllStatesToStopped' }); // stop UI and save stopped values to rundown + if (spx.CCGServersConfigured) { + PlayoutCCG.clearChannelsFromGCServer(req.body.server) // server is optional + } + return res.status(200).json({ status: 200, message: 'OK', info: 'Panic executed. Layers cleared forcefully.' }) +}); // end panic + + +router.get('/feedproxy', spxAuth.CheckAPIKey, async (req, res) => { + if (!req.query.url) { + logger.error('URL missing from feedproxy parameters'); + return res.status(500).json({ type: 'error', message: 'URL missing from parameters' }) + } + + let URL = req.query.url + URL = URL.replace(/meta-data/g, ''); + URL = URL.replace(/&path=/g, '###'); + axios.get(URL) + .then(function (response) { + res.header('Access-Control-Allow-Origin', '*') + switch (req.query.format) { + case 'xml': + res.set('Content-Type', 'application/rss+xml') + break; + + default: + res.set('Content-Type', 'application/json') + break + } + res.send(response.data) + }) + .catch(function (error) { + console.log(error); + return res.status(500).json({ type: 'error', message: error.message }) + }); +}); // end feedproxy + + +router.post('/feedproxy', spxAuth.CheckAPIKey, async (req, res) => { + try { + if (!req.body.url) { + let errMsg = "url missing from feedproxy request. Make sure to have the correct JSON in your request."; + throw { status: 404, message: errMsg }; + } + + if (req.body.postBody) { + executePOSTRequest(req, res); // res handled in the function + } else { + executeGETRequest(req, res); // res handled in the function + } + } catch (error) { + res.status(error.status || 500).json({ + status: error.status || 500, + error: error.message, + info: "Search SPX Knowledge Base for more using keyword 'feedproxy'." + }); + } +}); // end feedproxy post handler + + +async function executePOSTRequest(req, res) { + try { + const { url, headers, postBody } = req.body; + + if (!url || !headers || !postBody) { + return res.status(400).json({ error: 'Missing required parameters in request body' }); + } + + let requestBody; + try { + requestBody = JSON.parse(postBody); + } catch (error) { + return res.status(400).json({ error: 'Invalid postBody format' }); + } + + const response = await fetch(url, { + method: 'POST', + body: JSON.stringify(requestBody), + headers: headers + }); + + if (!response.ok) { + return res.status(response.status).json({ error: `Target API returned an error: ${response.status} ${response.statusText}` }); + } + const data = await response.json(); + res.status(response.status).json(data); + } catch (error) { + console.error('Error in executePOSTRequest:', error); + res.status(500).json({ error: 'Failed to forward POST request' }); + } +} + +function executeGETRequest(req, res) { + // This handles response to the client + // console.log('Using GET method', req.body); + axios. + get(req.body.url, { + headers: req.body.headers + }) + + .then((response) => { + res.header('Access-Control-Allow-Origin', '*') + // console.log('Response status:', response.statusText, response.status, response.data); + logger.verbose('executeGETRequest response: ' + response.status); + res.status(response.status || 200).send(response.data); + }) + + .catch((error) => { + if (error.response) { + // console.log('data......', error.response.data); + // console.log('status....', error.response.status); + // console.log('headers...', error.response.headers); + res.status(error.response.status || 500).send(error.response.data); + } else if (error.request) { + // The request was made but no response was received + // console.log('request...', error.request); + res.status(500).send(error.request); + } else { + // Something happened in setting up the request + // console.log('Error msg...', error.message); + res.status(500).send(error.message); + } + }); +} // end executeGETRequest + + +router.get('/rundown/load/', spxAuth.CheckAPIKey, async (req, res) => { + + // Improved in 1.3.1 to sanitize input + let file = await spx.strip(req.query.file); + console.log('Loading rundown: ' + file); + + // Added in 1.3.1 check if it exists + let project = file.split('/')[0]; + let rundown = file.split('/')[1]; + let fullPath = path.resolve(spx.getDatarootFolder(), project, 'data', rundown + '.json'); + if (!fs.existsSync(fullPath)) { + let errMsg = 'Rundown [' + file + '] not found, cannot load it.'; + logger.error(errMsg); + return res.status(404).json({ status: 404, message: errMsg }); + } + + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownLoad'; + dataOut.file = file; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end load + + +router.get('/rundown/stopAllLayers', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownStopAll'; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end stopAllLayers + + +router.get('/changeItemID', async (req, res) => { + // Added in 1.0.15 - undocumented intentionally + // ID button in SPX controller uses this API endpoint: + // /api/v1/changeItemID?rundownfile=C:/SPX/DATAROOT/PROJECT/data/list.json&ID=0000001&newID=0000002 + + try { + let file = req.query.rundownfile || ''; + let oldI = req.query.ID || ''; + let newI = req.query.newID || ''; + if (!file || !oldI || !newI) { + throw 'Missing data: file [' + file + '], old [' + oldI + '], new [' + newI + ']'; + } + + let datafile = path.normalize(file); + let RundownData = await spx.GetJsonData(datafile); + + // First check for conflicts + RundownData.templates.forEach((item, index) => { + if (item.itemID === newI) { + throw 'ID-conflict' + } + }); + + RundownData.templates.forEach((item, index) => { + if (item.itemID === oldI) { + item.itemID = newI + } + }); + + RundownData.updated = new Date().toISOString(); + + RundownData = await spx.appendProjectFile(RundownData, datafile, "from changeItemID"); + global.rundownData = RundownData; + await spx.writeFile(datafile, RundownData); + logger.verbose('Changed item ID to ' + newI); + return res.status(200).send('ID changed to ' + newI); + } catch (error) { + switch (error) { + case 'ID-conflict': + msg = 'ID conflict, ID was not changed.' + lvl = 'warn' + break; + + default: + msg = 'Error in changeItemID: ' + error + lvl = 'error' + } + logger[lvl](msg); + return res.status(409).send('ID not changed'); + } +}); + + +router.get('/changeItemData', async (req, res) => { + // Added in 1.1.1 + // ID button in SPX controller uses this API endpoint: + // /api/v1/changeItemData?rundownfile=C:/SPX/DATAROOT/PROJECT/data/list.json & ID=1234567890 & key=out & newValue=manual + + try { + let file = req.query.rundownfile || ''; + let epoc = req.query.ID || ''; + let prop = req.query.key || ''; + let valu = req.query.newValue || ''; + if (!file || !epoc || !prop || !valu) { + logger.warn('Missing data from changeItemData: file: [' + file + '], ID: [' + epoc + '], key: [' + prop + '], value: [' + valu + ']') + throw 'Missing data, see log.'; + } + let datafile = path.normalize(file); + let RundownData = await spx.GetJsonData(datafile); + RundownData.templates.forEach((item, index) => { + if (item.itemID === epoc) { + item[prop] = valu + } + }); + + RundownData.updated = new Date().toISOString(); + RundownData = await spx.appendProjectFile(RundownData, datafile, "from changeItemData"); + global.rundownData = RundownData; // push to memory also for next take + await spx.writeFile(datafile, RundownData); + logger.verbose('ChangeItemData: file: [' + file + '], ID: [' + epoc + '], key: [' + prop + '], value: [' + valu + ']') + return res.status(200).send(prop + ' changed to ' + valu); + } catch (error) { + console.log('Error', error); + logger.error('changeItemData error', error); + return res.status(409).send('Failed to change ' + prop + ' to ' + valu + '!'); + } +}); + + + +// CONTROLLER API ----------------------------------------------------------------------------- + +router.get('/item/play', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.status = 200; + dataOut.message = 'OK'; + dataOut.APIcmd = 'ItemPlay'; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); + + +router.get('/item/continue', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.status = 200; + dataOut.message = 'OK'; + dataOut.info = ack2 + dataOut.APIcmd = 'ItemContinue'; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end item continue + + +router.get('/item/stop', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.status = 200; + dataOut.message = 'OK'; + dataOut.info = ack2 + dataOut.APIcmd = 'ItemStop'; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end item stop + + +router.get('/rundown/focusNext/', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownFocusNext'; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end focusNext + + +router.get('/rundown/focusPrevious/', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownFocusPrevious'; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end focusPrevious + + +router.get('/rundown/focusFirst/', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownFocusFirst'; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end focusFirst + +router.get('/rundown/focusLast/', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2 + dataOut.APIcmd = 'RundownFocusLast'; + dataOut.apikey = req.query.apikey || ''; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).json(dataOut); +}); // end focusLast + +router.get('/rundown/focusByID/:id', spxAuth.CheckAPIKey, async (req, res) => { + let dataOut = {}; + dataOut.info = ack2; + dataOut.APIcmd = 'RundownFocusByID'; + dataOut.apikey = req.query.apikey || ''; + dataOut.itemID = req.params.id; + io.emit('SPXMessage2Controller', dataOut); + res.status(200).send('Sent request to controller: ' + JSON.stringify(dataOut)); +}); // end focusByID + + +// router.get('/rundown/focusFirst/', spxAuth.CheckAPIKey, async (req, res) => { +// res.status(501).json(notInSolo); +// }); // end focusFirst + + +// router.get('/rundown/focusLast/', spxAuth.CheckAPIKey, async (req, res) => { +// res.status(501).json(notInSolo); +// }); // end focusLast + + +// router.get('/rundown/focusByID/:id', spxAuth.CheckAPIKey, async (req, res) => { +// res.status(501).json(notInSolo); +// }); // end focusByID + + +router.get('/item/play/:id', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end item play by ID + + +router.get('/item/continue/:id', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end item continue by ID + + +router.get('/item/stop/:id', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end item stop by ID + + +router.get('/invokeTemplateFunction/', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end invokeTemplateFunction + + +router.get('/invokeExtensionFunction/', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end invokeExtensionFunction + + +// SERVER API ---------------------------------------------------------------------------------- + +router.post('/directplayout', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end directplayout + + +router.get('/directplayout', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end directplayout + + +router.get('/getprojects', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end getprojects + + +router.get('/allrundowns', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end allrundowns + + +router.get('/getrundowns', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end getrundowns + + +router.get('/gettemplates', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end gettemplates + + +router.get('/getlayerstate', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end getlayerstate + + +router.get('/executeScript', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end executeScript file + + +router.get('/getFileList', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end getFileList + + +router.post('/saveCustomJSON', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end saveCustomJSON + + +router.get('/controlRundownItemByID', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end controlRundownItemByID + + +router.get('/rundown/get', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end get current rundown as JSON + + +router.get('/rundown/json', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end get specific rundown as JSON + + +router.post('/rundown/json', spxAuth.CheckAPIKey, async (req, res) => { + res.status(501).json(notInSolo); +}); // end create or update rundown as JSON + +module.exports = router; diff --git a/routes/routes-api.js b/routes/routes-api.js new file mode 100644 index 0000000..eced516 --- /dev/null +++ b/routes/routes-api.js @@ -0,0 +1,440 @@ + +// ----------------------------------------- +// Handle Express server routes for the API (at "/api/") +// ----------------------------------------- +var express = require("express"); +const router = express.Router(); +const path = require('path'); +const fs = require('fs'); +const moment = require('moment'); +const directoryPath = path.normalize(config.general.dataroot); +const logger = require('../utils/logger'); +logger.debug('API-route loading...'); +const spx = require('../utils/spx_server_functions.js'); +const xlsx = require('node-xlsx').default; + +// --- WATCHOUT!!!! v1.3.3 disabled -------- +// const { now } = require("moment"); +// const { constants } = require("buffer"); + +// ROUTES ------------------------------------------------------------------------------------------- +router.get('/', function (req, res) { + res.send('Looking for this api/v1?'); +}); + + +router.get('/files', async (req, res) => { + const fileListAsJSON = await GetDataFiles(); + res.send(fileListAsJSON); +}); // file + + +router.get('/openFileFolder/', async (req, res) => { + // Added in 1.3.1. And fixed in 1.3.2... + // Added optional parameter forceFolder to open a different folder than templates. + if (config.general.disableOpenFolderCommand == true) { + let msg = 'openFileFolder -command disabled in config.'; + logger.warn(msg); + return res.status(403).send(msg); + } + let dirpath, folder = null; + if (req.query.openFolderOnly) { + folder = path.join(spx.getStartUpFolder(), 'ASSETS', req.query.openFolderOnly); + // folder = path.dirname(dirpath); + } else { + let relpath = req.query.file || ''; + if (!req.query.file) { + let msg = 'openFileFolder -command requires a file parameter.'; + logger.warn(msg); + return res.status(403).send(msg); + } + filepath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', relpath); + folder = path.dirname(filepath); + } + + // Added in 1.3.1 for security: if not found nothing is done. + if (!fs.existsSync) { + logger.error('Folder ' + folder + ' does not exist.'); + return res.status(404).send('Folder ' + folder + ' does not exist.'); + } + + // open folder in each operating system + if (process.platform === 'darwin') { + require('child_process').exec('open "' + folder + '"'); + } else if (process.platform === 'win32') { + require('child_process').exec('explorer "' + folder + '"'); + } else if (process.platform === 'linux') { + require('child_process').exec('xdg-open "' + folder + '"'); + } else { + logger.error('Unknown operating system: ' + process.platform); + } + res.sendStatus(200) +}); // openFileFolder of a template for editing + + +router.get('/licBasic/', async (req, res) => { + // added in 1.1.1 - license check. Minor tweaks in 1.1.3 + // Format: + // 4x?rot(pmac)10x? | AA-AA-33-UQ-GZ-ZX-BB-BB-BB-BB + // Not safe because it is not encrypted. + let stripd = req.query.str.replace(/-/g, ''); // strip dashes + let rotlic = stripd.substring(4,12); // get 8 chars + // console.log('rotlic // from: ' + rotlic + ' to ' + spx.rot(rotlic, true) + ' vs ' + global.pmac.toUpperCase()); + if (spx.rot(rotlic, true) === global.pmac.toUpperCase()) { + res.status(200).send('{result:ok}'); + } else { + res.status(403).send('{result:invalid}'); + } +}); // GET licBasic check ended + + +router.get('/rotBasic/', async (req, res) => { + // Require host-id, returns key. + let rotlic = spx.rot(req.query.id); + let soclic = spx.dashify(spx.salt(4) + rotlic + spx.salt(8)); + let revlic = spx.rot(rotlic, true); + let json = "{\"pmac\":\"" + global.pmac + "\",\"rot\":\"" + rotlic + "\",\"soclic\":\"" + soclic + "\",\"chk\":\"" + revlic + "\"}"; + res.send(json); +}); // GET rotBasic/?id=12345678 + + +router.get('/logger/', async (req, res) => { + // Minimalistic GET logger for template messages + let message = req.query.message + let source = req.query.source + let level = req.query.level.toLowerCase() + let channel = req.query.channel + let msg = '(api/logger, ' + channel + ', ' + source + '): ' + message + // console.log(msg); + eval('logger.' + level + '(msg)'); // nasty, eh? + res.sendStatus(200) +}); // GET logger route ended + + +router.post('/logger/', async (req, res) => { + // Minimalistic POST logger for template messages + let message = req.body.message + let source = req.body.source + let level = req.body.level.toLowerCase() + let channel = req.body.channel + let msg = '(api/logger, ' + channel + ', ' + source + '): ' + message + // console.log(msg); + eval('logger.' + level + '(msg)'); // nasty, eh? + res.sendStatus(200) +}); // POST logger route ended + + +router.post('/browseFiles/', async (req, res) => { + // This is axios ajax handler for file browser on dbl click on a folder + // REQUEST: current folder and next folder name + // RETURNS: json data with folder and file arrays + // 1.1.0 - refactored navigation process to use '..' for parent folder. + let curFolder = req.body.curFolder || "."; + let tgtFolder = req.body.tgtFolder || ""; + let extension = req.body.extension || "HTM"; + let rootFolder = req.body.rootFolder || path.join(spx.getStartUpFolder(), 'ASSETS'); + let BrowseFolder = path.join(curFolder, tgtFolder); + + let osRootPath = path.resolve(rootFolder) + let osTargPath = path.resolve(BrowseFolder) + let navigateTo = osTargPath; + let feedbackMs = ''; + + if ( osTargPath.length <= osRootPath.length ) { + logger.verbose('Targeting beyond limits, sending root-identifier. Path: ' + osTargPath); + navigateTo = osRootPath; + feedbackMs = 'root'; + } else { + feedbackMs = 'ok'; + } + const fileListAsJSON = await spx.GetFilesAndFolders(navigateTo, extension); + fileListAsJSON.message=feedbackMs; // force feedback message to UI at RenderFolder() + res.send(fileListAsJSON); +}); // POST browseFiles API route ended + + +router.post('/heartbeat/', async (req, res) => { + // REQUEST: data = a heartbeat string + // RETURNS: none + // 1.1.0 submit anonymous usage stats + try { + + if (global.config.general.allowstats===false || global.config.general.allowstats=='false') { + logger.verbose('Heartbeat / stats disabled.'); + return + } // Stats disabled by config. Added in 1.1.1. + + let d = req.body.data; + let h = 'smartpx.fi'; + spx.collectSPXInfo('hello from api/heartbeat endpoint') + .then(function(si) { + let u = 'http://' + h + '/gc/messageservice2/?'+ si + '&d=' + d; + spx.httpGet(u); + return si + }) + .then(function(si) { + logger.verbose('Stats ' + si + ' AND ' + d); + res.status(200).send('{all:good}'); // ok 200 AJAX RESPONSE + return; + }) + } catch (error) { + logger.error('Error in api/heartbeat: ' + error); + res.status(500).send(error); + }; + +}); // POST heartbeat + + +router.post('/readExcelData', async (req, res) => { + // Function can be called from a template to get all data from + // an Excel file in the ASSETS/excel -folder. + // Data parsing / logic must be implemented in the template + // this just dumps data out as-is. + // var excelFile = path.join(__dirname, '..', 'ASSETS', req.body.filename); // fails when packaged + // Improved in 1.1.1 - Return cached data also if fileref is empty (for some reason). + try { + var excelFile = path.join(spx.getStartUpFolder(), 'ASSETS', req.body.filename); // v.1.0.15: getStartUpFolder() + var workSheetsData; + let timenow = Date.now(); + // console.log('Excel cache age ' + (timenow - excel.readtime) + ' ms'); + + if ( excel.data && excel.filename == req.body.filename && (timenow - excel.readtime) <= 1000 || !req.body.filename ) { /* milliseconds */ + // sama data requested less than a second ago, return data from memory + logger.verbose('Returning cached Excel data from memory') + workSheetsData = excel.data; + // console.log('Returning CACHED Excel data.\n'); + } else { + // get it from Excel file + logger.verbose('Returning Excel data from FILE and saving to cache.') + workSheetsData = xlsx.parse(excelFile); + // console.log('Returning Excel FILE data and caching it.\n'); + + // cache excel data to a global variable + global.excel.readtime = Date.now(); + global.excel.filename = req.body.filename; + global.excel.data = workSheetsData; + } + + + logger.verbose('OK API read Excel data from ' + excelFile); + res.status(200).send(workSheetsData); // ok 200 AJAX RESPONSE + return; + } catch (error) { + logger.error('Error in api/readExcelData while reading Excel ' + excelFile + ": " + error); + res.status(500).send(error); }; // Server error + return; +}); // POST readExcelData to get Excel data from file + + +router.post('/savefile/:filebasename', async (req, res) => { + spx.talk('Saving file ' + req.params.filebasename); + try { + if (!req.params.filebasename) { + throw new Error("Filename missing, cannot save file."); + } + let datafile = path.join(directoryPath, req.params.filebasename) + '.json'; + logger.debug('Saving file ' + datafile + '...'); + let data = req.body; + await spx.writeFile(datafile,data); + res.status(200).send('OK, created file ' + datafile); // ok 200 AJAX RESPONSE + } catch (error) { + logger.error('Error while saving ' + datafile + ': ' + err); + res.status(500).send(error); + }; //file written +}); // POST savefile API route ended + +router.post('/saverundownfile/:projectName/:rundownName', async (req, res) => { + // Added in 1.3.0 + // Used by extensions that will modify rundowns and save them back to the server. + // This will also send a message to the UI to request a reload. + console.log('Saving rundown file ' + req.params.rundownName + ' in project ' + req.params.projectName + '...'); + try { + if (!req.params.projectName || !req.params.rundownName) { + throw new Error("Project or filename missing from request, cannot save file."); + } + let datafile = path.join(directoryPath, req.params.projectName, 'data', req.params.rundownName) + '.json'; + logger.debug('Saving rundown file ' + datafile + '...'); + let data = req.body; + await spx.writeFile(datafile,data); + io.emit('SPXMessage2Client', { + spxcmd: "showMessageSlider", + msg: "⛔ Rundown data was modified by API. Reload view!", + type: "warn", + persist: true + }); + res.status(200).send('OK, created file ' + datafile); // ok 200 AJAX RESPONSE + } catch (error) { + logger.error('Error in api/saverundownfile' + error); + res.status(500).send(error); + }; //file written +}); // POST savefile API route ended + + +router.post('/exportCSVfile', async (req, res) => { + // console.log('Exporting CSV...'); + try { + let showFolder = req.body.foldername || ""; + let datafile = req.body.datafile || ""; + let dataJSONfile= path.join(spx.getDatarootFolder(), showFolder, 'data', datafile + '.json'); // Changed in 1.3.1 + let rundownData = await spx.GetJsonData(dataJSONfile); + let CSVdata = '' + + let item_description, + item_playserver, + item_playchannel, + item_playlayer, + item_webplayout, + item_out, + item_uicolor, + item_dataformat, + item_relpath, + item_graphicPath, + item_version, + item_id + + rundownData.templates.forEach((item,index) => { + // console.log('Iterating template index ' + index); + if (item.itemID == req.body.itemID) { + // This is the template to process. + // console.log('Exporting template ' + item.itemID); + + item_description = item.description || ''; + item_playserver = item.playserver || ''; + item_playchannel = item.playchannel || '1'; + item_playlayer = item.playlayer || '10'; + item_webplayout = item.webplayout || '10'; + item_out = item.out || 'manual'; + item_uicolor = item.uicolor || '0'; + item_dataformat = item.dataformat || 'json'; + item_relpath = item.relpath || ''; + // if OGraf, we need to add a few more properties: + if (item_relpath.toLowerCase().endsWith(".ograf.json")) { + item_graphicPath = item.ografProps.graphicPath || ''; + item_version = item.ografProps.version || ''; + item_id = item.ografProps.id || ''; + } + + CSVdata = '\r\n# SPX Rundown item CSV export. (More info: https://docs.spxgraphics.com/Guides/Tutorials/how+to+use+csv+files)\r\n\r\n' + CSVdata += '# description #;' + item_description + '\r\n' + CSVdata += '# playserver #;' + item_playserver + '\r\n' + CSVdata += '# playchannel #;' + item_playchannel + '\r\n' + CSVdata += '# playlayer #;' + item_playlayer + '\r\n' + CSVdata += '# webplayout #;' + item_webplayout + '\r\n' + CSVdata += '# out #;' + item_out + '\r\n' + CSVdata += '# uicolor #;' + item_uicolor + '\r\n' + CSVdata += '# dataformat #;' + item_dataformat + '\r\n' + CSVdata += '# relpath #;' + item_relpath + '\r\n' + // if OGraf, add graphicPath, version and id + if (item_relpath.toLowerCase().endsWith(".ograf.json")) { + CSVdata += '# graphicPath #;' + item_graphicPath + '\r\n'; + CSVdata += '# version #;' + item_version + '\r\n'; + CSVdata += '# id #;' + item_id + '\r\n'; + } + CSVdata += '# onair #;false\r\n' + CSVdata += '# project #;' + showFolder + '\r\n' + CSVdata += '# rundown #;' + datafile + '\r\n' + CSVdata += '\r\n' + + // print field ID's + CSVdata += '# FieldUUIDs #;' + item.DataFields.forEach((field,findex) => { + if (field.field && field.field!='' ) { + CSVdata += field.field + ';' + } + }); + CSVdata += '\r\n'; + + // print field types + CSVdata += '# FieldTypes #;' + item.DataFields.forEach((field,findex) => { + if (field.field && field.field!='' ) { + CSVdata += field.ftype + ';' + } + }); + CSVdata += '\r\n' + + // print field titles + CSVdata += '# FieldTitls #;' + item.DataFields.forEach((field,findex) => { + if (field.field && field.field!='' ) { + CSVdata += field.title + ';' + } + }); + CSVdata += '\r\n' + + // print field fcalls if button + CSVdata += '# Fieldfcalls #;' + item.DataFields.forEach((field,findex) => { + if (field.field && field.field!='' && field.fcall) { + CSVdata += field.fcall + ";"; + } + + }); + CSVdata += '\r\n' + + // print field values + CSVdata += '\r\n' + let itemData = '# ID:auto;' + item.DataFields.forEach((field,findex) => { + if (field.field && field.field!='' && field.value) { + let dataToSave = field.value.replace(/\n/g,'
') || ''; // replace all newlines with
+ itemData += dataToSave + ";"; + } + }); + CSVdata += itemData + '\r\n' + } + }); + + let timestamp = spx.prettifyDate(new Date(), 'YYYY-MM-DD-HHMMSS'); + let filenameref = item_relpath.split('.')[0].replace('\\', '/').split('/').slice(-1)[0]; + + // generate CSV folder if not there + let CSVfolder = path.join(spx.getStartUpFolder(), 'ASSETS', 'csv') + fs.existsSync(CSVfolder) || fs.mkdirSync(CSVfolder) + let CSVfileRef = path.join(CSVfolder, filenameref + '_' + timestamp + '.csv'); + await spx.writeTextFile(CSVfileRef,CSVdata); + // console.log(' Created CSV file ' + CSVfileRef); + logger.verbose('Created ' + CSVfileRef + ' from itemID ' + req.body.itemID + ' on ' + dataJSONfile + '. '); + res.status(200).send('Generated file ' + CSVfileRef); + } catch (error) { + logger.error('API error in exportCSVfile(): ', error); + }; //file written +}); // POST exportCSVfile end + + +// FUNCTIONS ------------------------------------------------------------------------------------------- +async function GetDataFiles() { + // Get files + // const directoryPath = path.normalize("X:/01_Projects/Yle/CG/DEV/DATA_FOLDER/"); + const directoryPath = path.normalize(config.general.dataroot); + let jsonData = {}; + var key = 'files'; + jsonData.folder = directoryPath; + jsonData[key] = []; + let id = 0; + + try { + fs.readdirSync(directoryPath).forEach(file => { + let ext = path.extname(file).toUpperCase(); + if (ext == ".JSON") { + var stats = fs.statSync(path.join(directoryPath, file)); + var datem = moment(stats.mtime, 'DD.MM.YYYY').format(); + var filedata = { + id: id, + name: file, + date: datem + }; + id++; + jsonData[key].push(filedata); + } + }); + return jsonData; + } + catch (error) { + logger.error('Error while reading files from ' + directoryPath + ': ' + err); + return (error); + } +} // GetDataFiles ended + + +module.exports = router; \ No newline at end of file diff --git a/routes/routes-application.js b/routes/routes-application.js new file mode 100644 index 0000000..e70bc78 --- /dev/null +++ b/routes/routes-application.js @@ -0,0 +1,2313 @@ + +// -------------------------------------------- +// server routes (at "/") +// -------------------------------------------- +var express = require("express"); +const router = express.Router(); +const path = require('path'); +const fs = require('fs'); +const moment = require('moment'); +const directoryPath = path.normalize(config.general.dataroot); +const logger = require('../utils/logger'); +logger.debug('Application-route loading...'); +const spx = require('../utils/spx_server_functions.js'); +const cfg = require('../utils/spx_getconf.js'); +const PlayoutCCG = require('../utils/playout_casparCG.js'); +const PlayoutWEB = require('../utils/playout_webplayer.js'); +const spxAuth = require('../utils/spx_auth.js'); +const jsdom = require("jsdom"); +const { JSDOM } = jsdom; +const cors = require('cors'); +const { timeStamp } = require("console"); +const http = require('http'); +const axios = require('axios'); + +// ROOT ROUTES ---------------------------------------------------------------------------------------------- + +router.get('/', spxAuth.CheckLogin, cors(), spx.getNotificationsMiddleware, async function (req, res) { + await SaveRundownDataToDisc(); // Added in 1.0.15 + let currVer = vers; + let greeting = config.general.greeting || ''; + + let recents = config.general.recents || [] // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + res.render('view-home', { + layout: false, + greeting: greeting, + curVerInfo: req.curVerInfo, + currVer: currVer, + user: req.session.user, + recents: recents, + disableConfigUI: disableConfigUI, + config: config, + showMessage: req.session.showMessage + }); + req.session.showMessage = null; +}); // get / end + +router.get('/admin', spxAuth.CheckLogin, function (req, res) { + res.render('view-admin', { layout: false }); +}); // get /admin end + +router.get('/fileBrowser', spxAuth.CheckLogin, function (req, res) { + // added in 1.1.1 + res.render('view-fileBrowser', { layout: false }); +}); // get /fileBrowser end + +router.get('/templates/empty.html', function (req, res) { + res.render('view-empty', { layout: false }); +}); // get /templates/empty.html end + +router.get(['/renderer/index.html', '/renderer'], function (req, res) { + let hideCursor = false; + + // Added in 1.3.0 + if (global.config.general.hideRendererCursor && global.config.general.hideRendererCursor == true) { + hideCursor = true; + } + + // Added in 1.3.0 + let outputSize = getResolutionFromConfig(global.config, req.query); + + res.render('view-renderer', { + layout: false, + width: outputSize.width, + height: outputSize.height, + hideCursor: hideCursor + }); +}); // get /renderer end + +router.get('/renderer/scalable', function (req, res) { + // Added in 1.3.0 + let outputSize = getResolutionFromConfig(global.config, req.query); + res.render('view-rendererscalable', { + layout: false, + width: outputSize.width, + height: outputSize.height + }); +}); // get /renderer/scalable end + +router.get('/renderwindow/:type', function (req, res) { + // Added in 1.3.0 + let outputSize = getResolutionFromConfig(global.config, req.query); + let viewFile = ''; + viewFile = 'view-rendererscalable'; + + if (viewFile == '') { + res.send('Invalid URL'); + } else { + res.render(viewFile, { + layout: false, + width: outputSize.width, + height: outputSize.height, + mode: req.params.type + }); + } +}); // get /renderwindow/:type end + +router.get('/login', function (req, res) { + // Added in 1.3.2 + res.render('view-login', { layout: false }); +}); // login + +router.get('/logout', spxAuth.Logout, function (req, res) { + res.redirect('/'); +}); // get /logout end + +router.post('/', spxAuth.CheckLogin, function (req, res) { + //logger.info('User "' + req.session.user + '" logged in'); + res.redirect('/'); +}); // post / end + +router.post('/saveauthpolicy', function (req, res) { + // save settings to config and move on + let configFile = global.configfileref; // './config.json'; + + let configData; + let user; + let pass; + + if (req.body.policy == "1") { + logger.debug('saveauthpolicy: Use auth, set user-pass fields in config') + user = req.body.username; + pass = spx.hash(req.body.password); + } + else { + logger.debug('saveauthpolicy: Dont use auth, clear user-pass fields in config'); + user = ""; + pass = ""; + } + + try { + async function saveAndReadConfig() { + // console.log('Reading config'); + configData = await GetJsonData(configFile); + // console.log('Changing values'); + configData.general.username = user; + configData.general.password = pass; + // console.log('Writing config'); + await spx.writeFile(configFile, configData); + // console.log('Re-reading config'); + await cfg.readConfig(); + res.redirect('/'); + }; + saveAndReadConfig(); + } + catch (error) { + logger.error('saveAndReadConfig() Error while saving file: ', error); + res.redirect('/'); + }; +}); // post /saveauthpolicy end + +router.get('/config', cors(), spxAuth.CheckLogin, async (req, res) => { + // show application config (send global.config as "config" data to the view, see options object below) + await SaveRundownDataToDisc(); // Added in 1.0.15 + let recents = config.general.recents || [] // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + res.render('view-appconfig', { + layout: false, + config: config, + user: req.session.user, + configfile: configfileref, + recents: recents, + disableConfigUI: disableConfigUI + }); +}); // get /config end + +router.post('/config', spxAuth.CheckLogin, async (req, res) => { + // save incoming json form data to config.json and reload the page + let ConfigData = req.body; + if (req.body.NewName && req.body.NewHost && req.body.NewPort) { + // new server was added + var obj = {}; + obj["name"] = req.body.NewName; + obj["host"] = req.body.NewHost; + obj["port"] = req.body.NewPort; + if (!ConfigData.casparcg) { + // we are adding new servers to non-existing array + ConfigData.casparcg = {}; + } + + if (ConfigData.casparcg.servers) { + ConfigData.casparcg.servers.push(obj); + } else { + ConfigData.casparcg.servers = [obj]; + } + } + + if (ConfigData.casparcg) { + // iterate all casparcg servers and remove if missing data + let KillItems = []; // a list of items to delete from server array + if (ConfigData.casparcg.servers != undefined && ConfigData.casparcg.servers.length != 0) { + ConfigData.casparcg.servers.forEach((element, i) => { + if (element.name == "" || element.host == "" || element.port == "") { + KillItems.push(i); + } + }); + KillItems.forEach((item) => { + ConfigData.casparcg.servers.splice(item, 1); + }); + } + } else { + // console.log('Not a single CasparCG server in config.'); + } + + // remove un-necessary temp-fields + delete ConfigData.NewName; + delete ConfigData.NewHost; + delete ConfigData.NewPort; + + // Added in 1.1.1 + ConfigData.general.recents = config.general.recents || [] + + // Overwrite config.json + // let datafile = './config.json'; // hey! This is wrong! + let datafile = global.configfileref; // hey! This is wrong! + logger.debug('Saving config file ' + datafile + '...'); + + try { + async function saveAndReadConfig() { + // console.log('*** WRITING ***'); + await spx.writeFile(datafile, ConfigData); + // console.log('*** READING ***'); + await cfg.readConfig(); + // console.log('*** RENDERING ***'); + res.render('view-appconfig', { recents: ConfigData.general.recents, layout: false, config: config, message: 'Changes saved', user: req.session.user }); + }; + // ----------------------------------------------------------------------------- + saveAndReadConfig(); // a nice solution + } catch (error) { + logger.error('router.post/config - Error while saving file: ', error); + res.render('view-appconfig', { recents: ConfigData.general.recents, layout: false, config: config, error: 'Error saving config: ' + err, user: req.session.user }); + }; //file written + + +}); // post /config end + +router.get('/register', cors(), spxAuth.CheckLogin, async (req, res) => { + // show application config (send global.config as "config" data to the view, see options object below) + await SaveRundownDataToDisc(); // Added in 1.0.15 + let recents = config.general.recents || [] // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + res.render('view-registration', { + layout: false, + config: config, + user: req.session.user, + configfile: configfileref, + }); +}); // get /register end + +router.post('/register', async (req, res) => { + // Handles modification changes of registratiom. + // Request: form data as JSON + // Returns: Ajax response + logger.verbose('Saving registration [' + + '] in rundown [' + req.body.rundownfile + '] with updated values.'); + try { + + if (!config.registration) { + config.registration = {}; + } + + config.registration.updated = new Date().toISOString(); + config.registration.country = req.body.country; + config.registration.indus = req.body.indus; + config.registration.usage = req.body.usage + config.registration.devlevel = req.body.skill + config.registration.freetext = req.body.freetext + config.registration.email = req.body.email + if (req.body.inviteDiscord == "on") { + config.registration.discord = true + } else { + config.registration.discord = false + } + if (req.body.newsletter == "on") { + config.registration.newsletter = true + } else { + config.registration.newsletter = false + } + await spx.writeFile(global.configfileref, config); + + config.registration.platform = req.body.platform; + config.registration.task = req.body.task; + + await axios.post('https://spx-formbot-1093142801465.us-central1.run.app/api/submit', config.registration); + req.session.showMessage = 'Thank you for the registration! 👍'; + res.redirect('/'); + + } catch (error) { + console.error('ERROR', error); + let errmsg = 'Server error in /register [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + }; +}); // post /register end + +router.get('/shows', cors(), spxAuth.CheckLogin, async (req, res) => { + // show list of shows (folders) + await SaveRundownDataToDisc(); // Added in 1.0.15 + const folderListAsJSON = await spx.GetSubfolders(config.general.dataroot); + let recents = config.general.recents || [] // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + res.render('view-shows', { + layout: false, + folders: folderListAsJSON, + errorMsg: '', + user: req.session.user, + recents: recents, + config: config, + disableConfigUI: disableConfigUI + }); +}); // get /shows end + +router.get('/show/:foldername', cors(), spxAuth.CheckLogin, async (req, res) => { + // Show episodes (files in folder 'data') + const fileListAsJSON = await spx.GetDataFiles(config.general.dataroot + "/" + req.params.foldername + "/data/"); + await SaveRundownDataToDisc(); // Added in 1.0.15 + let recents = config.general.recents || [] // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + let datafile = path.join( + config.general.dataroot, + req.params.foldername, + 'profile.json', + ); + + const fileDataAsJSON = await GetJsonData(datafile); + res.render('view-episodes', { + layout: false, + files: fileListAsJSON, + folder: req.params.foldername, + errorMsg: '', + user: req.session.user, + recents: recents, + config: config, + showconfig: fileDataAsJSON, + disableConfigUI: disableConfigUI + }); +}); // get /show/:foldername end + +router.get( + '/show/:foldername/config', + cors(), + spxAuth.CheckLogin, + async (req, res) => { + // Show Configuration + await SaveRundownDataToDisc(); // Added in 1.0.15 + let datafile = path.join( + config.general.dataroot, + req.params.foldername, + 'profile.json', + ); + const fileDataAsJSON = await GetJsonData(datafile); + let disableConfigUI = config.general.disableConfigUI || false; // added in 1.1.1 + + // a "previous folder" functionality + let treeData = ''; + let templateRootPath = path.join( + spx.getStartUpFolder(), + 'ASSETS', + 'templates', + ); + if (LastBrowsedTemplateFolder == '') { + treeData = JSON.stringify(spx.GetFilesAndFolders(templateRootPath)); + } else { + treeData = JSON.stringify( + spx.GetFilesAndFolders(LastBrowsedTemplateFolder), + ); + } + let recents = config.general.recents || []; // added in 1.1.0 + let ERRCODE = ''; + if (req.query.ERR) { + ERRCODE = 'error.' + req.query.ERR; + } + res.render('view-showconfig', { + layout: false, + TemplateFiles: treeData, + TemplateRootFolder: templateRootPath, + showconfig: fileDataAsJSON, + folder: req.params.foldername, + messageCode: '', + errorCode: ERRCODE, + user: req.session.user, + recents: recents, + config: config, + disableConfigUI: disableConfigUI, + }); + }, +); // get /show/:foldername/config end + +router.post('/show/:foldername/config/removeTemplate', spxAuth.CheckLogin, async (req, res) => { + // Remove template index (0 based) + logger.verbose('Removing template from profile ' + req.body.showFolder); + let showFolder = req.body.showFolder || ""; + let TemplateIdx = req.body.TemplIndex || 0; + let ProfileFile = path.join(config.general.dataroot, showFolder, 'profile.json'); + let profileData = await GetJsonData(ProfileFile); + let templateRef = profileData.templates[TemplateIdx].relpath; + profileData.templates.splice(TemplateIdx, 1); + + // Then remove references from the users-arrays of each variables + if (profileData.variables && profileData.variables.length > 0) { + profileData.variables.forEach(function (variable) { + var filtered = variable.users.filter(function (value, index, arr) { + return value != templateRef; + }); + variable.users = filtered; + }); + } + + try { + await spx.writeFile(ProfileFile, profileData); + res.redirect('/show/' + showFolder + '/config') + } catch (error) { + logger.error('removeTemplate Error while saving file: ' + error); + // console.log('removeTemplate Error while saving file: ', error); + }; //file written +}); // removeTemplate end + +router.post('/show/:foldername/config/removeExtra', spxAuth.CheckLogin, async (req, res) => { + // Remove extra index (0 based) + logger.verbose('Removing extra from profile ' + req.body.showFolder); + let showFolder = req.body.showFolder || ""; + let ExtraIndex = req.body.ExtraIndex || 0; + let ProfileFile = path.join(config.general.dataroot, showFolder, 'profile.json'); + let profileData = await GetJsonData(ProfileFile); + profileData.showExtras.CustomControls.splice(ExtraIndex, 1); + // spx.talk('Remving extra.'); + try { + await spx.writeFile(ProfileFile, profileData); + res.redirect('/show/' + showFolder + '/config') + } catch (error) { + logger.error('removeExtra Error while saving file: ' + error); + }; //file written +}); // removeExtra end + +router.post('/show/:foldername/config/saveExtra', spxAuth.CheckLogin, async (req, res) => { + // Save extra index (0 based) + // Executes when Save (in show / extra button) is clicked + + logger.verbose('Overwriting an extra settings in profile ' + req.body.showFolder + ' with updated values.'); + let showFolder = req.body.showFolder || ""; + let ExtraIndex = req.body.ExtraIndex || 0; + let ProfileFile = path.join(config.general.dataroot, showFolder, 'profile.json'); + let profileData = await GetJsonData(ProfileFile); + profileData.showExtras.CustomControls[ExtraIndex] = req.body.extraData; // replace an item in array + + if (req.body.newTXT && req.body.newVAL) { + // new option was added + var obj = {}; + obj["text"] = req.body.newTXT; + obj["value"] = req.body.newVAL; + if (profileData.showExtras.CustomControls[ExtraIndex].items) { + profileData.showExtras.CustomControls[ExtraIndex].items.push(obj); + } + else { + profileData.showExtras.CustomControls[ExtraIndex].items = [obj]; + } + } + + // check if some needs to be removed + let KillItems = []; // a list of items to delete from server array + if (profileData.showExtras.CustomControls[ExtraIndex].items) { + profileData.showExtras.CustomControls[ExtraIndex].items.forEach((element, i) => { + if (element.text == "" || element.value == "") { + KillItems.push(i); + } + }); + KillItems.forEach((item) => { + profileData.showExtras.CustomControls[ExtraIndex].items.splice(item, 1); + }); + } + + + try { + await spx.writeFile(ProfileFile, profileData); + res.redirect('/show/' + showFolder + '/config') + } catch (error) { + logger.error('saveExtra Error while saving file: ' + error); + }; //file written +}); // saveExtra end + +router.post( + '/show/:foldername/config/saveTemplate', + spxAuth.CheckLogin, + async (req, res) => { + // Save template index (0 based) + // This runs when template is modified in show config + logger.verbose( + 'Overwriting a template in profile ' + + req.body.showFolder + + ' with updated values.', + ); + let showFolder = req.body.showFolder || ''; + let TemplateIdx = req.body.TemplIndex || 0; + let ProfileFile = path.join( + config.general.dataroot, + showFolder, + 'profile.json', + ); + let profileData = await GetJsonData(ProfileFile); + + // Save steps as otherwise they disappear when template is saved + let steps; + if (profileData.templates[TemplateIdx].steps) { + steps = profileData.templates[TemplateIdx].steps; + } + + let newData = req.body.templateData || {}; + + if (profileData.projectFormat === 'OGRAF') { + let ografProps = + profileData.templates[TemplateIdx].ografProps || {}; + newData.ografProps = ografProps; + } + + profileData.templates[TemplateIdx] = newData; // replace an item in array + + // Save steps to new data + if (steps) { + profileData.templates[TemplateIdx].steps = steps; + } + + // get DataFields and replace that + let DataFieldArray = JSON.parse( + decodeURI(profileData.templates[TemplateIdx].DataFields), + ); + profileData.templates[TemplateIdx].DataFields = DataFieldArray; + // spx.talk('Saving template changes.'); + try { + await spx.writeFile(ProfileFile, profileData); + res.redirect('/show/' + showFolder + '/config'); + } catch (error) { + logger.error('saveTemplate Error while saving file: ' + error); + } //file written + }, +); // saveTemplate end + +router.post('/show/:foldername/config/saveGeneralSettings', spxAuth.CheckLogin, async (req, res) => { + // Added in 1.0.15 + // Save General Settigs of a project + // console.log("Profile: " + req.body.showFolder) + // console.log("Background value: " + req.body.background) + logger.verbose('Overwriting a profile ' + req.body.showFolder + ' with updated values.'); + let showFolder = req.body.showFolder || ""; + let ProfileFile = path.join(config.general.dataroot, showFolder, 'profile.json'); + let profileData = await GetJsonData(ProfileFile) || {}; + profileData.general = {}; + profileData.general.background = req.body.background; + + io.emit('SPXMessage2Client', { + spxcmd: 'setRendererBackgroundImage', + background: req.body.background + }); + + try { + await spx.writeFile(ProfileFile, profileData); + res.redirect('/show/' + showFolder + '/config') + } catch (error) { + logger.error('saveGeneralSettings Error while saving file: ' + error); + }; //file written +}); // saveGeneralSettings end + +router.post('/show/:foldername/config', spxAuth.CheckLogin, async (req, res) => { + // a POST handler for adding content to the /profile.json. + // + // Called from templateChooser -modal, for instance. + // Also here we scan the source file and extract needed fields into the profile. + // Also handles adding new extras to the show profile. + // + // REQUEST .... data with template folder / name and profle folder name + // RETURNS .... json data with folder and file arrays + // + + try { // added in 1.1.1 + logger.verbose('Adding new stuff to profile in ' + req.body.showFolder); + let curFolder = req.body.curFolder || ""; + let template = req.body.template || ""; + let showFolder = req.body.showFolder || ""; + let command = req.body.command || ""; + let ftype = req.body.ftype || ""; + let customscript = req.body.customscript || ""; + let TemplatePath = path.join(curFolder, template).trim(); + let ProfileFile = path.join(config.general.dataroot, showFolder, 'profile.json'); + let profileData = await GetJsonData(ProfileFile) || {}; // or empty + let replaceIndex = req.body.replaceIndex || ""; // v.1.0.11 replace existing, a reimport + + switch (command) { + + case 'addtemplates': + // Added in 1.1.4 + // ADD SEVERAL TEMPLATES AT ONCE + let templates = JSON.parse(req.body.templates || []); + templates.forEach((template, index) => { + TemplatePath = path.join(curFolder, template).trim(); + profileData = addTemplateToProfile(profileData, TemplatePath, showFolder, curFolder, replaceIndex) + }); + break; + + case 'addtemplate': + // ADD (or RE-IMPORT) A TEMPLATE + profileData = addTemplateToProfile(profileData, TemplatePath, showFolder, curFolder, replaceIndex) + if (profileData.error) { + res.redirect('/show/' + showFolder + '/config?ERR=templateDefinitionMissing') + } + break; + + case 'addshowextra': + // ------------------------------------- ADDING EXTRA ----------------- + newExtra = {}; + switch (ftype) { + case 'button': + newExtra.description = 'A new push button'; + newExtra.ftype = 'button'; + newExtra.bgclass = 'bg_blue'; + newExtra.text = 'Hello world'; + newExtra.fcall = "demo_popup('Hello world!')"; + break; + + case 'togglebutton': + newExtra.description = 'A new toggle button'; + newExtra.ftype = 'togglebutton'; + newExtra.bgclass = 'bg_blue'; + newExtra.text0 = 'START ME'; + newExtra.text1 = 'STOP ME'; + newExtra.fcall = 'demo_toggle(this)'; + break; + + case 'selectbutton': + newExtra.description = 'Selectbutton demo'; + newExtra.ftype = 'selectbutton'; + newExtra.bgclass = 'bg_blue'; + newExtra.text = 'Play'; + newExtra.fcall = 'playSelectedAudio'; + newExtra.value = 'media/wav/applause.wav'; + newExtra.items = []; + let option0 = {}; + option0.text = 'Applause'; + option0.value = 'media/wav/applause.wav'; + newExtra.items.push(option0); + let option1 = {}; + option1.text = 'No!'; + option1.value = 'media/wav/no.wav'; + newExtra.items.push(option1); + let option2 = {}; + option2.text = 'Yesss!'; + option2.value = 'media/wav/yes.wav'; + newExtra.items.push(option2); + break; + + default: + logger.warn('Warning: Extra type ' + ftype + ' is unknown. Adding nothing to the profile-file.'); + break; + } + if (!profileData.showExtras) { + // lets add a showExtras section to profile + profileData.showExtras = {}; + profileData.showExtras.CustomControls = []; + } + profileData.showExtras.CustomControls.push(newExtra); + break; + + case 'addshowextrascript': + // ------------------------------- ADDING SHOW EXTRA SCRIPT ----------------- + if (!profileData.showExtras) { + // lets add a showExtras section to profile + profileData.showExtras = {}; + profileData.showExtras.CustomControls = []; + } + profileData.showExtras.customscript = customscript; + break; + + default: + // --------------------------- UNKNOWN COMMAND ----------------- + logger.warn('Warning: Command ' + command + ' is unknown. Adding nothing to the profile-file.'); + break; + } + + // await spx.writeFile(ProfileFile,profileData); + await spx.writeFile(ProfileFile, profileData) + .then( + res.redirect('/show/' + showFolder + '/config') + ) + .catch(function (error) { + console.log('\nEnd of template import errors.', error) + // res.redirect('/show/' + showFolder + '/config') + }) + } catch (error) { + logger.error('showconfig / ' + error); + // res.redirect('/show/' + showFolder + '/config') + }; //file written + +}); // browseTemplates API post request end + + +router.post('/shows/', spxAuth.CheckLogin, async (req, res) => { + // add a new showfolder (with /data -subfolder) and open it for configuration + let targetFolder = path.join(config.general.dataroot, req.body.foldername); + let targetDataFo = path.join(config.general.dataroot, req.body.foldername, "data"); + let folderListAsJSON = "" + if (fs.existsSync(targetFolder)) { + folderListAsJSON = await spx.GetSubfolders(config.general.dataroot); + res.render('view-shows', { layout: false, folders: folderListAsJSON, error: 'Folder exists, try again with another name.', user: req.session.user }); + } + else { + fs.mkdirSync(targetFolder); + fs.mkdirSync(targetDataFo); + + // save a new empty profile.json + let profileFile = {}; + profileFile.projectFormat = req.body.format.toUpperCase() || 'SPX'; + let profileFilePath = path.join(targetFolder, 'profile.json'); + await spx.writeFile(profileFilePath, profileFile); + + res.redirect('/show/' + req.body.foldername + '/config'); + } +}); // post /shows/ end + + +router.post('/show/:foldername', spxAuth.CheckLogin, async (req, res) => { + // add a new json file and open it for editing + let datafile = path.join(config.general.dataroot + '/' + req.params.foldername + '/data/' + req.body.filebasename) + '.json'; + logger.verbose('Creating file', datafile); + + // check if exist + if (fs.existsSync(datafile)) { + //file exists + logger.warn('Episode file exists [' + datafile + '], going back to episode list.'); + const fileListAsJSON = await spx.GetDataFiles(config.general.dataroot + "/" + req.params.foldername + "/data/"); + res.render('view-episodes', { layout: false, files: fileListAsJSON, folder: req.params.foldername, error: 'File exists, use another name.', user: req.session.user }); + } + else { + // file was not there + // spx.talk('Adding a new empty rundown file...'); + try { + let EmptyJSON = {}; + await spx.writeFile(datafile, EmptyJSON); + res.redirect('/gc/' + req.params.foldername + '/' + req.body.filebasename); + } catch (error) { + logger.error('Error while creating file: ' + error); + }; //file written + } +}); // post /show/:foldername end + + +router.delete('/show/:folder/:file', spxAuth.CheckLogin, async (req, res) => { + res.send("would delete file " + req.params.folder + "/data/" + req.params.file + ".json"); + let datatemp = path.join(config.general.dataroot, req.params.folder, "data", req.params.file) + '.json'; + let datafile = path.normalize(datatemp); + fs.unlink(datafile, function (err) { + if (err) { + logger.error('Error while deleting ' + datafile + ': ' + err) + // res.send(err); + } + else { + logger.verbose('Deleted file: ' + datafile); + global.rundownData = {}; + // client will reload in 500ms + } + }); +}); // delete /show/:folder/:file end + + +router.delete('/shows/:foldername', spxAuth.CheckLogin, async (req, res) => { + // delete a showfolder (an Ajax call, therefor the redirect does not work, must do from client side.) + let datafolder = path.join(config.general.dataroot, req.params.foldername); + const deleteFolderRecursive = function (datafolder) { + if (fs.existsSync(datafolder)) { + fs.readdirSync(datafolder).forEach((file, index) => { + const curPath = path.join(datafolder, file); + logger.debug('Deleting ' + curPath); + + if (fs.lstatSync(curPath).isDirectory()) { // recurse + deleteFolderRecursive(curPath); + } else { // delete file + logger.verbose('Deleted file: ' + curPath); + fs.unlinkSync(curPath); + } + }); + logger.debug('Deleting folder ' + datafolder); + fs.rmdirSync(datafolder); + } + else { + logger.warn('Folder ' + datafolder + ' did not exist, cannot delete.'); + } + } + + try { + deleteFolderRecursive(datafolder); + logger.verbose('Deleted folder: ' + datafolder); + } + catch (error) { + logger.error('Error while deleting ' + datafolder + ': ' + error) + res.send(error); + } + const folderListAsJSON = await spx.GetSubfolders(config.general.dataroot); + res.render('view-shows', { layout: false, folders: folderListAsJSON, errorMsg: '', user: req.session.user }); + +}); // delete /shows/:foldername end + + +router.get('/gc/:foldername/:filename/:mode?', cors(), spxAuth.CheckLogin, async (req, res) => { + // G R A P H I C C O N T R O L L E R M A I N V I E W + let datafile = path.join(config.general.dataroot, req.params.foldername, 'data', req.params.filename) + '.json'; + + let [easterImg, easterTxt] = spx.getEasterEggImage(); + + const fileDataAsJSON = await spx.RemoveFilepathKey(GetJsonData(datafile)); + + + if (fileDataAsJSON?.ografs) { + fileDataAsJSON.templates = fileDataAsJSON.ografs; + fileDataAsJSON.ografs = null + fileDataAsJSON.projectFormat = "OGRAF" + } + // fileDataAsJSON = spx.RemoveFilepathKey(fileDataAsJSON); // Added in 1.3.0 + + fileDataAsJSON.project = req.params.foldername; // Added in 1.3.2 + fileDataAsJSON.rundown = req.params.filename; // Added in 1.3.2 + // Please note, these does not show in the rundownfile itself, + // but is used in the controller view and is in memory only for now. + // Only when something is changed (or played), it will be written to the file. + + global.rundownData = fileDataAsJSON; + + let showprofile = path.join(config.general.dataroot, req.params.foldername, 'profile.json'); + const profileDataJSONobj = await GetJsonData(showprofile); + let profileData = JSON.stringify(profileDataJSONobj); + let projectBackground = ''; + + if (profileDataJSONobj && profileDataJSONobj.general && profileDataJSONobj.general.background) { + projectBackground = profileDataJSONobj.general.background; + } + + // list of CSV files + // TODO: + let csvFileList = ''; + csvFileList = JSON.stringify(spx.GetFilesAndFolders(path.resolve(spx.getStartUpFolder(), 'ASSETS', 'csv'), 'csv')); + + // Added in 1.3.0 + let outputSize = getResolutionFromConfig(global.config, req.query); + + let recents = config.general.recents || [] // added in 1.1.0 + let preview = config.general.preview || 'none' // added in 1.1.0 + let rnrtype = config.general.renderer || 'normal' // added in 1.1.0 + let assetsFolder = path.resolve(spx.getStartUpFolder(), 'ASSETS') || '' // added in 1.1.0 + let disableConfigUI = config.general.disableConfigUI || false // added in 1.1.1 + let disableLRenderer = config.general.disableLocalRenderer || false // added in 1.2.0 + + function getPageTemplate() { + // Added in 1.3.0 + if (req.params.mode && req.params.mode.toLowerCase() === 'light') { + return 'view-controllermini'; + } else { + return 'view-controller'; + } + } + + + res.render(getPageTemplate(), { + layout: false, + globalExtras: config.globalExtras, + filedata: fileDataAsJSON, + folder: req.params.foldername, + datafile: datafile, + filebasename: req.params.filename, + profiledata: profileData, + profiledataObj: profileDataJSONobj, + user: req.session.user, + background: projectBackground, + csvFileList: csvFileList, + width: outputSize.width, + height: outputSize.height, + previewMode: preview, + recents: recents, + renderer: rnrtype, + assetsFolder: assetsFolder, + disableConfigUI: disableConfigUI, + disableLRender: disableLRenderer, + autoplayLocalRenderer: config.general.autoplayLocalRenderer, + easteregg: easterImg, + easterText: easterTxt + }); + + let bgImage = '' + if (profileDataJSONobj && profileDataJSONobj.general && profileDataJSONobj.general.background) { + bgImage = profileDataJSONobj.general.background + } + + setTimeout(function () { + io.emit('SPXMessage2Client', { + spxcmd: 'setRendererBackgroundImage', + background: bgImage + }); + }, 500); + spx.setRecents(req.params.foldername + '/' + req.params.filename) // Added in 1.1.0 +}); // get /gc/:foldername/:filename end + + +router.post('/gc/:foldername/:filename/', spxAuth.CheckLogin, async (req, res) => { + // + // Can handle several commands from the controller page + // + var rundownDataJSONobj; + let profileDataJSONobj; + let showprofile = ""; + let data = req.body; + let filepath; + switch (data.command) { + + case 'importCSVdata': + try { + // CSV IMPORT function. The source CSV must have been exported via the EXPORT function. + let fieldsFound = false; // check at the end + logger.verbose('Importing CSV from ' + data.curFolder + '/' + data.importFile + ' to be appended to ' + data.RundownFile); + rundownDataJSONobj = await GetJsonData(path.resolve(data.RundownFile)); + if (!rundownDataJSONobj.templates) { + rundownDataJSONobj.templates = [] + } + // now get the CSV file and start parsing line-by-line + let CSVfileData = await GetTextFileData(path.join(data.curFolder, data.importFile)) + // console.log('CSV content', CSVfileData.toString()); + + let startSeconds = String(Date.now()); + + let csvLines = CSVfileData.split('\n') + + var t_description + var t_playserver + var t_playchannel + var t_playlayer + var t_webplayout + var t_out + var t_uicolor + var t_onair + var t_dataformat + var t_relpath + var t_graphicPath + var t_version + var t_id + var t_project + var t_rundown + + + let curLineItems = [] + var protoFields = []; + var protoFtypes = []; + var protoTitles = []; + var protoFcalls = []; + var protoValues = []; + var dataFiProto = {}; // placeholder obj for fields + var templateTmp = []; // placeholder arr for objects + var fieldIndex = 0; // iterate + + + // First we get METADATA (another lines forEach for content afterwards) + csvLines.forEach((line, lineindex) => { + if (line.trim() === '') { return; } + curLineItems = line.split(';') + // console.log('Line ' + lineindex, curLineItems); + switch (curLineItems[0].trim()) { + case '# description #': + t_description = curLineItems[1].trim(); + break; + + case '# playserver #': + t_playserver = curLineItems[1].trim(); + break; + + case '# playchannel #': + t_playchannel = curLineItems[1].trim(); + break; + + case '# playlayer #': + t_playlayer = curLineItems[1].trim(); + break; + + case '# webplayout #': + t_webplayout = curLineItems[1].trim(); + break; + + case '# out #': + t_out = curLineItems[1].trim(); + break; + + case '# uicolor #': + t_uicolor = curLineItems[1].trim(); + break; + + case '# onair #': + t_onair = curLineItems[1].trim(); + break; + + case '# dataformat #': + t_dataformat = curLineItems[1].trim(); + break; + + case '# relpath #': + t_relpath = curLineItems[1].trim(); + break; + + case '# graphicPath #': + t_graphicPath = curLineItems[1].trim(); + break; + + case '# version #': + t_version = curLineItems[1].trim(); + break; + + case '# id #': + t_id = curLineItems[1].trim(); + break; + + case '# project #': + t_project = curLineItems[1].trim(); + break; + + case '# rundown #': + t_rundown = curLineItems[1].trim(); + break; + + + case '# FieldUUIDs #': + // this line carries f-field ids (f0, f1, etc) + // and will generate required objects + fieldsFound = true; + for (let uuidindex = 1; uuidindex < curLineItems.length - 1; uuidindex++) { + protoFields.push(curLineItems[uuidindex].trim()); + } + break; + + case '# FieldTypes #': + for (let typeindex = 1; typeindex < curLineItems.length - 1; typeindex++) { + let thisFieldType = curLineItems[typeindex].trim() + protoFtypes.push(thisFieldType) + } + break; + + case '# FieldTitls #': + for (let titindex = 1; titindex < curLineItems.length - 1; titindex++) { + protoTitles.push(curLineItems[titindex].trim()) + } + break; + + case '# Fieldfcalls #': + for (let fcallsindex = 1; fcallsindex < curLineItems.length - 1; fcallsindex++) { + protoFcalls.push(curLineItems[fcallsindex].trim()) + } + } // switch line type + }); // for each line METADATA done + + + // Then iterate all CONTENT LINES and append template to OBJ array + var templateData + csvLines.forEach((line, loopIndex) => { + if (line.trim() === '') { return; } // empty line + curLineItems = line.split(';') + templateData = {} + templateData.DataFields = [] + + if (line.startsWith('# ID:')) { + + fieldIndex++; // template counter for GUI message + + for (let index = 1; index < curLineItems.length - 1; index++) { + protoValues.push(curLineItems[index].trim()) + } + + // generate ID + if (line.startsWith('# ID:auto')) { + // generate EPOCH + templateData.itemID = startSeconds + loopIndex + } else { + // use the given value + templateData.itemID = curLineItems[0].trim().replace('# ID:', '').trim() + } + + templateData.description = t_description + templateData.playserver = t_playserver + templateData.playchannel = t_playchannel + templateData.playlayer = t_playlayer + templateData.webplayout = t_webplayout + templateData.out = t_out + templateData.uicolor = t_uicolor + templateData.onair = t_onair + templateData.dataformat = t_dataformat + templateData.relpath = t_relpath + // If ograf, then add ograf properties + if (t_graphicPath && t_version && t_id) { + templateData.ografProps = {} + templateData.ografProps.graphicPath = t_graphicPath + templateData.ografProps.version = t_version + templateData.ografProps.id = t_id + } + + // Append warning + templateData.DataFields.push({ + ftype: "instruction", + value: "⚠ WARNING: This item was generated with CSV import and typically is not intended for manual editing. Please use the original template for manual input." + }); + + // Then iterate all fields and assing values + for (let i = 0; i < protoFields.length; i++) { + dataFiProto = {} + dataFiProto.field = protoFields[i] + if (protoFtypes[i] == 'textarea') { + dataFiProto.ftype = 'textarea' // for multiline texts + } else if (protoFtypes[i] == 'button') { + dataFiProto.ftype = 'button' + dataFiProto.fcall = protoFcalls[i] + } else if (protoFtypes[i] == 'checkbox') + dataFiProto.ftype = 'checkbox' + else { + dataFiProto.ftype = 'textfield' // protoFtypes[i] !forced! + } + // dataFiProto.ftype = "textfield" // protoFtypes[i] !forced! + dataFiProto.title = protoTitles[i] + if (curLineItems[i + 1].length > 0) { + dataFiProto.value = curLineItems[i + 1].replace(/
/g, '\n') // add newlines back + } + templateData.DataFields.push(dataFiProto); + } + rundownDataJSONobj.templates.push(templateData) + } // content line process ended + }); + + // saving new items to disk + rundownDataJSONobj.project = t_project; // Added in 1.3.2 + rundownDataJSONobj.rundown = t_rundown; // Added in 1.3.2 + global.rundownData = rundownDataJSONobj; + await SaveRundownDataToDisc(data.RundownFile) // Bug fixed in 1.3.2 + if (fieldsFound) { + res.redirect('/gc/' + data.foldername + '/' + data.filebasename + '?msg=Added ' + fieldIndex + ' templates.'); + break; + } else { + res.redirect('/gc/' + data.foldername + '/' + data.filebasename + '?msg=invalidCSV'); + } + } catch (error) { + logger.error('importCSVdata Error: ', error); + } + + break; + + case 'addAllItemsToRundown': + // ADD ALL TEMPLATES TO RUNDOWN /// Added in 1.2.0 + try { + logger.verbose('Adding all show profile templates to rundown ' + data.listname); + showprofile = path.join(config.general.dataroot, data.foldername, 'profile.json'); + profileDataJSONobj = await GetJsonData(showprofile); + let ProfileTemplatesArray = profileDataJSONobj.templates || []; + + ProfileTemplatesArray.forEach((template, index) => { + template.itemID = String(Date.now() + index); // generate EPOCH for each template + }); + + rundownDataJSONobj = await GetJsonData(data.datafile); + rundownDataJSONobj.projectFormat = profileDataJSONobj.projectFormat; + if (!rundownDataJSONobj.templates) { + rundownDataJSONobj.templates = ProfileTemplatesArray; + } else { + rundownDataJSONobj.templates = rundownDataJSONobj.templates.concat(ProfileTemplatesArray); + } + await spx.writeFile(data.datafile, rundownDataJSONobj); + res.redirect('/gc/' + data.foldername + '/' + data.listname); + return; + } catch (error) { + logger.error('addAllItemsToRundown Error while saving file: ', error); + }; //file written + break; + + case 'addItemToRundown': + // ADD TEMPLATE ITEM TO RUNDOWN /////// + try { + logger.verbose('Adding show profile template[' + data.templateindex + '] to rundown ' + data.listname); + showprofile = path.join(config.general.dataroot, data.foldername, 'profile.json'); + profileDataJSONobj = await GetJsonData(showprofile); + let TemplateModel = profileDataJSONobj.templates[data.templateindex]; + TemplateModel.itemID = String(Date.now()); // Generate ID (epoch milliseconds) for this rundown item (from v. 0.9.8 onwards) + // This will be used to control UI (play, remove, sort, etc...) + rundownDataJSONobj = await GetJsonData(data.datafile); + if (!rundownDataJSONobj.templates) { + rundownDataJSONobj.templates = []; + } + rundownDataJSONobj.templates.push(TemplateModel); + rundownDataJSONobj.projectFormat = profileDataJSONobj.projectFormat; + + await spx.writeFile(data.datafile, rundownDataJSONobj); + res.redirect('/gc/' + data.foldername + '/' + data.listname); + return; + } catch (error) { + logger.error('addItemToRundown Error while saving file: ', error); + // console.log('addItemToRundown Error while saving file: ', error); + }; //file written + + case 'removeItemFromRundown': + // REMOVE TEMPLATE ITEM FROM RUNDOWN (without reloading page) /////////////////////////////////////////////////////////////////////////// + logger.verbose('Removing template epoch [' + data.epoch + '] from rundown ' + data.listname); + rundownDataJSONobj = await GetJsonData(data.datafile); + rundownDataJSONobj = spx.RemoveFilepathKey(rundownDataJSONobj); // Added in 1.3.0 + let templateIndex = -1; + rundownDataJSONobj.templates.forEach((template, index) => { + if (template.itemID == data.epoch) { + templateIndex = index; + } + // + }); + + if (templateIndex > -1) { + rundownDataJSONobj.templates.splice(templateIndex, 1); + } + + try { + rundownDataJSONobj = await spx.appendProjectFile(rundownDataJSONobj, data.datafile, "from gc/removeItemFromRundown"); + global.rundownData = rundownDataJSONobj; + await spx.writeFile(data.datafile, rundownDataJSONobj); + res.status(200).send('Item removed ok.'); // ok 200 AJAX RESPONSE + return; + } catch (error) { + logger.error('removeItemFromRundown Error while saving file: ', error); + // console.log('removeItemFromRundown Error while saving file: ', error); + }; //file written + break; + + case 'duplicateRundownItem': + // CLONE TEMPLATE ITEM ON RUNDOWN (without reloading page) /////////////////////////////////////////////////////////////////////////// + + let freshID = data.cloneEpoch; + var newItemData = ""; + var duplicateData = ""; + var duplicated = false; + + logger.verbose('Cloning item [' + data.sourceEpoch + '] to [' + freshID + '] in file [' + data.listname + '].'); + rundownDataJSONobj = await GetJsonData(data.datafile); + + var NewTemplateArray = []; + for (var i = 0; i < rundownDataJSONobj.templates.length; i++) { + NewTemplateArray.push(rundownDataJSONobj.templates[i]); + let duplicateData = JSON.parse(JSON.stringify(rundownDataJSONobj.templates[i])); // copy values and NOT a reference! Sheeeeeet!!! + duplicateData.itemID = freshID; + duplicateData.onair = 'false'; + if (rundownDataJSONobj.templates[i].itemID == data.sourceEpoch && !duplicated) { + // console.log('Yes, found ID ' + rundownDataJSONobj.templates[i].itemID + ' which gets duplicated once.'); + // console.log('Copy', duplicateData); + NewTemplateArray.push(duplicateData); + global.rundownData.templates.push(duplicateData); // Fixed "duplicate play issue" in 1.1.1 + duplicated = true; + } + } + rundownDataJSONobj.templates = NewTemplateArray; + // console.log('Saving new data ', rundownDataJSONobj.templates); + + try { + await spx.writeFile(data.datafile, rundownDataJSONobj); + res.status(200).send('Item duplicated ok.'); // ok 200 AJAX RESPONSE + return; + } catch (error) { + logger.error('duplicateRundownItem Error while saving file: ', error); + // console.log('duplicateRundownItem Error while saving file: ', error); + }; //file written + break; + + case 'saveRundownItemModifications': + // SAVE CHANGES MADE TO A SINGLE RUNDOWN ITEM ///////////////////////////////////////////////////////////////////////////////////////// + // Not in use, see --> /gc/saveItemChanges + break; + + default: + logger.warn('Warning: unknown gc-post command: ' + data.command); + break; + } +}); // gc post end + +router.post('/gc/playout', spxAuth.CheckLogin, async (req, res) => { + // Request: data object (command, datafile, templateIndex) + // Returns: AJAX response + // + // Handles playout commands of the rundown items in the controller. + // This function will collect data from datafile and will send out "stupid" + // playout commands to all needed renderer interfaces. + // + // This will also persist the onair state to rundown file. + // + // 1.0.15 Performance improvements added by prioritizing memory usage over + // disk I/O. Problem was with concurrent events. Now this is done + // in memory and data is written to disk only when we SHOW folders + // after being in the rundown view (so memory has been populated). + // + // 1.3.0 MAJOR BUG FIXED! If rundown was populated to memory it was used + // when controlRundownItemByID API call was made. This caused the + // rundown to be read from memory data and not actual rundown file + // that was requested. Now a new forceFileRead parameter is added. + // + // console.log('Playout command received.', req.body); + + + let templateIndex = -1; // was 0 + try { + let dataOut = {}; // new object + if (req.body.command == 'customAction') { + dataOut.spxcmd = 'customAction' + dataOut.id = req.body.id + dataOut.webplayout = req.body.webplayout + PlayoutWEB.webPlayoutController(dataOut) + return + } + + + dataOut.fields = []; // init it with an empty arr as placeholder + let RundownData = "" // file JSON + let preventSave = false; + let forceDiskRead = req.body.forceFileReadOnce ? true : false; // Added in 1.3.0. Read Release Notes! + let cacheRundownData = null; // Added in 1.3.0 + let autoOutTimerID = null; // Added in 1.3.0 + let itemID = null; // Added in 1.3.2 + let RundownFile = path.normalize(req.body?.datafile || '') // file reference (in a normal call) + let ItemData = {}; // Modified in 1.3.2 + + if (req.body?.updateRundownItem?.persist) { + let project = req.body?.updateRundownItem?.project || ''; + let rundown = req.body?.updateRundownItem?.rundown || ''; + RundownFile = path.resolve(spx.getDatarootFolder(), project, 'data', rundown + '.json'); + } + + // console.log('RundownFile', RundownFile); + // console.log('Body', req.body); + + let skipJSONRead = true; + if (req.body?.prepopulated != "true") { skipJSONRead = false; } + if (req.body?.updateRundownItem?.persist) { skipJSONRead = false; } + + if (skipJSONRead) { + // data in pre-generated coming in. So we can just pass that along. + logger.verbose('Playout command prepopulated [' + req.body.command + '] template [' + req.body.relpath + '].'); + dataOut = req.body; + if (req.body.command != 'invoke' && req.body.command != 'stop') { // added stop in 1.1.4 + dataOut.relpathCCG = req.body.relpath.split('.htm')[0]; // casparCG needs template path without extension + } + preventSave = true; + // console.log('IF', dataOut); + } else { + // Normal method of working (or when using directplayout persist request) + // We collect data from rundown first. + itemID = req.body?.epoch || req.body?.updateRundownItem?.itemID || ''; + logger.verbose('Playout command [' + req.body.command + '] item [' + itemID + '] of [' + RundownFile + '].'); + + // Refactored in 1.0.15 to prioritize memory over disk I/O + // 1.3.0 added forceDiskRead parameter to use when API call is made. + let notifyDataSource = '' + if (Object.keys(global.rundownData).length === 0 || forceDiskRead) { + if (Object.keys(global.rundownData).length > 0) { + cacheRundownData = global.rundownData; // cache it + } + notifyDataSource = 'from file:' + RundownData = await GetJsonData(RundownFile); + } else { + notifyDataSource = 'from memory:' + RundownData = global.rundownData; // use memory only + } + let projectFormat = RundownData.projectFormat || 'SPX'; + + RundownData.templates.forEach((template, index) => { + logger.debug('Matching ' + index + ': [' + template.itemID + '] (' + template.description + ') and [' + itemID + ']'); + if (template.itemID == itemID) { + templateIndex = index; + } + }); + + if (templateIndex == -1) { + throw 'Requested itemID [' + itemID + '] not found on the rundown [' + RundownFile + ']! Aborting ' + req.body.command + ' command.'; + } + + ItemData = RundownData.templates[templateIndex]; + + dataOut.ografProps = ItemData.ografProps; // OGRAF Support + dataOut.projectFormat = projectFormat; // OGRAF Support + dataOut.graphicPath = ItemData.graphicPath; // OGRAF Support + + dataOut.relpath = ItemData.relpath; + dataOut.relpathCCG = ItemData.relpath.split('.htm')[0]; // casparCG needs template path without htm/html -extension. + dataOut.playserver = ItemData.playserver; + dataOut.playchannel = ItemData.playchannel; + dataOut.playlayer = ItemData.playlayer; + dataOut.webplayout = ItemData.webplayout; + dataOut.out = ItemData.out; // 1.3.0 only used with direct API calls + dataOut.dataformat = ItemData.dataformat || 'json'; // Changed to JSON in 1.3.0 + ItemData.DataFields.forEach(item => { + // We pass data as custom JSON format and the format is changed + // downstream in the playout controller as per renderer's needs. + let FieldItem = {}; + if (item.field) { + FieldItem.field = item.field; + if (item.value) { // TODO: bug alert (&& item.field.value) check if there IS value to begin with. Added 29.01.2021 + FieldItem.value = spx.cleanUpString(item.value); // Added in 1.3.2 + } + dataOut.fields.push(FieldItem); + } + }); + dataOut.fields.push({ 'field': 'epochID', 'value': itemID }); + } // else (ie read from JSON) + + let playOutCommand = ""; + if (req.body.command == 'playonce') { + playOutCommand = "play"; + preventSave = true; + logger.verbose('Note playonce command received, preventSave = true'); + } else { + playOutCommand = req.body.command; + } + + + // Added in 1.3.2 if directplayout is used, we need to + // update incoming data with the itemID. + // If data from API, then override + if (req.body?.updateRundownItem?.persist) { + let overrideTemplateIndex = -1; + RundownData.templates.forEach((template, index) => { + if (template.itemID == req.body.updateRundownItem.itemID) { + // console.log('Template FOUND', index, template.description); + overrideTemplateIndex = index; + template.DataFields.forEach((templateField, dfIndex) => { + // console.log('templateField', dfIndex) + req.body.fields.forEach((dataField, daIndex) => { + // note, "fields" not "DataFields" + // console.log('.....dataField', daIndex) + if (templateField.field == dataField.field) { + RundownData.templates[overrideTemplateIndex].DataFields[dfIndex].value = dataField.value; + } + }); + }) + } + }); + dataOut = req.body; // override data for rendering + } + + + // console.log('RundownData after mods', RundownData.templates[templateIndex]); + + + + switch (playOutCommand) { + + // == PREVIEW =================================================== + case 'preview': + + // Send PlayoutWEB.functionCalls() if any --------------------- + if (dataOut.webplayout != '-' && config.general.preview != 'none') { + dataOut.webplayout = '1'; // force to layer 1! Changed to string in 1.0.15 + logger.verbose('Webplayout PREVIEW: ' + dataOut.webplayout); + dataOut.playmode = 'preview'; + dataOut.spxcmd = 'playTemplate'; + PlayoutWEB.webPlayoutController(dataOut); + } else { + logger.verbose('No Webplayout playout'); + } + break; + + // == AUTOPLAY ================================================== + case 'autoPlayLocal': + // Update local renderer when a rundown is reloaded + logger.verbose('Webplayout autoPlayLocal: ' + dataOut.webplayout); + dataOut.spxcmd = 'playTemplate'; + dataOut.modify = 'autoPlayLocal'; + PlayoutWEB.webPlayoutController(dataOut); + break; + + // == PLAY ===================================================== + case 'play': + let playingSomewhere = false; // Added in 1.3.0 + + + // console.log('DataOut', dataOut); + + + // Send PlayoutCCG.functionCalls() if any --------------------- + if (dataOut.playserver && dataOut.playserver != '-' && spx.CCGServersConfigured) { // 1.1.3 added dataOut.playserver + dataOut.command = "ADD"; + logger.verbose('CasparCG play: [' + dataOut.relpathCCG + '] ' + dataOut.playserver + '/' + dataOut.playchannel + '-' + dataOut.playlayer); + playingSomewhere = true; + PlayoutCCG.playoutController(dataOut); + } else { + logger.verbose('No CasparCG playout'); + } + + // Send PlayoutWEB.functionCalls() if any --------------------- + if (dataOut.webplayout && dataOut.webplayout != '-') { + logger.verbose('Webplayout PLAY: ' + dataOut.webplayout); + dataOut.spxcmd = 'playTemplate'; + playingSomewhere = true; + PlayoutWEB.webPlayoutController(dataOut); + } else { + logger.warn('No Webplayout playout layer given'); + } + + // iterate all templates and allow only the latest update + // (for same playout) to be on-air at once + if (RundownData.templates) { + // prepopulated does not necessarily have "templates" + RundownData.templates.forEach((item, index) => { + let thisOnair = item.onair || ''; + let thisServer = item.playserver || '-'; + let thisChannel = item.playchannel || '1'; + let thisLayer = item.playlayer || '1'; + let thisWeb = item.webplayout || '-'; + let thisOutput = thisServer.trim() + thisChannel.trim() + thisLayer.trim() + thisWeb.trim() + thisOnair.trim(); + + let dataOnair = 'true' // because we are in play; + let dataServer = dataOut.playserver || '-'; + let dataChannel = dataOut.playchannel || '1'; + let dataLayer = dataOut.playlayer || '1'; + let dataWeb = dataOut.webplayout || '-'; + let dataOutput = dataServer.trim() + dataChannel.trim() + dataLayer.trim() + dataWeb.trim() + dataOnair.trim(); + + if (index != templateIndex && thisOutput == dataOutput) { + RundownData.templates[index].onair = 'false'; + } + + if (index == templateIndex && playingSomewhere) { + RundownData.templates[index].onair = 'true'; + } + }); + } + + // API Call executed. Should we set an autostop? + if (forceDiskRead || req.body.referrer == 'directplayout') { + let numeric = parseInt(dataOut.out); + if (isNaN(numeric)) { + logger.verbose('API call: out was not a number, skipping autostop.'); + } else { + logger.verbose('API call: autostop item in ' + numeric + ' ms.'); + autoOutTimerID = setTimeout(function () { + playoutSTOP(dataOut, templateIndex, RundownData); + }, numeric); + } + } + break; + + // == NEXT / aka CONTINUE ===================================== + case 'next': + + if (dataOut.playserver != '-' || dataOut.webplayout != '-') { + RundownData.templates[templateIndex].onair = 'true'; + } + + // Send PlayoutCCG.functionCalls() if any --------------------- + if (dataOut.playserver != '-') { + dataOut.command = "NEXT"; + logger.verbose('CasparCG next: [' + dataOut.relpathCCG + '] ' + dataOut.playserver + '/' + dataOut.playchannel + '-' + dataOut.playlayer); + PlayoutCCG.playoutController(dataOut); + } else { + logger.verbose('No CasparCG playout'); + } + + // Send PlayoutWEB.functionCalls() if any --------------------- + if (dataOut.webplayout != '-') { + logger.verbose('Webplayout NEXT: ' + dataOut.webplayout); + dataOut.spxcmd = 'nextTemplate'; + PlayoutWEB.webPlayoutController(dataOut); // refactored 20.08.2020 (note, this function handles all play, stop, next, update commands) + // io.emit('SPXMessage2Client', dataOut); + } else { + logger.verbose('No Webplayout playout'); + } + break; + + // == STOP =================================================== + case 'stop': + await playoutSTOP(dataOut); + if (templateIndex > -1 && RundownData.templates[templateIndex]) { + // Added check in 1.3.0 + RundownData.templates[templateIndex].onair = 'false'; + } + break; + + // == UPDATE =================================================== + case 'update': + logger.verbose('Updating [' + dataOut.relpath + ']'); + // RundownData.templates[templateIndex].onair='true'; // yes. no? + + if (dataOut.playserver != '-') { + // TODO: Update functions not deeply properly tested. + dataOut.command = "UPDATE"; + logger.verbose('CasparCG update: [' + dataOut.relpathCCG + '] ' + dataOut.playserver + '/' + dataOut.playchannel + '-' + dataOut.playlayer + ', dataOut: ', dataOut); + PlayoutCCG.playoutController(dataOut); + } else { + logger.verbose('No CasparCG playout'); + } + + // Send PlayoutWEB.functionCalls() if any + if (dataOut.webplayout != '-') { + logger.verbose('Webplayout UPDATE: ' + dataOut.webplayout); + dataOut.spxcmd = 'updateTemplate'; + dataOut.fields = req.body.fields; + PlayoutWEB.webPlayoutController(dataOut); + } else { + logger.verbose('No Webplayout playout'); + } + break; + + // == INVOKE =================================================== + case 'invoke': + logger.verbose('Invoke [' + dataOut.invoke + ']'); + // Example of expected dataOut down stream from here: + // dataOut.command = "invoke" + // dataOut.invoke = "myTemplateFunction('hello world')" + if (dataOut.playserver != '-') { + dataOut.command = "INVOKE"; + PlayoutCCG.playoutController(dataOut); + } + + if (dataOut.webplayout != '-') { + dataOut.spxcmd = 'invokeFunction'; + PlayoutWEB.webPlayoutController(dataOut); + } // if web + break; + + default: + logger.warn('/gc/playout did not recognize command "' + playOutCommand + '".'); + break; + } + + // Added in 1.3.2 / updateRundownItem in the UI if set + if (req.body?.updateRundownItem?.updateUI) { + logger.verbose('API call: updateRundownItem in the UI.'); + io.emit('SPXMessage2Client', { + spxcmd: 'updateRundownItem', + itemID: req.body.updateRundownItem.itemID, + relpath: dataOut.relpath, + command: playOutCommand + }); + } + + // persist to memory and to disk + RundownData.updated = new Date().toISOString(); + RundownData = await spx.appendProjectFile(RundownData, RundownFile, "from gc/playout"); + global.rundownData = RundownData // memory only + if (playOutCommand == 'play' || playOutCommand == 'stop') { + + if (req.body?.updateRundownItem?.persist) { + preventSave = false; + } + + if (preventSave) { + logger.verbose('preventSave enabled, no need to persist to disk.'); + } else { + logger.verbose('Persisting rundown data to disk....'); + await spx.writeFile(RundownFile, RundownData); + } + } + + // Added in 1.3.0 / Restore cache (after an API call) + if (cacheRundownData) { + logger.verbose('Restoring rundown data to memory after an API call.'); + global.rundownData = cacheRundownData; // restore it + } + + // Check if file exists. Function improved in 1.1.3 + if (dataOut.relpath) { + let templateAbsPath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', dataOut.relpath); + if (!fs.existsSync(templateAbsPath)) { + throw (playOutCommand + ' warning! Template not found: ' + dataOut.relpath); + } + } + + + + + res.status(200).send(); // ok 200 AJAX RESPONSE + } // end try + catch (error) { + console.error('ERROR in /gc/playout', error); + logger.error('ERROR in /gc/playout. ' + error); + res.status(500).send('Error in /gc/playout: ' + error) // error 500 AJAX RESPONSE + }; +}); // playout ended + + +router.post('/gc/playaudio', spxAuth.CheckLogin, (req, res) => { + // handle incoming sound fx requests + // TODO: Enable this playaudio ajax call for template based audio triggers! + try { + logger.info('gc/playaudio ' + req.body.sound + ', ' + req.body.info, null, 4); + spx.playAudio(req.body.sound, req.body.info); + res.status(200).send('Playaudio command processed.'); // ok 200 AJAX RESPONSE + } catch (error) { + logger.error('ERROR, unable to send playaudio command. Server up? ' + error) + res.status(500).send('Server error in /gc/playaudio [' + error + '].') // error 500 AJAX RESPONSE + } +}); // playaudio ended + + +router.post('/gc/controlvideo', spxAuth.CheckLogin, async (req, res) => { + try { + // handle video commands + logger.debug('Forwarding command to PlayoutCCG.VideoPlayerController'); + PlayoutCCG.VideoPlayerController(req.body); + res.status(200).send('All ok'); // ok 200 AJAX RESPONSE + } catch (error) { + logger.error('Server error in /gc/controlvideo. Server up? ' + error) + res.status(500).send('Server error in /gc/controlvideo: ' + error); // error 500 AJAX RESPONSE + } +}); // control ended + + +router.post('/gc/clearPlayouts', spxAuth.CheckLogin, async (req, res) => { + // Slightly improved in v.1.0.12 + try { + logger.verbose('Clearing all layers'); + res.status(200).send('Graphics clear requests sent') // ok 200 AJAX RESPONSE + + // Clear Webplayout --------------------------- + io.emit('SPXMessage2Client', { spxcmd: 'clearAllLayers' }); // clear webrenderers + io.emit('SPXMessage2Controller', { APIcmd: 'RundownAllStatesToStopped' }); // stop UI and save stopped values to rundown + + // Change all items to offair on the playlist file + let RundownFile = path.normalize(req.body.datafile); + let RundownData = await GetJsonData(RundownFile); + RundownData.templates.forEach((item, index) => { + item.onair = "false" + }); + RundownData.updated = new Date().toISOString(); + await spx.writeFile(RundownFile, RundownData); + + // Clear CasparCG ------------------- + if (!spx.CCGServersConfigured) { return } // exit early, no need to do any CasparCG work + PlayoutCCG.clearChannelsFromGCServer(req.body.server) // server is optional + } + catch (error) { + logger.error('Error in gc/clearPlayouts while clearing channels. [' + error + '].'); + res.status(500).send('SPX error in gc/clearPlayouts [' + error + '].') // error 500 AJAX RESPONSE + }; + +}); // clearPlayouts ended + + +router.post('/gc/sortTemplates', spxAuth.CheckLogin, async (req, res) => { + // Handles modification changes of a template in the rundown. + // Request: data with newTemplateOrderArr -array (of epochs) + // Returns: AJAX response + logger.verbose('Sorting templates in ' + req.body.rundownfile + ' to ' + req.body.newTemplateOrderArr); + try { + let RundownFile = path.normalize(req.body.rundownfile); + let RundownData = await GetJsonData(RundownFile); + let TempArr = []; + req.body.newTemplateOrderArr.forEach(function (sortedID, sortIndex) { + RundownData.templates.forEach(function (template, templateIndex) { + if (template.itemID === sortedID) { + logger.debug("Sorting. Saving to position " + templateIndex + " itemID " + sortedID); + TempArr.push(template); + } + }) + + }); + RundownData.templates = TempArr; + RundownData.updated = new Date().toISOString(); + await spx.writeFile(RundownFile, RundownData); + global.rundownData = RundownData; // Added in 1.1.2 + res.status(200).send('Rundown sorting saved.'); // ok 200 AJAX RESPONSE + } + catch (error) { + logger.error('Error in /gc/sortTemplates while sorting data. [' + error + '].'); + res.status(500).send('Server error in /gc/sortTemplates [' + error + '].') // error 500 AJAX RESPONSE + }; +}); // sortTemplates ended + + +router.post('/gc/duplicateRundown', spxAuth.CheckLogin, async (req, res) => { + // Create a duplicate + // Request: data obj + let foldname = req.body.foldname; + let filename = req.body.filename; + let filerefe = path.normalize(path.join(config.general.dataroot, foldname, 'data', filename)); + try { + spx.duplicateFile(filerefe, ' copy'); + res.status(200).send('Item duplicated.'); // ok 200 AJAX RESPONSE + } catch (error) { + let errmsg = 'Server error in /gc/duplicateRundown [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + } +}); // duplicateRundown ended + + +router.post('/gc/renameRundown', spxAuth.CheckLogin, async (req, res) => { + // Rename a rundown file + // Request: data obj + let foldnam = req.body.foldnam; + let orgname = req.body.orgname; + let newname = req.body.newname; + let fileref = path.normalize(path.join(config.general.dataroot, foldnam, 'data', orgname)); + try { + spx.renameRundown(fileref, newname); + res.status(200).send('Item renamed.'); // ok 200 AJAX RESPONSE + } catch (error) { + let errmsg = 'Server error in /gc/renameRundown [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + } +}); // renameRundown ended + + +router.post('/gc/saveConfigChanges', spxAuth.CheckLogin, async (req, res) => { + // Added in 1.1.0. Handles modification changes of given config items. + // Request: key / val pair as a data object. + // Returns: Ajax response + + logger.verbose('Overwriting config with updated values.'); + try { + var ConfigFile = global.configfileref; + var ConfigData = await GetJsonData(ConfigFile); + + let key = req.body.key || null; + let val = req.body.val; + + // Fixed in v1.3.0 (check truthiness) + if (key == null || val == null || val == undefined) { + throw 'Key [' + key + '] or a supported value [' + val + '] was missing from request, skipping config save.'; + } + + ConfigData.general[key] = val; + global.config = ConfigData; // update mem version also + await spx.writeFile(ConfigFile, ConfigData); + let response = ['Config changed'] + res.status(200).send(response); // ok 200 AJAX RESPONSE + } catch (error) { + console.error('ERROR', error); + let errmsg = 'Server error in /gc/saveConfigChanges [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + }; +}); // saveConfigChanges ended + + +router.post('/gc/saveItemChanges', spxAuth.CheckLogin, async (req, res) => { + // Handles modification changes of a template in the rundown. + // Request: form data as JSON + // Returns: Ajax response + logger.verbose('Overwriting a template itemID [' + req.body.epoch + '] in rundown [' + req.body.rundownfile + '] with updated values.'); + try { + // spx.talk('Saving template changes from rundown.'); + var RundownFile = path.normalize(req.body.rundownfile); + var RundownData = await GetJsonData(RundownFile); + RundownData = spx.RemoveFilepathKey(RundownData); // Added in 1.3.0 + var DataFieldsForCollapsePreview; + RundownData.templates.forEach((template, TemplateIdx) => { + if (template.itemID == req.body.epoch) { + req.body.DataFields.forEach(function (PostField) { + RundownData.templates[TemplateIdx].DataFields.forEach(function (JsonField) { + if (PostField.field == JsonField.field) { + JsonField.value = PostField.value; + } + }); + DataFieldsForCollapsePreview = RundownData.templates[TemplateIdx].DataFields; + }); + } + }); + global.rundownData = RundownData; // push to memory also for next take + await spx.writeFile(RundownFile, RundownData); + var htmlSnippetForCollapse = spx.generateCollapsedHeadline(DataFieldsForCollapsePreview); + let response = ['Item changes saved', htmlSnippetForCollapse] + res.status(200).send(response); // ok 200 AJAX RESPONSE + } catch (error) { + console.error('ERROR', error); + let errmsg = 'Server error in /gc/saveItemChanges [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + }; +}); // saveItemChanges ended + + + + +// FUNCTIONS -------------------------------------------------------------------------------------------------- + +// This functions is OGraf specific and handles ograf templates. +function addOgrafTemplateToProfile(profileData, TemplatePath, showFolder, curFolder, replaceIndex = null) { + // console.log("addOgrafTemplateToProfile called with TemplatePath:", TemplatePath); + if (replaceIndex) { + // when replacing, the path does not come with absolute path, must append + TemplatePath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', TemplatePath) + global.LastBrowsedTemplateFolder = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', curFolder); // Bugfix added in 1.1.1 + } else { + // we are adding (not re-importing) so this works + global.LastBrowsedTemplateFolder = curFolder; + } + + let rawJson = fs.readFileSync(TemplatePath, 'utf8'); + let ografJson = JSON.parse(rawJson); + + + // Convert schema.properties to DataFields + const properties = ografJson.schema?.properties || {}; + const DataFields = Object.entries(properties).map(([key, prop]) => { + let ftype = null; + + let dataProps = { + field: key, + ftype: 'textfield', // default type + value: prop.default || '', + title: prop.title || key + } + + if (prop.v_spx) { + // SPX VENDOR TYPES + dataProps.ftype = prop.v_spx.ftype; + + switch (dataProps.ftype.toLowerCase()) { + case 'instruction': + break; + + case 'dropdown': + dataProps.items = prop.v_spx.items || []; + break; + + case 'textarea': + break; + + case 'divider': + break; + + case 'filelist': + dataProps.assetfolder = prop.v_spx.assetfolder || '/media/images/'; + dataProps.extension = prop.v_spx.extension || 'png'; + break; + + case 'number': + break; + + case 'checkbox': + break; + + case 'button': + dataProps.fcall = prop.v_spx.fcall; + break; + + case 'spacer': + break; + + case 'color': + break; + + case 'plugin': + dataProps.plugin = prop.v_spx.fcall || 'UnknownFolder'; + dataProps.title = prop.v_spx.title || 'Extension'; + dataProps.descr = prop.v_spx.descr || 'Info'; + dataProps.value = prop.v_spx.value || 'alert'; + break; + } // end spx switch + } else { + // OGRAF TYPE CONVERSIONS TO SPX + switch (prop.type.toLowerCase()) { + case 'boolean': + dataProps.ftype = 'checkbox'; + dataProps.value = prop.default ? "1" : "0"; + break; + + case 'number': + dataProps.ftype = 'number'; + break; + + default: + dataProps.ftype = 'textfield'; + } // end ograf switch + } + + return dataProps; + }); + if (ografJson.customActions) { + let webplayout = ografJson.v_spx?.webplayout || "1" + ografJson.customActions.forEach((index) => { + DataFields.push({ + field: index.id, + ftype: "button", + title: index.name || index.id, + fcall: `customActionHandler('${index.id}', '${webplayout}')` + }) + }) + } + + const SPXGCTemplateDefinition = { + description: ografJson.description || '', + DataFields: DataFields, + steps: ografJson.stepCount || 1, + playserver: ografJson.v_spx?.playserver || "OVERLAY", + playchannel: ografJson.v_spx?.playchannel || "1", + playlayer: spx.max5(ografJson.v_spx?.playlayer) || "1", + webplayout: spx.max5(ografJson.v_spx?.webplayout) || "1", + out: ografJson.v_spx?.out || "manual", + uicolor: ografJson.v_spx?.uicolor || "0", + ografProps: { + id: ografJson.id, + version: ografJson.version, + }, + imported: String(Date.now()) + }; + + if (!SPXGCTemplateDefinition.DataFields || SPXGCTemplateDefinition.DataFields.length === 0) { + let emptyData = {} + emptyData.ftype = 'instruction' + emptyData.value = 'No editable fields' + SPXGCTemplateDefinition.DataFields = [emptyData]; + } + + let absPath = TemplatePath.split("\\").join("/"); + let templateRootPath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates'); + let tmpRoot = templateRootPath.split("\\").join("/"); + let relpath = absPath.split(tmpRoot)[1]; + SPXGCTemplateDefinition.relpath = relpath; + + if (relpath && relpath.match(/\/[^\/]+\.ograf\.json$/)) { + relpath = relpath.replace(/\/[^\/]+\.ograf\.json$/, ''); + } + graphicPath = relpath + '/' + ografJson.main; + SPXGCTemplateDefinition.ografProps.graphicPath = graphicPath; + + if (profileData.templates) { + if (replaceIndex) { + profileData.templates[replaceIndex] = SPXGCTemplateDefinition; + } else { + profileData.templates.push(SPXGCTemplateDefinition); + } + } else { + profileData.templates = [SPXGCTemplateDefinition]; + } + + return profileData; +} + +function addTemplateToProfile(profileData, TemplatePath, showFolder, curFolder, replaceIndex = null) { + if (TemplatePath.toLowerCase().endsWith(".ograf.json")) { + profileData = addOgrafTemplateToProfile(profileData, TemplatePath, showFolder, curFolder, replaceIndex); + return profileData; + } + + let SPXGCTemplateDefinition = null; + let gddDefinition = null; // Graphics Data Definition + let spxDefinition = null; // SPX Template Definition + + if (replaceIndex) { + TemplatePath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', TemplatePath) + global.LastBrowsedTemplateFolder = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', curFolder); // Bugfix added in 1.1.1 + } else { + global.LastBrowsedTemplateFolder = curFolder; + } + + logger.verbose('Added template: ' + TemplatePath); + let templateContents = fs.readFileSync(TemplatePath, "utf8") + let templatehtml = templateContents.toString(); + + let importMessage = '\n\n- SPX TEMPLATE IMPORT NOTIFICATION --------------------------------\n'; + importMessage += ' Potential errors below this notification are from the template:\n'; + importMessage += ' ' + TemplatePath + '\n\n'; + importMessage += ' onLoad() or other root functions in the template MAY yield errors\n'; + importMessage += ' or other messages during import and these can usually be ignored\n'; + importMessage += ' safely. For more info search SPX KnowledgeBase for "Import errors".\n'; + importMessage += '-------------------------------------------------------------------\n'; + console.log(importMessage) + const dom = new JSDOM(templatehtml, { runScripts: "dangerously" }); + SPXGCTemplateDefinition = dom.window.SPXGCTemplateDefinition; // Mandatory! + + if (!SPXGCTemplateDefinition.description) { SPXGCTemplateDefinition.description = "" }; + if (!SPXGCTemplateDefinition.playserver) { SPXGCTemplateDefinition.playserver = "-" }; + if (!SPXGCTemplateDefinition.playchannel) { SPXGCTemplateDefinition.playchannel = "1" }; + if (!SPXGCTemplateDefinition.playlayer) { SPXGCTemplateDefinition.playlayer = "5" }; + if (!SPXGCTemplateDefinition.webplayout) { SPXGCTemplateDefinition.webplayout = "5" }; + if (!SPXGCTemplateDefinition.onair) { SPXGCTemplateDefinition.onair = "false" }; + if (!SPXGCTemplateDefinition.out) { SPXGCTemplateDefinition.out = "manual" }; + if (!SPXGCTemplateDefinition.dataformat) { SPXGCTemplateDefinition.dataformat = "json" }; + if (!SPXGCTemplateDefinition.uicolor) { SPXGCTemplateDefinition.uicolor = "0" }; + if (!SPXGCTemplateDefinition.webplayout) { SPXGCTemplateDefinition.webplayout = "5" }; + if (!SPXGCTemplateDefinition.playlayer) { SPXGCTemplateDefinition.playlayer = "5" }; + + if (parseInt(SPXGCTemplateDefinition.webplayout) > 5) { + SPXGCTemplateDefinition.webplayout = "5"; + } + + if (parseInt(SPXGCTemplateDefinition.playlayer) > 5) { + SPXGCTemplateDefinition.playlayer = "5"; + } + + SPXGCTemplateDefinition.imported = String(Date.now()); + + if (!SPXGCTemplateDefinition.DataFields || SPXGCTemplateDefinition.DataFields.length === 0) { + let emptyData = {} + emptyData.ftype = 'instruction' + emptyData.value = 'No editable fields' + SPXGCTemplateDefinition.DataFields = [emptyData]; + } + + let absPath = TemplatePath.split("\\").join("/"); + let templateRootPath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates'); + let tmpRoot = templateRootPath.split("\\").join("/"); + SPXGCTemplateDefinition.relpath = absPath.split(tmpRoot)[1]; + + if (profileData.templates) { + if (replaceIndex) { + profileData.templates[replaceIndex] = SPXGCTemplateDefinition; + } else { + profileData.templates.push(SPXGCTemplateDefinition); + } + } else { + profileData.templates = [SPXGCTemplateDefinition]; + } + + profileData.templates.forEach(function (template, index) { + template.DataFields.forEach(function (field, index) { + if (field.prvar) { + console.log('WIP - Found prvar in template field: ' + field.prvar); + if (!profileData.variables) { + profileData.variables = []; + } + // TODO: Bug here! This will overwrite existing variables with same name! + let foundOld = false; + profileData.variables.forEach(function (variable, index) { + if (variable.prvar === field.prvar) { + console.log('WIP - Found existing variable: ' + variable.prvar); + foundOld = true; + variable.ftype = field.ftype; + variable.title = field.title; + variable.value = field.value; + if (!variable.users.includes(template.relpath)) { + variable.users.push(template.relpath); + } + } + }) + + if (!foundOld) { + let varItem = {} + varItem.prvar = field.prvar; + varItem.ftype = field.ftype; + varItem.title = field.title; + varItem.value = field.value; + varItem.users = [template.relpath]; + profileData.variables.push(varItem); + } + } + }) + }) + return profileData; +} // addTemplateToProfile ended + + +async function orgGetDataFiles(FOLDERstr) { + logger.debug("Getting json files from " + FOLDERstr + "..."); + let FOLDER = path.normalize(FOLDERstr); + let jsonData = {}; + var key = 'files'; + jsonData.folder = FOLDER; + jsonData[key] = []; + let id = 0; + try { + fs.readdirSync(FOLDER).forEach(file => { + let bname = path.basename(file, '.json'); + logger.debug("Getting file " + bname + "..."); + let ext = path.extname(file).toUpperCase(); + if (ext == ".JSON") { + var stats = fs.statSync(path.join(FOLDER, file)); + var datem = moment(stats.mtime, 'DD.MM.YYYY').format(); + var filedata = { + id: id, + name: bname, + date: datem + }; + id++; + jsonData[key].push(filedata); + } + }); + return jsonData; + } + catch (error) { + logger.error('orgGetDataFiles / Failed to read folder ' + FOLDERstr + ': ' + error); + return (error); + } +} // orgGetDataFiles ended + + +async function SaveRundownDataToDisc(filepathFromCSVimport = false) { + try { + let targetRundownFile; + if (!global.rundownData) { + return + }; // no data to store + + if (Object.keys(global.rundownData).length > 0) { + let RundownData = global.rundownData + if (filepathFromCSVimport) { + targetRundownFile = filepathFromCSVimport; + } + + if (targetRundownFile) { + RundownData.updated = new Date().toISOString(); + RundownData = await spx.RemoveFilepathKey(RundownData); // Added in 1.3.0 + await spx.writeFile(targetRundownFile, RundownData); // 1.1.0 + } else { + logger.verbose('No targetRundownFile known, cannot save.'); + } + } else { + logger.verbose('No RundownData data yet in memory, nothing to save.'); + } + } catch (error) { + logger.error('SaveRundownDataToDisc Error: ' + error); + return ('SaveRundownDataToDisc: error', error); + } +} + + +async function GetTextFileData(fileref) { + try { + if (fs.existsSync(fileref)) { + var contents = fs.readFileSync(fileref, 'utf8') || ''; + logger.debug('GetTextFileData: returns data from [' + fileref + ']'); + return contents; + } + else { + logger.debug('GetTextFileData: file does not exist [' + fileref + '], returning empty string.'); + return ''; + } + + } + catch (error) { + logger.error('GetTextFileData Error: ' + error); + return ('GetTextFileData: error', error); + } +} // GetTextFileData ended + + +async function GetJsonData(fileref) { + try { + if (fs.existsSync(fileref)) { + var contents = fs.readFileSync(fileref, 'utf8') || ''; + logger.debug('GetJsonData: returns data from [' + fileref + ']'); + return JSON.parse(contents); + } + else { + logger.debug('GetJsonData: file does not exist [' + fileref + '], returning null.'); + return false; + } + + } + catch (error) { + let msg = 'GetJsonData error while reading ' + fileref + '. Invalid JSON format...? ' + error; + setTimeout(function () { + io.emit('SPXMessage2Controller', { + APIcmd: 'showMessageSlider', + msg: '
Invalid rundown file.
Please validate JSON data.
', + type: 'warn', + persist: true + }); + }, 1000); + + + logger.error(msg); + return (msg); + } +} // GetJsonData ended + + +async function playoutSTOP(dataOut) { + logger.verbose('Stopping [' + dataOut.relpath + ']'); + if (dataOut.playserver != '-') { + dataOut.command = "STOP"; + logger.verbose('CasparCG stop: [' + dataOut.relpathCCG + '] ' + dataOut.playserver + '/' + dataOut.playchannel + '-' + dataOut.playlayer); + PlayoutCCG.playoutController(dataOut); + } else { + logger.verbose('No CasparCG playout'); + } + + if (dataOut.webplayout != '-') { + logger.verbose('Webplayout STOP: ' + dataOut.webplayout); + dataOut.spxcmd = 'stopTemplate'; + PlayoutWEB.webPlayoutController(dataOut); + } else { + logger.verbose('No Webplayout playout'); + } +} // playoutSTOP ended + +function getResolutionFromConfig(cfg, postRequest) { + let sizeID = cfg.general.resolution || 'HD'; + let width = '1920px'; + let height = '1080px'; + if (postRequest.width) { width = postRequest.width } + if (postRequest.height) { height = postRequest.height } + switch (sizeID) { + case '4K': + width = '3840px' + height = '2160px' + break; + + case 'AUTO': + width = '100vw' + height = '100vh' + break; + + default: + // HD is the default + width = '1920px' + height = '1080px' + break; + }; + + return { + width: width, + height: height, + }; +} // getResolutionFromConfig ended + + +module.exports = router; diff --git a/routes/routes-casparcg.js b/routes/routes-casparcg.js new file mode 100644 index 0000000..fd66186 --- /dev/null +++ b/routes/routes-casparcg.js @@ -0,0 +1,352 @@ + +// ------------------------------------------------------- +// Handle Express server routes for the CasparCG commands. +// ------------------------------------------------------- +var express = require("express"); +const router = express.Router(); +const path = require('path'); + +const logger = require('../utils/logger'); +logger.debug('Caspar-route loading...'); +const spx = require('../utils/spx_server_functions.js'); + +const ip = require('ip') +const ipad = ip.address(); // my ip address +const port = config.general.port || 5656; + +const PlayoutCCG = require('../utils/playout_casparCG.js'); + + +// ROUTES CCG ----------------------------------------------------------------------------------- +router.get('/', function (req, res) { + res.send('Nothing here. Go away!'); +}); + +router.get('/system', function (req, res) { + res.send('Nothing here. Get lost.'); +}); + +router.get('/requestInfo', async (req, res) => { + var SERVER = req.query.server; // ?server=OVERLAY + var COMMAND = req.query.command; // &command=INFO + // console.log('requestInfo from ' + SERVER + ', cmd: ' + COMMAND); + const CCGHost = global.CCGSockets[PlayoutCCG.getSockIndex(SERVER)].spxhost; + const CCGPort = global.CCGSockets[PlayoutCCG.getSockIndex(SERVER)].spxport; + const net = require('net') + CasparRequest = new net.Socket(); + CasparRequest.connect(CCGPort, CCGHost, function () { + CasparRequest.write(COMMAND + '\r\n'); + CasparRequest.on('data', function (data) { + res.set('Content-Type', 'text/plain'); // format + res.status(200).send(data); + CasparRequest.destroy(); + }); + + CasparRequest.on('error', function (error) { + return res.status(500).send(error); + CasparRequest.destroy(); + }); + }); +}); + +router.get('/system/:data', (req, res) => { + // same principle as with /control/:data + // do OpSys level stuff, open folders etc.. + // + // NOTE: This endpoint is in the WRONG PLACE + // it should be moved to a more generic place + // + // console.log('System utilities / ' + req.params.data); + data = JSON.parse(req.params.data); + let directoryPath = ""; + logger.verbose('System utilities / ' + JSON.stringify(data)); + res.sendStatus(200); + switch (data.command) { + + case 'DATAFOLDER': + directoryPath = path.normalize(config.general.dataroot); + require('child_process').exec('start "" ' + directoryPath); + break; + + case 'TEMPLATEFOLDER': + // directoryPath = path.normalize(config.general.templatefolder); + directoryPath = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates'); + require('child_process').exec('start "" ' + directoryPath); + break; + + case 'CHECKCONNECTIONS': + // console.log('CCG: Checking server connections...'); + spx.checkServerConnections(); + break; + + case 'RESTARTSERVER': + // + logger.error('RESTART SERVER REQUEST RECEIVED. Will try to kill and restart using process manager.'); + process.exit(2); + break; + + } +}); + +router.get('/control/:data', (req, res) => { + // Principle: + // We get data object which has + // - data.command (ADD | STOP | UPDATE) + // - data.fields [{ id: 'f0', value: 'Eka' }, { id: 'f1', value: 'Toka' }]; + // - data.element headline1 + // - data.profile News + // + // Then we read profiles-file and search for the required element + // such as 'headline1' and get needed data from it: + // - templatefile + // - server + // - channel + // - layer + data = JSON.parse(req.params.data); + logger.info('CCG/Control/ ' + JSON.stringify(data)); + res.sendStatus(200); + + if (!spx.CCGServersConfigured){ return } // exit early, no need to do any CasparCG work + + var DataStr = ""; + const directoryPath = path.normalize(config.general.dataroot); + let profilefile = path.join(directoryPath, 'config', 'profiles.json'); + const profileDataAsJSON = spx.GetJsonData(profilefile); + var arr = profileDataAsJSON.profiles; + let GFX_Teml = ""; + let GFX_Serv = ""; + let GFX_Chan = ""; + let GFX_Laye = ""; + for (var i = 0; i < arr.length; i++) { + var obj = arr[i]; + if (obj.name == data.profile) { + GFX_Teml = eval("obj.templates." + data.element + ".templatefile"); + GFX_Serv = eval("obj.templates." + data.element + ".server"); + GFX_Chan = eval("obj.templates." + data.element + ".channel"); + GFX_Laye = eval("obj.templates." + data.element + ".layer"); + } + } + + logger.debug('CCG/Control - Profile ' + data.profile + "', Template: '" + GFX_Teml, "', CasparCG: " + GFX_Serv + ", " + GFX_Chan + ", " + GFX_Laye); + + if (data.command == "ADD" || data.command == "UPDATE") { + let TEMPLATEDATA = ""; + if (data.fields) { + data.fields.forEach(item => { + logger.verbose('Processing field for CCG: ' + item.id + ' with value: ' + item.value); + TEMPLATEDATA += spx.CGComponentFactory(item.id, item.value) + }); + } + DataSta = ""; + DataEnd = ""; + DataStr = DataSta + TEMPLATEDATA + DataEnd; + } + + try { + switch (data.command) { + case 'ADD': + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' ADD 1 "' + GFX_Teml + '" 1 "' + DataStr + '"\r\n'); + break; + + case 'UPDATE': + console.log('TODO: This is probably not used to send update to CasparCG... See playout_casparCG.js instead! ** FIXME:**'); + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' UPDATE 1 "' + DataStr + '"\r\n'); + break; + + case 'NEXT': + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' NEXT 0\r\n'); + break; + + case 'STOP': + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' STOP 1\r\n'); + break; + + default: + logger.warn('CCG/Control - Unknown command: ' + data.command); + } + } catch (error) { + logger.error('ERROR in /control/:data, unable to send CCG command. Server up? ' + error) + } + + +}); // control ended + +router.get('/controljson/:data', (req, res) => { + + data = JSON.parse(req.params.data); + logger.info('CCG/controljson ' + JSON.stringify(data)); + res.sendStatus(200); + if (!spx.CCGServersConfigured){ return } // exit early, no need to do any CasparCG work + const directoryPath = path.normalize(config.general.dataroot); + let profilefile = path.join(directoryPath, 'config', 'profiles.json'); + const profileDataAsJSON = spx.GetJsonData(profilefile); + var arr = profileDataAsJSON.profiles; + let GFX_Teml = ""; + let GFX_Serv = ""; + let GFX_Chan = ""; + let GFX_Laye = ""; + let GFX_JSON = "" + let stng = "" + + for (var i = 0; i < arr.length; i++) { + var obj = arr[i]; + if (obj.name == data.profile) { + GFX_Teml = eval("obj.templates." + data.element + ".templatefile"); + GFX_Serv = eval("obj.templates." + data.element + ".server"); + GFX_Chan = eval("obj.templates." + data.element + ".channel"); + GFX_Laye = eval("obj.templates." + data.element + ".layer"); + GFX_JSON = JSON.stringify(data.jsonData); + } + } + + logger.verbose("CCG/ControlJSON Profile: '" + data.profile + "', Template: '" + GFX_Teml, "', CasparCG: " + GFX_Serv + ", " + GFX_Chan + ", " + GFX_Laye) + logger.debug('json' + JSON.stringify(GFX_JSON)); + stng = GFX_JSON; + stng = stng.split('§backslash§').join('\'); // replace §backslash§ with html corresponding entity + stng = stng.split('"').join('\\"'); // replace " with \" + + try { + switch (data.command) { + case 'ADD': + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' ADD 1 "' + GFX_Teml + '" 1 "' + stng + '"\r\n'); + break; + + case 'UPDATE': + global.CCGSockets[spx.getSockIndex(spx.getChannel(data))].write('CG ' + GFX_Chan + '-' + GFX_Laye + ' UPDATE 1 "' + stng + '"\r\n'); + break; + + default: + logger.warn('CCG/ControlJSON - Unknown command: ' + data.command); + } + } catch (error) { + logger.error('ERROR in /controljson/:data: ' + error) + } +}); + +router.post('/disable', async (req, res) => { + // Added in 1.1.0. Set "disabled" state of the given CasparCG server + // This only affects playback commands. Initialization works normally. + logger.verbose('CasparCG server ' + req.body.server + ' disabled to ' + req.body.disabled); + try { + var ConfigFile = global.configfileref; + var ConfigData = await spx.GetJsonData(ConfigFile); + if (ConfigData.casparcg.servers) { + ConfigData.casparcg.servers.forEach((serverItem,index) => { + if (serverItem.name == req.body.server) { + serverItem.disabled = req.body.disabled + } + }); + } + global.config = ConfigData; // update mem version also + await spx.writeFile(ConfigFile,ConfigData); + let response = ['Config changed'] + res.status(200).send(response); // ok 200 AJAX RESPONSE + } catch (error) { + console.error('ERROR', error); + let errmsg = 'Server error in CCG disable [' + error + ']'; + logger.error(errmsg); + res.status(500).send(errmsg) // error 500 AJAX RESPONSE + }; +}); + + +// Create all required Socket Connections for CasparCG servers specified in config.json +const net = require('net') +let ServerDataForLogger = []; + +if (config.casparcg) { + config.casparcg.servers.forEach((element,index) => { + const CurName = element.name; + const CurHost = element.host; + const CurPort = element.port; + + ServerDataForLogger.push({ name: CurName, host: CurHost, port: CurPort }); + + // next two lines creates a dynamic variable for this loop iteration + // Changed in 1.3.0, from: + // var CurCCG = CurName + "= undefined"; + // eval(CurCCG); + + // ..to: + var CurCCG = new net.Socket(); + // end of change + + global.CCGSockets.push(CurCCG); // --> PUSH Socket object to a global array for later use + CurCCG.spxname = CurName; // save each entry a name for later searching! + CurCCG.spxhost = CurHost; // save each entry a host for later searching! (v.1.0.14) + CurCCG.spxport = CurPort; // save each entry a port for later searching! (v.1.0.14) + + CurCCG.connect(CurPort, CurHost, function () { + ServerDataForLogger.push({ name: CurName, host: CurHost, port: CurPort }); + data = { spxcmd: 'updateServerIndicator', indicator: 'indicator' + index, color: '#00CC00' }; + io.emit('SPXMessage2Client', data); + data = { spxcmd: 'updateStatusText', status: 'Communication established with ' + CurName + '.' }; + io.emit('SPXMessage2Client', data); + logger.verbose('SPX connected to CasparCG as \'' + CurName + '\' at ' + CurHost + ":" + CurPort + '.'); + }); + + CurCCG.on('data', function (data) { + logger.verbose('SPX received data from CasparCG ' + CurName + ': ' + data); + + // we must parse the data so we can evaluate it... + let CCG_RETURN_TEXT = String(data).replace('\r','').replace('\n',''); // convert return object to string, strip \r\n + let CCG_RETURN_CODE = CCG_RETURN_TEXT.substring(0, 2); // first two chars + switch (CCG_RETURN_CODE) { + case "20": + logger.verbose('Comms good with ' + CurName + ": " + CCG_RETURN_TEXT); + break; + + case "40": + logger.error(CurName + ' CasparCG response: ' + CCG_RETURN_TEXT ); + logger.debug('Verify CasparCG\'s (' + CurName + ') access to templates on SPX server at ' + spx.getTemplateSourcePath()); + data = { spxcmd: 'updateStatusText', status: 'Error in comms with ' + CurName + '.' }; + io.emit('SPXMessage2Client', data); + break; + + case "50": + logger.error('Failed ' + CurName + ": " + CCG_RETURN_TEXT); + data = { spxcmd: 'updateStatusText', status: CurName + ' failed.' }; + io.emit('SPXMessage2Client', data); + break; + + default: + logger.error('Unknown status value ' + CurName + ' - ' + CCG_RETURN_CODE + ' - ' + CCG_RETURN_TEXT); + break; + } + + + // SocketIO call to client + data = { spxcmd: 'updateServerIndicator', indicator: 'indicator' + index, color: '#00CC00' }; + io.emit('SPXMessage2Client', data); + if (data.toString().endsWith('exit')) { + CCGclient.destroy(); + } + }); + + CurCCG.on('close', function () { + // SocketIO call to client + data = { spxcmd: 'updateServerIndicator', indicator: 'indicator' + index, color: '#CC0000' }; + io.emit('SPXMessage2Client', data); + data = { spxcmd: 'updateStatusText', status: 'Connection to ' + CurName + ' was closed.' }; + io.emit('SPXMessage2Client', data); + logger.verbose('SPX connection to CasparCG "' + CurName + '" closed (' + CurHost + ':' + CurPort + ').'); + }); + + CurCCG.on('error', function (err) { + // console.log('Still 4?', CurCCG.connecting) + data = { spxcmd: 'updateServerIndicator', indicator: 'indicator' + index, color: '#CC0000' }; + io.emit('SPXMessage2Client', data); + + data = { spxcmd: 'updateStatusText', status: 'Communication error with ' + CurName + '.' }; + io.emit('SPXMessage2Client', data); + + logger.warn('Unable to connect CasparCG "' + CurName + '" (' + CurCCG.spxhost + ':' + CurCCG.spxport + '). Is it running?'); + // console.log('Sockets: ', global.CCGSockets); + }); + + // console.log('Still 3?', CurCCG.connecting) + }); +}; // end if + +logger.debug('ServerDataForLogger during init: ' + JSON.stringify(ServerDataForLogger)); +module.exports = router; \ No newline at end of file diff --git a/routes/routes-webplayer.js b/routes/routes-webplayer.js new file mode 100644 index 0000000..efb317b --- /dev/null +++ b/routes/routes-webplayer.js @@ -0,0 +1,19 @@ + +// var express = require("express"); +// const router = express.Router(); +// const path = require('path'); +// const fs = require('fs'); +// const moment = require('moment'); +// const directoryPath = path.normalize(config.general.dataroot); +// const logger = require('../utils/logger'); +// logger.debug('WebPlayer-route loading...'); +// const spx = require('../utils/spx_server_functions.js'); + +// // ROUTES ------------------------------------------------------------------------------------------- +// router.get('/', function (reg, res) { +// let htmlFile = path.join(__dirname+'/../http/renderer/index.html'); +// // res.sendFile(htmlFile); +// res.send(htmlFile); +// }); + +// module.exports = router; \ No newline at end of file diff --git a/screenshots/00-spx-gc-principle.png b/screenshots/00-spx-gc-principle.png new file mode 100644 index 0000000..01d648f Binary files /dev/null and b/screenshots/00-spx-gc-principle.png differ diff --git a/screenshots/00-spx-gc-principle2.png b/screenshots/00-spx-gc-principle2.png new file mode 100644 index 0000000..c398d20 Binary files /dev/null and b/screenshots/00-spx-gc-principle2.png differ diff --git a/screenshots/01-spx-gc-projectlist.png b/screenshots/01-spx-gc-projectlist.png new file mode 100644 index 0000000..c059355 Binary files /dev/null and b/screenshots/01-spx-gc-projectlist.png differ diff --git a/screenshots/01-spx-loginpolicy.png b/screenshots/01-spx-loginpolicy.png new file mode 100644 index 0000000..a6fcf5b Binary files /dev/null and b/screenshots/01-spx-loginpolicy.png differ diff --git a/screenshots/02-spx-gc-rundowlist.png b/screenshots/02-spx-gc-rundowlist.png new file mode 100644 index 0000000..5af1b84 Binary files /dev/null and b/screenshots/02-spx-gc-rundowlist.png differ diff --git a/screenshots/03-spx-gc-controller-empty-rundown.png b/screenshots/03-spx-gc-controller-empty-rundown.png new file mode 100644 index 0000000..c07054a Binary files /dev/null and b/screenshots/03-spx-gc-controller-empty-rundown.png differ diff --git a/screenshots/04-spx-gc-controller-addtemplate.png b/screenshots/04-spx-gc-controller-addtemplate.png new file mode 100644 index 0000000..3d37a77 Binary files /dev/null and b/screenshots/04-spx-gc-controller-addtemplate.png differ diff --git a/screenshots/05-spx-gc-controller-rundown.png b/screenshots/05-spx-gc-controller-rundown.png new file mode 100644 index 0000000..6061e21 Binary files /dev/null and b/screenshots/05-spx-gc-controller-rundown.png differ diff --git a/screenshots/06-spx-gc-controller-editor.png b/screenshots/06-spx-gc-controller-editor.png new file mode 100644 index 0000000..09076bc Binary files /dev/null and b/screenshots/06-spx-gc-controller-editor.png differ diff --git a/screenshots/07-spx-gc-controller-rundown.png b/screenshots/07-spx-gc-controller-rundown.png new file mode 100644 index 0000000..e6062c2 Binary files /dev/null and b/screenshots/07-spx-gc-controller-rundown.png differ diff --git a/screenshots/08-spx-gc-appconfig.png b/screenshots/08-spx-gc-appconfig.png new file mode 100644 index 0000000..ed5729b Binary files /dev/null and b/screenshots/08-spx-gc-appconfig.png differ diff --git a/screenshots/09-spx-gc-projectsettings.png b/screenshots/09-spx-gc-projectsettings.png new file mode 100644 index 0000000..426763f Binary files /dev/null and b/screenshots/09-spx-gc-projectsettings.png differ diff --git a/screenshots/anatomy-of-an-item.png b/screenshots/anatomy-of-an-item.png new file mode 100644 index 0000000..e1dcc2f Binary files /dev/null and b/screenshots/anatomy-of-an-item.png differ diff --git a/screenshots/ccgservers.png b/screenshots/ccgservers.png new file mode 100644 index 0000000..1f16d12 Binary files /dev/null and b/screenshots/ccgservers.png differ diff --git a/screenshots/helloworld.png b/screenshots/helloworld.png new file mode 100644 index 0000000..944e712 Binary files /dev/null and b/screenshots/helloworld.png differ diff --git a/screenshots/hq.gif b/screenshots/hq.gif new file mode 100644 index 0000000..15da299 Binary files /dev/null and b/screenshots/hq.gif differ diff --git a/screenshots/source-files.png b/screenshots/source-files.png new file mode 100644 index 0000000..d5a0f79 Binary files /dev/null and b/screenshots/source-files.png differ diff --git a/screenshots/spx-gc-help-workinprogress.png b/screenshots/spx-gc-help-workinprogress.png new file mode 100644 index 0000000..54eda84 Binary files /dev/null and b/screenshots/spx-gc-help-workinprogress.png differ diff --git a/screenshots/spx-gc-ui-anim-v1-0.gif b/screenshots/spx-gc-ui-anim-v1-0.gif new file mode 100644 index 0000000..85bc854 Binary files /dev/null and b/screenshots/spx-gc-ui-anim-v1-0.gif differ diff --git a/screenshots/spx-zoom.png b/screenshots/spx-zoom.png new file mode 100644 index 0000000..63cd2d5 Binary files /dev/null and b/screenshots/spx-zoom.png differ diff --git a/screenshots/streamdeck.png b/screenshots/streamdeck.png new file mode 100644 index 0000000..10a4c3a Binary files /dev/null and b/screenshots/streamdeck.png differ diff --git a/screenshots/windows-installation.png b/screenshots/windows-installation.png new file mode 100644 index 0000000..ac68a52 Binary files /dev/null and b/screenshots/windows-installation.png differ diff --git a/screenshots/yt_mockup-showreel.png b/screenshots/yt_mockup-showreel.png new file mode 100644 index 0000000..9491b4c Binary files /dev/null and b/screenshots/yt_mockup-showreel.png differ diff --git a/screenshots/yt_mockup.png b/screenshots/yt_mockup.png new file mode 100644 index 0000000..983c3ac Binary files /dev/null and b/screenshots/yt_mockup.png differ diff --git a/server.js b/server.js new file mode 100644 index 0000000..4116764 --- /dev/null +++ b/server.js @@ -0,0 +1,978 @@ + +// =============================================================== +// +// "Web Graphics Controller" +// (c) 2020- Sh Graphics +// +// No front-end frameworks. +// Core functionality: NodeJS, Express, Handlebars -templating. +// +// Most serverside code is in /routes and /utils. +// Most clientside code is in /static/js/spx_gc.js +// +// Basic usage: +// node server.js [config.json] +// +// =============================================================== + + +const express = require('express') +const session = require('express-session') +const bodyParser = require('body-parser') +const cors = require('cors') +const exphbs = require('express-handlebars') +const app = express() +const ip = require('ip') +const fs = require('fs') +const morgan = require('morgan') +const path = require('path') +const rfs = require('rotating-file-stream') +var macaddress = require('macaddress'); + +console.log('\n WebCG Controller server is starting.\n Closing this window/process will stop the server.\n'); + +// EXIT HANDLER +process.on('exit', function(code) { + // usage: process.exit(1) + let codestr="Unspecified exit code"; + switch (code) { + case 1: + codestr = "Error while reading config.json" + break; + + case 2: + codestr = "Kill request received from WebCG client. If pm2 used, the server will restart automatically." + break; + + case 3: + codestr = "Port is already in use on this machine." + break; + + default: + break; + } + return console.log(`\n\nWebCG exit! (Errorcode ${code}: ${codestr})\n\n`); +}); + +// global.config +const cfg = require('./utils/spx_getconf.js'); +cfg.readConfig() +if (!configfileref) { + process.exit(1) + } + +const spx = require('./utils/spx_server_functions.js'); +const logger = require('./utils/logger.js'); + +// STATICS +app.use(express.static(path.join(__dirname,('static')))) +app.use(express.static(path.resolve(spx.getStartUpFolder(),'ASSETS'))) +const ipad = ip.address(); +var pjson = require('./package.json'); +var packageversion = pjson.version; +const vers = process.env.npm_package_version || packageversion || 'X.X.X'; +global.vers = vers; +global.excel = {'readtime':0, 'filename':'', 'data':''}; // used as Excel cache + +// Added in 1.0.15. An memory persistent object to handle ------------- +// rundown state to avoid unnecessary disk I/O and improve performance. +global.rundownData = {} +// -------------------------------------------------------------------- + +const port = config.general.port || 5656; +global.CCGSockets = []; +global.LastBrowsedTemplateFolder = ''; + +macaddress.one(function (err, mc) { + let macaddress = String(mc); + let pseudomac = macaddress.split(':').join('').substring(0,8); + global.hwid = config.general.hostname || pseudomac; + global.pmac = pseudomac; +}); + + +// Setup Morgan +let LOGFOLDER = config.general.logfolder || spx.getStartUpFolder() + '/LOG'; +var logDirectory = path.normalize(LOGFOLDER); +fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory) +var accessLogStream = rfs.createStream('access.log', { + interval: '1d', // rotate daily + path: logDirectory +}) +app.use(morgan('combined', { stream: accessLogStream })) + + +// Handlebars templating, updated in 1.3.3 +app.engine('handlebars', exphbs.engine({ + extname: '.handlebars', + //defaultLayout: 'filelist', + helpers: { + + max5: function (data) { + if (parseInt(data)>5) { data = 5; } + return String(data); + }, + + // Convert JSON data and return as JSONstring. + // (used to store arrays to hidden form fields) + DataToJSONString: function (data) { + let s = encodeURI(JSON.stringify(data)); + return s; + }, + + // conditional IF helper + ifValue: function(a, b, options) { + // console.log('a: ' + a + ', b: ' + b); + if(String(a) === String(b) ) { + return options.fn(this); + } + return options.inverse(this); + }, + + // conditional IF helper return value A if "value" == "compareTo", B if not + ifValueMatch: function(value, compareTo, A, B ) { + if(value == compareTo) { + return A; + } else { + return B; + } + }, + + // conditional IF helper + itemCount: function(arr) { + // console.log('a: ' + a + ', b: ' + b); + return arr.length; + }, + + // conditional IF helper + ifGreater: function(a, b, options) { + if(a > b) { + // console.log('TRUE. A (' + a + ') was bigger.'); + return options.fn(this); + } + // console.log('FALSE. B (' + b + ') was bigger.'); + return options.inverse(this); + }, + + // populate CasparCG options for show config templates + generateDataFormatOptions(currentDataformat='json') { + let html=""; + let AvailableFormats=['json', 'xml']; + + AvailableFormats.forEach((Option,i) => { + let curFormat = Option.toLowerCase(); + let cfgFormat = currentDataformat.toLowerCase(); + let sel = ""; + if (curFormat==cfgFormat){ sel="selected" } + html += ''; + }); + return html + }, + + + // populate CasparCG options for show config templates + generateCasparCgPlayoutOptions(currentServer) { + let html=""; + let AvailableServers=['-']; + if (config.casparcg){ + config.casparcg.servers.forEach((element,i) => { + AvailableServers.push(element.name); + }); + } + + AvailableServers.forEach((serverOption,i) => { + let curSrv = serverOption.toUpperCase(); + let cfgSrv = currentServer.toUpperCase(); + let sel = ""; + if (curSrv==cfgSrv){ sel="selected" } + html += ''; + }); + return html + }, + + + // generate Open datafolder -commands in the UI menu for different operating systems + GenerateOpenFolderCommands(){ + let platform = process.platform; + let html=""; + switch (platform) { + case 'win32': + html += '\n'; + html += '
  '+ spx.lang('button.exploredataroot') +'\n'; + html += '
  '+ spx.lang('button.exploretemplates') +'\n'; + break; + + default: + html = "\n"; + break; + } + return html; + }, + + // draw all custom controls in the argument array + GenerateCustomControls(arr){ + if (!arr) {return}; // if no extras, do nuthin' + let html = ""; + html += '\n'; + arr.forEach((control,index) => { + html += '' + html += '' + html += '\n' + }); + html += '
' + html += '' + control.description + '' + html += '' + switch (control.ftype){ + + case 'button': + html += '

\n' + return html; + }, + + + // generate a pretty string for each template to display playout configs + GeneratePlayoutInfo(playserver='', playchannel='', playlayer='', webplayout='', out='' , itemid='') { + + webplayout = spx.max5(webplayout); + + let html = '
'; + // html += ''; + + if (playserver !="-") { + html += "" + playserver + "-"; + html += "" + playchannel + "-"; + html += "" + playlayer + ""; + html += " "; + // html += " "; + }; + + if (webplayout !="-") { + html += "" + webplayout + ""; + // html += " "; + }; + + if (out) { + html += "" + out + ""; + }; + + html += "ID"; + + // help button + html += "?"; + html += "
" + return html + }, + + // populate filelist for the controller add CSV file view (for instance) + generateFileList(requestType) { + + let folder = '' // folder to start to scan + let filter = '' // extensions to show ('csv' for example) + // requestType = search command, such as "CSV" + + switch (requestType) { + case 'CSV': + folder = path.join(config.general.dataroot, currentShow, 'profile.json'); + filter = 'csv'; + break; + + default: + logger.error('Unknown requestType ' + requestType + ', doing nothing'); + return; // exit function + break; + } + + let html=""; + // get show profile + // iterate all templates + let profileFile = path.join(config.general.dataroot, currentShow, 'profile.json'); + showProfileData = spx.GetJsonData(profileFile); + if(!showProfileData.templates) { + // if no templates assigned to this project + html += '' + spx.lang('warning.notemplates') + ''; + return html + } + showProfileData.templates.forEach((template,i) => { + html += '
\n'; + html += '\n'; + html += '' + spx.prettifyName(template.relpath) + '
\n'; + html += '' + template.description + ' \n'; + html += '
\n'; + }); + return html + }, + + // populate templatelist for the controller add template view + generateTemplateList(currentShow) { + let html=""; + // get show profile + // iterate all templates + let profileFile = path.join(config.general.dataroot, currentShow, 'profile.json'); + showProfileData = spx.GetJsonData(profileFile); + if(!showProfileData.templates) { + // if no templates assigned to this project + html += '' + spx.lang('warning.notemplates') + '

'; + return html + } + showProfileData.templates.forEach((template,i) => { + html += '
\n'; + html += '\n'; + html += '' + spx.prettifyName(template.relpath) + '
\n'; + html += '' + template.description + ' \n'; + html += '
\n'; + }); + return html + }, + + // convert timestamp (epoch) to locale date string "31.12.2021 17:45" + generateTimestamp(epoch) { + let date = new Date(parseInt(epoch)); + let fDate = date.toLocaleDateString(); + let fTime = date.toLocaleTimeString(); + return fDate + ' ' + fTime; + }, + + + // populate WebPlayout options for show config templates + generateButtonColorClasses(currentValue) + { + let html=""; + let AvailableOptions=[ + { + text:spx.lang('color.red'), + value:'bg_red' + }, + { + text:spx.lang('color.green'), + value:'bg_green' + }, + { + text:spx.lang('color.grey'), + value:'bg_grey' + }, + { + text:spx.lang('color.orange'), + value:'bg_orange' + }, + { + text:spx.lang('color.blue'), + value:'bg_blue' + }, + { + text:spx.lang('color.black'), + value:'bg_black' + }, + { + text:spx.lang('color.light'), + value:'bg_grey15' + } + ]; + AvailableOptions.forEach((OptionItem,i) => { + let sel = ""; + if (OptionItem.value==currentValue){ sel="selected" } + html += ''; + }); + return html + }, + + + + // return username + CurrentUserName() { + return global.user; + }, + + // populate out options for show config templates + generateOutOptions(currentOut) { + logger.debug('Generating out options. This selection: ' + currentOut + '.'); + let html=""; + let AvailableOptions=[ + {value:'manual', text:'Manually'}, + {value:'none', text:'None (just play)'}, + {value:'1000', text:'In 1 second'}, + {value:'2000', text:'In 2 seconds'}, + {value:'4000', text:'In 4 seconds'}, + {value:'6000', text:'In 6 seconds'}, + {value:'10000', text:'In 10 seconds'} + ]; + AvailableOptions.forEach((outOption,i) => { + let sel = ""; + let CurVal = currentOut.toLowerCase(); + let CurOpt = outOption.value.toLowerCase(); + if (CurVal==CurOpt){ sel="selected" } + html += ''; + }); + return html + }, + + + // populate WebPlayout options for show config templates + generateWebPlayoutOptions(currentLayer='-') { + // console.log('generateWebPlayoutOptions got currentLayer: ' + currentLayer); + currentLayer = spx.max5(currentLayer); + logger.debug('Generating webplayout options. This selection: '+ currentLayer); + let html=""; + let AvailableLayers=['-',1,2,3,4,5]; + AvailableLayers.forEach((layerOption,i) => { + let curSrv = layerOption || '-'; + let cfgSrv = currentLayer || '-'; + let sel = ""; + if (curSrv==cfgSrv){ sel="selected" } + html += ''; + }); + return html + }, + + + + // preview span for collapsed view of each rundown item + generateCollapsedHeadline(DataFields) { + return spx.generateCollapsedHeadline(DataFields); + }, + + + // generate radio buttons for show config templates + generateColorAccents(selectedIndex, templateIndex) { + let colors=['gra','red','ora','gre','blu','pin','vio','bla']; + let html =""; + let sel = ""; + colors.forEach((color,loopindex) => { + if (selectedIndex==loopindex) { sel = "checked" } else {sel=""}; + html += ''; + }); + return html + }, + + // Returns IP for socket server of this app's IP address + getServerAddress: function () { + var ip = require('ip'); + var myIP = ip.address() + ':' + port; + return myIP; + }, + + + // Returns resolution options for App Config > resolution + // Added in 1.3.0 + generateResolutionOptions: function (resolutionOption) { + let html = ''; + let options = [ + { 'value': 'HD', 'text': 'HD (1080p)' }, + { 'value': '4K', 'text': '4K (2160p)' }, + { 'value': 'AUTO', 'text': 'AUTO (responsive)' }, + ]; + + let selectedFound = false; + options.forEach((opt,i) => { + let sele = ''; + if (opt.value.toUpperCase() == resolutionOption.toUpperCase()) { + selectedFound = true; + sele = 'selected' + }; + html += '\n'; + }); + return html; + }, + + // See if cssSizeValue has 'vh' or 'vw' in it then return HD values + // Added in 1.3.0 + localPreviewSize: function (cssSizeValue) { + if (cssSizeValue.includes('vw')) { + return '1920'; + } else if (cssSizeValue.includes('vh')) { + return '1080'; + } else { + return cssSizeValue; + } + }, + + // Returns unique ID for this host machine + getHostID: function () { + return global.pmac; + }, + + + hookLoadControllerPlugins: function () { + // Loads init.js files from all sub folders of ASSETS/plugins// + let html = ''; + try { + let BrowseFolder = path.join(spx.getStartUpFolder(), 'ASSETS', 'plugins'); + const list = spx.GetFilesAndFolders(BrowseFolder); + list.foldArr.forEach(pluginName => { + if ( pluginName.charAt(0) == '_' || pluginName.charAt(0) == '.' || pluginName === 'lib' ) { + html += '\n' + } else { + logger.verbose('Loading plugin ' + pluginName ); + html += '\n' + } + }) + } catch (error) { + html = ''; + } + return html + }, + + // Convert JSON \\n to newline for textarea + injectNewlines(jsonString) { + let multiline = jsonString.replace('\\n', '\r\n') + return multiline; + }, + + // Language string helper + lang(str) { + return spx.lang(str); + }, + + // Replace underscores with spaces (used by breadcrumbs) + prettyfyBreadcrumb(str) { + let fixed = str + fixed = fixed.replace(/_/g, ' '); + fixed = fixed.replace(/-/g, ' '); + return fixed; + }, + + + // Return object as JSON string + myStringify(obj) { + return "// Stringified JSON\n\n" + JSON.stringify(obj, null, 4); + }, + + // Get template name from filepath + nameFromTemplatePath(filepath) { + return spx.prettifyName(filepath); + }, + + + // Check config and return value + allowOpeningFolder() { + let disableButton = config.general.disableOpenFolderCommand || false; + // console.log('allowOpeningFolder: ' + disableButton); + if (disableButton==true || disableButton=="true") { + return 'disabled'; + } else { + return ''; + } + }, + + + // Make long strings nicer to look at + shortifyUIstrings(str) { + return spx.shortifyName(str); + }, + + // generate checkbox to appconfig + OpenChromeCheck() { + let launch = config.general.launchBrowser || false; + if (launch){ + return ''; + } + else { + return ''; + } + }, + + + // Get a correct class for a play button + playButtonClass(onair) { + let value = onair || "false"; + let ONAIR = String(value).toUpperCase(); + if (ONAIR=="TRUE") { + return "bg_red"; + } else { + return "bg_green"; + } + }, + + // Get a correct class for a play button + playButtonText(onair) { + let value = onair || "false"; + let ONAIR = String(value).toUpperCase(); + if (ONAIR=="TRUE") { + return spx.lang('button.stop'); + } else { + return spx.lang('button.play'); + } + }, + + + // Define a class for the playicon + playIconClass(onair) { + // console.log('Play icon [' + onair + ']'); + let value = onair || "false"; + let ONAIR = String(value).toUpperCase(); + if (ONAIR=="TRUE") { + return "playTrue"; + } else { + return "playFalse"; + } + }, + + + // Show username / password in the login view + ShowDemoLoginInfo() { + let showuserpass = config.general.showusercommapass || ''; + if (showuserpass==""){ + return ""; + } + let u = showuserpass.split(',')[0] + let p = showuserpass.split(',')[1] + let html=""; + html += ''; + html += ''; + html += ''; + html += ''; + html += 'Login to this instance with
'; + html += 'user ' + u + ', '; + html += 'pass ' + p + ''; + html += '
'; + html += ''; + html += ''; + return html; + }, + + + // Print out version number + ShowVersion() { + return vers; + }, + + + // Return available lang files as options with selected one + DropdownOptionsLANG() { + let html = ''; + let sel = ''; + let localesFolder = path.join(spx.getStartUpFolder(), 'locales'); + let fileListData = spx.getJSONFileList(localesFolder); + fileListData.files.forEach((element,i) => { + sel = ''; + if (element.name == config.general.langfile) + { + sel = 'selected'; + } + html += ''; + }); + return html + }, + + // This is used to populate filelist dropdown control type in templates. + // Note: these files are returned as http-assets from SPX server + // Feature added in 1.0.3. and improved in 1.0.6, 1.0.9 + // v1.0.15 adds relative assets (within template root folder). + PopulateFilelistOptions(assetfolder, extension, value, relpath='') { + let html = ''; + let sel = ''; + let fullFilePath = ''; + let fullPath = ''; + + if ( assetfolder.startsWith('./') ) { + // relative path support added in 1.0.15 + let templateFile = path.join(spx.getStartUpFolder(), 'ASSETS', 'templates', relpath); + let templateRootFolder = path.dirname(templateFile) + fullPath = path.join(templateRootFolder, assetfolder) + } else { + // absolute path in ASSETS + let assetPath = path.normalize(assetfolder || ''); + fullPath = path.join(spx.getStartUpFolder(), 'ASSETS', assetPath); // fixed (again in 1.0.12) + } + + let selectedValue = value; + let fileList = spx.getFileList(fullPath, extension); + // console.log('files', fileList); + if (fileList) { + fileList.forEach((fileRef,index) => { + if (assetfolder.substr(assetfolder.length - 1)!="/") { // fixed a bug in 1.1.1 + assetfolder = assetfolder + "/"; + } + fullFilePath = assetfolder + fileRef; + sel = ""; + if (fullFilePath == selectedValue) { + sel = 'selected'; + } + html += ''; + }); + } + return html + }, + + // Servers status check request + ServerStatus() { + let html = ""; + if (config.casparcg) { + config.casparcg.servers.forEach((element,i) => { + + let disabledClass = '' + if (element.disabled) { + disabledClass = 'disabledServer'; + } + + html += ''; + }); + } + return html; + // end serverstatus + }, + + // See if there is custom content packages in the ASSETS folder + DetectCustomContentPackages() { + try { + const fileref = path.join(spx.getStartUpFolder(), 'ASSETS', 'spx-content-repo.txt'); + if (fs.existsSync(fileref)) { + var contents = fs.readFileSync(fileref, 'utf8') || ''; + if (contents == 'CONTENT_FULL') { + logger.debug('DetectCustomContentPackages: CONTENT_FULL'); + return ''; + } else { + logger.debug('DetectCustomContentPackages: returns ' + contents); + return '
' + contents + '
'; + } + } else { + // No file found, return empty string + return ''; + } + + } + catch (error) { + logger.error('DetectCustomContentPackages Error: ' + error); + return ""; + } + // end DetectCustomContentPackages + }, + + GenerateLocalRendererOptions(mode) { + return '\n'; + } // end LocalRendererOptions + + + + } // end helpers +})); // end app.engine + +app.set('view engine', 'handlebars'); +app.set('views', path.join(__dirname, 'views')); + + +// Middleware +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(cors()); +app.use(session({ + secret: 'salainenSalaisuus#007', + resave: false, + saveUninitialized: false +})); + +global.user = ""; + +// Router files +const ROUTEfiles = require('./routes/routes-api.js'); +app.use('/api/', ROUTEfiles); + +const ROUTEpubAPIv1 = require('./routes/routes-api-v1.js'); +app.use('/api/v1/', ROUTEpubAPIv1); + +const ROUTEapp = require('./routes/routes-application.js'); +app.use('/', ROUTEapp); + +const ROUTEccg = require('./routes/routes-casparcg.js'); +app.use('/CCG', ROUTEccg); + +process.on('uncaughtException', function(err) { + logger.error('Uncaught Exception: ' + err); + if(err.errno === 'EADDRINUSE') { + console.log('Process failed! Port is in use? [' + err + ']'); // most likely app running on this port already + setTimeout(function(){ process.exit(3); }, 2000); + } else if (err.errno === 'ENOENT') { + console.log('File not found error detected! [' + err + ']'); + } else { + console.log('\n\nThis error in unhandled, consider SPX restart! ', err); // Added in 1.1.1 + } +}); + + +var server = app.listen(port, (err) => { + + let splash = ' Copyright 2020- SPX Graphics\n\n' + + ` SPX Solo version .......... ${global.vers}\n` + + ' License ................... See LICENSE.txt\n' + + ` Config file ............... ${configfileref}\n` + + ` Cfg / locale .............. ${config.general.langfile}\n` + + ` Cfg / host-id (name) ...... ${global.pmac} (${config.general.hostname})\n` + + ` Cfg / loglevel ............ ${config.general.loglevel} (options: error | warn | info | verbose | debug )\n` + + ` Cfg / dataroot ............ ${path.resolve(config.general.dataroot)}\n` + + ` Cfg / logfolder ........... ${logDirectory}\n`; + /* ` Cfg / lauchchrome ...... ${config.general.launchchrome}\n` */ + + if (config.general.apikey && config.general.apikey != '') { + splash += ` Cfg / apikey ........... Set in config.json\n`; + } + + if (config.osc?.enable) { + splash += ` OSC enabled ............ port ${OSCport}\n`; + } + + let TemplatesFromInfo; + let tmplSourceAddress = spx.getTemplateSourcePath(); + if ( tmplSourceAddress == "") { + TemplatesFromInfo = "See caspar.config" + } else { + TemplatesFromInfo = tmplSourceAddress + } + + splash += + `\n Explore WebCG related resources:` + + `\n` + + `\n This is WebCG Solo. For professional features and support\n options see WebCG Production and WebCG Broadcast.`; + + console.log(splash); + + let prompt = 'Open WebCG Solo in a browser:'; + let spxUrl = `http://${ipad}:${port}`; + let spxLoc = `http://localhost:${port}`; + let urLeng = spxUrl.length; + let loLeng = spxLoc.length; + let prLeng = prompt.length; + let maxWid = Math.max(urLeng, loLeng, prLeng) + let minWid = Math.min(urLeng, loLeng, prLeng) + let line1s = '╭' + "─".repeat(maxWid+4) + "╮" + let line2s = prompt + " ".repeat(maxWid-prLeng) + let line3s = '╰' + "─".repeat(maxWid+4) + "╯" + let spaCnt, spacer1, spacer2 + spacer1 = " ".repeat(maxWid-urLeng) + spacer2 = " ".repeat(maxWid-loLeng) + + console.log('\n ' + line1s); + console.log(' │ ' + line2s + ' │'); + // console.log(' │ ' + spxUrl + spacer1 + ' │'); + console.log(' │ ' + spxLoc + spacer2 + ' │'); + console.log(' ' + line3s); + console.log(''); + + if ( config.general.launchBrowser || global.generatingDefaultConfig ) { + try { + (async () => { + require("openurl").open(`http://${ipad}:${port}/`) + })(); + } catch (error) { + console.warn('Could not open browser.') + } + } + +}); + +global.io = require('socket.io')(server); +var clients = {} + +io.sockets.on('connection', function (socket) { + logger.verbose('*** Socket connection (' + socket.id + ") Connections: " + io.engine.clientsCount); + clients[socket.id] = socket; + notifyMultipleControllers(); // on Connection + + socket.on('disconnect', async function () { + let SPXClientName = clients[socket.id].SPXClientName || '** no name **'; + logger.verbose('*** Socket disconnected (' + socket.id + ") Connections: " + io.engine.clientsCount); + delete clients[socket.id]; + + // Notify controller of other clients lost (such as renderers closed with X) + data = {}; + data.spxcmd = 'clientLostNotification' + data.source = 'windowClose' + data.clientName = SPXClientName + io.emit('SPXMessage2Client', data); + notifyMultipleControllers(); // on Disconnect + }); // end disconnect + + socket.on('SPXWebRendererMessage', function (data) { + io.emit('SPXMessage2Client', data); + }); + + socket.on('SPXMessage2Server', function (data) { + logger.verbose('SPXMessage2Server received', data) + switch (data.spxcmd) { + + case 'identifyClient': + socket.SPXClientName = data.name; + logger.verbose('Identified [' + socket.id + '] as [' + data.name + ']'); + break; + + case 'saveToLog': // Added in 1.3.0 + let level = data.level || 'info'; + let ref = data.fileref || 'unknown'; + logger[level]('TemplateLog [' + ref + '] --> ' + data.message); + break; + + case 'command-name-here': + // action here + break; + + default: + logger.warn('Unknown SPXMessage2Server command: ' + data.command); + } + }); // end message to server +}); // end socket-io + + +function notifyMultipleControllers() { + if ( config.general?.disableSeveralControllersWarning==true ) { + logger.debug('notifyMultipleControllers feature is disabled with a config flag.'); + return; + } + + + setTimeout(function(){ + let count = 0; + for (const [key, value] of Object.entries(clients)) { + if (value.SPXClientName == 'SPX_CONTROLLER') { + count++; + } + } + logger.debug('notifyMultipleControllers: ' + count + ' controllers connected.'); + let data = {}; + data.spxcmd = 'notifyMultipleControllers' + data.count = count + io.emit('SPXMessage2Client', data); + }, 100); // small delay +} diff --git a/static/css/bootstrap.min.css b/static/css/bootstrap.min.css new file mode 100644 index 0000000..b8d023b --- /dev/null +++ b/static/css/bootstrap.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! + * Bootstrap v5.3.0 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-body-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label::after,.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label{color:#6c757d}.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/static/css/spx_accents.css b/static/css/spx_accents.css new file mode 100644 index 0000000..1a84906 --- /dev/null +++ b/static/css/spx_accents.css @@ -0,0 +1,65 @@ + +/* inspired by https://codepen.io/wildbeard/pen/eZZPZr */ + + + +input[type="radio"] { + display: none; +} +input[type="radio"]:checked + label span { transform: scale(1.25); } + +input[type="radio"]:checked + label .gra { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .red { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .ora { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .gre { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .blu { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .pin { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .vio { border: 2px solid #ffffff;} +input[type="radio"]:checked + label .bla { border: 2px solid #ffffff;} + +label { + display: inline-block; + width: 20px; + height: 20px; + margin-right: 10px; + cursor: pointer; +} +label:hover span { + /* transform: scale(1.25); */ +} +label span { + display: block; + width: 100%; + height: 100%; + transition: transform .2s ease-in-out; +} + +/* grey, red, orange, green, blue, pink, violet, black */ +label span.gra { background: #7a7a7a;} +label span.red { background: #DB2828;} +label span.ora { background: #F2711C;} +label span.gre { background: #21BA45;} +label span.blu { background: #2185D0;} +label span.pin { background: #E03997;} +label span.vio { background: #8840FF;} +label span.bla { background: #000000;} + +.row_accent0 {border-left: 10px solid #696969; } +.row_accent1 {border-left: 10px solid rgb(114, 38, 38); } +.row_accent2 {border-left: 10px solid rgb(117, 70, 38); } +.row_accent3 {border-left: 10px solid rgb(42, 107, 57); } +.row_accent4 {border-left: 10px solid rgb(41, 87, 122); } +.row_accent5 {border-left: 10px solid rgb(124, 57, 95); } +.row_accent6 {border-left: 10px solid rgb(91, 67, 129); } +.row_accent7 {border-left: 10px solid #181818; } +.row_accentExtras {border-left: 10px solid #acacac; } + +.accent_{ + background-color: rgba(255,255,255,0.05); + border: 0px solid yellow; + width:100%; + padding:10px; + margin-bottom:15px; + border-left: 12px solid white; + box-shadow: rgba(0, 0, 0, 0.7) 0px 0px 10px; +} \ No newline at end of file diff --git a/static/css/spx_colors.css b/static/css/spx_colors.css new file mode 100644 index 0000000..90c82fc --- /dev/null +++ b/static/css/spx_colors.css @@ -0,0 +1,103 @@ +/* + Copyright 2020 SPX Graphics + CSS file for (bg)colors. Must be loaded after spx_layout.css +*/ + +.disabled { + opacity: 0.2; + cursor: not-allowed; +} + +.bg_body { + background-color: #414C5A; +} + + +.darkBg { + background-color: rgba(0, 0, 0, 0.2); +} + +.bg_green { + background-color: #54af3c; +} + +.green { + color: #5f9750; +} + +.bg_yellow { + background-color: #e5c310; +} + +.bg_orange { + background-color: #e57010; +} + +.bg_blue { + background-color: #375ea3; +} + +.bg_red { + background-color: #9c1a29; +} + +.bg_black { + background-color: #000000; +} + +.bg_white { + background-color: #ffffff; +} + +.bg_grey80 { + background-color: #272833; +} + +.bg_grey { + background-color: #485a6b; +} + +.bg_grey60 { + background-color: #2f303e; +} + +.bg_grey40 { + background-color: #343D48; +} + +.bg_grey15 { + background-color: #656e7a; + /* #706e83; */ +} + +.bg_grey10 { + background-color: #9aa4b1; + /* #706e83; */ +} + +.black{ + color: black; +} + +.bg_darken{ + background-color: rgba(0,0,0,0.07); +} + +.bg_lighten{ + background-color: rgba(255,255,255,0.05); +} + +.newVersionBubble { + padding: 2px 10px; + background-color: rgb(39, 95, 58); + border-radius: 4px; + /* margin-right: 10px; */ + font-size: 90%; + cursor: pointer; + display: inline-block; + margin-top: 5px; +} + +.fg_orange { + color: #e57010; +} \ No newline at end of file diff --git a/static/css/spx_filebrowser.css b/static/css/spx_filebrowser.css new file mode 100644 index 0000000..960ea14 --- /dev/null +++ b/static/css/spx_filebrowser.css @@ -0,0 +1,448 @@ + +*, *:before, *:after { + box-sizing: inherit; + margin: 0; + padding: 0; + /* user-select: none; */ +} + + +html, body, .page { + height: 100%; + padding: 0; + margin: 0; + font-size: 4vw; /* ============ font size =========== */ +} + +.page { + display: flex; + flex-direction: column; +} + +.uitext { + font-size: 0.8em; + color: rgba(255, 255, 255, 0.5); +} + +.swname { + font-size: 1.5em; + color: rgba(255, 255, 255, 0.1); +} + +.page-header { + /* height: 130px; */ + display: flex; + flex: 0 0 auto; + align-items: center; +} + +.page-content { + display: flex; + flex: 1 1 auto; + overflow: hidden; + position: relative; + align-content: center; +} + +.page-footer { + display: flex; + flex: 0 0 auto; + flex: 0 0 auto; + padding: 1em; + align-items: center; +} + +.well { + margin: 0; + padding: 0; + padding: 1em; + height: 100%; + flex-grow: 1; + min-width: 48%; + overflow-y: auto; + border-radius: 0.5em; + background-repeat: repeat-x; + background-position: top, bottom; + background-image: url('../img/shadatop.png'), url('../img/shadabot.png'); +} + + +.well + .well { + margin: 0% 0.5%; +} + +.darken { + background-color: rgba(0, 0, 0, 0.1); +} + +.lighten { + background-color: rgba(255, 255, 255, 0.1); +} + +.skroll::-webkit-scrollbar-track { + background-color: transparent; +} + +.skroll::-webkit-scrollbar { + width: 1em; + background-color: rgba(245, 245, 245, 0); +} + +.skroll::-webkit-scrollbar-thumb { + border-radius: 0.5em; + background-color: rgba(255, 255, 255, 0.13); +} + +.skroll::-webkit-scrollbar-thumb:hover + { + background-color: rgba(255, 255, 255, 0.274); +} + + +.headitem1 { + flex-grow: 1; + flex-basis: 0; + text-align: center; + border: 0px solid rgb(0, 255, 55); +} + +.headitem3 { + flex-grow: 3; + flex-basis: 0; + display: flex; + padding: 0.5em; + align-items: center; + justify-content: flex-end; + border: 0px solid rgb(255, 0, 0); +} + +.footitem1 { + flex-grow: 1; + flex-basis: 0; + text-align: center; +} + +.footitem2 { + padding: 1em; + flex-grow: 2; + flex-basis: 0; + display: flex; + text-align: center; + align-items: center; + flex-direction: row; +} + +.footbox1 { + flex-grow: 1; + text-align: center; +} + +.footbox2 { + flex-grow: 0; + flex-shrink: 1; + text-align: center; +} + +.footbox3 { + flex-grow: 1; + text-align: center; +} + +.cursor { + cursor: pointer; +} + +.nowrap { + white-space: nowrap; +} + +.icon { + width: 3em; + margin: 0.5em; + border-radius: 0.6em; + box-shadow: 0 0 10px rgba(255, 166, 0, 0); + /* transition-property: box-shadow, scale; */ + transition: transform 500ms ease-in-out; +} + +.icon:hover { + box-shadow: 0 0 10px rgba(255, 255, 255, 0.507); + transform: scale(0.98) rotate(5deg); + /* transition-property: box-shadow, scale, rotate; */ + transition: transform 500ms ease-in-out; +} + +.folderItem { + margin-bottom: 0.2em; + list-style:circle; + color: red; +} + +.icon::before { + font-family: "FontAwesomeSol900"; + display: inline-block; + margin-right: 10px; + font-size: 1.2em; + -webkit-font-smoothing: antialiased; + } + + .folder::before { content: "\f07b"; color: rgb(9, 119, 170);} + .file::before { content: "\f15b"; color: rgb(241, 241, 237);} + .back::before { content: "\f106"; } + .home::before { content: "\f102"; } + + + +/* ---------------- messageSlider styles -------------*/ +#messageSlider { + top: 0px; + left: 50%; + opacity: 0; /* animated */ + display: flex; + min-width: 10%; + font-size: 1.7em !important; + position: absolute; + padding: 0.5em 2em; + align-items: center; + justify-content: center; + border-radius: 0 0 1em 1em; + transform: translateX('-100%'); + color: rgba(255, 255, 255, 0.7); +} + +.happyMsg { + background-color: rgba(20, 116, 68, 0.76); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.infoMsg { + background-color: rgba(0, 0, 0, 0.4); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.warnMsg { + background-color: rgba(143, 81, 0, 0.794); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.errorMsg { + background-color: rgba(170, 5, 5, 0.89); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +/* ---------------- /messageSlider -------------*/ + +#folderinbox { + min-height: 30px; + display: grid; + border: 0px solid yellow; +} + +#fileinbox { + min-height: 30px; + display: grid; + border: 0px solid yellow; + grid-template-columns: 1fr 1fr; +} + +.fileitem { + height: 40vw; + align-items: center; + flex-direction:column; + border: 2px solid rgba(255, 255, 255, 0.137); + justify-content: flex-end; + background-color: rgba(0, 0, 0, 0.274); + background-position: center 40%; + background-size: contain; + background-repeat: no-repeat; + margin: 4px; + position: relative; + overflow-wrap: break-word; + transition: all 200ms ease-in-out; + box-shadow: 0 0 5px rgba(255, 255, 255, 0); +} + +.fileitem:hover { + background-color: rgba(255, 255, 255, 0.219); + /* border: 2px solid white; */ + cursor: pointer; +} + + +.filename { + bottom: 10px; + position: absolute; + width: 100%; + max-width: 100%; + display: block; + text-align: center; + padding: 0.4em; + font-size: 0.8em; + color: rgba(255, 255, 255, 0.719); + background-color: rgba(0, 0, 0, 0.452); +} + +.navicon { + /* width: 3em; */ + margin: 0.5em; + box-shadow: 0 0 10px rgba(255, 166, 0, 0); + /* transition-property: box-shadow, scale; */ + transition: transform 500ms ease-in-out; +} + +.navicon::before { + font-family: "FontAwesomeSol900"; + display: inline-block; + margin-right: 10px; + font-size: 1.2em; + -webkit-font-smoothing: antialiased; + } + + .folder::before { content: "\f07b"; color: rgb(9, 119, 170);} + .file::before { content: "\f15b"; color: rgb(241, 241, 237);} + .back::before { content: "\f106"; } + .home::before { content: "\f102"; } + + +.selectedImage { + /* box-shadow: 0 0 5px white; */ + border: 2px solid white; + border-radius: 10%; + transform: scale(0.95); + transition: all 200ms ease-in-out; +} + +image-item { + border: 2px solid transparent; +} + +.disable { + cursor: not-allowed; + opacity: 0.3; + pointer-events: none; +} + +#navipath { + background: rgba(0, 0, 0, 0.2); + font-size: 0.8em; + padding: 0.5em 1.0em; + color: rgba(255, 228, 155, 0.4); +} + +social-item { + display: block; + border-radius: 0.5em; + background-color: rgba(255,255,255,0.1); + width: 100%; + padding: 0px; + margin-bottom: 10px; + overflow: hidden; + border: 2px solid transparent; + box-shadow: 0 0 5px 2px rgba(0,0,0,0.7); +} + +social-item:hover { + /* box-shadow: 0 0 2px 2px rgba(250, 250, 250, 0.7); */ + cursor: pointer; + /* border: 2px solid rgb(109, 108, 108); */ + background-color: rgba(0, 0, 0, 0.089); + transition: background-color 0.3s; +} + +.dragIcon { + border: 2px solid yellow; + mask-image: unset; +} + +.social-item-content-table { + border-spacing: 0px; + border-collapse: separate; + width: 100%; + padding: 0px; + margin: 0px; +} + +.social-item-content-table td { + padding: 0; + border-collapse: separate; + border-spacing: 0; +} + +.serviceicon { + background-color: rgba(16, 104, 35, 0.575); /* default bg color */ + background-position: 50% 3px; + background-repeat: no-repeat; + width: 40px; + padding: 0px; + margin: 0; +} + +.facebook_post { background-color: rgb(17, 91, 209); } +.instagram { background-color: rgb(106, 21, 218); } +.tweet { background-color: rgb(15, 35, 151); } +.rss { background-color: rgb(167, 81, 32); } +.video { background-color: rgb(151, 15, 15); } + +.brd { + border: 2px solid orange; +} + +.uIcon { + margin-left: 0.2em; + width: 2em; + height: 2em; + border-radius: 25%; +} + +.uName { + font-size: 0.9em; + font-weight: bold; +} +.uHndl { + font-size: 0.9em; + +} +.uuid { + display: none; +} + +.postTimeTD { + text-align: center; + font-size: 0.9em; + color: rgba(255,255,255,0.5) +} + +.userIconCell { + width: 2vw; +} + +.thumb { + width: 10vw !important; + margin: 0.4vw; +} + +.thumbTD { + width: 10vw !important; + margin: 0.4vw; + /* background-color: saddlebrown; */ +} + +.postmessageTD { + vertical-align: top; + font-size: 1.0em; + padding: 0.9em !important; +} + + +.pad { + padding: 0.3em !important; +} + +.topbrd { + border-top: 1px solid rgba(0,0,0,0.5); +} + +.focused { + border: 2px solid rgb(255, 145, 0); + box-shadow: 0 0 5px 2px rgba(230, 156, 20, 0.7); +} \ No newline at end of file diff --git a/static/css/spx_flex.css b/static/css/spx_flex.css new file mode 100644 index 0000000..94b5c0a --- /dev/null +++ b/static/css/spx_flex.css @@ -0,0 +1,103 @@ +html, body { + box-sizing: border-box; + height: 100%; + margin: 0; + overflow: hidden; + background-color: #414C5A; + font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; + font-size: 1.5vw; + } + + *, *:before, *:after { + box-sizing: inherit; + margin: 0; + padding: 0; + } + + .wrapper { + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + } + + .header{ + height: 100px; + } + + .footer { + height: 60px; + } + + .content { + flex: 1; + overflow: auto; + } + + .left { + width: 60%; + height: 100%; + float: left; + overflow: auto; + } + + .right { + margin-left: 60%; + height: 100%; + overflow: auto; + } + + .pM + { + padding: 10px; + } + + + .item + { + width: 100%; + height: 100px; + margin-bottom: 10px; + background-color: black; + } + + + .itemlist + { + background-color: #2A3641; + + } + + td + { + vertical-align: middle; + } + + /* .statusbar + { + font-family: Arial, Helvetica, sans-serif; + font-size: 70%; + padding: 3px 12px; + color: #aaaaaa; + } */ + + + .scroller::-webkit-scrollbar-track + { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.0); + border-radius: 0px; + background-color: #414C5A; + } + + .scroller::-webkit-scrollbar + { + width: 14px; + background-color: #414C5A; + } + + .scroller::-webkit-scrollbar-thumb + { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.0); + background-color: #677180; + } diff --git a/static/css/spx_fonts.css b/static/css/spx_fonts.css new file mode 100644 index 0000000..95c72c6 --- /dev/null +++ b/static/css/spx_fonts.css @@ -0,0 +1,24 @@ +/* @font-face { + font-family: "Yle-Black"; + src: url("/fonts/Yle-Black.ttf"); +} + +@font-face { + font-family: "Yle-Medium"; + src: url("/fonts/Yle-Medium.ttf"); +} + +@font-face { + font-family: "Yle-Regular"; + src: url("/fonts/Yle-Regular.ttf"); +} */ + + +@font-face { font-family: "UI-Light"; src: url("/fonts/EncodeSansSemiExpanded-Light.ttf"); } +@font-face { font-family: "UI-Regular"; src: url("/fonts/EncodeSansSemiExpanded-Regular.ttf"); } +@font-face { font-family: "UI-Bold"; src: url("/fonts/EncodeSansSemiExpanded-Bold.ttf"); } +@font-face { font-family: "UI-Black"; src: url("/fonts/EncodeSansSemiExpanded-Black.ttf"); } + + +@font-face { font-family: "FontAwesomeReg400"; src: url("/fonts/fa-regular-400.ttf"); } +@font-face { font-family: "FontAwesomeSol900"; src: url("/fonts/fa-solid-900.ttf"); } \ No newline at end of file diff --git a/static/css/spx_forms.css b/static/css/spx_forms.css new file mode 100644 index 0000000..8b9bbf4 --- /dev/null +++ b/static/css/spx_forms.css @@ -0,0 +1,465 @@ +/* + Copyright 2020 SPX Graphics + CSS file for form items. Loaded after spx_layout.css +*/ + +::placeholder { + color: #555; + opacity: 1; +} + +.cfg::placeholder { + color: rgba(255, 255, 255, 0.6); + /* font-family: Arial, Helvetica, sans-serif; */ + opacity: 0.4; +} + +.spxformtext { + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; +} + +.disabled_btn { + opacity: 0.2; +} + +.cfg { + font-family: "UI-Light", Arial, Helvetica, sans-serif; + height: 2.4em; + font-size: 0.8em; + color: white; + border: 2px solid transparent; + margin-left: 0.1em; + margin-right: 0.1em; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + box-shadow: rgb(0, 0, 0, 0.4) 0 3px 8px; + padding-inline-start: 5px; +} + + +.addbtn { + font-size: 1.2em; + color: white; + border: 2px solid transparent; + text-transform: uppercase; + font-family: "UI-Bold", Arial, Helvetica, sans-serif; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + box-shadow: rgb(0, 0, 0, 0.4) 0 3px 8px; + padding-inline-start: 0.4em; + padding-inline-end: 0.4em; + margin-left: auto; + margin-right: auto; + cursor: pointer; +} + +.addbtn:hover { + border: 2px solid rgba(255, 255, 255, 0.4); +} +.btn { + height: 2.4em; + font-size: 0.8em; + color: white; + border: 2px solid transparent; + text-transform: uppercase; + font-family: "UI-Bold", Arial, Helvetica, sans-serif; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + box-shadow: rgb(0, 0, 0, 0.4) 0 3px 8px; + user-select: none; + cursor: pointer; + padding: 0.4em 0; + margin-bottom: 0.1em; + white-space: nowrap; + overflow: hidden; +} + +.btn:hover { + border-bottom: 2px solid rgba(255, 255, 255, 0.4); +} + +.btn:focus{ + outline: none; +} + + +.btnsmall { + font-size: 0.7em; + color: white; + border: 2px solid transparent; + margin-left: 1px; + margin-right: 1px; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + box-shadow: rgb(0, 0, 0, 0.4) 0 3px 8px; + text-transform: uppercase; + height: 150%; + padding: 0.3em 1em; + cursor: pointer; +} + +.btnsmall:hover { + border-bottom: 2px solid rgba(255, 255, 255, 0.4); +} + +.btnsmall:focus{ + outline: none; +} + +.colorbtnsmall { + position: absolute; + border: 1px solid rgba(0, 0, 0, 1); + margin: 4px; + height: 80%; + width: 50%; + cursor: pointer; + border-radius: 0.5em; + font-size: 1.0em; + color: rgba(200,200,200,0.8); + text-shadow: 1px 1px 1px black; + +} + +.colorbtnsmall:hover { + /* border: 2px solid rgba(255, 255, 255, 0.1); */ + +} + +.colorbtnsmall:focus{ + outline: none; +} + +.drop { + height: 2.4em; + font-size: 0.8em; + color: white; + border: 2px solid transparent; + margin-left: 0.1em; + margin-right: 0.1em; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + box-shadow: rgb(0, 0, 0, 0.4) 0 3px 8px; +} + +.drop option:disabled { + color: rgba(255, 255, 255, 0.3); +} + +.drop:hover { + border-bottom: 2px solid rgba(255, 255, 255, 0.4); +} + + + + +.floinput { + padding: 0.1em; + background-color: #706e83; + border: 0; + font-family: inherit; + font-size: 1em; + margin: 0px; + color: white; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + height: 100%; + box-sizing: border-box; +} + +.gccheckcontainer { + display: block; + position: relative; + padding-left: 35px; + margin-top: 8px; + margin-bottom: 6px; + cursor: pointer; + user-select: none; +} + +.gccheckboxdiv label{ + font-size: 0.7em; + color: rgba(255, 255, 255, 0.7) +} + +/* Hide the browser's default checkbox */ +.gccheckcontainer input { + position: absolute; + opacity: 0; + cursor: pointer; + height: 0; + width: 0; + } + +/* Create a custom checkbox */ +.gccheckmark { + position: absolute; + top: 0; + left: 0; + height: 23px; + width: 23px; + background-color: rgb(163, 163, 163); + transform: none !important; + } + +/* On mouse-over, add a grey background color */ +.gccheckcontainer:hover input ~ .gccheckmark { + background-color: rgb(241, 236, 236); + } + +/* When the checkbox is checked, add a blue background */ +.gccheckcontainer input:checked ~ .gccheckmark { + background-color: #008000; + } + +/* Create the checkmark/indicator (hidden when not checked) */ +.gccheckmark:after { + content: ""; + position: absolute; + display: none; + } + +/* Show the checkmark when checked */ +.gccheckcontainer input:checked ~ .gccheckmark:after { + display: block; + } + +/* Style the checkmark/indicator */ +.gccheckcontainer .gccheckmark:after { + left: 9px; + top: 5px; + width: 5px; + height: 10px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + +.gcinput{ + width: 100%; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size:1em; + margin: 1px; + margin-top: 5px; /*5px */ + line-height: 132%; + padding-left: 0.2em; + user-select: auto; +} +.gcinput::placeholder { + color: rgb(156, 156, 156); + font-family: Arial, Helvetica, sans-serif; + font-style: italic; + font-size: 0.9em; + letter-spacing: 1px; +} + +.gcinputFilter{ + width: 100%; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size:1em; + margin: 1px; + margin-top: 5px; + line-height: 132%; + padding-left: 0.2em; + user-select: auto; +} +.gcinputFilter:focus { + outline: none; +} +.gcinputFilter::placeholder { + color: rgba(255, 255, 255, 0.13); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size: 0.8em; + letter-spacing: 0px; + transform: translateY(-10%); + } + +/* .select { + border-radius: 0.10em; + padding: 0.1em 0.2em; + font-size: 1.0rem; + line-height: 1.1; + background-color: rgb(230, 230, 230); +} */ + +.select { + /* -webkit-appearance: none; + -moz-appearance: none; */ + /* background: transparent; */ + /* background-image: url("data:image/svg+xml,"); + background-repeat: no-repeat; + background-position-x: 98%; + background-position-y: 50%; */ + /* border: 1px solid #cdf1ff; */ + background-color: #ececec; + box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.7); + border-radius: 0.2rem; + margin-right: 2rem; + padding: 0.2rem; + padding-right: 2rem; + border-right: 10px solid #2768dab9; + } + + +.tablineinput { + font-family: "UI-Black", Arial, Helvetica, sans-serif; + margin: 0px; + border: 0; + font-size: 1.2em; /* <-------------------------- HEADLINE SIZE IN UI*/ + background-color: brown; + color: white; + display: inline-block; + padding: 0.1em; + padding-left: 0.4em; + padding-right: 0.2em; +} + +.headlineinput { + font-family: "UI-Black", Arial, Helvetica, sans-serif; + margin: 0px; + background-color: white; + color: black; + padding-left: 0.2em; + border: 0; + font-size: 2.4em; /* <-------------------------- HEADLINE SIZE IN UI*/ +} + +.tickerinput { + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + padding-left: 0.2em; + background-color: #222; + margin: 0px; + border: 0; + color: white; + font-size: 1.35em; /* <-------------------------- HEADLINE SIZE IN UI*/ +} + +.imsinput { + flex: auto; + flex-basis: 290px; + padding: 0.1em; + background-color: #706e83; + border: 0; + font-family: inherit; + font-size: 0.9em; /* Changed 15.04.2020 - was 1.em */ + margin: 0px; + color: white; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + height: 100%; + box-sizing: border-box; + height: 1.83em; /* Added 15.04.2020 */ +} + +.inlineInput { + padding: 0.1em; + background-color: inherit; + border: 0; + font-family: inherit; + font-size: 1em; + margin: 0px; + color: white; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + height: 100%; + /* width: 100%; */ + box-sizing: border-box; +} + +.spxRoundedButton { + margin: 10px; + font-size: 60%; + padding: 0 2em; + border-radius: 1em; +} + +/* Ripple effect */ +.ripple { + background-position: center; + transition: background 0.2s; +} +.ripple:hover { + /* background: #47a7f5 radial-gradient(circle, transparent 1%, #47a7f5 1%) center/15000%; */ +} +.ripple:active { + background-color: #ffffff; + background-size: 100%; + transition: background 0s; +} + + +.generalSettingDropdown:disabled { + color: rgba(255,255,255,0.6); + } + +/* The radiocontainer */ +.radiocontainer { + display: block; + position: relative; + padding-left: 1.8em; + margin-bottom: 0.5em; + cursor: pointer; + font-size: 1.2em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + /* Hide the browser's default radio button */ + .radiocontainer input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom radio button */ + .checkmark { + position: absolute; + top: -0.2em; + left: 0; + height: 1.3em; + width: 1.3em; + background-color: #eee; + border-radius: 50%; + } + + /* On mouse-over, add a grey background color */ + .radiocontainer:hover input ~ .checkmark { + background-color: rgb(146, 179, 155); + } + + /* When the radio button is checked, add a blue background */ + .radiocontainer input:checked ~ .checkmark { + background-color: #54af3c; + } + + /* Create the indicator (the dot/circle - hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + /* Show the indicator (dot/circle) when checked */ + .radiocontainer input:checked ~ .checkmark:after { + display: block; + } + + /* Style the indicator (dot/circle) */ + .radiocontainer .checkmark:after { + top: 0.4em; + left: 0.4em; + width: 0.5em; + height: 0.5em; + border-radius: 50%; + background: rgb(255, 255, 255); + } + + .toggleON { + /* used for buttons to mimic toggle functionality */ + transform: translateY(1px); + text-shadow:0px 0px 10px rgba(128, 255, 0, 0.8); + box-shadow: inset 0 4px 8px rgba(0, 0, 0, 0.5), + inset 0 -4px 10px rgba(0, 0, 0, 0.3); + + } + + .selectAll { + font-size: 2em; + } \ No newline at end of file diff --git a/static/css/spx_layout-mini.css b/static/css/spx_layout-mini.css new file mode 100644 index 0000000..69ef9bf --- /dev/null +++ b/static/css/spx_layout-mini.css @@ -0,0 +1,1148 @@ +/* + Copyright 2020 SPX Graphics + CSS file for basic stuff. Must be loaded first. +*/ + +:root { + --darkGrey: #2A3641; +} + + +html, body { + margin: 0px; + height: 100%; + color: white; + /* overflow: hidden; */ + font-size: 1.0em; + box-sizing: border-box; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + background-color: var(--darkGrey); +} + +*, *:before, *:after { + margin: 0; + padding: 0; + user-select: none; + box-sizing: inherit; + } + + +.HIDE{ + /* WHILE DEBUGGING unhide OBJECTS with display:no-none ++++++++++++++++++++++++++ */ + display : none; /*change this to no-none to see debug data in editors */ + border : 2px dashed rgb(0, 248, 0); + padding : 5px; + margin : 5px; + background-color: rgba(173, 76, 11, 0.246); + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +} + +.minicontent { + flex-grow: 1; + overflow: auto; + border: 0px solid red; + background-color: var(--darkGrey); + position: relative; + display: flex; + flex-direction: column; + padding: 0.4em; +} + + +.wrapper { + height: 100%; + display: flex; + overflow: hidden; + flex-direction: column; + border: 0px dotted green; +} + +.viewer { + flex-grow: 0; + /* overflow: hidden; */ + border: 0px solid red; +} + +#footer { + width: 100%; + display: flex; + flex-grow: 1; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 0.2em; +} + +.footerAndInfo { + display: flex; + align-items: center; + flex-direction: column; + border: 0px solid red; + background-color: var(--darkGrey); +} + +.experimentalInfo { + width: 100%; + opacity: 0.4; + font-size: 0.7em; + text-shadow: none; + text-align: center; + font-weight: normal; + padding: 0 0 0.7em 0; + font-family: 'UI-Light'; +} + +.itemrow { + background-color: rgba(255,255,255,0.05); + border-top: 2px solid transparent !important; + border-right: 2px solid transparent !important; + border-bottom: 2px solid transparent !important; + border-radius: 5px; + box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 8px; + cursor: pointer; + margin-bottom: 8px; + transition: border-left 0.3s, color 0.2s, background-color 0.2s, border-width 0.2s; +} + +.itemrow:hover { + background-color: rgba(153, 218, 255, 0.08); + border-width: 2px 2px 2px 15px; +} + +.scroller::-webkit-scrollbar-track + { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.0); + border-radius: 0px; + background-color: #414C5A; +} + +.scroller::-webkit-scrollbar + { + width: 14px; + background-color: #414C5A; + border: 0px solid yellow; + } + + + +.scroller::-webkit-scrollbar-thumb + { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.0); + background-color: #677180; + padding: 10px; + } + +.scroller::-webkit-scrollbar-thumb:hover + { + background-color: #718cb4; + } + + +ul { + padding-left: 2em; +} + +a:link, +a:visited { + color: white; + text-decoration: none; +} + +a:hover { + color: orange; + text-decoration: none; +} + +a:active { + color: orange; + text-decoration: none; +} + +div { + box-sizing: border-box; +} + +h2{ + margin-top: 80px; + font-size: 0.7rem; + margin-bottom: 2px; + letter-spacing: 2px; + text-transform: uppercase; + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} + +h2:first-of-type{ + margin-top: 10px; +} + +.h2hr { + margin: 6px 0px 10px 0px; + border: 1px solid rgba(0,0,0,0.0); + border-top: 2px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(106, 112, 119, 0.5); +} + + +hr { + margin: 5px 0px 20px 0px; + border: 1px solid rgba(0,0,0,0.0); + border-top: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(138, 138, 138, 0.2); +} + +hr.menuDivider { + margin: 5px 0; + border: 1px solid rgba(0,0,0,0.0); + border-top: 2px solid rgba(0,0,0,0.5); + border-bottom: 1px solid rgba(161, 161, 161, 0.2); +} + + +td { + vertical-align: middle; + border: 0px solid yellow; +} + + + +iframe { + transform-origin: top left; + background-color: rgb(0, 0, 0); + border: 1px solid rgb(0, 0, 0); + /* removed in 1.1.0 ----- + width: 1920px; + height: 1080px; */ + overflow: hidden; +} + + +/* html elements above this line, custom classes alphabetized below */ + + +td.aright{ + text-align: right; +} + + +.beta + { + background-color: rgba(138, 113, 113, 0.822); + border-radius: 0px; + padding: 1px 8px; + font-family: "UI-Bold", Arial, Helvetica, sans-serif; + font-size: 0.85em; + color: rgb(48, 48, 48); + margin-left: 0.25em; + margin-right: 0.75em; + border-bottom: 2px solid rgb(128, 21, 7); + } + + +.brd{ + border: 2px dotted white; + border-collapse: separate; +} + + +.breadcrumbs{ + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.9rem; + color: #B9BDC2; + border: 0px solid yellow; + text-transform: uppercase; +} + +.breadcrumbGear { + opacity: 0.3; + font-size: 0.7em; + color: #ffffff; + margin-left: 0.7em; + border: 0px solid red; + margin-bottom: 3px; + display: inline-block; +} + +.breadcrumbGear:hover { + opacity: 1.0; + cursor: pointer; +} + +.breadtd { + position: relative; +} + +.breadIcon { + height: 100%; + width: fit-content; + position: absolute; + display: inline-flex; + justify-content: center; + align-items: center; +} + + +.caption{ + font-size: 0.7em; + opacity: 0.6; +} + + +.caret-icon{ + font-size: 1.0rem; + color: #237BBA; + margin: 0px 5px 0px 5px !important; +} + +.gcpluginbuttondiv { + display: flex; + align-items: center; + font-size: 0.6rem; + margin-top: 1em; + padding: 0.6em 0.4em 0.6em 0.4em; + /* overflow: hidden; */ + background-color: rgba(0,0,0,0.1); + border-top: 1px solid rgba(0,0,0,0.7) !important; + border-bottom: 1px solid rgba(255,255,255,0.3) !important; +} + +.gcplugindescription { + font-size: 0.5; + color: rgba(255,255,255,0.5); +} + + +.center { + text-align: center !important; + } + + +.centerColumn { + margin: auto; + width: 70%; + height: 100%; + overflow: auto; + border: 0px solid salmon; + } + +.helpid, +.copyid { + margin-left: 0.25em; + background: rgba(255, 255, 255, 0.05); + padding: 0.3em 0.6em; + border-radius: 0.2em; + color:rgba(255, 255, 255, 0.4); + transition: all 0.2s linear ; + } + +.copyid:hover { + background: rgba(0, 0, 0, 0.5); + color:rgb(255, 255, 255); + transition: all 0.2s linear ; + } + +.helpid:hover { + background: rgb(5, 45, 145); + color:rgb(255, 255, 255); + transition: all 0.2s linear ; + cursor: help; + } + + + + +.delim { + color: rgba(53, 178, 250, 0.651); + margin-right: 0.5em; + margin-left: 0.5em; +} + +.delim::before { + content: "|"; +} + +.divider { + display: block; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + text-align: left; + font-size: 0.5em; + text-transform: uppercase; + margin-top: 1.5em; + padding-bottom: 0.4em; + border-bottom: 1px solid rgba(255, 255, 255, 0.5); + margin-bottom: 0.5em; + opacity: 0.5; +} + +#logo { + width: 2em; /*50px;*/ + margin:0; + opacity:1; +} + +.dropdown { + position: relative; + display: inline-block; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + text-align: left; + vertical-align: middle; + z-index:500; +} + +.scrollingMenuArea { + border: 0px solid purple; + max-height: 100vh; + overflow-y: scroll; + position: relative; +} + + +.dropdown-content { + font-family: "UI-Light", Arial, Helvetica, sans-serif; + display: none; + position: relative; + background-color: #272833; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + padding: 0.5em; + z-index: 1; + line-height: 2em; + font-size: clamp(0.8rem, 0.8em, 2.0rem); +} + +.dropdown:hover .dropdown-content, +.dropdown:hover .dropdown-content-right { + display: block; +} + +.dropdown-content a, +.dropdown-content-right a { + white-space: nowrap; +} + + +.dropdown-content-right { + /* CasparCG servers dropdown */ + right: 0; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + display: none; + position: absolute; + background-color: #272833; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + padding: 0.5em; + z-index: 1; + line-height: 2em; + font-size: 0.8em; +} + + +.file, .folder{ + user-select: none; + display: block; + cursor: pointer; +} + +.filebrowser { + font-size: 0.9em; + padding: 0.1em; + border: 0px solid pink; + padding: 0.7em; + background-color: rgba(0, 0, 0, 0.1); +} + +.selectedFile{ + border-left: 3px solid orange; + border-right: 3px solid orange; + background-color: rgba(255, 166, 0, 0.157); +} + +.filebrowser UL { + padding: 0.2em; +} + +.filebrowser LI { + font-size: 0.9em; + padding: 0.5em; + margin-left: 0px; + border-bottom: 1px solid #ffffff28; +} + +.filebrowser_file, .filebrowser_folder, .filebrowser_up{ + color: rgb(214, 214, 214); + display: block; + cursor: pointer; +} + +.filebrowser_file:hover, .filebrowser_folder:hover, .filebrowser_up:hover{ + color: rgb(227, 239, 245); + background-color: #2c3136; +} + +div.curfolder{ + margin-top: 1.0em; + padding: 0.1em 1em; + color: rgba(227, 239, 245, 0.589); + font-size: 0.6em; +} + +.headlineArea { + border-top: 2px solid grey; + vertical-align: top; +} + + +.header{ + height: 80px; + border: 0px solid pink; + } + + +.tableheaderText + { + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: bold; + } + +.tableheaderHelp + { + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.8rem; + text-transform: uppercase; + font-weight: bold; + opacity: 0.5; + } + +.tableheaderHelp:hover + { + color: rgb(250, 201, 96); + opacity: 1.0; + cursor: help; + } + +.tableheaderHelp2 + { + color: rgb(186, 226, 255); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.8rem; + text-transform: uppercase; + font-weight: bold; + opacity: 0.5; + } + +.tableheaderHelp2:hover + { + color: rgb(255, 185, 33); + opacity: 1.0; + cursor: pointer; + } + + +.hidden { + opacity: 0; + pointer-events: none; +} + + +.home-icon{ + font-size: 1.2em; + color: #B9BDC2; + margin-left: 20px; + margin-right: 5px; +} + +.instruction{ + font-size: 0.6em; + color: #a7abad; + line-height: 1.4em; + border-left: 1px solid #036a9e; + padding: 0.5em 0.2em 0.5em 1em; + margin-top: 0.5em; + margin-bottom: 0.5em; + background-color: rgba(0, 0, 0, 0.2); +} + + + + + + +.truncate{ + margin-top: 0.2em; + margin-bottom: 0.3em; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + width: auto; + min-width: 0; + max-width: 90%; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0.5; + } + + + +.left { + width: 60%; + height: 100%; + float: left; + overflow: auto; + border: 0px solid salmon; + } + + +.l-icon { + margin-top: 0.7em; + } + +.l-icon:hover { + color: orange; + } + + + +.message{ + padding: 10px; + background-color: rgba(125, 226, 159, 0.363); + color: white; + border-radius: 6px; + text-align: center; + font-size: 0.7rem; + margin-bottom: 30px; +} + + +.messagerror{ + padding: 10px; + background-color: rgba(221, 82, 27, 0.363); + color: white; + border-radius: 6px; + text-align: center; + font-size: 0.7rem; + margin-bottom: 30px; +} + + +.over { + background-color: pink !important; +} + + +.pM { + padding: 10px; + } + + +.playFalse + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 0 !important; + color:green; + } + + +.playTrue + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 1 !important; + color:green; + } + +.playAuto + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 1 !important; + color:green !important; + border-right: 3px solid green; + } + + +.rendererMini + { + background-image: url('/img/checker60.png'); /* bgimage for local preview */ + background-size: 10vw; + aspect-ratio: 16/9; + flex-shrink: 0; + } + +.right { + margin-left: 60%; + height: 100%; + overflow: auto; + border: 0px solid blueviolet; + } + + + +.rowhead { + margin: auto 1px auto 1px; + vertical-align: middle; + color: white; + font-family: "UI-Black", Arial, Helvetica, sans-serif; + font-size: 0.85em; + line-height: 2em; + padding-left: 5px; + padding-right: 5px; +} + +.serverIndicator { + cursor: pointer; +} + +.serverIndicator:hover { + color: orange; +} + +.disabledServer { + text-decoration: line-through; + opacity: 0.4; + color: black; +} + + + + + +.serverbtn { + background-color: rgba(0, 0, 0, 0); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + padding: 0.3em 0.8em; + border-radius: 0px; + font-size: 0.8em; + margin: 0px; + color: white; + cursor: default; + } + +.spacer { + /* empty span between UI controls, spacer ftype */ + display: block; + background-color: green; + height: 1em; +} + +.spxFlexContainer { + display: flex; /* flex or inline-flex */ + justify-content: center; + align-content: stretch; + padding: 0.0em; + border: 0px solid yellow; + margin: 0px; + gap: 2px; +} + +.spxFlexItem { + flex: auto; + white-space: nowrap; + padding: 0px 0px 0px 0px; + margin: 0px; +} + +.spxMainPanel { + height: 55vw; + display: table; + width: 100%; + max-width: 2000px; + text-align: center; + border: 0px solid yellow; + border-collapse: separate; + border-spacing: 2px; + margin: auto; +} + +.spxTopRow { + display: table-row; + height: 4em; + color: white; + border: 1px solid red !important; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; +} + +.spxBottomRow { + display: table-row; + height: 12.5em; + /* background: rgb(9, 36, 9); */ + color: beige; + vertical-align: middle; +} + +.spxMainSection { + height: 100%; + display: table-cell; + width: 100%; + vertical-align: middle; + border: 0px solid green; +} + +.spxTableRow { + height: 100%; + display: table-row; + width: 100%; + vertical-align: middle; + border: 0px solid green; +} + +.spxCell { + display: table-cell; + vertical-align: middle; + margin: 10px !important; + text-align: left; + padding: 10px; +} + +.spxPanelL { + width: 50%; + color: white; +} + +.spxPanelC { + width: 0.1em; + /* background: red; */ + color: white; +} + +.spxPanelR { + color: white; + border-left: 2px solid grey; + margin-left: 10px; +} + +.spxTableHead { + color: white; + text-transform: uppercase; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + text-shadow: rgba(255, 255, 255, 0.1) 0 0 2px; + line-height: 2em; + font-size: 0.75em; + margin: auto auto; + border: 0px solid pink; +} + +.spxConfigHead { + color: rgba(255, 255, 255, 0.52); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + text-shadow: rgba(255, 255, 255, 0.1) 0 0 2px; + /* line-height: 2em; */ + font-size: 0.75em; + margin: auto auto; + border: 0px solid pink; + white-space: nowrap; +} + +.prvar { + color: rgba(255, 255, 255, 0.2); + font-family: monospace; + float: right; + padding-right: 1em; +} + +.spxInfotext { + font-size: 0.6em; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + opacity: 0.7; + line-height: 120%; +} + +.spxInfoRegtext { + font-size: 0.7em; + color:rgb(198, 198, 198); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +.spxTableHeadsmall { + font-size: 0.6em; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + text-shadow: rgba(255, 255, 255, 0.5) 0 0 2px; + opacity: 0.75; + line-height: 1; /* 75%; */ +} + + +.footer { + height: 32px; + border: 0px solid orange; + margin: 8px 10px 4px 10px; + padding: 8px 10px; + } + + +table.footerTable, td.footerTable, tr.footerTable, span.statusbar div.footerTable{ + padding: 0px; + margin: 0px; + line-height: 16px; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + + +.statusbar + { + color: #aaaaaa; + font-family: Arial, Helvetica, sans-serif; + font-size: 100%; + padding: 3px 3px; + } + +.statusBarWarn + { + color: #ffb95d; + } + +.statusBarWarn::before + { + font-family: "FontAwesomeSol900"; + content: "\f071"; + color: rgb(230, 137, 16); + font-size: 60%; + margin-right: 6px; + } + + + +.statusBarError + { + background-color: rgba(124, 9, 9, 0.808); + color: #f3ebeb; + } + +.statusBarError::before + { + font-family: "FontAwesomeSol900"; + content: "\f071"; + color: rgb(230, 226, 16); + font-size: 60%; + margin-right: 6px; + } + +.tooltipzone { + position: relative; + display: inline-block; +} + +.tooltipzone .tooltip { + visibility: hidden; + background-color: black; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 0.1em 0.7em; + font-size: 0.9em; + opacity: 0; + position: absolute; + z-index: 1; + top: 100%; + left: 50%; + transform: translate(-50%, 10px); + transition: opacity 1.5s; +} + +.tooltipzone:hover .tooltip { + visibility: visible; + opacity: 1; +} + + +.vtop{ + vertical-align: top; +} + +.vmid{ + vertical-align: middle; +} + + +.wide + { + width: 100% !important; + } + +.w50 + { + width: 49% !important; + } + +.welcome { + margin-top: 0.7em; + font-family: Arial, Helvetica, sans-serif; + margin-left: 3em; + margin-right: 3em; + font-size: 0.9em; + color: #cfcfcf; + line-height: 1.3em; + +} + +.working + { + background-color: rgb(255, 136, 0); + border-radius: 3px; + padding: 1px 8px; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size: 0.85em; + text-shadow: rgba(0, 0, 0, 1.0) 0 0 6px; + color: white; + margin-left: 1.5em; + } + + + + +.inFocus { + border-top: 2px solid rgba(187, 164, 60, 0.746) !important; + border-right: 2px solid rgba(141, 122, 13, 0.431) !important; + border-bottom: 2px solid rgba(158, 120, 14, 0.527) !important; + transition: background-color 0.2s, border-left 0.3s, box-shadow 0.6s; + background-color: rgba(0, 0, 0, 0.1); + box-shadow: rgba(156, 119, 50, 0.3) 0px 0px 10px; +} + +.inFocus:hover { + transition: background-color 0.2s, border-left 0.3s; + background-color: rgba(0, 0, 0, 0.1); + box-shadow: rgba(218, 112, 13, 0.657) 0px 0px 10px; + border-width: 2px 2px 2px 15px; +} + +#messageSlider { + top: 0px; + left: 50%; + opacity: 0; /* animated */ + display: flex; + z-index: 1000; + min-width: 10%; + font-size: 0.8em; + position: absolute; + padding: 0.5em 2em; + align-items: center; + justify-content: center; + border-radius: 0 0 1em 1em; + transform: translateX('-100%'); + color: rgba(255, 255, 255, 0.7); +} + +.happyMsg { + background-color: rgba(20, 116, 68, 0.76); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.infoMsg { + background-color: rgba(0, 0, 0, 0.4); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.warnMsg { + background-color: rgba(143, 81, 0, 0.794); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.errorMsg { + background-color: rgba(82, 6, 6, 0.705); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + + +.collapsibleZone { + width: 100%; + border: 0px; + outline: none; + padding: 0.4em; + cursor: pointer; + text-align: left; + font-size: 0.6rem; + box-sizing: border-box; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.0); + background-color: rgba(0, 0, 0, 0.2); + } + +.collapsibleZone::before{ + content: "\25B6"; + color: white; + display: inline-block; + margin-right: 12px; + transform: rotate(0deg) scale(0.7); + transition: transform 0.3s ease-in-out; +} + +.collapsibleZone:hover { + color: rgba(255, 255, 255, 1.0); + transition: all 0.3s ease-in-out; + background-color: rgba(255, 255, 255, 0.2); +} + +.activeZone { + color: rgba(255, 255, 255, 1.0); + background-color: rgba(255, 255, 255, 0.2); +} + + +.activeZone::before{ + content: "\25B6"; + color: white; + display: inline-block; + /* margin-right: 12px; */ + transform: rotate(90deg) scale(1.0); + transition: transform 0.3s ease-in-out; +} + +.edge_program { + border-right: solid rgba(20, 138, 50, 0.582) 6px; +} + +.edge_preview { + border-right: solid rgba(177, 24, 24, 0.7) 6px; +} + +.closePromo { + transition: all 200ms ease-in-out; +} + +.closePromo:hover { + transform: rotate(90deg); +} + +.wrap { + white-space: normal; +} + +#rdOptionsCollapsible { + display: none; /* controlled */ + box-sizing: border-box; + padding: 0; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-in-out; + font-size: 0.5rem; + background-color: rgba(0,0,0,0.1); + border-radius: 0.5rem; + margin-bottom: 0.5rem; + } + + .RDoptionsText { + color: white; + border: 2px solid transparent; + margin-left: 0.1em; + margin-right: 0.1em; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + padding-inline-start: 5px; + font-size: 0.8em; + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} \ No newline at end of file diff --git a/static/css/spx_layout.css b/static/css/spx_layout.css new file mode 100644 index 0000000..f8b8d99 --- /dev/null +++ b/static/css/spx_layout.css @@ -0,0 +1,1211 @@ +/* + Copyright 2020 SPX Graphics + CSS file for basic stuff. Must be loaded first. +*/ + + +html, body { + margin: 0px; + height: 100%; + color: white; + /* font-size: 1.5vw; */ + font-size: clamp(1.0rem, 1.5vw, 2.0rem); + box-sizing: border-box; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; +} + +*, *:before, *:after { + margin: 0; + padding: 0; + user-select: none; + box-sizing: inherit; + } + + +.HIDE{ + /* WHILE DEBUGGING unhide OBJECTS with display:no-none ++++++++++++++++++++++++++ */ + display : none; /*change this to no-none to see debug data in editors */ + border : 2px dashed rgb(0, 248, 0); + padding : 5px; + margin : 5px; + background-color: rgba(173, 76, 11, 0.246); + /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +} + +.inlineHelp:hover { + color: orange; + cursor: help; +} + +.footerRegister { + margin: 0 0.6em; + padding: 0.4em 1.0em; + border-radius: 0.7em; + font-size: 0.7em; + text-transform: uppercase; + background-color: rgba(3, 139, 37, 0.7); + color: rgb(255, 255, 255); + text-shadow: 1px 1px 1px rgb(0, 0, 0); + } + +.footerRegister:hover { + background-color: rgba(0, 217, 54, 0.7); + color: rgb(255, 255, 255); + } + +ul { + padding-left: 2em; +} + +a:link, +a:visited { + color: white; + text-decoration: none; +} + +a:hover { + color: orange; + text-decoration: none; +} + +a:active { + color: orange; + text-decoration: none; +} + +div { + box-sizing: border-box; +} + +h2{ + margin-top: 80px; + font-size: 0.7rem; + margin-bottom: 2px; + letter-spacing: 2px; + text-transform: uppercase; + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} + +h2:first-of-type{ + margin-top: 10px; +} + +.h2hr { + margin: 6px 0px 10px 0px; + border: 1px solid rgba(0,0,0,0.0); + border-top: 2px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(106, 112, 119, 0.5); +} + + +hr { + margin: 5px 0px 20px 0px; + border: 1px solid rgba(0,0,0,0.0); + border-top: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(138, 138, 138, 0.2); +} + +hr.menuDivider { + margin: 5px 0; + border: 1px solid rgba(0,0,0,0.0); + border-top: 2px solid rgba(0,0,0,0.5); + border-bottom: 1px solid rgba(161, 161, 161, 0.2); +} + + +td { + vertical-align: middle; + border: 0px solid yellow; +} + + + +iframe { + transform-origin: top left; + background-color: rgb(0, 0, 0); + border: 1px solid rgb(0, 0, 0); + /* removed in 1.1.0 ----- + width: 1920px; + height: 1080px; */ + overflow: hidden; +} + + +/* html elements above this line, custom classes alphabetized below */ + + +td.aright{ + justify-content: flex-end; + text-align: right; +} + +.beta + { + background-color: rgba(138, 113, 113, 0.822); + border-radius: 0px; + padding: 1px 8px; + font-family: "UI-Bold", Arial, Helvetica, sans-serif; + font-size: 0.85em; + color: rgb(48, 48, 48); + margin-left: 0.25em; + margin-right: 0.75em; + border-bottom: 2px solid rgb(128, 21, 7); + } + + +.brd{ + border: 2px dotted white; + border-collapse: separate; +} + +#breadCrumsZone { + display: flex; + align-items: center; + flex-grow: 1; +} + +.breadcrumbs{ + color: #B9BDC2; + font-size: 0.9rem; + text-transform: uppercase; + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} + +.breadcrumbGear { + opacity: 0.3; + margin: 0 0.5em; + font-size: 0.6em; + color: #ffffff; +} + +.breadcrumbGear:hover { + opacity: 1.0; + cursor: pointer; +} + +.serverButtons { + display: flex; + flex-grow: 1; + align-items: center; + justify-content: flex-end; +} + +.breadIcon { + height: 100%; + display: flex; + line-height: 1em; + width: fit-content; + align-items: center; + justify-content: center; + border: 0px solid yellow; +} + + +.caption{ + font-size: 0.7em; + opacity: 0.6; +} + + +.caret-icon{ + font-size: 1.0rem; + color: #237BBA; + margin: 0 0.5em !important; +} + +.gcpluginbuttondiv { + display: flex; + align-items: center; + font-size: 0.6rem; + margin-top: 1em; + padding: 0.6em 0.4em 0.6em 0.4em; + background-color: rgba(0,0,0,0.1); + border-top: 1px solid rgba(0,0,0,0.7) !important; + border-bottom: 1px solid rgba(255,255,255,0.3) !important; +} + +.gcplugindescription { + font-size: 0.5; + color: rgba(255,255,255,0.5); +} + + +.center { + text-align: center !important; + } + + +.centerColumn { + margin: auto; + width: 70%; + height: 100%; + overflow: auto; + border: 0px solid salmon; + } + +.helpid, +.copyid { + margin-left: 0.25em; + background: rgba(255, 255, 255, 0.05); + padding: 0.3em 0.6em; + border-radius: 0.2em; + color:rgba(255, 255, 255, 0.4); + transition: all 0.2s linear ; + } + +.copyid:hover { + background: rgba(0, 0, 0, 0.5); + color:rgb(255, 255, 255); + transition: all 0.2s linear ; + } + +.helpid:hover { + background: rgb(5, 45, 145); + color:rgb(255, 255, 255); + transition: all 0.2s linear ; + cursor: help; + } + +.content { + flex: 1 1; + overflow: auto; + border: 0px solid red; +} + +.delim { + color: rgba(53, 178, 250, 0.651); + margin-right: 0.5em; + margin-left: 0.5em; +} + +.delim::before { + content: "|"; +} + +.divider { + display: block; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + text-align: left; + font-size: 0.5em; + text-transform: uppercase; + margin-top: 1.5em; + padding-bottom: 0.4em; + border-bottom: 1px solid rgba(255, 255, 255, 0.5); + margin-bottom: 0.5em; + opacity: 0.5; +} + +#logo { + /* width: 2em; *//*50px;*/ + width: clamp(1.0rem, 2em, 2.0rem); + margin:0; + opacity:1; +} + +.file, .folder{ + user-select: none; + display: block; + cursor: pointer; +} + +.filebrowser { + overflow: auto; + font-size: 0.9em; + padding: 0.1em; + border: 0px solid purple; + padding: 0.7em; + /* background-color: rgba(0, 0, 0, 0.1); */ + flex-grow: 1 !important; + flex-shrink: 1 !important; +} + +.selectedFile{ + border-left: 3px solid orange; + border-right: 3px solid orange; + background-color: rgba(255, 166, 0, 0.157); +} + +.filebrowser UL { + padding: 0.2em; +} + +.filebrowser LI { + font-size: 0.9em; + padding: 0.5em; + margin-left: 0px; + border-bottom: 1px solid #ffffff28; +} + +.filebrowser_file, .filebrowser_folder, .filebrowser_up{ + color: rgb(214, 214, 214); + display: block; + cursor: pointer; +} + +.filebrowser_file:hover, .filebrowser_folder:hover, .filebrowser_up:hover{ + color: rgb(227, 239, 245); + background-color: #2c3136; +} + +div.curfolder{ + padding: 0.5em 1em; + color: rgba(227, 239, 245, 0.589); + font-size: 0.6em; + border: 0px solid purple; +} + +.headlineArea { + border-top: 2px solid grey; + vertical-align: top; +} + + +.header { + padding: 0.5em 0.7em 0.0em 0.7em; + border: 0px solid pink; +} + +.headerRow { + padding:2px; + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + border: 0px dashed cornsilk; +} + +.scrollingMenuArea { + left:0.5em; + top: 1.8em; + overflow-y: auto; + max-height: 90vh; + position: absolute; + background-color: hsla(235, 13%, 18%, 0.95); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); +} + + +.dropdown { + z-index:500; + display: flex; + align-items: center; + justify-content: flex-start; +} + +.dropdown-content { + z-index: 1; + display: none; + padding: 0.5em; + padding: 1em; + line-height: 2em; + font-size: clamp(0.8rem, 0.8em, 2.0rem); + overflow-y: auto; + height: fit-content; + transform-origin: top left; +} + +.dropdown:hover .dropdown-content { + display: block; + overflow: auto; + border: 0px solid red; +} + + +.dropdown-content-right { + right: 0; + top: 2em; + z-index: 100; + display: none; + padding: 0.5em; + line-height: 2em; + font-size: 0.8em; + position: absolute; + transform-origin: top left; + border: 0px solid green; + background-color: #272833; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} + +.dropdown:hover .dropdown-content-right { + display: block; + overflow: auto; + border: 0px solid red; +} + +.dropdown-content a, +.dropdown-content-right a { + white-space: nowrap; +} + +.tableheaderText { + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: bold; +} + +.tableheaderHelp { + color: rgb(25, 134, 212); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.8rem; + text-transform: uppercase; + font-weight: bold; + opacity: 0.5; +} + +.tableheaderHelp:hover { + color: rgb(250, 201, 96); + opacity: 1.0; + cursor: help; +} + +.tableheaderHelp2 { + color: rgb(186, 226, 255); + font-family: "UI-Light", Arial, Helvetica, sans-serif; + font-size: 0.8rem; + text-transform: uppercase; + font-weight: bold; + opacity: 0.5; +} + +.tableheaderHelp2:hover { + color: rgb(255, 185, 33); + opacity: 1.0; + cursor: pointer; +} + + +.hidden { + display: none !important; +} + + +.home-icon { + font-size: 1.2em; + color: #B9BDC2; + margin-left: 20px; + margin-right: 5px; +} + +.instruction { + font-size: 0.6em; + color: #a7abad; + line-height: 1.4em; + border-left: 1px solid #036a9e; + padding: 0.5em 0.2em 0.5em 1em; + margin-top: 0.5em; + margin-bottom: 0.5em; + background-color: rgba(0, 0, 0, 0.2); +} + + + +.itemlist + { + background-color: #2A3641; + /* background-image: url('/media/images/rundown_graphic.png'); + background-size: 100%; + background-repeat: no-repeat; + background-position-y: 100%; */ + } + + +.truncate{ + margin-top: 0.2em; + margin-bottom: 0.3em; + font-family: "UI-Light", Arial, Helvetica, sans-serif; + width: auto; + min-width: 0; + max-width: 90%; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0.5; + } + + + +.left { + width: 60%; + height: 100%; + float: left; + overflow: auto; + border: 0px solid salmon; + } + + +.l-icon { + margin-top: 0.7em; + } + +.l-icon:hover { + color: orange; + } + + + +.message{ + padding: 10px; + background-color: rgba(125, 226, 159, 0.363); + color: white; + border-radius: 6px; + text-align: center; + font-size: 0.7rem; + margin-bottom: 30px; +} + + +.messagerror{ + padding: 10px; + background-color: rgba(221, 82, 27, 0.363); + color: white; + border-radius: 6px; + text-align: center; + font-size: 0.7rem; + margin-bottom: 30px; +} + + +.over { + background-color: pink !important; +} + + +.pM + { + padding: 10px; + } + + +.playFalse + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 0 !important; + color:green; + } + + +.playTrue + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 1 !important; + color:green; + } + +.playAuto + { + /*FIXME: This is not super clever... See view-controller play icon logic...*/ + opacity: 1 !important; + color:green !important; + border-right: 3px solid green; + } + +.pluginButtonDiv { + /* added in 1.3.0 */ + min-width: 50%; +} + +.renderer + { + background-image: url('/img/checker60.png'); /* bgimage for local preview */ + background-size: 10vw; + } + +.registrationDiv { + display: block; + padding: 0.05em; + background-color: rgba(18, 82, 25, 0.604); + border-radius: 200px; + color: green; + border: 2px solid rgba(0, 128, 0, 0.317); + text-align: center; + font-size: 0.8em; + margin-top: 0.8em; + opacity: 0.7; + transition: all 0.3s ease-in-out; +} + +.registrationDiv:hover { + border: 2px solid orange; + background-color: rgba(12, 132, 6, 0.441); + transform: scale(0.98); + transition: all 0.3s ease-in-out; + opacity: 1.0; +} + +.right { + margin-left: 60%; + height: 100%; + overflow: auto; + border: 0px solid blueviolet; + } + + + +.rowhead { + margin: auto 1px auto 1px; + vertical-align: middle; + color: white; + font-family: "UI-Black", Arial, Helvetica, sans-serif; + font-size: 0.85em; + line-height: 2em; + padding-left: 5px; + padding-right: 5px; +} + +.scroller { + overflow: auto !important; + border: 0px dotted yellow; +} + + +.serverIndicator { + cursor: pointer; +} + +.serverIndicator:hover { + color: orange; +} + +.disabledServer { + text-decoration: line-through; + opacity: 0.4; + color: black; +} + +.scroller::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.0); + border-radius: 0px; + background-color: #414C5A; +} + +.scroller::-webkit-scrollbar { + width: 14px; + background-color: #414C5A; + border: 0px solid yellow; +} + +.scroller::-webkit-scrollbar-thumb { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.0); + background-color: #677180; + padding: 10px; +} + +.scroller::-webkit-scrollbar-thumb:hover { + background-color: #718cb4; +} + +.serverbtn { + background-color: rgba(0, 0, 0, 0); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + padding: 0.3em 0.8em; + border-radius: 0px; + font-size: 0.8em; + margin: 0px; + color: white; + cursor: default; + } + +.spacer { + /* empty span between UI controls, spacer ftype */ + display: block; + background-color: green; + height: 1em; +} + +.spxFlexContainer { + display: flex; /* flex or inline-flex */ + justify-content: center; + align-content: stretch; + padding: 0.0em; + border: 0px solid yellow; + margin: 0px; + gap: 2px; +} + +.spxFlexItem { + flex: auto; + white-space: nowrap; + padding: 0px 0px 0px 0px; + margin: 0px; +} + +.spxMainPanel { + height: 55vw; + display: table; + width: 100%; + max-width: 2000px; + text-align: center; + border: 0px solid yellow; + border-collapse: separate; + border-spacing: 2px; + margin: auto; +} + +.spxTopRow { + display: table-row; + height: 4em; + color: white; + border: 0px solid red !important; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; +} + +.spxBottomRow { + display: table-row; + height: 12.5em; + /* background: rgb(9, 36, 9); */ + color: beige; + vertical-align: middle; +} + +.spxMainSection { + height: 100%; + display: table-cell; + width: 100%; + vertical-align: middle; + border: 0px solid green; +} + +.spxTableRow { + height: 100%; + display: table-row; + width: 100%; + vertical-align: middle; + border: 0px solid green; +} + +.spxCell { + display: table-cell; + vertical-align: middle; + margin: 10px !important; + text-align: left; + padding: 10px; +} + +.spxPanelL { + width: 50%; + color: white; +} + +.spxPanelC { + width: 0.1em; + /* background: red; */ + color: white; +} + +.spxPanelR { + color: white; + border-left: 2px solid grey; + margin-left: 10px; +} + +.spxTableHead { + color: white; + text-transform: uppercase; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + text-shadow: rgba(255, 255, 255, 0.1) 0 0 2px; + line-height: 2em; + font-size: 0.75em; + margin: auto auto; + border: 0px solid pink; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.spxConfigHead { + color: rgba(255, 255, 255, 0.52); + font-family: "UI-Regular"; + text-shadow: rgba(255, 255, 255, 0.1) 0 0 2px; + font-size: 0.75em; + margin: auto auto; + border: 0px solid pink; + white-space: nowrap; +} + +.spxConfigBody { + color: rgba(255, 255, 255, 0.52); + font-family: "UI-Regular"; + font-size: 0.7em; +} + +.prvar { + color: rgba(255, 255, 255, 0.2); + font-family: monospace; + float: right; + padding-right: 1em; +} + +.spxInfotext { + font-size: 0.6em; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + opacity: 0.7; + line-height: 120%; +} + +.spxInfoRegtext { + font-size: 0.7em; + color:rgb(198, 198, 198); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +.spxTableHeadsmall { + font-size: 0.6em; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + text-shadow: rgba(255, 255, 255, 0.5) 0 0 2px; + opacity: 0.75; + line-height: 1; /* 75%; */ +} + + +.footer { + height: 32px; + border: 0px solid orange; + margin: 8px 10px 4px 10px; + padding: 8px 10px; + } + + +table.footerTable, td.footerTable, tr.footerTable, span.statusbar div.footerTable{ + padding: 0px; + margin: 0px; + line-height: 16px; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + + + +.statusbar + { + color: #aaaaaa; + font-family: Arial, Helvetica, sans-serif; + font-size: 100%; + padding: 3px 3px; + } + +.statusBarWarn + { + color: #ffb95d; + } + +.statusBarWarn::before + { + font-family: "FontAwesomeSol900"; + content: "\f071"; + color: rgb(230, 137, 16); + font-size: 60%; + margin-right: 6px; + } + + + +.statusBarError + { + background-color: rgba(124, 9, 9, 0.808); + color: #f3ebeb; + } + +.statusBarError::before + { + font-family: "FontAwesomeSol900"; + content: "\f071"; + color: rgb(230, 226, 16); + font-size: 60%; + margin-right: 6px; + } + +.tooltipzone { + position: relative; + display: inline-block; +} + +.tooltipzone .tooltip { + visibility: hidden; + background-color: black; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 0.1em 0.7em; + font-size: 0.9em; + opacity: 0; + position: absolute; + z-index: 1; + top: 100%; + left: 50%; + transform: translate(-50%, 10px); + transition: opacity 1.5s; +} + +.tooltipzone:hover .tooltip { + visibility: visible; + opacity: 1; +} + + +.vtop{ + vertical-align: top; +} + +.vmid{ + vertical-align: middle; +} + + +.wide + { + width: 100% !important; + } + +.w50 + { + width: 49% !important; + } + +.welcome { + margin-top: 0.7em; + font-family: Arial, Helvetica, sans-serif; + margin-left: 3em; + margin-right: 3em; + font-size: 0.9em; + color: #cfcfcf; + line-height: 1.3em; + +} + +.working + { + background-color: rgb(255, 136, 0); + border-radius: 3px; + padding: 1px 8px; + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + font-size: 0.85em; + text-shadow: rgba(0, 0, 0, 1.0) 0 0 6px; + color: white; + margin-left: 1.5em; + } + + +.wrapper { + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + border: 0px solid green; + } + + +.itemrow { + background-color: rgba(255,255,255,0.05); + border-top: 2px solid transparent !important; + border-right: 2px solid transparent !important; + border-bottom: 2px solid transparent !important; + border-radius: 5px; + box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 8px; + cursor: pointer; + margin-bottom: 8px; + transition: border-left 0.3s, color 0.2s, background-color 0.2s, border-width 0.2s; +} + +.itemrow:hover { + background-color: rgba(153, 218, 255, 0.1); + /* border-width: 2px 2px 2px 15px; */ +} + + +.inFocus { + border-top: 2px solid rgba(187, 164, 60, 0.746) !important; + border-right: 2px solid rgba(141, 122, 13, 0.431) !important; + border-bottom: 2px solid rgba(158, 120, 14, 0.527) !important; + transition: background-color 0.2s, border-left 0.3s, box-shadow 0.6s; + background-color: rgba(0, 0, 0, 0.1); + box-shadow: rgba(156, 119, 50, 0.3) 0px 0px 10px; +} + +.inFocus:hover { + transition: background-color 0.2s, border-left 0.3s; + background-color: rgba(0, 0, 0, 0.1); + box-shadow: rgba(218, 112, 13, 0.657) 0px 0px 10px; + /* border-width: 2px 2px 2px 15px; */ +} + +#messageSlider { + top: 0px; + left: 50%; + opacity: 0; /* animated */ + display: flex; + z-index: 1000; + min-width: 10%; + font-size: 0.8em; + position: absolute; + padding: 0.5em 2em; + align-items: center; + justify-content: center; + border-radius: 0 0 1em 1em; + transform: translateX('-100%'); + color: rgba(255, 255, 255, 0.7); +} + +.happyMsg { + background-color: rgba(20, 116, 68, 0.76); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.infoMsg { + background-color: rgba(0, 0, 0, 0.4); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.warnMsg { + background-color: rgba(223, 209, 11, 0.794); + color: black !important; + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + +.errorMsg { + background-color: rgba(82, 6, 6, 0.705); + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 10px; +} + + +.collapsibleZone { + width: 100%; + border: 0px; + outline: none; + padding: 0.4em; + cursor: pointer; + text-align: left; + font-size: 0.6rem; + box-sizing: border-box; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.0); + background-color: rgba(0, 0, 0, 0.2); + } + +.collapsibleZone::before{ + content: "\25B6"; + color: white; + display: inline-block; + margin-right: 12px; + transform: rotate(0deg) scale(0.7); + transition: transform 0.3s ease-in-out; +} + +.collapsibleZone:hover { + color: rgba(255, 255, 255, 1.0); + transition: all 0.3s ease-in-out; + background-color: rgba(255, 255, 255, 0.2); +} + +.activeZone { + color: rgba(255, 255, 255, 1.0); + background-color: rgba(255, 255, 255, 0.2); +} + + +.activeZone::before{ + content: "\25B6"; + color: white; + display: inline-block; + /* margin-right: 12px; */ + transform: rotate(90deg) scale(1.0); + transition: transform 0.3s ease-in-out; +} + +.edge_program { + border-right: solid rgba(20, 138, 50, 0.582) 6px; +} + +.edge_preview { + border-right: solid rgba(177, 24, 24, 0.7) 6px; +} + +.closePromo { + transition: all 200ms ease-in-out; +} + +.closePromo:hover { + transform: rotate(90deg); +} + +.wrap { + white-space: normal; +} + +#rdOptionsCollapsible { + display: none; /* controlled */ + box-sizing: border-box; + padding: 0; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-in-out; + font-size: 0.5rem; + background-color: rgba(0,0,0,0.1); + border-radius: 0.5rem; + margin-bottom: 0.5rem; + } + + .RDoptionsText { + color: white; + border: 2px solid transparent; + margin-left: 0.1em; + margin-right: 0.1em; + text-shadow: rgb(0, 0, 0, 0.4) 0 0px 8px; + padding-inline-start: 5px; + font-size: 0.8em; + font-family: "UI-Light", Arial, Helvetica, sans-serif; +} + +.RDoptionsText::placeholder { + color: rgba(255, 255, 255, 0.4); + font-style: italic; + font-size: inherit; +} + + +.namedContentIndicator { + --darkCol: rgba(59, 4, 4, 0.494); + --liteCol: rgba(99, 9, 9, 0.375); + --textCol: rgb(255, 255, 255); + --bordCol: rgba(255, 255, 255, 0.355); + z-index: 10; + font-size: 0.5em; + padding: 0.2em 0.7em; + border-radius: 0.4em; + margin-left: 1em; + justify-content: center; + background-size: 1vw 1vw; + color: var(--textCol); + box-shadow: 0 0 0.4em rgba(204, 13, 13, 0.76); + border: 1px solid var(--bordCol); + text-shadow: 1px 1px 1px rgb(0, 0, 0); + font-family: "UI-Regular", Arial, Helvetica, sans-serif; + background-image: linear-gradient( + 135deg, + var(--darkCol) 25%, + var(--liteCol) 25%, + var(--liteCol) 50%, + var(--darkCol) 50%, + var(--darkCol) 75%, + var(--liteCol) 75%, + var(--liteCol) 100%); +} \ No newline at end of file diff --git a/static/css/spx_modal.css b/static/css/spx_modal.css new file mode 100644 index 0000000..8087815 --- /dev/null +++ b/static/css/spx_modal.css @@ -0,0 +1,461 @@ +/* + Copyright 2020 SPX Graphics +*/ + +/* TABS in import template dialog */ +/* Style the tab */ + +:root { + --tabButtonBorderColor: #afb5ba; + --backgroundColor: #2d333b; +} + + +.promoBoxCols { + display: flex; + flex-direction: row; + gap: 1.5em; +} + +.promoLeft { + flex-basis: 60%; + position: relative; + font-family: 'UI-Light' !important; + font-size: 0.7em; +} + +.promoBoxHead { + font-size: 1.5em; + margin-bottom: 0.7em; +} + +.promoLeft p { + margin-top: 0.5em; + opacity: 0.7; +} + +.promoLeft a { + color: orange; + text-decoration: none; +} + +.promoLeft a:hover { + color: white; +} + + + +.promoLeft h2 { + font-size: 1.4em; + margin-top: 2.0em; + margin-bottom: 0.5em; + text-transform: none; + color: white; + width: 100%; + font-weight: normal; + letter-spacing: normal; + border-bottom: 1px solid rgba(255, 255, 255, 0.242); +} + +.promoLeft li { + list-style: square; + color: inherit; + opacity: inherit; +} + +.promoRight { + font-size: 0.8em; + flex-basis: 40%; + position: relative; +} + +.promoRight img { + width: 80%; + height: auto; +} + + +.tabButtonRow { + width: 100%; + display: flex; + gap: 0.6em; + font-size: 0.8em; + padding: 1.5em 0.3em 0 0.3em; + flex-shrink: 0; + border-bottom: 1px solid var(--tabButtonBorderColor); +} + +.tabButtonRow > div { + flex-grow: 1; + display: flex; + justify-content: flex-end; + align-items: center; +} + +/* Style the buttons that are used to open the tab content */ +.tabButtonRow button { + background-color: inherit; + float: left; + border: none; + outline: none; + cursor: pointer; + padding: 0.4em 1.0em; + transition: 0.1s; + font-family: inherit; + border-radius: 0.3em 0.3em 0 0; + position: relative; + transform: translateY(1px); + z-index: 10; + margin-right: 0.4em; + color: rgba(255, 255, 255, 0.385); + border: 0px solid var(--tabButtonBorderColor); + border-width: 1px 1px 0px 1px; +} + +/* Change background color of buttons on hover */ +.tabButtonRow button:hover { + background-color: rgba(194, 194, 194, 0.426); + color: black; +} + +/* Create an active/current tablink class */ +.tabButtonRow button.active { + background-color: #ccc; +} + +.tabSelected { + background-color: #b1b6bc !important; + color: rgb(32, 32, 32) !important; + border-radius: 0.3em 0.3em 0 0; +} + +/* Style the tab content */ +.tabcontent { + display: none; + padding: 0.5em; + border: 0px solid #ccc; + border-top: none; +} + +#tab1, +#tab2, +#tab3, +#tab4 { + padding: 0.5em; + display: flex; + flex-direction: column; + border: 0px solid blue; + height: 100%; + overflow: auto; + /* background-color: var(--backgroundColor); */ +} + +#tab2, +#tab3, +#tab4 { + padding: 1.5em; +} + + + + +.dialogHeaderBar { + display: flex; + flex-direction: row; + align-items: center; + position: relative; + padding: 0.2em 0.5em; + font-size: 0.8em; + background-color: rgba(255,255,255,0.2); + color: white; + border-bottom: 1px solid #3c3c3c; +} + +.dialogHeaderBarClose { + display: flex; + flex-grow: 1; + justify-content: flex-end; +} + +.dialogCloseButton { + cursor: pointer; + font-size: 1.5em; +} + +.dialogCloseButton:hover { + color: rgba(0, 0, 0, 0.5); +} + +.addTemplateItem{ + background-color: rgba(255,255,255,0.05); + width:100%; + padding:10px; + margin-bottom:15px; + box-shadow: rgba(0, 0, 0, 0.7) 0px 0px 10px; +} + +.addTemplateItem:hover{ + background-color: rgba(255,255,255,0.2); + cursor: pointer; +} + +.templateName{ + text-transform: uppercase; +} + +.templateDesc{ + font-size: 75%; + opacity: 0.6; +} + +.collapsible { + box-sizing: border-box; + color: white; + cursor: pointer; + padding: 12px; + width: 100%; + border-top: 0px; + border-right: 0px; + border-bottom: 1px solid black; + text-align: left; + outline: none; + font-size: 1rem; + text-transform: uppercase; + } + + .collapsible::before{ + content: "\25B6"; + color: white; + display: inline-block; + margin-right: 12px; + transform: rotate(0deg) scale(0.7); + transition: transform 0.3s ease-in-out; + } + + + .globalCollapsible + { + font-size: 0.7rem; + } + + .active, .collapsible:hover { + background-color: #375ea3; + } + + + .active::before{ + content: "\25B6"; + color: white; + display: inline-block; + margin-right: 12px; + transform: rotate(90deg) scale(1.0); + transition: transform 0.3s ease-in-out; + } + + + .collapsiblecontent { + box-sizing: border-box; + padding: 0px 10px; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-in-out; + font-size: 1rem; + background-color: rgba(0,0,0,0.1); + } + + .configGeneralContent { + box-sizing: border-box; + padding: 0px 10px; + overflow: hidden; + transition: max-height 0.3s ease-in-out; + font-size: 1rem; + background-color: rgba(0,0,0,0.1); + } + + + +/* Remove default bullets */ +ul, #myUL { +list-style-type: none; +} + +/* Remove margins and padding from the parent ul */ +#myUL { +margin: 0; +padding: 0; +} + +/* Style the caret/arrow */ +.caret { +cursor: pointer; +user-select: none; /* Prevent text selection */ +} + +/* Create the caret/arrow with a unicode, and style it */ +.caret::before { +content: "\25B6"; +color: black; +display: inline-block; +margin-right: 6px; +} + +/* Rotate the caret/arrow icon when clicked on (using JavaScript) */ +.caret-down::before { +transform: rotate(90deg); +} + +/* Hide the nested list */ +.nested { +display: none; +} + +/* Show the nested list when the user clicks on the caret/arrow (with JavaScript) */ +.opened { +display: block; +} + + +.overlay { + position: fixed; + display: none; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(65, 76, 90, 0.9); + z-index: 900; +} + + +.modal { + width: 60%; + height: 90%; + position: absolute; + left: 55%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 20; + padding: 0.3em; + background-color: #414C5A; + color: white; + box-shadow: rgba(0, 0, 0, 0.3) 0px 0px 20px; +} + +.icon::before { + font-family: "FontAwesomeSol900"; + display: inline-block; + margin-right: 10px; + font-size: 1.2em; + -webkit-font-smoothing: antialiased; +} + +.folder::before { content: "\f07b"; color: rgb(9, 119, 170);} +.file::before { content: "\f15b"; color: rgb(241, 241, 237);} +.back::before { content: "\f106"; } +.home::before { content: "\f102"; } + +.height1{ + height: 1em; +} + +.height2{ + height: 2em; +} + +.height3{ + height: 3em; +} + +.height4{ + height: 4em; +} + + +.modal_top{ + flex-shrink: 0; + border: 0px solid pink; + border-bottom: 1px dashed rgba(51, 150, 216, 0.445); +} + +.modal_top SPAN{ + transform: translateY(-50%); + font-size: 0.8em; + margin-left: 1em; + } + +.modal_bottom{ + gap: 0.5em; + width: 100%; + flex-grow: 0; + display: flex; + height: 2.5em; + flex-shrink: 0; + padding-top: 0.3em; + flex-direction: row; + align-items: center; + justify-content: flex-start; + border: 0px solid pink; +} + +.browserMessage { + top: 0; + position: relative; + font-size: 0.6em; + color: rgba(255, 255, 255, 0.5); + margin-left: 0.1em; + user-select: none; + display: flex; + align-items: center; + justify-content: flex-start; + border: 0px dotted pink; + height: 100%; +} + +.modal_bottom > div > button { + border: 0px dotted white; + padding: 0.3em 1em; + margin-right: 0.2em; +} + +.KBHelptable{ + border-collapse:collapse; + } + +.KBHelptable td{ + padding:10px; + border:#4e95f4 0px solid; + } + +.KBHelptable th{ + background: rgba(0,0,0,0.5); + text-align: left; + padding: 7px; +} + +.KBHelptable tr:nth-child(odd){ + background: rgba(0,0,0,0.1); + } + /* Define the background color for all the EVEN background rows */ + .KBHelptable tr:nth-child(even){ + background: rgba(255,255,255,0.1); + } + + .storeIcon { + height: 100%; + opacity: 0.6; + min-width: 8%; + background-size: contain; + border: 0px solid white; + background-position: 5% 50%; + background-repeat: no-repeat; + transition: opacity 0.3s ease-in-out; + background-image: url('/img/storeicon.png'); + } + + .storeIcon:hover { + opacity: 1; + cursor: pointer; + transition: opacity 0.3s ease-in-out; + } \ No newline at end of file diff --git a/static/css/spx_renderpopups.css b/static/css/spx_renderpopups.css new file mode 100644 index 0000000..be993b0 --- /dev/null +++ b/static/css/spx_renderpopups.css @@ -0,0 +1,67 @@ +html, + body { + margin: 0; + padding: 0; + width: 100vw; + height: 100vh; + display: flex; + color: white; + overflow: hidden; + align-items: center; + flex-direction: column; + justify-content: center; + font-family: 'UI-Regular'; + background-color: rgb(0,0,0); + } + + *, *:before, *:after { + box-sizing: inherit; + margin: 0; + padding: 0; + user-select: none; + } + + .renderer { + background-image: url('/img/checker60.png'); /* bgimage for local preview */ + background-size: 10vw; + transform-origin: top left; + border: 0px; + outline: 0px; + padding: 0; + margin: 0; + } + + #toolbar { + flex-grow: 0; + width: 100%; + display: flex; + align-items: left; + flex-direction: row; + align-self: flex-start; + border: 1px solid yellow; + } + + .watermark { + top: 0; + left: 0; + top: 50%; + left: 50%; + opacity: 1; /* WATERMARK if 1 = visible, 0 = invisible */ + width: 50vw; + z-index:100; + height: 50vw; + position: absolute; + background-size: contain; + border: 0px solid yellow; + background-position: center; + background-repeat: no-repeat; + transform: translate(-50%, -50%); + } + + .prev { + background-image: url("/img/spx_preview.png"); + } + + .prog { + background-image: url("/img/spx_program.png"); + } \ No newline at end of file diff --git a/static/css/ticker.css b/static/css/ticker.css new file mode 100644 index 0000000..96276e4 --- /dev/null +++ b/static/css/ticker.css @@ -0,0 +1,84 @@ +:root { + /* Define a variable for the margin of the overlay, ~70px at 1080p */ + --margin: 3.65vmax; +} + +.main { + position: absolute; + top: calc(12 * var(--margin)); + left: var(--margin); + width: calc(100vw - 2 * var(--margin) - 12vw); + opacity: 0; +} + +.f1_bg { + background: var(--main-color); + display: table; + position: relative; + padding: 0.2em 0.4em; +} + +.f1_text { + color: var(--white-color); + font-family: 'UI-Black'; + font-size: 0.8rem; + line-height: 1; + width: 100%; +} + +.f2_bg { + background: var(--white-color); + display: table; + position: relative; + padding: 0.1em 0.4em 0em; + width: 100%; +} + +.f2_text { + color: var(--black-color); + font-family: 'UI-Black'; + font-size: 1.45rem; + line-height: 1.25; + overflow: hidden; + white-space: nowrap; + letter-spacing: -0.05rem; +} + +.f3_bg { + z-index: 2; + background: #252525; + float: left; + position: relative; + padding: 0.1em 0.4em; +} + +.f3_text { + color: var(--white-color); + font-family: 'UI-Regular'; + font-size: 0.9rem; + line-height: 1.25; +} + +.ticker_bg { + z-index: -1; + background: var(--dark-color); + width: 100%; + padding-left: 0.5em; + padding-right: 0.5em; +} + +.ticker { + z-index: 1; +} + +.webTicker { + color: var(--white-color); + float: left; + position: relative; +} + +.webTicker li { + font-size: 1rem; + line-height: 1.2; + font-family: 'UI-Regular'; +} diff --git a/static/css/toggle.css b/static/css/toggle.css new file mode 100644 index 0000000..8b1c8b0 --- /dev/null +++ b/static/css/toggle.css @@ -0,0 +1,152 @@ + + + + +/* + Rec toggle switch and + volume sliders + +*/ + +:root { + --vc-off-color: #2A3641; /* linear-gradient(190deg, rgba(0, 0, 0, 0.39) 5%, rgba(0, 0, 0, 0.157) 50%); */ + --vc-on-color: #2A3641; + --vc-animation-speed: 0.2s ease-out; + --vc-font-family: "UI-Regular"; + --vc-font-size: 1.2em; + --vc-font-weight: unset; + --vc-on-font-color: rgba(255, 255, 255, 1.0); + --vc-off-font-color: rgb(255, 255, 255); + --vc-label-position-off: 14px; + --vc-label-position-on: 14px; + --vc-height: 1.3em; /* 2.0em*/ + --vc-width: 100%; + --vc-handle-width: 60%; + --vc-handle-height: 90%; + --vc-box-border-radius: 0px; + --vc-handle-border-radius: 0px; + --vc-handle-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5); + --vc-handle-color: #485a6b; /* rgb(61, 61, 61); */ + --vc-onclick-width: 80%; + --vc-handle-top: 0.1em; /* 0.2 */ + --vc-handle-fontsize: 0.7em; /* 0.8 */ + --vc-handle-lineHeight: 1.7em; /* 2.2 */ +} + +.toggle-container * { + font-family: var(--vc-font-family); + transition: var(--vc-animation-speed); + cursor: pointer; + /* background: darkgreen; */ +} + +.vc-switch { + width: var(--vc-width); + height: var(--vc-height); + margin-top: 5px; +} + +.toggle-container label { + position: relative; + display: inline-block; + vertical-align: top; + border-radius: var(--vc-box-border-radius); + /* cursor: pointer; */ +} + +.vc-switch-input { + position: absolute; + transform: translate3d(5px, 5px, 0); + opacity: 0; +} + +.vc-switch-label { + position: relative; + display: block; + height: inherit; + font-size: var(--vc-font-size); + font-weight: var(--vc-font-weight); + background: var(--vc-off-color); + border-radius: inherit; +} + +.vc-switch-label:before, +.vc-switch-label:after { + position: absolute; + top: 50%; + margin-top: -0.5em; + line-height: 1.1; +} + +.vc-switch-label:before { + content: attr(data-off); + color: var(--vc-on-font-color); +} + +.vc-switch-label:after { + content: attr(data-on); + color: var(--vc-off-font-color); + opacity: 0; +} + +.vc-switch-label:before { + right: var(--vc-label-position-off); + top: 16px; +} + +.vc-switch-label:after { + left: var(--vc-label-position-on);; +} + +.vc-switch-input:checked ~ .vc-switch-label { + background: var(--vc-on-color); + text-shadow: 0px 0px 6px rgba(255, 255, 255, 0.6); +} + +.vc-switch-input:checked ~ .vc-switch-label:before { + opacity: 0; +} + +.vc-switch-input:checked ~ .vc-switch-label:after { + opacity: 1; +} + +.vc-handle { + left: 2px; + font-size: var(--vc-handle-fontsize); + position: absolute !important; + top: var(--vc-handle-top); + background: var(--vc-handle-color); + border-radius: var(--vc-handle-border-radius); + box-shadow: var(--vc-handle-shadow); + width: var(--vc-handle-width); + height: var(--vc-handle-height); + line-height: var(--vc-handle-lineHeight); +} + + +.vc-handle:before { + content: ""; + top: 50%; + left: 50%; + position: absolute !important; + margin: -6px 0 0 -6px; + width: 12px; + height: 12px; + border-radius: 6px; +} + +.vc-switch-label:active ~ .vc-handle, .vc-handle:active { + width: var(--vc-onclick-width); +} + +.vc-switch-input:checked ~ .vc-handle { + left: unset; + right: 2px; + color: var(--vc-on-font-color); + text-shadow: 0 0 6px var(--vc-on-font-color), + 0 4px 8px green, + 0 0px 12px rgb(20, 209, 20); +} + + diff --git a/static/css/toggle2.css b/static/css/toggle2.css new file mode 100644 index 0000000..8c15e4b --- /dev/null +++ b/static/css/toggle2.css @@ -0,0 +1,123 @@ +.can-toggle { + position: relative; + border: 1px solid yellow; + padding: 0; +} +.can-toggle *, .can-toggle *:before, .can-toggle *:after { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.can-toggle input[type="checkbox"] { + top: 0; + left: 0; + opacity: 0; + position: absolute; +} +.can-toggle input[type="checkbox"][disabled] ~ label { + pointer-events: none; +} +.can-toggle input[type="checkbox"][disabled] ~ label .can-toggle__switch { + opacity: 0.4; +} +.can-toggle input[type="checkbox"]:checked ~ label .can-toggle__switch:before { + left: 0; + content: attr(data-unchecked); +} +.can-toggle input[type="checkbox"]:checked ~ label .can-toggle__switch:after { + content: attr(data-checked); +} +.can-toggle label { + display: flex; + user-select: none; + position: relative; + align-items: center; +} +.can-toggle label .can-toggle__label-text { + /* not visible */ + flex: 1; + padding-left: 32px; +} + +.can-toggle label .can-toggle__switch { + position: relative; +} + +.can-toggle label .can-toggle__switch:before { + top: 0px; + text-align: center; + position: absolute; + content: attr(data-checked); + text-transform: uppercase; + background-color: blue; +} +.can-toggle label .can-toggle__switch:after { + z-index: 5; + text-align: center; + position: absolute; + background: #485a6b; + text-transform: uppercase; + content: attr(data-unchecked); + transform: translate3d(0, 0, 0); +} + +.can-toggle label .can-toggle__label-text { + flex: 1; +} +.can-toggle label .can-toggle__switch { + transition: background-color 0.3s cubic-bezier(0, 1, 0.5, 1); + background: rgba(0, 0, 0, 0.5); /* bg color */ +} +.can-toggle label .can-toggle__switch:before { + color: rgb(160, 160, 160); /* text color on the back */ +} +.can-toggle label .can-toggle__switch:after { + transition: transform 0.3s cubic-bezier(0, 1, 0.5, 1); + color: rgb(255, 255, 255); /* text color on the sliding button */ +} +.can-toggle input[type="checkbox"]:focus ~ label .can-toggle__switch:after, .can-toggle input[type="checkbox"]:hover ~ label .can-toggle__switch:after { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.4); +} +.can-toggle input[type="checkbox"]:checked ~ label .can-toggle__switch:after { + transform: translate3d(80px, 0, 0); /*65px*/ + /*margin-left: 80px; */ +} +/* +.can-toggle input[type="checkbox"]:checked:focus ~ label .can-toggle__switch:after, .can-toggle input[type="checkbox"]:checked:hover ~ label .can-toggle__switch:after { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.4); +} +*/ +.can-toggle label { + /* font-size: 14px; */ +} +.can-toggle label .can-toggle__switch { + flex: 1 0; + /* background-color: hotpink; */ + /*height: 4em; 36px; */ + border-radius: 4px; +} +.can-toggle label .can-toggle__switch:before { + /* non-active one */ + left: max(67px, 50%); /*67px*/ + font-size: 0.7em; /*12px;*/ + line-height: 1; + width: max(67px, 50%); /* 67px; */ + /* background-color: red; */ + padding: 0 0.2em; /*12px*/ +} + +.can-toggle label .can-toggle__switch:after { + /* active one */ + top: 0px; + left: 0px; + border-radius: 2px; + width: max(67px, 50%); /* 67px; */ + line-height: 1; + font-size: 0.7em; /*12px;*/ + /* background-color: greenyellow; */ + +} + +.can-toggle label .can-toggle__switch:hover:after { + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.4); +} + diff --git a/static/css/tree.css b/static/css/tree.css new file mode 100644 index 0000000..35931d6 --- /dev/null +++ b/static/css/tree.css @@ -0,0 +1,111 @@ +/* simple tree */ + +body{ + font-family: Arial, Helvetica, sans-serif; +} + +.simple-tree { + user-select: none; + -moz-user-select: none; +} +.simple-tree>details>summary { + display: none; +} +.simple-tree a, +.simple-tree summary { + display: block; + width: fit-content; + width: -moz-fit-content; + border: solid 1px transparent; + padding: 0 2px; + outline: none; + cursor: pointer; +} +.simple-tree a { + text-decoration: none; + color: inherit; +} +.simple-tree ::-webkit-details-marker { + display: none; +} +.simple-tree summary { + list-style-type: none; + background-color: #eee; + outline: none; +} +.simple-tree.dark summary { + background-color: #444; +} +.simple-tree details>:not(details), +.simple-tree details { + position: relative; +} +.simple-tree details :not(summary) { + margin-left: 20px; +} +.simple-tree.nodots details :not(summary) { + margin-left: 12px; +} +.simple-tree details::before, +.simple-tree details>:not(details)::before { + content: ''; + width: 10px; + display: block; + position: absolute; +} +.simple-tree details::before, +.simple-tree details>:not(details)::before { + background: url('data:image/svg+xml;utf8,') left top / 2px 2px; +} +.simple-tree.dark details::before, +.simple-tree.dark details>:not(summary)::before { + background-image: url('data:image/svg+xml;utf8,'); +} +.simple-tree.nodots details::before, +.simple-tree.nodots details>:not(summary)::before { + background-image: none; +} +.simple-tree details::before { + top: 0; + height: 100%; + background-repeat: repeat-y; + left: 5px; + z-index: -1; +} +.simple-tree details>:not(details)::before { + top: 8px; + height: calc(100% - 8px); + background-repeat: repeat-x; + left: -15px; +} +.simple-tree details>summary::before { + background: url('data:image/svg+xml;utf8,') center center / 12px 12px no-repeat; + left: -22px; + top: 2px; + width: 16px; + height: 16px; +} +.simple-tree details[open]>summary::before { + background-image: url('data:image/svg+xml;utf8,'); +} +/* async tree */ +.async-tree details[open][data-loaded=false] { + pointer-events: none; +} +.async-tree details[open][data-loaded=false]>summary::before { + background-image: url('data:image/svg+xml;utf8,'); +} +.async-tree.black details[open][data-loaded=false]>summary::before { + background-image: url('data:image/svg+xml;utf8,'); +} +/* select tree */ +.select-tree .selected { + background-color: #beebff; + border-color: #99defd; + z-index: 1; +} + +.select-tree.dark .selected { + background-color: #3a484e; + border-color: #99defd; +} diff --git a/static/css/vanilla-js-tooltip.css b/static/css/vanilla-js-tooltip.css new file mode 100644 index 0000000..d05fac9 --- /dev/null +++ b/static/css/vanilla-js-tooltip.css @@ -0,0 +1,28 @@ + +:root { + --tooltipbg: rgba(0, 0, 0, 0.7); +} + +.b-tooltip { + font-size: 0.6em; + padding: 0.3em; + border-radius: 0.2em; + color: rgba(255, 255, 255, 0.6); + text-align: center; + position: absolute; + background: var(--tooltipbg); + display: inline-block; + opacity: 1; + } + + +.b-tooltip:after { + content: " "; + position: absolute; + left: -10px; + top: 4px; + border-top: 10px solid transparent; + border-right: 10px solid var(--tooltipbg); + border-left: none; + border-bottom: 10px solid transparent; + } diff --git a/static/css/vanilla-picker.csp.css b/static/css/vanilla-picker.csp.css new file mode 100644 index 0000000..aa462b7 --- /dev/null +++ b/static/css/vanilla-picker.csp.css @@ -0,0 +1 @@ +.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:"";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:"";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:"";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:"";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0} \ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..ab374e2 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/fonts/EncodeSansSemiExpanded-Black.ttf b/static/fonts/EncodeSansSemiExpanded-Black.ttf new file mode 100644 index 0000000..40ebfed Binary files /dev/null and b/static/fonts/EncodeSansSemiExpanded-Black.ttf differ diff --git a/static/fonts/EncodeSansSemiExpanded-Bold.ttf b/static/fonts/EncodeSansSemiExpanded-Bold.ttf new file mode 100644 index 0000000..739e530 Binary files /dev/null and b/static/fonts/EncodeSansSemiExpanded-Bold.ttf differ diff --git a/static/fonts/EncodeSansSemiExpanded-Light.ttf b/static/fonts/EncodeSansSemiExpanded-Light.ttf new file mode 100644 index 0000000..102663e Binary files /dev/null and b/static/fonts/EncodeSansSemiExpanded-Light.ttf differ diff --git a/static/fonts/EncodeSansSemiExpanded-Regular.ttf b/static/fonts/EncodeSansSemiExpanded-Regular.ttf new file mode 100644 index 0000000..40a6b26 Binary files /dev/null and b/static/fonts/EncodeSansSemiExpanded-Regular.ttf differ diff --git a/static/fonts/fa-brands-400.ttf b/static/fonts/fa-brands-400.ttf new file mode 100644 index 0000000..948a2a6 Binary files /dev/null and b/static/fonts/fa-brands-400.ttf differ diff --git a/static/fonts/fa-regular-400.ttf b/static/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..abe99e2 Binary files /dev/null and b/static/fonts/fa-regular-400.ttf differ diff --git a/static/fonts/fa-solid-900.ttf b/static/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..5b97903 Binary files /dev/null and b/static/fonts/fa-solid-900.ttf differ diff --git a/static/img/LoopicLogov2White.svg b/static/img/LoopicLogov2White.svg new file mode 100644 index 0000000..71960bb --- /dev/null +++ b/static/img/LoopicLogov2White.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/LoopicSPXScreenshot.png b/static/img/LoopicSPXScreenshot.png new file mode 100644 index 0000000..d861146 Binary files /dev/null and b/static/img/LoopicSPXScreenshot.png differ diff --git a/static/img/SPX_glossy_255_Transparent_Shadow.png b/static/img/SPX_glossy_255_Transparent_Shadow.png new file mode 100644 index 0000000..4ec1953 Binary files /dev/null and b/static/img/SPX_glossy_255_Transparent_Shadow.png differ diff --git a/static/img/SPXgraphicsLogo64px.png b/static/img/SPXgraphicsLogo64px.png new file mode 100644 index 0000000..a508b7a Binary files /dev/null and b/static/img/SPXgraphicsLogo64px.png differ diff --git a/static/img/SPXstore600_2023_240px.png b/static/img/SPXstore600_2023_240px.png new file mode 100644 index 0000000..0810535 Binary files /dev/null and b/static/img/SPXstore600_2023_240px.png differ diff --git a/static/img/WebCG_online.png b/static/img/WebCG_online.png new file mode 100644 index 0000000..a7bbb87 Binary files /dev/null and b/static/img/WebCG_online.png differ diff --git a/static/img/checker60.png b/static/img/checker60.png new file mode 100644 index 0000000..f0006dc Binary files /dev/null and b/static/img/checker60.png differ diff --git a/static/img/easter/animal-day.png b/static/img/easter/animal-day.png new file mode 100644 index 0000000..3a4211c Binary files /dev/null and b/static/img/easter/animal-day.png differ diff --git a/static/img/easter/animated-santa.png b/static/img/easter/animated-santa.png new file mode 100644 index 0000000..cae8a95 Binary files /dev/null and b/static/img/easter/animated-santa.png differ diff --git a/static/img/easter/earth-day.png b/static/img/easter/earth-day.png new file mode 100644 index 0000000..3ee5164 Binary files /dev/null and b/static/img/easter/earth-day.png differ diff --git a/static/img/easter/finland.png b/static/img/easter/finland.png new file mode 100644 index 0000000..6cf29cc Binary files /dev/null and b/static/img/easter/finland.png differ diff --git a/static/img/easter/korvamunkki.png b/static/img/easter/korvamunkki.png new file mode 100644 index 0000000..5549cec Binary files /dev/null and b/static/img/easter/korvamunkki.png differ diff --git a/static/img/easter/new-year-sparks.png b/static/img/easter/new-year-sparks.png new file mode 100644 index 0000000..6eed3ee Binary files /dev/null and b/static/img/easter/new-year-sparks.png differ diff --git a/static/img/easter/rose.png b/static/img/easter/rose.png new file mode 100644 index 0000000..16dcd85 Binary files /dev/null and b/static/img/easter/rose.png differ diff --git a/static/img/easter/stpatrick.png b/static/img/easter/stpatrick.png new file mode 100644 index 0000000..982bb7c Binary files /dev/null and b/static/img/easter/stpatrick.png differ diff --git a/static/img/easter/usa.png b/static/img/easter/usa.png new file mode 100644 index 0000000..388bb0d Binary files /dev/null and b/static/img/easter/usa.png differ diff --git a/static/img/json/wm-0.json b/static/img/json/wm-0.json new file mode 100644 index 0000000..28d8d9f --- /dev/null +++ b/static/img/json/wm-0.json @@ -0,0 +1,3 @@ +{ + "spxinfo": "Live Graphics by SPX Graphics", + "v":"5.8.1","fr":50,"ip":0,"op":301,"w":1920,"h":1080,"nm":"LOTTIE_RENDER","ddd":0,"assets":[{"id":"comp_0","nm":"HD","fr":50,"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"FishBar","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":293,"s":[100]},{"t":298,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[10.085,0],[0,0],[0,-10.085],[0,0],[-10.085,0],[0,0],[0,10.085],[0,0]],"o":[[0,0],[-10.085,0],[0,0],[0,10.085],[0,0],[10.085,0],[0,0],[0,-10.085]],"v":[[790.993,9.352],[784.804,9.477],[766.543,27.738],[766.666,30.375],[784.927,48.636],[791.116,48.511],[809.377,30.25],[809.254,27.613]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":34,"s":[{"i":[[10.085,0],[0,0],[0,-10.085],[0,0],[-10.085,0],[0,0],[0,10.085],[0,0]],"o":[[0,0],[-10.085,0],[0,0],[0,10.085],[0,0],[10.085,0],[0,0],[0,-10.085]],"v":[[1137.494,9.477],[784.804,9.477],[766.543,27.738],[766.666,30.375],[784.927,48.636],[1137.616,48.636],[1155.877,30.375],[1155.754,27.738]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":216,"s":[{"i":[[10.085,0],[0,0],[0,-10.085],[0,0],[-10.085,0],[0,0],[0,10.085],[0,0]],"o":[[0,0],[-10.085,0],[0,0],[0,10.085],[0,0],[10.085,0],[0,0],[0,-10.085]],"v":[[1137.494,9.477],[784.804,9.477],[766.543,27.738],[766.666,30.375],[784.927,48.636],[1137.616,48.636],[1155.877,30.375],[1155.754,27.738]],"c":true}]},{"t":298,"s":[{"i":[[10.085,0],[0,0],[0,-10.085],[0,0],[-10.085,0],[0,0],[0,10.085],[0,0]],"o":[[0,0],[-10.085,0],[0,0],[0,10.085],[0,0],[10.085,0],[0,0],[0,-10.085]],"v":[[1178.785,9.522],[941.824,9.568],[923.563,27.829],[923.686,30.466],[941.946,48.727],[1178.908,48.682],[1197.169,30.421],[1197.046,27.783]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"},{"inv":false,"mode":"i","pt":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[11.152,0],[0,0],[0,-11.152],[-11.152,0],[0,0],[0,11.152]],"o":[[0,0],[-11.152,0],[0,11.152],[0,0],[11.152,0],[0,-11.152]],"v":[[740.308,9.115],[675.692,9.115],[655.5,29.308],[675.692,49.5],[740.308,49.5],[760.5,29.308]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0,"y":0},"t":34,"s":[{"i":[[11.152,0],[0,0],[0,-11.152],[-11.152,0],[0,0],[0,11.152]],"o":[[0,0],[-11.152,0],[0,11.152],[0,0],[11.152,0],[0,-11.152]],"v":[[1139.308,8.923],[724.692,9.115],[704.5,29.308],[724.692,49.5],[1139.308,49.308],[1159.5,29.115]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":216,"s":[{"i":[[11.152,0],[0,0],[0,-11.152],[-11.152,0],[0,0],[0,11.152]],"o":[[0,0],[-11.152,0],[0,11.152],[0,0],[11.152,0],[0,-11.152]],"v":[[1139.308,8.923],[724.692,9.115],[704.5,29.308],[724.692,49.5],[1139.308,49.308],[1159.5,29.115]],"c":true}]},{"t":298,"s":[{"i":[[11.152,0],[0,0],[0,-11.152],[-11.152,0],[0,0],[0,11.152]],"o":[[0,0],[-11.152,0],[0,11.152],[0,0],[11.152,0],[0,-11.152]],"v":[[852.808,8.923],[438.192,9.115],[418,29.308],[438.192,49.5],[852.808,49.308],[873,29.115]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 2"}],"w":1920,"h":1080,"ip":0,"op":299,"st":0,"bm":0}]},{"id":"comp_1","nm":"FishBar","fr":50,"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"Kolmio 2","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":321,"s":[100]},{"t":332,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":223,"s":[-450.5,-1,0],"to":[0,0,0],"ti":[0,0,0]},{"t":275,"s":[-7.7,-1,0]}],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0.96,0.652],[0,0],[0,-0.491],[0,0],[-0.373,0.258],[0,0]],"o":[[0,0],[-0.373,-0.258],[0,0],[0,0.475],[0,0],[0.988,-0.702]],"v":[[1144.003,22.532],[1134.565,16.008],[1133.215,16.245],[1133.215,30.816],[1134.565,31.053],[1144.003,24.669]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1920,"sh":1080,"sc":"#cba120","ip":213,"op":410,"st":196,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"magnifer","parent":7,"refId":"comp_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":119,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[100]},{"t":253,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1139.1,25.25,0],"ix":2,"l":2},"a":{"a":0,"k":[400,400,0],"ix":1,"l":2},"s":{"a":0,"k":[4,4,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":21,"nm":"Fill","np":9,"mn":"ADBE Fill","ix":1,"en":1,"ef":[{"ty":10,"nm":"Fill Mask","mn":"ADBE Fill-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":7,"nm":"All Masks","mn":"ADBE Fill-0007","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":2,"nm":"Color","mn":"ADBE Fill-0002","ix":3,"v":{"a":0,"k":[0.866666734219,0.588235318661,0.192156881094,1],"ix":3}},{"ty":7,"nm":"Invert","mn":"ADBE Fill-0006","ix":4,"v":{"a":0,"k":0,"ix":4}},{"ty":0,"nm":"Horizontal Feather","mn":"ADBE Fill-0003","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":0,"nm":"Vertical Feather","mn":"ADBE Fill-0004","ix":6,"v":{"a":0,"k":0,"ix":6}},{"ty":0,"nm":"Opacity","mn":"ADBE Fill-0005","ix":7,"v":{"a":0,"k":1,"ix":7}}]}],"w":800,"h":800,"ip":0,"op":271,"st":-17,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"Gloss","sr":1,"ks":{"o":{"a":0,"k":12,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,-510.5,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":1920,"sh":1080,"sc":"#ffffff","ip":0,"op":299,"st":-17,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"MASTER_Y_POS","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,546,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":299,"st":-17,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"Wipe","parent":5,"sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-151.629,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":-9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[755.285,133.033],[732.397,133.033],[732.397,361.907],[755.285,361.907]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1185.853,133.033],[732.397,133.033],[732.397,361.907],[1185.853,361.907]],"c":true}]},{"t":24,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1185.853,133.033],[1172.98,133.033],[1172.98,361.907],[1185.853,361.907]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1920,"sh":1080,"sc":"#6cac4d","ip":0,"op":51,"st":-17,"bm":0},{"ddd":0,"ind":7,"ty":1,"nm":"Kolmio","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[100]},{"t":119,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.253,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[-450.5,-1,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.253,"y":0.253},"o":{"x":0.758,"y":0.758},"t":62,"s":[-7.7,-1,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0,"y":1},"o":{"x":0.758,"y":0},"t":69,"s":[-7.7,-1,0],"to":[0,0,0],"ti":[0,0,0]},{"t":174,"s":[-282.1,-1,0]}],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0.96,0.652],[0,0],[0,-0.491],[0,0],[-0.373,0.258],[0,0]],"o":[[0,0],[-0.373,-0.258],[0,0],[0,0.475],[0,0],[0.988,-0.702]],"v":[[1144.003,22.532],[1134.565,16.008],[1133.215,16.245],[1133.215,30.816],[1134.565,31.053],[1144.003,24.669]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1920,"sh":1080,"sc":"#6cac4d","ip":0,"op":197,"st":-17,"bm":0},{"ddd":0,"ind":8,"ty":1,"nm":"Maski","parent":7,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[970.2,541,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1124.5,3.5],[779.5,3.5],[779.5,62.5],[1124.5,62.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1920,"sh":1080,"sc":"#6cac4d","ip":0,"op":300,"st":-17,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"LIVE GRAPHICS BY Outlines","parent":13,"tt":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[80]},{"t":143,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[133.351,3.667,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[21.647,21.647,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1056.662,-17.704],[-1056.662,-35.931],[-1094.785,-35.931],[-1094.785,-102.804],[-1116.865,-102.804],[-1116.865,-17.704]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298449647193,0.666666666667,0.333105378992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-350,0],"to":[58.333,0],"ti":[-58.333,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"L","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1014.501,-17.704],[-1014.501,-102.804],[-1036.581,-102.804],[-1036.581,-17.704]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298449647193,0.666666666667,0.333105378992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-325,0],"to":[54.167,0],"ti":[-54.167,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-954.284,-34.724],[-974.351,-102.804],[-997.409,-102.804],[-971.189,-17.704],[-938.529,-17.704],[-912.309,-102.804],[-933.756,-102.804]],"c":true},"ix":2},"nm":"V","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298449647193,0.666666666667,0.333105378992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-300,0],"to":[50,0],"ti":[-50,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"V","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-873.367,-52.434],[-838.752,-52.434],[-838.752,-69.914],[-873.367,-69.914],[-873.367,-85.324],[-832.829,-85.324],[-832.829,-102.804],[-895.159,-102.804],[-895.159,-17.704],[-832.254,-17.704],[-832.254,-35.184],[-873.367,-35.184]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298449647193,0.666666666667,0.333105378992,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-275,0],"to":[45.833,0],"ti":[-45.833,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[3.871,0],[4.906,2.396],[2.472,5.175],[0,8.242],[-5.52,5.559],[-10.619,0],[-2.99,-0.402],[-3.297,-0.92],[0,0],[6.325,0],[7.283,-7.11],[0,-14.95],[-7.245,-6.976],[-14.567,0],[-2.99,0.249],[-3.565,0.614],[0,0]],"o":[[0,0],[-3.297,0.46],[-7.475,0],[-4.907,-2.395],[-2.473,-5.175],[0,-12.688],[5.52,-5.558],[3.066,0],[2.99,0.402],[0,0],[-6.402,-1.686],[-13.225,0],[-7.284,7.111],[0.038,14.835],[7.245,6.977],[3.181,0],[2.99,-0.25],[0,0],[0,0]],"v":[[-732.061,-59.104],[-732.061,-25.696],[-742.813,-25.006],[-761.386,-28.6],[-772.454,-39.956],[-776.163,-60.081],[-767.883,-87.451],[-743.676,-95.789],[-734.591,-95.185],[-725.161,-93.201],[-725.161,-101.366],[-744.251,-103.896],[-775.013,-93.23],[-785.938,-60.139],[-775.013,-27.421],[-742.296,-16.956],[-733.038,-17.33],[-723.206,-18.624],[-723.206,-59.104]],"c":true},"ix":2},"nm":"G","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-250,0],"to":[41.667,0],"ti":[-41.667,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"G","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-3.546,4.064],[0.038,6.555],[5.443,4.102],[11.27,0],[7.858,-1.533],[0,0],[0,0],[0,0],[-3.834,0],[-1.917,0.077],[0,0]],"o":[[0,0],[6.938,-1.533],[3.545,-4.063],[0,-8.625],[-5.444,-4.101],[-7.284,0],[0,0],[0,0],[0,0],[4.063,0.307],[1.111,0],[0,0],[0,0]],"v":[[-634.239,-17.704],[-661.781,-54.159],[-646.055,-62.554],[-640.794,-78.481],[-648.959,-97.571],[-674.029,-103.724],[-696.741,-101.424],[-696.741,-17.704],[-687.541,-17.704],[-687.541,-53.296],[-675.696,-52.836],[-671.154,-52.951],[-644.704,-17.704]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.338,0.23],[0,0],[-2.128,0.192],[-2.76,0],[-3.489,-1.208],[-1.649,-2.606],[0,-4.255],[4.14,-2.913],[9.046,0],[1.667,0.077]],"o":[[0,0],[2.376,-0.421],[2.128,-0.191],[5.596,0],[3.488,1.207],[1.648,2.607],[0,6.21],[-4.14,2.914],[-2.262,0],[-1.667,-0.076]],"v":[[-687.541,-60.886],[-687.541,-94.984],[-680.785,-95.904],[-673.454,-96.191],[-659.826,-94.38],[-652.121,-88.659],[-649.649,-78.366],[-655.859,-64.681],[-675.639,-60.311],[-681.533,-60.426]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-225,0],"to":[37.5,0],"ti":[-37.5,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":5,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-547.4,-17.704],[-577.932,-102.804],[-591.099,-102.804],[-621.632,-17.704],[-612.26,-17.704],[-602.542,-45.246],[-566.604,-45.246],[-556.887,-17.704]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-584.602,-96.019],[-569.422,-53.124],[-599.782,-53.124]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-200,0],"to":[33.333,0],"ti":[-33.333,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":5,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-3.527,0],[-5.827,4.907],[0,9.584],[5.711,4.715],[11.346,0],[7.781,-1.456]],"o":[[0,0],[0,0],[3.948,0.345],[11.998,0],[5.826,-4.906],[0,-9.928],[-5.712,-4.715],[-6.785,0],[0,0]],"v":[[-527.95,-17.704],[-518.635,-17.704],[-518.635,-46.109],[-507.423,-45.591],[-480.685,-52.951],[-471.945,-74.686],[-480.513,-96.651],[-506.1,-103.724],[-527.95,-101.539]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.085,0],[3.68,0.46],[0,0],[-4.754,0],[-3.967,-3.45],[0,-7.475],[4.14,-3.45]],"o":[[-3.91,0],[0,0],[4.025,-0.69],[8.241,0],[3.967,3.45],[0,7.322],[-4.14,3.45]],"v":[[-507.25,-53.181],[-518.635,-53.871],[-518.635,-95.041],[-505.468,-96.076],[-487.154,-90.901],[-481.203,-74.514],[-487.413,-58.356]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-175,0],"to":[29.167,0],"ti":[-29.167,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":5,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-439.673,-17.704],[-439.673,-57.149],[-394.708,-57.149],[-394.708,-17.704],[-385.393,-17.704],[-385.393,-102.804],[-394.708,-102.804],[-394.708,-65.601],[-439.673,-65.601],[-439.673,-102.804],[-448.988,-102.804],[-448.988,-17.704]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-150,0],"to":[25,0],"ti":[-25,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-346.279,-17.704],[-346.279,-102.804],[-355.594,-102.804],[-355.594,-17.704]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-125,0],"to":[20.833,0],"ti":[-20.833,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.344,0],[-5.98,2.108],[0,0],[2.97,-0.498],[3.143,0],[4.293,2.242],[2.3,5.232],[0,8.779],[-2.281,5.214],[-4.39,2.339],[-6.632,0],[-5.865,-1.686],[0,0],[6.21,0],[6.785,-7.11],[0,-14.988],[-6.67,-6.843]],"o":[[6.9,0],[0,0],[-3.335,1.15],[-2.971,0.499],[-6.402,0],[-4.294,-2.243],[-2.3,-5.232],[0,-8.548],[2.28,-5.213],[4.389,-2.338],[6.171,0],[0,0],[-6.057,-1.648],[-12.727,0],[-6.785,7.111],[0,15.295],[6.67,6.842]],"v":[[-283.935,-16.611],[-264.615,-19.774],[-264.615,-27.939],[-274.073,-25.466],[-283.245,-24.719],[-299.287,-28.082],[-309.177,-39.295],[-312.627,-60.311],[-309.206,-80.954],[-299.201,-92.281],[-282.67,-95.789],[-264.615,-93.259],[-264.615,-101.424],[-283.015,-103.896],[-312.282,-93.23],[-322.46,-60.081],[-312.455,-26.875]],"c":true},"ix":2},"nm":"C","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-100,0],"to":[16.667,0],"ti":[-16.667,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"C","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.45,0],[-4.524,1.897],[-2.377,3.604],[0,5.099],[3.68,3.757],[7.896,1.994],[0,0],[2.261,1.323],[1.015,1.917],[0,2.799],[-3.47,2.587],[-7.169,0],[-5.75,-1.763],[0,0],[3.22,0.441],[3.296,0],[4.504,-1.878],[2.28,-3.545],[0,-4.906],[-3.565,-3.738],[-7.284,-1.878],[0,0],[-2.435,-1.322],[-1.131,-1.935],[0,-2.875],[13.838,0],[3.622,0.575],[3.45,1.189],[0,0],[-3.642,-0.594]],"o":[[6.401,0],[4.523,-1.898],[2.376,-3.603],[0,-6.133],[-3.68,-3.756],[0,0],[-3.91,-1.035],[-2.262,-1.322],[-1.016,-1.916],[0,-4.868],[3.469,-2.588],[6.44,0],[0,0],[-2.645,-0.843],[-3.22,-0.44],[-6.632,0],[-4.505,1.879],[-2.281,3.546],[0,6.095],[3.565,3.738],[0,0],[4.178,1.074],[2.434,1.322],[1.13,1.936],[0,10.389],[-3.374,0],[-3.622,-0.575],[0,0],[3.258,1.112],[3.641,0.594]],"v":[[-225.385,-16.611],[-208.998,-19.457],[-198.648,-27.709],[-195.083,-40.761],[-200.603,-55.596],[-217.968,-64.221],[-222.568,-65.371],[-231.825,-68.907],[-236.742,-73.766],[-238.265,-80.839],[-233.062,-92.022],[-217.105,-95.904],[-198.82,-93.259],[-198.82,-101.309],[-207.618,-103.235],[-217.393,-103.896],[-234.097,-101.079],[-244.274,-92.942],[-247.695,-80.264],[-242.348,-65.515],[-226.075,-57.091],[-221.475,-55.884],[-211.557,-52.29],[-206.209,-47.402],[-204.513,-40.186],[-225.27,-24.604],[-235.764,-25.466],[-246.373,-28.111],[-246.373,-20.061],[-236.023,-17.502]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-75,0],"to":[12.5,0],"ti":[-12.5,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.558,1.074],[-2.435,3.393],[0,4.754],[5.405,3.757],[11.691,0],[8.05,-1.648],[0,0],[-7.054,0],[-5.712,1.821],[-2.607,3.565],[0,5.329],[2.894,3.527]],"o":[[4.868,-1.226],[2.434,-3.393],[0,-7.781],[-5.405,-3.756],[-8.357,0],[0,0],[7.59,0.958],[9.238,0],[5.711,-1.82],[2.606,-3.565],[0,-5.596],[-2.895,-3.526]],"v":[[-98.339,-61.634],[-87.385,-68.562],[-83.734,-80.781],[-91.842,-98.089],[-117.487,-103.724],[-142.097,-101.251],[-142.097,-18.336],[-120.132,-16.899],[-97.707,-19.63],[-85.229,-27.709],[-81.319,-41.049],[-85.66,-54.734]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-5.175,0],[-3.048,-0.977],[-1.38,-2.05],[0,-3.411],[3.048,-2.3],[6.9,0],[0,0],[0,0]],"o":[[5.06,0],[3.048,0.978],[1.38,2.051],[0,4.83],[-3.047,2.3],[0,0],[0,0],[4.178,-0.766]],"v":[[-116.164,-94.409],[-104.003,-92.942],[-97.362,-88.4],[-95.292,-80.206],[-99.863,-69.511],[-114.784,-66.061],[-130.194,-66.061],[-130.194,-93.259]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[6.133,0],[3.718,0.499],[0,0],[0,0],[-3.259,-2.415],[0,-5.175],[1.533,-2.223],[3.584,-1.111]],"o":[[-4.869,0],[0,0],[0,0],[7.053,0],[3.258,2.415],[0,3.527],[-1.534,2.224],[-3.585,1.112]],"v":[[-117.314,-26.214],[-130.194,-26.961],[-130.194,-56.516],[-113.117,-56.516],[-97.649,-52.894],[-92.762,-41.509],[-95.062,-32.884],[-102.738,-27.881]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-50,0],"to":[8.333,0],"ti":[-8.333,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":6,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-10.695,-102.804],[-34.385,-65.544],[-58.477,-102.804],[-71.645,-102.804],[-40.767,-54.906],[-40.767,-17.704],[-28.577,-17.704],[-28.577,-54.964],[1.61,-102.804]],"c":true},"ix":2},"nm":"Y","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.741175991881,0.674509983437,0.1294119891,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0.01,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.823529471603,0.823529471603,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[-25,0],"to":[4.167,0],"ti":[-4.167,0]},{"t":126,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Y","np":3,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":165,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":3,"nm":"OVERLAYS PROVIDED BY Outlines","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[80]},{"t":125,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":5,"s":[-86,-509.3,0],"to":[12.1,0,0],"ti":[-12.1,0,0]},{"t":99,"s":[-13.4,-509.3,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[90,90,100],"ix":6,"l":2}},"ao":0,"ip":1,"op":165,"st":-17,"bm":0},{"ddd":0,"ind":14,"ty":1,"nm":"MaskiforSPX","parent":7,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2092.7,541,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":1920,"sh":1080,"sc":"#6cac4d","ip":0,"op":300,"st":-17,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"OUTLINE - SPX","parent":5,"tt":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":258,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":264,"s":[100]},{"t":299,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":98,"s":[77,-508.1,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0,"y":0},"o":{"x":0.167,"y":0.167},"t":150,"s":[0,-508.1,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":210,"s":[0,-508.1,0],"to":[0,0,0],"ti":[0,0,0]},{"t":298,"s":[21.25,-508.1,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.154,0.475],[-0.617,0.879],[0,1.208],[0.379,0.713],[0.787,0.488],[1.217,0.3],[0,0],[0.271,0.246],[0,0.408],[-0.217,0.263],[-0.525,0.15],[-0.933,0],[-0.75,-0.1],[-0.575,-0.183],[0,0],[0.771,0.1],[0.883,0],[1.342,-1.025],[0,-1.833],[-0.846,-0.883],[-1.642,-0.408],[0,0],[-0.312,-0.262],[0,-0.442],[0.438,-0.308],[1.133,0],[0.629,0.071],[0.617,0.121],[0.517,0.175],[0,0],[-0.929,-0.146],[-0.95,0]],"o":[[1.154,-0.475],[0.617,-0.879],[0,-0.967],[-0.379,-0.712],[-0.788,-0.487],[0,0],[-0.792,-0.217],[-0.271,-0.246],[0,-0.325],[0.217,-0.262],[0.525,-0.15],[0.75,0],[0.75,0.1],[0,0],[-0.592,-0.167],[-0.771,-0.1],[-2.717,0],[-1.342,1.025],[0,1.442],[0.846,0.883],[0,0],[0.933,0.242],[0.312,0.262],[0,0.525],[-0.438,0.308],[-0.558,0],[-0.629,-0.071],[-0.617,-0.121],[0,0],[0.775,0.25],[0.929,0.146],[1.625,0]],"v":[[-75.525,-0.462],[-72.869,-2.494],[-71.944,-5.625],[-72.512,-8.144],[-74.262,-9.944],[-77.269,-11.125],[-78.806,-11.512],[-80.4,-12.206],[-80.806,-13.188],[-80.481,-14.069],[-79.369,-14.688],[-77.181,-14.913],[-74.931,-14.762],[-72.944,-14.337],[-72.944,-18.2],[-74.987,-18.6],[-77.469,-18.75],[-83.556,-17.213],[-85.569,-12.925],[-84.3,-9.438],[-80.569,-7.5],[-79.044,-7.113],[-77.175,-6.356],[-76.706,-5.3],[-77.362,-4.05],[-79.719,-3.587],[-81.5,-3.694],[-83.369,-3.981],[-85.069,-4.425],[-85.069,-0.562],[-82.512,0.031],[-79.694,0.25]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.423529441684,0.674509803922,0.301960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":0.5},"o":{"x":0.167,"y":0.167},"t":106,"s":[0,0],"to":[0,0],"ti":[0,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.246,-0.013],[-0.283,0],[-1.379,1.154],[0,2.233],[1.429,1.092],[2.867,0],[0.975,-0.104],[0.908,-0.192],[0,0]],"o":[[0,0],[0.267,0.017],[0.246,0.012],[2.667,0],[1.379,-1.154],[0,-2.367],[-1.429,-1.092],[-1.083,0],[-0.975,0.104],[0,0],[0,0]],"v":[[-65.044,0],[-65.044,-5.163],[-64.275,-5.119],[-63.481,-5.1],[-57.412,-6.831],[-55.344,-11.913],[-57.487,-17.1],[-63.931,-18.738],[-67.019,-18.581],[-69.844,-18.137],[-69.844,0]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.246,0.017],[0.275,0.033],[0,0],[-0.242,0.017],[-0.308,0],[-0.562,-0.517],[0,-1.158],[0.558,-0.488],[1.175,0]],"o":[[-0.246,-0.017],[0,0],[0.25,-0.05],[0.242,-0.017],[1.2,0],[0.562,0.517],[0,1.167],[-0.558,0.488],[-0.308,0]],"v":[[-64.262,-8.7],[-65.044,-8.775],[-65.044,-15.05],[-64.306,-15.15],[-63.481,-15.175],[-60.837,-14.4],[-59.994,-11.887],[-60.831,-9.406],[-63.431,-8.675]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.423529441684,0.674509803922,0.301960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[4,0],"to":[-0.667,0],"ti":[0.667,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-37.606,0],[-44.194,-9.7],[-46.969,-13.15],[-50.569,-18.5],[-55.869,-18.5],[-49.806,-9.637],[-47.019,-6.212],[-42.881,0]],"c":true},"ix":2},"nm":"X","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-51.169,0],[-47.019,-6.212],[-44.194,-9.7],[-38.219,-18.5],[-43.381,-18.5],[-46.969,-13.15],[-49.806,-9.637],[-56.381,0]],"c":true},"ix":2},"nm":"X","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.423529441684,0.674509803922,0.301960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[8,0],"to":[-1.333,0],"ti":[1.333,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"X","np":5,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":47,"op":300,"st":-17,"bm":0},{"ddd":0,"ind":16,"ty":1,"nm":"Maski-for-Graphics","parent":7,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2092.7,541,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"sw":1920,"sh":1080,"sc":"#6cac4d","ip":0,"op":300,"st":-17,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"OUTLINE - Graphics","parent":15,"tt":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":260,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":269,"s":[70]},{"t":282,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.325,0.312],[0,0.508],[0.321,0.312],[0.55,0],[0.325,-0.308],[0,-0.525],[-0.329,-0.304],[-0.533,0]],"o":[[0.325,-0.312],[0,-0.517],[-0.321,-0.312],[-0.542,0],[-0.325,0.308],[0,0.525],[0.329,0.304],[0.542,0]],"v":[[-33.794,-0.294],[-33.306,-1.525],[-33.787,-2.769],[-35.094,-3.238],[-36.394,-2.775],[-36.881,-1.525],[-36.387,-0.281],[-35.094,0.175]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[12,0],"to":[-2,0],"ti":[2,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.683,0.062],[-0.783,0.125],[0,0],[0,0],[0,0],[0,0],[0.517,-0.046],[0.567,0],[1.017,0.483],[0.512,1.05],[0,1.692],[-0.542,1.067],[-1.029,0.475],[-1.475,0],[-0.646,-0.079],[-0.717,-0.192],[0,0],[0.688,0.087],[0.708,0],[1.421,-0.671],[0.758,-1.4],[0,-2.208],[-0.737,-1.383],[-1.454,-0.662],[-2.167,0]],"o":[[0.683,-0.062],[0,0],[0,0],[0,0],[0,0],[-0.442,0.075],[-0.517,0.046],[-1.525,0],[-1.017,-0.483],[-0.512,-1.05],[0,-1.775],[0.542,-1.067],[1.029,-0.475],[0.633,0],[0.646,0.079],[0,0],[-0.683,-0.175],[-0.688,-0.088],[-1.975,0],[-1.421,0.671],[-0.758,1.4],[0,2.167],[0.738,1.383],[1.454,0.663],[0.7,0]],"v":[[-19.756,0.081],[-17.556,-0.2],[-17.556,-9],[-20.044,-9],[-20.044,-1.275],[-18.956,-2.312],[-20.394,-2.131],[-22.019,-2.062],[-25.831,-2.788],[-28.125,-5.087],[-28.894,-9.2],[-28.081,-13.462],[-25.725,-15.775],[-21.969,-16.488],[-20.05,-16.369],[-18.006,-15.962],[-18.006,-18.212],[-20.062,-18.606],[-22.156,-18.738],[-27.25,-17.731],[-30.519,-14.625],[-31.656,-9.212],[-30.55,-3.887],[-27.262,-0.819],[-21.831,0.175]],"c":true},"ix":2},"nm":"G","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[16,0],"to":[-2.667,0],"ti":[2.667,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"G","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.367,-0.021],[-0.467,0],[-1.137,0.429],[-0.596,0.846],[0,1.25],[1.237,0.908],[2.508,0],[0.604,-0.046],[0.55,-0.083],[0.5,-0.1],[0,0]],"o":[[0,0],[0.383,0.025],[0.367,0.021],[1.65,0],[1.138,-0.429],[0.596,-0.846],[0,-1.933],[-1.238,-0.908],[-0.65,0],[-0.604,0.046],[-0.55,0.083],[0,0],[0,0]],"v":[[-11.169,0],[-11.169,-7.475],[-10.044,-7.406],[-8.794,-7.375],[-4.612,-8.019],[-2.012,-9.931],[-1.119,-13.075],[-2.975,-17.338],[-8.594,-18.7],[-10.475,-18.631],[-12.206,-18.438],[-13.781,-18.163],[-13.781,0]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.344,0],[-6.069,-8.65],[-8.981,-8.65],[-2.631,0]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.254,0.004],[0.246,0.021],[0.292,0.025],[0,0],[-0.438,0.042],[-0.567,0],[-0.696,-0.246],[-0.333,-0.529],[0,-0.85],[0.817,-0.587],[1.783,0]],"o":[[-0.254,-0.004],[-0.246,-0.021],[0,0],[0.425,-0.075],[0.438,-0.042],[1.1,0],[0.696,0.246],[0.333,0.529],[0,1.242],[-0.817,0.588],[-0.317,0]],"v":[[-9.612,-9.444],[-10.362,-9.481],[-11.169,-9.55],[-11.169,-16.425],[-9.875,-16.6],[-8.369,-16.663],[-5.675,-16.294],[-4.131,-15.131],[-3.631,-13.062],[-4.856,-10.319],[-8.756,-9.438]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[20,0],"to":[-3.333,0],"ti":[3.333,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":6,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.781,0],[8.656,-17.288],[8.294,-17.288],[14.181,0],[16.831,0],[10.394,-18.5],[6.594,-18.5],[0.156,0]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[13.131,-5.675],[12.531,-7.837],[4.444,-7.837],[3.844,-5.675]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[24,0],"to":[-4,0],"ti":[4,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.354,-0.017],[-0.392,0],[-1.279,1.096],[0,2.1],[1.296,1.029],[2.533,0],[0.817,-0.087],[0.8,-0.15],[0,0]],"o":[[0,0],[0.392,0.033],[0.354,0.017],[2.65,0],[1.279,-1.096],[0,-2.217],[-1.296,-1.029],[-0.908,0],[-0.817,0.088],[0,0],[0,0]],"v":[[21.756,0],[21.756,-5.95],[22.875,-5.875],[23.994,-5.85],[29.888,-7.494],[31.806,-12.288],[29.863,-17.156],[24.119,-18.7],[21.531,-18.569],[19.106,-18.212],[19.106,0]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.363,0.021],[0.375,0.05],[0,0],[-0.413,0.033],[-0.483,0],[-0.8,-0.692],[0,-1.533],[0.817,-0.7],[1.808,0]],"o":[[-0.363,-0.021],[0,0],[0.4,-0.067],[0.413,-0.033],[1.65,0],[0.8,0.692],[0,1.483],[-0.817,0.7],[-0.417,0]],"v":[[22.863,-7.956],[21.756,-8.062],[21.756,-16.425],[22.975,-16.575],[24.319,-16.625],[27.994,-15.588],[29.194,-12.25],[27.969,-8.975],[24.031,-7.925]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[28,0],"to":[-4.667,0],"ti":[4.667,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":5,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[37.481,0],[37.481,-8.3],[46.594,-8.3],[46.594,0],[49.256,0],[49.256,-18.5],[46.594,-18.5],[46.594,-10.663],[37.481,-10.663],[37.481,-18.5],[34.831,-18.5],[34.831,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[32,0],"to":[-5.333,0],"ti":[5.333,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[55.856,0],[55.856,-18.5],[53.206,-18.5],[53.206,0]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[36,0],"to":[-6,0],"ti":[6,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.708,0.117],[-0.608,0.208],[0,0],[0.637,-0.104],[0.667,0],[0.921,0.454],[0.487,1.054],[0,1.817],[-0.483,1.058],[-0.938,0.471],[-1.383,0],[-0.629,-0.083],[-0.633,-0.175],[0,0],[0.658,0.083],[0.708,0],[1.337,-0.671],[0.708,-1.404],[0,-2.2],[-0.4,-1.2],[-0.762,-0.75],[-1.079,-0.346],[-1.358,0]],"o":[[0.708,-0.117],[0,0],[-0.708,0.233],[-0.638,0.104],[-1.317,0],[-0.921,-0.454],[-0.488,-1.054],[0,-1.758],[0.483,-1.058],[0.938,-0.471],[0.667,0],[0.629,0.083],[0,0],[-0.633,-0.175],[-0.658,-0.083],[-1.883,0],[-1.338,0.671],[-0.708,1.404],[0,1.708],[0.4,1.2],[0.762,0.75],[1.079,0.346],[0.767,0]],"v":[[70.044,0.062],[72.019,-0.425],[72.019,-2.675],[70,-2.169],[68.044,-2.012],[64.688,-2.694],[62.575,-4.956],[61.844,-9.262],[62.569,-13.488],[64.7,-15.781],[68.181,-16.488],[70.125,-16.363],[72.019,-15.975],[72.019,-18.225],[70.081,-18.613],[68.031,-18.738],[63.2,-17.731],[60.131,-14.619],[59.069,-9.212],[59.669,-4.85],[61.413,-1.925],[64.175,-0.281],[67.831,0.238]],"c":true},"ix":2},"nm":"C","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[40,0],"to":[-6.667,0],"ti":[6.667,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"C","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.021,0.425],[-0.537,0.804],[0,1.133],[0.358,0.667],[0.746,0.463],[1.158,0.292],[0,0],[0.454,0.442],[0,0.792],[-0.3,0.442],[-0.642,0.233],[-1.033,0],[-0.688,-0.096],[-0.617,-0.192],[0,0],[0.717,0.096],[0.758,0],[1.158,-0.938],[0,-1.642],[-0.8,-0.829],[-1.583,-0.408],[0,0],[-0.5,-0.446],[0,-0.833],[0.667,-0.517],[1.442,0],[0.533,0.058],[0.55,0.117],[0.517,0.175],[0,0],[-0.821,-0.129],[-0.792,0]],"o":[[1.021,-0.425],[0.538,-0.804],[0,-0.908],[-0.358,-0.667],[-0.746,-0.462],[0,0],[-1.15,-0.308],[-0.454,-0.442],[0,-0.608],[0.3,-0.442],[0.642,-0.233],[0.7,0],[0.688,0.096],[0,0],[-0.575,-0.175],[-0.717,-0.096],[-2.3,0],[-1.158,0.938],[0,1.358],[0.8,0.829],[0,0],[1.242,0.317],[0.5,0.446],[0,0.975],[-0.667,0.517],[-0.492,0],[-0.533,-0.058],[-0.55,-0.117],[0,0],[0.733,0.25],[0.821,0.129],[1.442,0]],"v":[[82.175,-0.4],[84.513,-2.244],[85.319,-5.15],[84.781,-7.512],[83.125,-9.206],[80.269,-10.337],[79.144,-10.625],[76.738,-11.75],[76.056,-13.6],[76.506,-15.175],[77.919,-16.188],[80.431,-16.538],[82.513,-16.394],[84.469,-15.962],[84.469,-18.188],[82.531,-18.594],[80.319,-18.738],[75.131,-17.331],[73.394,-13.462],[74.594,-10.181],[78.169,-8.325],[79.294,-8.038],[81.906,-6.894],[82.656,-4.975],[81.656,-2.738],[78.494,-1.962],[76.956,-2.05],[75.331,-2.312],[73.731,-2.75],[73.731,-0.525],[76.063,0.044],[78.481,0.238]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.296},"t":106,"s":[44,0],"to":[-7.333,0],"ti":[7.333,0]},{"t":150,"s":[0,0]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":47,"op":300,"st":-17,"bm":0},{"ddd":0,"ind":19,"ty":1,"nm":"Dark Gray Solid 1","parent":5,"sr":1,"ks":{"o":{"a":0,"k":95,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-9,0],"ix":2,"l":2},"a":{"a":0,"k":[960,540,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"n","pt":{"a":0,"k":{"i":[[9.399,0],[0,0],[0,-9.399],[0,0],[-9.399,0],[0,0],[0,9.399],[0,0]],"o":[[0,0],[-9.399,0],[0,0],[0,9.399],[0,0],[9.399,0],[0,0],[0,-9.399]],"v":[[1131.744,13.5],[783.687,13.5],[766.669,30.518],[766.783,31.345],[783.801,48.363],[1131.859,48.363],[1148.877,31.345],[1148.762,30.518]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":1920,"sh":1080,"sc":"#0b0b0b","ip":0,"op":299,"st":-17,"bm":0}]},{"id":"comp_2","nm":"magnifer","fr":50,"layers":[{"ddd":0,"ind":1,"ty":1,"nm":"White Solid 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":33,"ix":10},"p":{"a":0,"k":[400,273,0],"ix":2,"l":2},"a":{"a":0,"k":[400,296,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[11.046,0],[0,0],[0,-11.046],[0,0],[-11.046,0],[0,0],[0,11.046],[0,0]],"o":[[0,0],[-11.046,0],[0,0],[0,11.046],[0,0],[11.046,0],[0,0],[0,-11.046]],"v":[[417,485],[386,485],[366,505],[363.888,694.142],[383.888,714.142],[414.888,714.142],[434.888,694.142],[437,505]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":800,"sh":800,"sc":"#ffffff","ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"White Solid 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,272,0],"ix":2,"l":2},"a":{"a":0,"k":[400,400,0],"ix":1,"l":2},"s":{"a":0,"k":[96.7,96.7,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[94.993,0],[0,-94.993],[-94.993,0],[0,94.993]],"o":[[-94.993,0],[0,94.993],[94.993,0],[0,-94.993]],"v":[[400,227],[228,399],[400,571],[572,399]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"},{"inv":false,"mode":"s","pt":{"a":0,"k":{"i":[[58.542,0],[0,-58.542],[-58.542,0],[0,58.542]],"o":[[-58.542,0],[0,58.542],[58.542,0],[0,-58.542]],"v":[[400,293],[294,399],[400,505],[506,399]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 2"}],"sw":800,"sh":800,"sc":"#ffffff","ip":0,"op":301,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"HD","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,38.1,0],"ix":2,"l":2},"a":{"a":0,"k":[960,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"w":1920,"h":1080,"ip":0,"op":300,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/static/img/ograf-logo-mono-white.svg b/static/img/ograf-logo-mono-white.svg new file mode 100644 index 0000000..9c12b68 --- /dev/null +++ b/static/img/ograf-logo-mono-white.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/promo-converter-logo.png b/static/img/promo-converter-logo.png new file mode 100644 index 0000000..304d757 Binary files /dev/null and b/static/img/promo-converter-logo.png differ diff --git a/static/img/promo-loopic.png b/static/img/promo-loopic.png new file mode 100644 index 0000000..8201019 Binary files /dev/null and b/static/img/promo-loopic.png differ diff --git a/static/img/promo-store.png b/static/img/promo-store.png new file mode 100644 index 0000000..7b1cf52 Binary files /dev/null and b/static/img/promo-store.png differ diff --git a/static/img/shadabot.png b/static/img/shadabot.png new file mode 100644 index 0000000..f328673 Binary files /dev/null and b/static/img/shadabot.png differ diff --git a/static/img/shadatop.png b/static/img/shadatop.png new file mode 100644 index 0000000..883dcb9 Binary files /dev/null and b/static/img/shadatop.png differ diff --git a/static/img/snap-ferryman.png b/static/img/snap-ferryman.png new file mode 100644 index 0000000..4bcaca9 Binary files /dev/null and b/static/img/snap-ferryman.png differ diff --git a/static/img/spx-gc-home-256.png b/static/img/spx-gc-home-256.png new file mode 100644 index 0000000..40d0085 Binary files /dev/null and b/static/img/spx-gc-home-256.png differ diff --git a/static/img/spx-gc.ico b/static/img/spx-gc.ico new file mode 100644 index 0000000..ab374e2 Binary files /dev/null and b/static/img/spx-gc.ico differ diff --git a/static/img/spx-gc_org.ico b/static/img/spx-gc_org.ico new file mode 100644 index 0000000..1cb6510 Binary files /dev/null and b/static/img/spx-gc_org.ico differ diff --git a/static/img/spx.svg b/static/img/spx.svg new file mode 100644 index 0000000..9752092 --- /dev/null +++ b/static/img/spx.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/static/img/spx_offline.png b/static/img/spx_offline.png new file mode 100644 index 0000000..6e1de67 Binary files /dev/null and b/static/img/spx_offline.png differ diff --git a/static/img/spx_online.png b/static/img/spx_online.png new file mode 100644 index 0000000..c530fef Binary files /dev/null and b/static/img/spx_online.png differ diff --git a/static/img/spx_preview.png b/static/img/spx_preview.png new file mode 100644 index 0000000..d2f9882 Binary files /dev/null and b/static/img/spx_preview.png differ diff --git a/static/img/spx_program.png b/static/img/spx_program.png new file mode 100644 index 0000000..0f97c46 Binary files /dev/null and b/static/img/spx_program.png differ diff --git a/static/img/storeicon-org.png b/static/img/storeicon-org.png new file mode 100644 index 0000000..31d4083 Binary files /dev/null and b/static/img/storeicon-org.png differ diff --git a/static/img/storeicon.png b/static/img/storeicon.png new file mode 100644 index 0000000..d505958 Binary files /dev/null and b/static/img/storeicon.png differ diff --git a/static/img/welcome-splash-tiers.png b/static/img/welcome-splash-tiers.png new file mode 100644 index 0000000..31bb8ba Binary files /dev/null and b/static/img/welcome-splash-tiers.png differ diff --git a/static/img/yt_mockup.png b/static/img/yt_mockup.png new file mode 100644 index 0000000..983c3ac Binary files /dev/null and b/static/img/yt_mockup.png differ diff --git a/static/js/Sortable.min.js b/static/js/Sortable.min.js new file mode 100644 index 0000000..eba0614 --- /dev/null +++ b/static/js/Sortable.min.js @@ -0,0 +1,2 @@ +/*! Sortable 1.10.2 - MIT | git://github.com/SortableJS/Sortable.git */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&h(t,e):h(t,e))||o&&t===n)return t;if(t===n)break}while(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode)}var i;return null}var f,p=/\s+/g;function k(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(p," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(p," ")}}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function g(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=e.left-n&&r<=e.right+n,i=a>=e.top-n&&a<=e.bottom+n;return n&&o&&i?l=t:void 0}}),l}((t=t.touches?t.touches[0]:t).clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[j]._onDragOver(n)}}}function kt(t){z&&z.parentNode[j]._isOutsideThisEl(t.target)}function Rt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ot(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Rt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in O.initializePlugins(this,t,n),n)o in e||(e[o]=n[o]);for(var i in At(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&xt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?u(t,"pointerdown",this._onTapStart):(u(t,"mousedown",this._onTapStart),u(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(u(t,"dragover",this),u(t,"dragenter",this)),bt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,T())}function Xt(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||w||E?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Yt(t){t.draggable=!1}function Bt(){Dt=!1}function Ft(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ht(t){return setTimeout(t,0)}function Lt(t){return clearTimeout(t)}Rt.prototype={constructor:Rt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(function(t){St.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&St.push(o)}}(o),!z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled||s.isContentEditable||(l=P(l,t.draggable,o,!1))&&l.animated||Z===l)){if(J=F(l),et=F(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return W({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),K("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return W({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),K("filter",n,{evt:e}),!0})))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!z&&n.parentNode===r){var s=X(n);if(q=r,G=(z=n).parentNode,V=z.nextSibling,Z=n,ot=a.group,rt={target:Rt.dragged=z,clientX:(e||t).clientX,clientY:(e||t).clientY},ct=rt.clientX-s.left,ut=rt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,z.style["will-change"]="all",o=function(){K("delayEnded",i,{evt:t}),Rt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!c&&i.nativeDraggable&&(z.draggable=!0),i._triggerDragStart(t,e),W({sortable:i,name:"choose",originalEvent:t}),k(z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){g(z,t.trim(),Yt)}),u(l,"dragover",Pt),u(l,"mousemove",Pt),u(l,"touchmove",Pt),u(l,"mouseup",i._onDrop),u(l,"touchend",i._onDrop),u(l,"touchcancel",i._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,z.draggable=!0),K("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w))o();else{if(Rt.eventCanceled)return void this._onDrop();u(l,"mouseup",i._disableDelayedDrag),u(l,"touchend",i._disableDelayedDrag),u(l,"touchcancel",i._disableDelayedDrag),u(l,"mousemove",i._delayedDragTouchMoveHandler),u(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&u(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){z&&Yt(z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._disableDelayedDrag),d(t,"touchend",this._disableDelayedDrag),d(t,"touchcancel",this._disableDelayedDrag),d(t,"mousemove",this._delayedDragTouchMoveHandler),d(t,"touchmove",this._delayedDragTouchMoveHandler),d(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?u(document,"pointermove",this._onTouchMove):u(document,e?"touchmove":"mousemove",this._onTouchMove):(u(z,"dragend",this),u(q,"dragstart",this._onDragStart));try{document.selection?Ht(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(vt=!1,q&&z){K("dragStarted",this,{evt:e}),this.nativeDraggable&&u(document,"dragover",kt);var n=this.options;t||k(z,n.dragClass,!1),k(z,n.ghostClass,!0),Rt.active=this,t&&this._appendGhost(),W({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Nt();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY))!==e;)e=t;if(z.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){if(e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);It()}},_onTouchMove:function(t){if(rt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=U&&v(U,!0),a=U&&r&&r.a,l=U&&r&&r.d,s=Ct&>&&b(gt),c=(i.clientX-rt.clientX+o.x)/(a||1)+(s?s[0]-Et[0]:0)/(a||1),u=(i.clientY-rt.clientY+o.y)/(l||1)+(s?s[1]-Et[1]:0)/(l||1);if(!Rt.active&&!vt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(n,a,this)&&!g.animated){if(g===z)return A(!1);if(g&&l===n.target&&(s=g),s&&(i=X(s)),!1!==Xt(q,l,z,o,s,i,n,!!s))return O(),l.appendChild(z),G=l,N(),A(!0)}else if(s.parentNode===l){i=X(s);var v,m,b,y=z.parentNode!==l,w=!function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2}(z.animated&&z.toRect||o,s.animated&&s.toRect||i,a),E=a?"top":"left",D=Y(s,"top","top")||Y(z,"top","top"),S=D?D.scrollTop:void 0;if(ht!==s&&(m=i[E],yt=!1,wt=!w&&e.invertSwap||y),0!==(v=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&pt-1}function u(n,e){return n.apply(null,e)}var i={arr:function(n){return Array.isArray(n)},obj:function(n){return o(Object.prototype.toString.call(n),"Object")},pth:function(n){return i.obj(n)&&n.hasOwnProperty("totalLength")},svg:function(n){return n instanceof SVGElement},inp:function(n){return n instanceof HTMLInputElement},dom:function(n){return n.nodeType||i.svg(n)},str:function(n){return"string"==typeof n},fnc:function(n){return"function"==typeof n},und:function(n){return void 0===n},hex:function(n){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)},rgb:function(n){return/^rgb/.test(n)},hsl:function(n){return/^hsl/.test(n)},col:function(n){return i.hex(n)||i.rgb(n)||i.hsl(n)},key:function(r){return!n.hasOwnProperty(r)&&!e.hasOwnProperty(r)&&"targets"!==r&&"keyframes"!==r}};function c(n){var e=/\(([^)]+)\)/.exec(n);return e?e[1].split(",").map(function(n){return parseFloat(n)}):[]}function s(n,e){var r=c(n),o=a(i.und(r[0])?1:r[0],.1,100),u=a(i.und(r[1])?100:r[1],.1,100),s=a(i.und(r[2])?10:r[2],.1,100),f=a(i.und(r[3])?0:r[3],.1,100),l=Math.sqrt(u/o),d=s/(2*Math.sqrt(u*o)),p=d<1?l*Math.sqrt(1-d*d):0,h=1,v=d<1?(d*l-f)/p:-f+l;function g(n){var r=e?e*n/1e3:n;return r=d<1?Math.exp(-r*d*l)*(h*Math.cos(p*r)+v*Math.sin(p*r)):(h+v*r)*Math.exp(-r*l),0===n||1===n?n:1-r}return e?g:function(){var e=t.springs[n];if(e)return e;for(var r=0,a=0;;)if(1===g(r+=1/6)){if(++a>=16)break}else a=0;var o=r*(1/6)*1e3;return t.springs[n]=o,o}}function f(n){return void 0===n&&(n=10),function(e){return Math.ceil(a(e,1e-6,1)*n)*(1/n)}}var l,d,p=function(){var n=11,e=1/(n-1);function r(n,e){return 1-3*e+3*n}function t(n,e){return 3*e-6*n}function a(n){return 3*n}function o(n,e,o){return((r(e,o)*n+t(e,o))*n+a(e))*n}function u(n,e,o){return 3*r(e,o)*n*n+2*t(e,o)*n+a(e)}return function(r,t,a,i){if(0<=r&&r<=1&&0<=a&&a<=1){var c=new Float32Array(n);if(r!==t||a!==i)for(var s=0;s=.001?function(n,e,r,t){for(var a=0;a<4;++a){var i=u(e,r,t);if(0===i)return e;e-=(o(e,r,t)-n)/i}return e}(t,l,r,a):0===d?l:function(n,e,r,t,a){for(var u,i,c=0;(u=o(i=e+(r-e)/2,t,a)-n)>0?r=i:e=i,Math.abs(u)>1e-7&&++c<10;);return i}(t,i,i+e,r,a)}}}(),h=(l={linear:function(){return function(n){return n}}},d={Sine:function(){return function(n){return 1-Math.cos(n*Math.PI/2)}},Circ:function(){return function(n){return 1-Math.sqrt(1-n*n)}},Back:function(){return function(n){return n*n*(3*n-2)}},Bounce:function(){return function(n){for(var e,r=4;n<((e=Math.pow(2,--r))-1)/11;);return 1/Math.pow(4,3-r)-7.5625*Math.pow((3*e-2)/22-n,2)}},Elastic:function(n,e){void 0===n&&(n=1),void 0===e&&(e=.5);var r=a(n,1,10),t=a(e,.1,2);return function(n){return 0===n||1===n?n:-r*Math.pow(2,10*(n-1))*Math.sin((n-1-t/(2*Math.PI)*Math.asin(1/r))*(2*Math.PI)/t)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(n,e){d[n]=function(){return function(n){return Math.pow(n,e+2)}}}),Object.keys(d).forEach(function(n){var e=d[n];l["easeIn"+n]=e,l["easeOut"+n]=function(n,r){return function(t){return 1-e(n,r)(1-t)}},l["easeInOut"+n]=function(n,r){return function(t){return t<.5?e(n,r)(2*t)/2:1-e(n,r)(-2*t+2)/2}}}),l);function v(n,e){if(i.fnc(n))return n;var r=n.split("(")[0],t=h[r],a=c(n);switch(r){case"spring":return s(n,e);case"cubicBezier":return u(p,a);case"steps":return u(f,a);default:return u(t,a)}}function g(n){try{return document.querySelectorAll(n)}catch(n){return}}function m(n,e){for(var r=n.length,t=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o1&&(r-=1),r<1/6?n+6*(e-n)*r:r<.5?e:r<2/3?n+(e-n)*(2/3-r)*6:n}if(0==u)e=r=t=i;else{var f=i<.5?i*(1+u):i+u-i*u,l=2*i-f;e=s(l,f,o+1/3),r=s(l,f,o),t=s(l,f,o-1/3)}return"rgba("+255*e+","+255*r+","+255*t+","+c+")"}(n):void 0;var e,r,t,a}function C(n){var e=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(n);if(e)return e[1]}function B(n,e){return i.fnc(n)?n(e.target,e.id,e.total):n}function P(n,e){return n.getAttribute(e)}function I(n,e,r){if(x([r,"deg","rad","turn"],C(e)))return e;var a=t.CSS[e+r];if(!i.und(a))return a;var o=document.createElement(n.tagName),u=n.parentNode&&n.parentNode!==document?n.parentNode:document.body;u.appendChild(o),o.style.position="absolute",o.style.width=100+r;var c=100/o.offsetWidth;u.removeChild(o);var s=c*parseFloat(e);return t.CSS[e+r]=s,s}function T(n,e,r){if(e in n.style){var t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=n.style[e]||getComputedStyle(n).getPropertyValue(t)||"0";return r?I(n,a,r):a}}function D(n,e){return i.dom(n)&&!i.inp(n)&&(P(n,e)||i.svg(n)&&n[e])?"attribute":i.dom(n)&&x(r,e)?"transform":i.dom(n)&&"transform"!==e&&T(n,e)?"css":null!=n[e]?"object":void 0}function E(n){if(i.dom(n)){for(var e,r=n.style.transform||"",t=/(\w+)\(([^)]*)\)/g,a=new Map;e=t.exec(r);)a.set(e[1],e[2]);return a}}function F(n,e,r,t){var a,u=o(e,"scale")?1:0+(o(a=e,"translate")||"perspective"===a?"px":o(a,"rotate")||o(a,"skew")?"deg":void 0),i=E(n).get(e)||u;return r&&(r.transforms.list.set(e,i),r.transforms.last=e),t?I(n,i,t):i}function N(n,e,r,t){switch(D(n,e)){case"transform":return F(n,e,t,r);case"css":return T(n,e,r);case"attribute":return P(n,e);default:return n[e]||0}}function A(n,e){var r=/^(\*=|\+=|-=)/.exec(n);if(!r)return n;var t=C(n)||0,a=parseFloat(e),o=parseFloat(n.replace(r[0],""));switch(r[0][0]){case"+":return a+o+t;case"-":return a-o+t;case"*":return a*o+t}}function L(n,e){if(i.col(n))return O(n);if(/\s/g.test(n))return n;var r=C(n),t=r?n.substr(0,n.length-r.length):n;return e?t+e:t}function j(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function S(n){for(var e,r=n.points,t=0,a=0;a0&&(t+=j(e,o)),e=o}return t}function q(n){if(n.getTotalLength)return n.getTotalLength();switch(n.tagName.toLowerCase()){case"circle":return o=n,2*Math.PI*P(o,"r");case"rect":return 2*P(a=n,"width")+2*P(a,"height");case"line":return j({x:P(t=n,"x1"),y:P(t,"y1")},{x:P(t,"x2"),y:P(t,"y2")});case"polyline":return S(n);case"polygon":return r=(e=n).points,S(e)+j(r.getItem(r.numberOfItems-1),r.getItem(0))}var e,r,t,a,o}function $(n,e){var r=e||{},t=r.el||function(n){for(var e=n.parentNode;i.svg(e)&&i.svg(e.parentNode);)e=e.parentNode;return e}(n),a=t.getBoundingClientRect(),o=P(t,"viewBox"),u=a.width,c=a.height,s=r.viewBox||(o?o.split(" "):[0,0,u,c]);return{el:t,viewBox:s,x:s[0]/1,y:s[1]/1,w:u/s[2],h:c/s[3]}}function X(n,e){function r(r){void 0===r&&(r=0);var t=e+r>=1?e+r:0;return n.el.getPointAtLength(t)}var t=$(n.el,n.svg),a=r(),o=r(-1),u=r(1);switch(n.property){case"x":return(a.x-t.x)*t.w;case"y":return(a.y-t.y)*t.h;case"angle":return 180*Math.atan2(u.y-o.y,u.x-o.x)/Math.PI}}function Y(n,e){var r=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,t=L(i.pth(n)?n.totalLength:n,e)+"";return{original:t,numbers:t.match(r)?t.match(r).map(Number):[0],strings:i.str(n)||e?t.split(r):[]}}function Z(n){return m(n?y(i.arr(n)?n.map(b):b(n)):[],function(n,e,r){return r.indexOf(n)===e})}function Q(n){var e=Z(n);return e.map(function(n,r){return{target:n,id:r,total:e.length,transforms:{list:E(n)}}})}function V(n,e){var r=M(e);if(/^spring/.test(r.easing)&&(r.duration=s(r.easing)),i.arr(n)){var t=n.length;2===t&&!i.obj(n[0])?n={value:n}:i.fnc(e.duration)||(r.duration=e.duration/t)}var a=i.arr(n)?n:[n];return a.map(function(n,r){var t=i.obj(n)&&!i.pth(n)?n:{value:n};return i.und(t.delay)&&(t.delay=r?0:e.delay),i.und(t.endDelay)&&(t.endDelay=r===a.length-1?e.endDelay:0),t}).map(function(n){return k(n,r)})}function z(n,e){var r=[],t=e.keyframes;for(var a in t&&(e=k(function(n){for(var e=m(y(n.map(function(n){return Object.keys(n)})),function(n){return i.key(n)}).reduce(function(n,e){return n.indexOf(e)<0&&n.push(e),n},[]),r={},t=function(t){var a=e[t];r[a]=n.map(function(n){var e={};for(var r in n)i.key(r)?r==a&&(e.value=n[r]):e[r]=n[r];return e})},a=0;a-1&&(_.splice(o,1),r=_.length)}else a.tick(e);t++}n()}else U=cancelAnimationFrame(U)}return n}();function rn(r){void 0===r&&(r={});var t,o=0,u=0,i=0,c=0,s=null;function f(n){var e=window.Promise&&new Promise(function(n){return s=n});return n.finished=e,e}var l,d,p,h,v,g,y,b,x=(d=w(n,l=r),p=w(e,l),h=z(p,l),v=Q(l.targets),g=W(v,h),y=J(g,p),b=K,K++,k(d,{id:b,children:[],animatables:v,animations:g,duration:y.duration,delay:y.delay,endDelay:y.endDelay}));f(x);function M(){var n=x.direction;"alternate"!==n&&(x.direction="normal"!==n?"normal":"reverse"),x.reversed=!x.reversed,t.forEach(function(n){return n.reversed=x.reversed})}function O(n){return x.reversed?x.duration-n:n}function C(){o=0,u=O(x.currentTime)*(1/rn.speed)}function B(n,e){e&&e.seek(n-e.timelineOffset)}function P(n){for(var e=0,r=x.animations,t=r.length;e2||(b=Math.round(b*p)/p)),h.push(b)}var k=d.length;if(k){g=d[0];for(var O=0;O0&&(x.began=!0,I("begin")),!x.loopBegan&&x.currentTime>0&&(x.loopBegan=!0,I("loopBegin")),d<=r&&0!==x.currentTime&&P(0),(d>=l&&x.currentTime!==e||!e)&&P(e),d>r&&d=e&&(u=0,x.remaining&&!0!==x.remaining&&x.remaining--,x.remaining?(o=i,I("loopComplete"),x.loopBegan=!1,"alternate"===x.direction&&M()):(x.paused=!0,x.completed||(x.completed=!0,I("loopComplete"),I("complete"),!x.passThrough&&"Promise"in window&&(s(),f(x)))))}return x.reset=function(){var n=x.direction;x.passThrough=!1,x.currentTime=0,x.progress=0,x.paused=!0,x.began=!1,x.loopBegan=!1,x.changeBegan=!1,x.completed=!1,x.changeCompleted=!1,x.reversePlayback=!1,x.reversed="reverse"===n,x.remaining=x.loop,t=x.children;for(var e=c=t.length;e--;)x.children[e].reset();(x.reversed&&!0!==x.loop||"alternate"===n&&1===x.loop)&&x.remaining++,P(x.reversed?x.duration:0)},x.set=function(n,e){return R(n,e),x},x.tick=function(n){i=n,o||(o=i),T((i+(u-o))*rn.speed)},x.seek=function(n){T(O(n))},x.pause=function(){x.paused=!0,C()},x.play=function(){x.paused&&(x.completed&&x.reset(),x.paused=!1,_.push(x),C(),U||en())},x.reverse=function(){M(),x.completed=!x.reversed,C()},x.restart=function(){x.reset(),x.play()},x.reset(),x.autoplay&&x.play(),x}function tn(n,e){for(var r=e.length;r--;)x(n,e[r].animatable.target)&&e.splice(r,1)}return"undefined"!=typeof document&&document.addEventListener("visibilitychange",function(){document.hidden?(_.forEach(function(n){return n.pause()}),nn=_.slice(0),rn.running=_=[]):nn.forEach(function(n){return n.play()})}),rn.version="3.2.0",rn.speed=1,rn.running=_,rn.remove=function(n){for(var e=Z(n),r=_.length;r--;){var t=_[r],a=t.animations,o=t.children;tn(e,a);for(var u=o.length;u--;){var i=o[u],c=i.animations;tn(e,c),c.length||i.children.length||o.splice(u,1)}a.length||o.length||t.pause()}},rn.get=N,rn.set=R,rn.convertPx=I,rn.path=function(n,e){var r=i.str(n)?g(n)[0]:n,t=e||100;return function(n){return{property:n,el:r,svg:$(r),totalLength:q(r)*(t/100)}}},rn.setDashoffset=function(n){var e=q(n);return n.setAttribute("stroke-dasharray",e),e},rn.stagger=function(n,e){void 0===e&&(e={});var r=e.direction||"normal",t=e.easing?v(e.easing):null,a=e.grid,o=e.axis,u=e.from||0,c="first"===u,s="center"===u,f="last"===u,l=i.arr(n),d=l?parseFloat(n[0]):parseFloat(n),p=l?parseFloat(n[1]):0,h=C(l?n[1]:n)||0,g=e.start||0+(l?d:0),m=[],y=0;return function(n,e,i){if(c&&(u=0),s&&(u=(i-1)/2),f&&(u=i-1),!m.length){for(var v=0;v-1&&_.splice(o,1);for(var s=0;s= 200 && e < 300 } }; u.headers = { common: { Accept: "application/json, text/plain, */*" } }, i.forEach(["delete", "get", "head"], function (e) { u.headers[e] = {} }), i.forEach(["post", "put", "patch"], function (e) { u.headers[e] = i.merge(a) }), e.exports = u }, function (e, t, n) { "use strict"; var r = n(2); e.exports = function (e, t) { r.forEach(e, function (n, r) { r !== t && r.toUpperCase() === t.toUpperCase() && (e[t] = n, delete e[r]) }) } }, function (e, t, n) { "use strict"; var r = n(2), o = n(13), i = n(5), s = n(16), a = n(19), u = n(20), c = n(14); e.exports = function (e) { return new Promise(function (t, f) { var p = e.data, d = e.headers; r.isFormData(p) && delete d["Content-Type"]; var l = new XMLHttpRequest; if (e.auth) { var h = e.auth.username || "", m = e.auth.password || ""; d.Authorization = "Basic " + btoa(h + ":" + m) } var y = s(e.baseURL, e.url); if (l.open(e.method.toUpperCase(), i(y, e.params, e.paramsSerializer), !0), l.timeout = e.timeout, l.onreadystatechange = function () { if (l && 4 === l.readyState && (0 !== l.status || l.responseURL && 0 === l.responseURL.indexOf("file:"))) { var n = "getAllResponseHeaders" in l ? a(l.getAllResponseHeaders()) : null, r = e.responseType && "text" !== e.responseType ? l.response : l.responseText, i = { data: r, status: l.status, statusText: l.statusText, headers: n, config: e, request: l }; o(t, f, i), l = null } }, l.onabort = function () { l && (f(c("Request aborted", e, "ECONNABORTED", l)), l = null) }, l.onerror = function () { f(c("Network Error", e, null, l)), l = null }, l.ontimeout = function () { var t = "timeout of " + e.timeout + "ms exceeded"; e.timeoutErrorMessage && (t = e.timeoutErrorMessage), f(c(t, e, "ECONNABORTED", l)), l = null }, r.isStandardBrowserEnv()) { var g = n(21), v = (e.withCredentials || u(y)) && e.xsrfCookieName ? g.read(e.xsrfCookieName) : void 0; v && (d[e.xsrfHeaderName] = v) } if ("setRequestHeader" in l && r.forEach(d, function (e, t) { "undefined" == typeof p && "content-type" === t.toLowerCase() ? delete d[t] : l.setRequestHeader(t, e) }), r.isUndefined(e.withCredentials) || (l.withCredentials = !!e.withCredentials), e.responseType) try { l.responseType = e.responseType } catch (t) { if ("json" !== e.responseType) throw t } "function" == typeof e.onDownloadProgress && l.addEventListener("progress", e.onDownloadProgress), "function" == typeof e.onUploadProgress && l.upload && l.upload.addEventListener("progress", e.onUploadProgress), e.cancelToken && e.cancelToken.promise.then(function (e) { l && (l.abort(), f(e), l = null) }), void 0 === p && (p = null), l.send(p) }) } }, function (e, t, n) { "use strict"; var r = n(14); e.exports = function (e, t, n) { var o = n.config.validateStatus; !o || o(n.status) ? e(n) : t(r("Request failed with status code " + n.status, n.config, null, n.request, n)) } }, function (e, t, n) { "use strict"; var r = n(15); e.exports = function (e, t, n, o, i) { var s = new Error(e); return r(s, t, n, o, i) } }, function (e, t) { "use strict"; e.exports = function (e, t, n, r, o) { return e.config = t, n && (e.code = n), e.request = r, e.response = o, e.isAxiosError = !0, e.toJSON = function () { return { message: this.message, name: this.name, description: this.description, number: this.number, fileName: this.fileName, lineNumber: this.lineNumber, columnNumber: this.columnNumber, stack: this.stack, config: this.config, code: this.code } }, e } }, function (e, t, n) { "use strict"; var r = n(17), o = n(18); e.exports = function (e, t) { return e && !r(t) ? o(e, t) : t } }, function (e, t) { "use strict"; e.exports = function (e) { return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e) } }, function (e, t) { "use strict"; e.exports = function (e, t) { return t ? e.replace(/\/+$/, "") + "/" + t.replace(/^\/+/, "") : e } }, function (e, t, n) { "use strict"; var r = n(2), o = ["age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host", "if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization", "referer", "retry-after", "user-agent"]; e.exports = function (e) { var t, n, i, s = {}; return e ? (r.forEach(e.split("\n"), function (e) { if (i = e.indexOf(":"), t = r.trim(e.substr(0, i)).toLowerCase(), n = r.trim(e.substr(i + 1)), t) { if (s[t] && o.indexOf(t) >= 0) return; "set-cookie" === t ? s[t] = (s[t] ? s[t] : []).concat([n]) : s[t] = s[t] ? s[t] + ", " + n : n } }), s) : s } }, function (e, t, n) { "use strict"; var r = n(2); e.exports = r.isStandardBrowserEnv() ? function () { function e(e) { var t = e; return n && (o.setAttribute("href", t), t = o.href), o.setAttribute("href", t), { href: o.href, protocol: o.protocol ? o.protocol.replace(/:$/, "") : "", host: o.host, search: o.search ? o.search.replace(/^\?/, "") : "", hash: o.hash ? o.hash.replace(/^#/, "") : "", hostname: o.hostname, port: o.port, pathname: "/" === o.pathname.charAt(0) ? o.pathname : "/" + o.pathname } } var t, n = /(msie|trident)/i.test(navigator.userAgent), o = document.createElement("a"); return t = e(window.location.href), function (n) { var o = r.isString(n) ? e(n) : n; return o.protocol === t.protocol && o.host === t.host } }() : function () { return function () { return !0 } }() }, function (e, t, n) { "use strict"; var r = n(2); e.exports = r.isStandardBrowserEnv() ? function () { return { write: function (e, t, n, o, i, s) { var a = []; a.push(e + "=" + encodeURIComponent(t)), r.isNumber(n) && a.push("expires=" + new Date(n).toGMTString()), r.isString(o) && a.push("path=" + o), r.isString(i) && a.push("domain=" + i), s === !0 && a.push("secure"), document.cookie = a.join("; ") }, read: function (e) { var t = document.cookie.match(new RegExp("(^|;\\s*)(" + e + ")=([^;]*)")); return t ? decodeURIComponent(t[3]) : null }, remove: function (e) { this.write(e, "", Date.now() - 864e5) } } }() : function () { return { write: function () { }, read: function () { return null }, remove: function () { } } }() }, function (e, t, n) { "use strict"; var r = n(2); e.exports = function (e, t) { t = t || {}; var n = {}, o = ["url", "method", "params", "data"], i = ["headers", "auth", "proxy"], s = ["baseURL", "url", "transformRequest", "transformResponse", "paramsSerializer", "timeout", "withCredentials", "adapter", "responseType", "xsrfCookieName", "xsrfHeaderName", "onUploadProgress", "onDownloadProgress", "maxContentLength", "validateStatus", "maxRedirects", "httpAgent", "httpsAgent", "cancelToken", "socketPath"]; r.forEach(o, function (e) { "undefined" != typeof t[e] && (n[e] = t[e]) }), r.forEach(i, function (o) { r.isObject(t[o]) ? n[o] = r.deepMerge(e[o], t[o]) : "undefined" != typeof t[o] ? n[o] = t[o] : r.isObject(e[o]) ? n[o] = r.deepMerge(e[o]) : "undefined" != typeof e[o] && (n[o] = e[o]) }), r.forEach(s, function (r) { "undefined" != typeof t[r] ? n[r] = t[r] : "undefined" != typeof e[r] && (n[r] = e[r]) }); var a = o.concat(i).concat(s), u = Object.keys(t).filter(function (e) { return a.indexOf(e) === -1 }); return r.forEach(u, function (r) { "undefined" != typeof t[r] ? n[r] = t[r] : "undefined" != typeof e[r] && (n[r] = e[r]) }), n } }, function (e, t) { "use strict"; function n(e) { this.message = e } n.prototype.toString = function () { return "Cancel" + (this.message ? ": " + this.message : "") }, n.prototype.__CANCEL__ = !0, e.exports = n }, function (e, t, n) { "use strict"; function r(e) { if ("function" != typeof e) throw new TypeError("executor must be a function."); var t; this.promise = new Promise(function (e) { t = e }); var n = this; e(function (e) { n.reason || (n.reason = new o(e), t(n.reason)) }) } var o = n(23); r.prototype.throwIfRequested = function () { if (this.reason) throw this.reason }, r.source = function () { var e, t = new r(function (t) { e = t }); return { token: t, cancel: e } }, e.exports = r }, function (e, t) { "use strict"; e.exports = function (e) { return function (t) { return e.apply(null, t) } } }]) }); diff --git a/static/js/bootstrap.bundle.min.js b/static/js/bootstrap.bundle.min.js new file mode 100644 index 0000000..f5edb3b --- /dev/null +++ b/static/js/bootstrap.bundle.min.js @@ -0,0 +1,4180 @@ +/*! + * Bootstrap v5.3.0 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!(function (t, e) { + "object" == typeof exports && "undefined" != typeof module + ? (module.exports = e()) + : "function" == typeof define && define.amd + ? define(e) + : ((t = + "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = + e()); +})(this, function () { + "use strict"; + const t = new Map(), + e = { + set(e, i, n) { + t.has(e) || t.set(e, new Map()); + const s = t.get(e); + s.has(i) || 0 === s.size + ? s.set(i, n) + : console.error( + `Bootstrap doesn't allow more than one instance per element. Bound instance: ${ + Array.from(s.keys())[0] + }.` + ); + }, + get: (e, i) => (t.has(e) && t.get(e).get(i)) || null, + remove(e, i) { + if (!t.has(e)) return; + const n = t.get(e); + n.delete(i), 0 === n.size && t.delete(e); + }, + }, + i = "transitionend", + n = (t) => ( + t && + window.CSS && + window.CSS.escape && + (t = t.replace(/#([^\s"#']+)/g, (t, e) => `#${CSS.escape(e)}`)), + t + ), + s = (t) => { + t.dispatchEvent(new Event(i)); + }, + o = (t) => + !(!t || "object" != typeof t) && + (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType), + r = (t) => + o(t) + ? t.jquery + ? t[0] + : t + : "string" == typeof t && t.length > 0 + ? document.querySelector(n(t)) + : null, + a = (t) => { + if (!o(t) || 0 === t.getClientRects().length) return !1; + const e = + "visible" === getComputedStyle(t).getPropertyValue("visibility"), + i = t.closest("details:not([open])"); + if (!i) return e; + if (i !== t) { + const e = t.closest("summary"); + if (e && e.parentNode !== i) return !1; + if (null === e) return !1; + } + return e; + }, + l = (t) => + !t || + t.nodeType !== Node.ELEMENT_NODE || + !!t.classList.contains("disabled") || + (void 0 !== t.disabled + ? t.disabled + : t.hasAttribute("disabled") && "false" !== t.getAttribute("disabled")), + c = (t) => { + if (!document.documentElement.attachShadow) return null; + if ("function" == typeof t.getRootNode) { + const e = t.getRootNode(); + return e instanceof ShadowRoot ? e : null; + } + return t instanceof ShadowRoot + ? t + : t.parentNode + ? c(t.parentNode) + : null; + }, + h = () => {}, + d = (t) => { + t.offsetHeight; + }, + u = () => + window.jQuery && !document.body.hasAttribute("data-bs-no-jquery") + ? window.jQuery + : null, + f = [], + p = () => "rtl" === document.documentElement.dir, + m = (t) => { + var e; + (e = () => { + const e = u(); + if (e) { + const i = t.NAME, + n = e.fn[i]; + (e.fn[i] = t.jQueryInterface), + (e.fn[i].Constructor = t), + (e.fn[i].noConflict = () => ((e.fn[i] = n), t.jQueryInterface)); + } + }), + "loading" === document.readyState + ? (f.length || + document.addEventListener("DOMContentLoaded", () => { + for (const t of f) t(); + }), + f.push(e)) + : e(); + }, + g = (t, e = [], i = t) => ("function" == typeof t ? t(...e) : i), + _ = (t, e, n = !0) => { + if (!n) return void g(t); + const o = + ((t) => { + if (!t) return 0; + let { transitionDuration: e, transitionDelay: i } = + window.getComputedStyle(t); + const n = Number.parseFloat(e), + s = Number.parseFloat(i); + return n || s + ? ((e = e.split(",")[0]), + (i = i.split(",")[0]), + 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) + : 0; + })(e) + 5; + let r = !1; + const a = ({ target: n }) => { + n === e && ((r = !0), e.removeEventListener(i, a), g(t)); + }; + e.addEventListener(i, a), + setTimeout(() => { + r || s(e); + }, o); + }, + b = (t, e, i, n) => { + const s = t.length; + let o = t.indexOf(e); + return -1 === o + ? !i && n + ? t[s - 1] + : t[0] + : ((o += i ? 1 : -1), + n && (o = (o + s) % s), + t[Math.max(0, Math.min(o, s - 1))]); + }, + v = /[^.]*(?=\..*)\.|.*/, + y = /\..*/, + w = /::\d+$/, + A = {}; + let E = 1; + const T = { mouseenter: "mouseover", mouseleave: "mouseout" }, + C = new Set([ + "click", + "dblclick", + "mouseup", + "mousedown", + "contextmenu", + "mousewheel", + "DOMMouseScroll", + "mouseover", + "mouseout", + "mousemove", + "selectstart", + "selectend", + "keydown", + "keypress", + "keyup", + "orientationchange", + "touchstart", + "touchmove", + "touchend", + "touchcancel", + "pointerdown", + "pointermove", + "pointerup", + "pointerleave", + "pointercancel", + "gesturestart", + "gesturechange", + "gestureend", + "focus", + "blur", + "change", + "reset", + "select", + "submit", + "focusin", + "focusout", + "load", + "unload", + "beforeunload", + "resize", + "move", + "DOMContentLoaded", + "readystatechange", + "error", + "abort", + "scroll", + ]); + function O(t, e) { + return (e && `${e}::${E++}`) || t.uidEvent || E++; + } + function x(t) { + const e = O(t); + return (t.uidEvent = e), (A[e] = A[e] || {}), A[e]; + } + function k(t, e, i = null) { + return Object.values(t).find( + (t) => t.callable === e && t.delegationSelector === i + ); + } + function L(t, e, i) { + const n = "string" == typeof e, + s = n ? i : e || i; + let o = N(t); + return C.has(o) || (o = t), [n, s, o]; + } + function S(t, e, i, n, s) { + if ("string" != typeof e || !t) return; + let [o, r, a] = L(e, i, n); + if (e in T) { + const t = (t) => + function (e) { + if ( + !e.relatedTarget || + (e.relatedTarget !== e.delegateTarget && + !e.delegateTarget.contains(e.relatedTarget)) + ) + return t.call(this, e); + }; + r = t(r); + } + const l = x(t), + c = l[a] || (l[a] = {}), + h = k(c, r, o ? i : null); + if (h) return void (h.oneOff = h.oneOff && s); + const d = O(r, e.replace(v, "")), + u = o + ? (function (t, e, i) { + return function n(s) { + const o = t.querySelectorAll(e); + for (let { target: r } = s; r && r !== this; r = r.parentNode) + for (const a of o) + if (a === r) + return ( + M(s, { delegateTarget: r }), + n.oneOff && P.off(t, s.type, e, i), + i.apply(r, [s]) + ); + }; + })(t, i, r) + : (function (t, e) { + return function i(n) { + return ( + M(n, { delegateTarget: t }), + i.oneOff && P.off(t, n.type, e), + e.apply(t, [n]) + ); + }; + })(t, r); + (u.delegationSelector = o ? i : null), + (u.callable = r), + (u.oneOff = s), + (u.uidEvent = d), + (c[d] = u), + t.addEventListener(a, u, o); + } + function D(t, e, i, n, s) { + const o = k(e[i], n, s); + o && (t.removeEventListener(i, o, Boolean(s)), delete e[i][o.uidEvent]); + } + function I(t, e, i, n) { + const s = e[i] || {}; + for (const [o, r] of Object.entries(s)) + o.includes(n) && D(t, e, i, r.callable, r.delegationSelector); + } + function N(t) { + return (t = t.replace(y, "")), T[t] || t; + } + const P = { + on(t, e, i, n) { + S(t, e, i, n, !1); + }, + one(t, e, i, n) { + S(t, e, i, n, !0); + }, + off(t, e, i, n) { + if ("string" != typeof e || !t) return; + const [s, o, r] = L(e, i, n), + a = r !== e, + l = x(t), + c = l[r] || {}, + h = e.startsWith("."); + if (void 0 === o) { + if (h) for (const i of Object.keys(l)) I(t, l, i, e.slice(1)); + for (const [i, n] of Object.entries(c)) { + const s = i.replace(w, ""); + (a && !e.includes(s)) || D(t, l, r, n.callable, n.delegationSelector); + } + } else { + if (!Object.keys(c).length) return; + D(t, l, r, o, s ? i : null); + } + }, + trigger(t, e, i) { + if ("string" != typeof e || !t) return null; + const n = u(); + let s = null, + o = !0, + r = !0, + a = !1; + e !== N(e) && + n && + ((s = n.Event(e, i)), + n(t).trigger(s), + (o = !s.isPropagationStopped()), + (r = !s.isImmediatePropagationStopped()), + (a = s.isDefaultPrevented())); + const l = M(new Event(e, { bubbles: o, cancelable: !0 }), i); + return ( + a && l.preventDefault(), + r && t.dispatchEvent(l), + l.defaultPrevented && s && s.preventDefault(), + l + ); + }, + }; + function M(t, e = {}) { + for (const [i, n] of Object.entries(e)) + try { + t[i] = n; + } catch (e) { + Object.defineProperty(t, i, { configurable: !0, get: () => n }); + } + return t; + } + function j(t) { + if ("true" === t) return !0; + if ("false" === t) return !1; + if (t === Number(t).toString()) return Number(t); + if ("" === t || "null" === t) return null; + if ("string" != typeof t) return t; + try { + return JSON.parse(decodeURIComponent(t)); + } catch (e) { + return t; + } + } + function F(t) { + return t.replace(/[A-Z]/g, (t) => `-${t.toLowerCase()}`); + } + const H = { + setDataAttribute(t, e, i) { + t.setAttribute(`data-bs-${F(e)}`, i); + }, + removeDataAttribute(t, e) { + t.removeAttribute(`data-bs-${F(e)}`); + }, + getDataAttributes(t) { + if (!t) return {}; + const e = {}, + i = Object.keys(t.dataset).filter( + (t) => t.startsWith("bs") && !t.startsWith("bsConfig") + ); + for (const n of i) { + let i = n.replace(/^bs/, ""); + (i = i.charAt(0).toLowerCase() + i.slice(1, i.length)), + (e[i] = j(t.dataset[n])); + } + return e; + }, + getDataAttribute: (t, e) => j(t.getAttribute(`data-bs-${F(e)}`)), + }; + class $ { + static get Default() { + return {}; + } + static get DefaultType() { + return {}; + } + static get NAME() { + throw new Error( + 'You have to implement the static method "NAME", for each component!' + ); + } + _getConfig(t) { + return ( + (t = this._mergeConfigObj(t)), + (t = this._configAfterMerge(t)), + this._typeCheckConfig(t), + t + ); + } + _configAfterMerge(t) { + return t; + } + _mergeConfigObj(t, e) { + const i = o(e) ? H.getDataAttribute(e, "config") : {}; + return { + ...this.constructor.Default, + ...("object" == typeof i ? i : {}), + ...(o(e) ? H.getDataAttributes(e) : {}), + ...("object" == typeof t ? t : {}), + }; + } + _typeCheckConfig(t, e = this.constructor.DefaultType) { + for (const [n, s] of Object.entries(e)) { + const e = t[n], + r = o(e) + ? "element" + : null == (i = e) + ? `${i}` + : Object.prototype.toString + .call(i) + .match(/\s([a-z]+)/i)[1] + .toLowerCase(); + if (!new RegExp(s).test(r)) + throw new TypeError( + `${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".` + ); + } + var i; + } + } + class W extends $ { + constructor(t, i) { + super(), + (t = r(t)) && + ((this._element = t), + (this._config = this._getConfig(i)), + e.set(this._element, this.constructor.DATA_KEY, this)); + } + dispose() { + e.remove(this._element, this.constructor.DATA_KEY), + P.off(this._element, this.constructor.EVENT_KEY); + for (const t of Object.getOwnPropertyNames(this)) this[t] = null; + } + _queueCallback(t, e, i = !0) { + _(t, e, i); + } + _getConfig(t) { + return ( + (t = this._mergeConfigObj(t, this._element)), + (t = this._configAfterMerge(t)), + this._typeCheckConfig(t), + t + ); + } + static getInstance(t) { + return e.get(r(t), this.DATA_KEY); + } + static getOrCreateInstance(t, e = {}) { + return ( + this.getInstance(t) || new this(t, "object" == typeof e ? e : null) + ); + } + static get VERSION() { + return "5.3.0"; + } + static get DATA_KEY() { + return `bs.${this.NAME}`; + } + static get EVENT_KEY() { + return `.${this.DATA_KEY}`; + } + static eventName(t) { + return `${t}${this.EVENT_KEY}`; + } + } + const B = (t) => { + let e = t.getAttribute("data-bs-target"); + if (!e || "#" === e) { + let i = t.getAttribute("href"); + if (!i || (!i.includes("#") && !i.startsWith("."))) return null; + i.includes("#") && !i.startsWith("#") && (i = `#${i.split("#")[1]}`), + (e = i && "#" !== i ? i.trim() : null); + } + return n(e); + }, + z = { + find: (t, e = document.documentElement) => + [].concat(...Element.prototype.querySelectorAll.call(e, t)), + findOne: (t, e = document.documentElement) => + Element.prototype.querySelector.call(e, t), + children: (t, e) => [].concat(...t.children).filter((t) => t.matches(e)), + parents(t, e) { + const i = []; + let n = t.parentNode.closest(e); + for (; n; ) i.push(n), (n = n.parentNode.closest(e)); + return i; + }, + prev(t, e) { + let i = t.previousElementSibling; + for (; i; ) { + if (i.matches(e)) return [i]; + i = i.previousElementSibling; + } + return []; + }, + next(t, e) { + let i = t.nextElementSibling; + for (; i; ) { + if (i.matches(e)) return [i]; + i = i.nextElementSibling; + } + return []; + }, + focusableChildren(t) { + const e = [ + "a", + "button", + "input", + "textarea", + "select", + "details", + "[tabindex]", + '[contenteditable="true"]', + ] + .map((t) => `${t}:not([tabindex^="-"])`) + .join(","); + return this.find(e, t).filter((t) => !l(t) && a(t)); + }, + getSelectorFromElement(t) { + const e = B(t); + return e && z.findOne(e) ? e : null; + }, + getElementFromSelector(t) { + const e = B(t); + return e ? z.findOne(e) : null; + }, + getMultipleElementsFromSelector(t) { + const e = B(t); + return e ? z.find(e) : []; + }, + }, + R = (t, e = "hide") => { + const i = `click.dismiss${t.EVENT_KEY}`, + n = t.NAME; + P.on(document, i, `[data-bs-dismiss="${n}"]`, function (i) { + if ( + (["A", "AREA"].includes(this.tagName) && i.preventDefault(), l(this)) + ) + return; + const s = z.getElementFromSelector(this) || this.closest(`.${n}`); + t.getOrCreateInstance(s)[e](); + }); + }; + class q extends W { + static get NAME() { + return "alert"; + } + close() { + if (P.trigger(this._element, "close.bs.alert").defaultPrevented) return; + this._element.classList.remove("show"); + const t = this._element.classList.contains("fade"); + this._queueCallback(() => this._destroyElement(), this._element, t); + } + _destroyElement() { + this._element.remove(), + P.trigger(this._element, "closed.bs.alert"), + this.dispose(); + } + static jQueryInterface(t) { + return this.each(function () { + const e = q.getOrCreateInstance(this); + if ("string" == typeof t) { + if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) + throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + R(q, "close"), m(q); + const V = '[data-bs-toggle="button"]'; + class K extends W { + static get NAME() { + return "button"; + } + toggle() { + this._element.setAttribute( + "aria-pressed", + this._element.classList.toggle("active") + ); + } + static jQueryInterface(t) { + return this.each(function () { + const e = K.getOrCreateInstance(this); + "toggle" === t && e[t](); + }); + } + } + P.on(document, "click.bs.button.data-api", V, (t) => { + t.preventDefault(); + const e = t.target.closest(V); + K.getOrCreateInstance(e).toggle(); + }), + m(K); + const Q = { endCallback: null, leftCallback: null, rightCallback: null }, + X = { + endCallback: "(function|null)", + leftCallback: "(function|null)", + rightCallback: "(function|null)", + }; + class Y extends $ { + constructor(t, e) { + super(), + (this._element = t), + t && + Y.isSupported() && + ((this._config = this._getConfig(e)), + (this._deltaX = 0), + (this._supportPointerEvents = Boolean(window.PointerEvent)), + this._initEvents()); + } + static get Default() { + return Q; + } + static get DefaultType() { + return X; + } + static get NAME() { + return "swipe"; + } + dispose() { + P.off(this._element, ".bs.swipe"); + } + _start(t) { + this._supportPointerEvents + ? this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX) + : (this._deltaX = t.touches[0].clientX); + } + _end(t) { + this._eventIsPointerPenTouch(t) && + (this._deltaX = t.clientX - this._deltaX), + this._handleSwipe(), + g(this._config.endCallback); + } + _move(t) { + this._deltaX = + t.touches && t.touches.length > 1 + ? 0 + : t.touches[0].clientX - this._deltaX; + } + _handleSwipe() { + const t = Math.abs(this._deltaX); + if (t <= 40) return; + const e = t / this._deltaX; + (this._deltaX = 0), + e && g(e > 0 ? this._config.rightCallback : this._config.leftCallback); + } + _initEvents() { + this._supportPointerEvents + ? (P.on(this._element, "pointerdown.bs.swipe", (t) => this._start(t)), + P.on(this._element, "pointerup.bs.swipe", (t) => this._end(t)), + this._element.classList.add("pointer-event")) + : (P.on(this._element, "touchstart.bs.swipe", (t) => this._start(t)), + P.on(this._element, "touchmove.bs.swipe", (t) => this._move(t)), + P.on(this._element, "touchend.bs.swipe", (t) => this._end(t))); + } + _eventIsPointerPenTouch(t) { + return ( + this._supportPointerEvents && + ("pen" === t.pointerType || "touch" === t.pointerType) + ); + } + static isSupported() { + return ( + "ontouchstart" in document.documentElement || + navigator.maxTouchPoints > 0 + ); + } + } + const U = "next", + G = "prev", + J = "left", + Z = "right", + tt = "slid.bs.carousel", + et = "carousel", + it = "active", + nt = { ArrowLeft: Z, ArrowRight: J }, + st = { + interval: 5e3, + keyboard: !0, + pause: "hover", + ride: !1, + touch: !0, + wrap: !0, + }, + ot = { + interval: "(number|boolean)", + keyboard: "boolean", + pause: "(string|boolean)", + ride: "(boolean|string)", + touch: "boolean", + wrap: "boolean", + }; + class rt extends W { + constructor(t, e) { + super(t, e), + (this._interval = null), + (this._activeElement = null), + (this._isSliding = !1), + (this.touchTimeout = null), + (this._swipeHelper = null), + (this._indicatorsElement = z.findOne( + ".carousel-indicators", + this._element + )), + this._addEventListeners(), + this._config.ride === et && this.cycle(); + } + static get Default() { + return st; + } + static get DefaultType() { + return ot; + } + static get NAME() { + return "carousel"; + } + next() { + this._slide(U); + } + nextWhenVisible() { + !document.hidden && a(this._element) && this.next(); + } + prev() { + this._slide(G); + } + pause() { + this._isSliding && s(this._element), this._clearInterval(); + } + cycle() { + this._clearInterval(), + this._updateInterval(), + (this._interval = setInterval( + () => this.nextWhenVisible(), + this._config.interval + )); + } + _maybeEnableCycle() { + this._config.ride && + (this._isSliding + ? P.one(this._element, tt, () => this.cycle()) + : this.cycle()); + } + to(t) { + const e = this._getItems(); + if (t > e.length - 1 || t < 0) return; + if (this._isSliding) + return void P.one(this._element, tt, () => this.to(t)); + const i = this._getItemIndex(this._getActive()); + if (i === t) return; + const n = t > i ? U : G; + this._slide(n, e[t]); + } + dispose() { + this._swipeHelper && this._swipeHelper.dispose(), super.dispose(); + } + _configAfterMerge(t) { + return (t.defaultInterval = t.interval), t; + } + _addEventListeners() { + this._config.keyboard && + P.on(this._element, "keydown.bs.carousel", (t) => this._keydown(t)), + "hover" === this._config.pause && + (P.on(this._element, "mouseenter.bs.carousel", () => this.pause()), + P.on(this._element, "mouseleave.bs.carousel", () => + this._maybeEnableCycle() + )), + this._config.touch && Y.isSupported() && this._addTouchEventListeners(); + } + _addTouchEventListeners() { + for (const t of z.find(".carousel-item img", this._element)) + P.on(t, "dragstart.bs.carousel", (t) => t.preventDefault()); + const t = { + leftCallback: () => this._slide(this._directionToOrder(J)), + rightCallback: () => this._slide(this._directionToOrder(Z)), + endCallback: () => { + "hover" === this._config.pause && + (this.pause(), + this.touchTimeout && clearTimeout(this.touchTimeout), + (this.touchTimeout = setTimeout( + () => this._maybeEnableCycle(), + 500 + this._config.interval + ))); + }, + }; + this._swipeHelper = new Y(this._element, t); + } + _keydown(t) { + if (/input|textarea/i.test(t.target.tagName)) return; + const e = nt[t.key]; + e && (t.preventDefault(), this._slide(this._directionToOrder(e))); + } + _getItemIndex(t) { + return this._getItems().indexOf(t); + } + _setActiveIndicatorElement(t) { + if (!this._indicatorsElement) return; + const e = z.findOne(".active", this._indicatorsElement); + e.classList.remove(it), e.removeAttribute("aria-current"); + const i = z.findOne(`[data-bs-slide-to="${t}"]`, this._indicatorsElement); + i && (i.classList.add(it), i.setAttribute("aria-current", "true")); + } + _updateInterval() { + const t = this._activeElement || this._getActive(); + if (!t) return; + const e = Number.parseInt(t.getAttribute("data-bs-interval"), 10); + this._config.interval = e || this._config.defaultInterval; + } + _slide(t, e = null) { + if (this._isSliding) return; + const i = this._getActive(), + n = t === U, + s = e || b(this._getItems(), i, n, this._config.wrap); + if (s === i) return; + const o = this._getItemIndex(s), + r = (e) => + P.trigger(this._element, e, { + relatedTarget: s, + direction: this._orderToDirection(t), + from: this._getItemIndex(i), + to: o, + }); + if (r("slide.bs.carousel").defaultPrevented) return; + if (!i || !s) return; + const a = Boolean(this._interval); + this.pause(), + (this._isSliding = !0), + this._setActiveIndicatorElement(o), + (this._activeElement = s); + const l = n ? "carousel-item-start" : "carousel-item-end", + c = n ? "carousel-item-next" : "carousel-item-prev"; + s.classList.add(c), + d(s), + i.classList.add(l), + s.classList.add(l), + this._queueCallback( + () => { + s.classList.remove(l, c), + s.classList.add(it), + i.classList.remove(it, c, l), + (this._isSliding = !1), + r(tt); + }, + i, + this._isAnimated() + ), + a && this.cycle(); + } + _isAnimated() { + return this._element.classList.contains("slide"); + } + _getActive() { + return z.findOne(".active.carousel-item", this._element); + } + _getItems() { + return z.find(".carousel-item", this._element); + } + _clearInterval() { + this._interval && + (clearInterval(this._interval), (this._interval = null)); + } + _directionToOrder(t) { + return p() ? (t === J ? G : U) : t === J ? U : G; + } + _orderToDirection(t) { + return p() ? (t === G ? J : Z) : t === G ? Z : J; + } + static jQueryInterface(t) { + return this.each(function () { + const e = rt.getOrCreateInstance(this, t); + if ("number" != typeof t) { + if ("string" == typeof t) { + if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) + throw new TypeError(`No method named "${t}"`); + e[t](); + } + } else e.to(t); + }); + } + } + P.on( + document, + "click.bs.carousel.data-api", + "[data-bs-slide], [data-bs-slide-to]", + function (t) { + const e = z.getElementFromSelector(this); + if (!e || !e.classList.contains(et)) return; + t.preventDefault(); + const i = rt.getOrCreateInstance(e), + n = this.getAttribute("data-bs-slide-to"); + return n + ? (i.to(n), void i._maybeEnableCycle()) + : "next" === H.getDataAttribute(this, "slide") + ? (i.next(), void i._maybeEnableCycle()) + : (i.prev(), void i._maybeEnableCycle()); + } + ), + P.on(window, "load.bs.carousel.data-api", () => { + const t = z.find('[data-bs-ride="carousel"]'); + for (const e of t) rt.getOrCreateInstance(e); + }), + m(rt); + const at = "show", + lt = "collapse", + ct = "collapsing", + ht = '[data-bs-toggle="collapse"]', + dt = { parent: null, toggle: !0 }, + ut = { parent: "(null|element)", toggle: "boolean" }; + class ft extends W { + constructor(t, e) { + super(t, e), (this._isTransitioning = !1), (this._triggerArray = []); + const i = z.find(ht); + for (const t of i) { + const e = z.getSelectorFromElement(t), + i = z.find(e).filter((t) => t === this._element); + null !== e && i.length && this._triggerArray.push(t); + } + this._initializeChildren(), + this._config.parent || + this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), + this._config.toggle && this.toggle(); + } + static get Default() { + return dt; + } + static get DefaultType() { + return ut; + } + static get NAME() { + return "collapse"; + } + toggle() { + this._isShown() ? this.hide() : this.show(); + } + show() { + if (this._isTransitioning || this._isShown()) return; + let t = []; + if ( + (this._config.parent && + (t = this._getFirstLevelChildren( + ".collapse.show, .collapse.collapsing" + ) + .filter((t) => t !== this._element) + .map((t) => ft.getOrCreateInstance(t, { toggle: !1 }))), + t.length && t[0]._isTransitioning) + ) + return; + if (P.trigger(this._element, "show.bs.collapse").defaultPrevented) return; + for (const e of t) e.hide(); + const e = this._getDimension(); + this._element.classList.remove(lt), + this._element.classList.add(ct), + (this._element.style[e] = 0), + this._addAriaAndCollapsedClass(this._triggerArray, !0), + (this._isTransitioning = !0); + const i = `scroll${e[0].toUpperCase() + e.slice(1)}`; + this._queueCallback( + () => { + (this._isTransitioning = !1), + this._element.classList.remove(ct), + this._element.classList.add(lt, at), + (this._element.style[e] = ""), + P.trigger(this._element, "shown.bs.collapse"); + }, + this._element, + !0 + ), + (this._element.style[e] = `${this._element[i]}px`); + } + hide() { + if (this._isTransitioning || !this._isShown()) return; + if (P.trigger(this._element, "hide.bs.collapse").defaultPrevented) return; + const t = this._getDimension(); + (this._element.style[t] = `${ + this._element.getBoundingClientRect()[t] + }px`), + d(this._element), + this._element.classList.add(ct), + this._element.classList.remove(lt, at); + for (const t of this._triggerArray) { + const e = z.getElementFromSelector(t); + e && !this._isShown(e) && this._addAriaAndCollapsedClass([t], !1); + } + (this._isTransitioning = !0), + (this._element.style[t] = ""), + this._queueCallback( + () => { + (this._isTransitioning = !1), + this._element.classList.remove(ct), + this._element.classList.add(lt), + P.trigger(this._element, "hidden.bs.collapse"); + }, + this._element, + !0 + ); + } + _isShown(t = this._element) { + return t.classList.contains(at); + } + _configAfterMerge(t) { + return (t.toggle = Boolean(t.toggle)), (t.parent = r(t.parent)), t; + } + _getDimension() { + return this._element.classList.contains("collapse-horizontal") + ? "width" + : "height"; + } + _initializeChildren() { + if (!this._config.parent) return; + const t = this._getFirstLevelChildren(ht); + for (const e of t) { + const t = z.getElementFromSelector(e); + t && this._addAriaAndCollapsedClass([e], this._isShown(t)); + } + } + _getFirstLevelChildren(t) { + const e = z.find(":scope .collapse .collapse", this._config.parent); + return z.find(t, this._config.parent).filter((t) => !e.includes(t)); + } + _addAriaAndCollapsedClass(t, e) { + if (t.length) + for (const i of t) + i.classList.toggle("collapsed", !e), + i.setAttribute("aria-expanded", e); + } + static jQueryInterface(t) { + const e = {}; + return ( + "string" == typeof t && /show|hide/.test(t) && (e.toggle = !1), + this.each(function () { + const i = ft.getOrCreateInstance(this, e); + if ("string" == typeof t) { + if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t](); + } + }) + ); + } + } + P.on(document, "click.bs.collapse.data-api", ht, function (t) { + ("A" === t.target.tagName || + (t.delegateTarget && "A" === t.delegateTarget.tagName)) && + t.preventDefault(); + for (const t of z.getMultipleElementsFromSelector(this)) + ft.getOrCreateInstance(t, { toggle: !1 }).toggle(); + }), + m(ft); + var pt = "top", + mt = "bottom", + gt = "right", + _t = "left", + bt = "auto", + vt = [pt, mt, gt, _t], + yt = "start", + wt = "end", + At = "clippingParents", + Et = "viewport", + Tt = "popper", + Ct = "reference", + Ot = vt.reduce(function (t, e) { + return t.concat([e + "-" + yt, e + "-" + wt]); + }, []), + xt = [].concat(vt, [bt]).reduce(function (t, e) { + return t.concat([e, e + "-" + yt, e + "-" + wt]); + }, []), + kt = "beforeRead", + Lt = "read", + St = "afterRead", + Dt = "beforeMain", + It = "main", + Nt = "afterMain", + Pt = "beforeWrite", + Mt = "write", + jt = "afterWrite", + Ft = [kt, Lt, St, Dt, It, Nt, Pt, Mt, jt]; + function Ht(t) { + return t ? (t.nodeName || "").toLowerCase() : null; + } + function $t(t) { + if (null == t) return window; + if ("[object Window]" !== t.toString()) { + var e = t.ownerDocument; + return (e && e.defaultView) || window; + } + return t; + } + function Wt(t) { + return t instanceof $t(t).Element || t instanceof Element; + } + function Bt(t) { + return t instanceof $t(t).HTMLElement || t instanceof HTMLElement; + } + function zt(t) { + return ( + "undefined" != typeof ShadowRoot && + (t instanceof $t(t).ShadowRoot || t instanceof ShadowRoot) + ); + } + const Rt = { + name: "applyStyles", + enabled: !0, + phase: "write", + fn: function (t) { + var e = t.state; + Object.keys(e.elements).forEach(function (t) { + var i = e.styles[t] || {}, + n = e.attributes[t] || {}, + s = e.elements[t]; + Bt(s) && + Ht(s) && + (Object.assign(s.style, i), + Object.keys(n).forEach(function (t) { + var e = n[t]; + !1 === e + ? s.removeAttribute(t) + : s.setAttribute(t, !0 === e ? "" : e); + })); + }); + }, + effect: function (t) { + var e = t.state, + i = { + popper: { + position: e.options.strategy, + left: "0", + top: "0", + margin: "0", + }, + arrow: { position: "absolute" }, + reference: {}, + }; + return ( + Object.assign(e.elements.popper.style, i.popper), + (e.styles = i), + e.elements.arrow && Object.assign(e.elements.arrow.style, i.arrow), + function () { + Object.keys(e.elements).forEach(function (t) { + var n = e.elements[t], + s = e.attributes[t] || {}, + o = Object.keys( + e.styles.hasOwnProperty(t) ? e.styles[t] : i[t] + ).reduce(function (t, e) { + return (t[e] = ""), t; + }, {}); + Bt(n) && + Ht(n) && + (Object.assign(n.style, o), + Object.keys(s).forEach(function (t) { + n.removeAttribute(t); + })); + }); + } + ); + }, + requires: ["computeStyles"], + }; + function qt(t) { + return t.split("-")[0]; + } + var Vt = Math.max, + Kt = Math.min, + Qt = Math.round; + function Xt() { + var t = navigator.userAgentData; + return null != t && t.brands && Array.isArray(t.brands) + ? t.brands + .map(function (t) { + return t.brand + "/" + t.version; + }) + .join(" ") + : navigator.userAgent; + } + function Yt() { + return !/^((?!chrome|android).)*safari/i.test(Xt()); + } + function Ut(t, e, i) { + void 0 === e && (e = !1), void 0 === i && (i = !1); + var n = t.getBoundingClientRect(), + s = 1, + o = 1; + e && + Bt(t) && + ((s = (t.offsetWidth > 0 && Qt(n.width) / t.offsetWidth) || 1), + (o = (t.offsetHeight > 0 && Qt(n.height) / t.offsetHeight) || 1)); + var r = (Wt(t) ? $t(t) : window).visualViewport, + a = !Yt() && i, + l = (n.left + (a && r ? r.offsetLeft : 0)) / s, + c = (n.top + (a && r ? r.offsetTop : 0)) / o, + h = n.width / s, + d = n.height / o; + return { + width: h, + height: d, + top: c, + right: l + h, + bottom: c + d, + left: l, + x: l, + y: c, + }; + } + function Gt(t) { + var e = Ut(t), + i = t.offsetWidth, + n = t.offsetHeight; + return ( + Math.abs(e.width - i) <= 1 && (i = e.width), + Math.abs(e.height - n) <= 1 && (n = e.height), + { x: t.offsetLeft, y: t.offsetTop, width: i, height: n } + ); + } + function Jt(t, e) { + var i = e.getRootNode && e.getRootNode(); + if (t.contains(e)) return !0; + if (i && zt(i)) { + var n = e; + do { + if (n && t.isSameNode(n)) return !0; + n = n.parentNode || n.host; + } while (n); + } + return !1; + } + function Zt(t) { + return $t(t).getComputedStyle(t); + } + function te(t) { + return ["table", "td", "th"].indexOf(Ht(t)) >= 0; + } + function ee(t) { + return ( + (Wt(t) ? t.ownerDocument : t.document) || window.document + ).documentElement; + } + function ie(t) { + return "html" === Ht(t) + ? t + : t.assignedSlot || t.parentNode || (zt(t) ? t.host : null) || ee(t); + } + function ne(t) { + return Bt(t) && "fixed" !== Zt(t).position ? t.offsetParent : null; + } + function se(t) { + for (var e = $t(t), i = ne(t); i && te(i) && "static" === Zt(i).position; ) + i = ne(i); + return i && + ("html" === Ht(i) || ("body" === Ht(i) && "static" === Zt(i).position)) + ? e + : i || + (function (t) { + var e = /firefox/i.test(Xt()); + if (/Trident/i.test(Xt()) && Bt(t) && "fixed" === Zt(t).position) + return null; + var i = ie(t); + for ( + zt(i) && (i = i.host); + Bt(i) && ["html", "body"].indexOf(Ht(i)) < 0; + + ) { + var n = Zt(i); + if ( + "none" !== n.transform || + "none" !== n.perspective || + "paint" === n.contain || + -1 !== ["transform", "perspective"].indexOf(n.willChange) || + (e && "filter" === n.willChange) || + (e && n.filter && "none" !== n.filter) + ) + return i; + i = i.parentNode; + } + return null; + })(t) || + e; + } + function oe(t) { + return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y"; + } + function re(t, e, i) { + return Vt(t, Kt(e, i)); + } + function ae(t) { + return Object.assign({}, { top: 0, right: 0, bottom: 0, left: 0 }, t); + } + function le(t, e) { + return e.reduce(function (e, i) { + return (e[i] = t), e; + }, {}); + } + const ce = { + name: "arrow", + enabled: !0, + phase: "main", + fn: function (t) { + var e, + i = t.state, + n = t.name, + s = t.options, + o = i.elements.arrow, + r = i.modifiersData.popperOffsets, + a = qt(i.placement), + l = oe(a), + c = [_t, gt].indexOf(a) >= 0 ? "height" : "width"; + if (o && r) { + var h = (function (t, e) { + return ae( + "number" != + typeof (t = + "function" == typeof t + ? t(Object.assign({}, e.rects, { placement: e.placement })) + : t) + ? t + : le(t, vt) + ); + })(s.padding, i), + d = Gt(o), + u = "y" === l ? pt : _t, + f = "y" === l ? mt : gt, + p = + i.rects.reference[c] + + i.rects.reference[l] - + r[l] - + i.rects.popper[c], + m = r[l] - i.rects.reference[l], + g = se(o), + _ = g ? ("y" === l ? g.clientHeight || 0 : g.clientWidth || 0) : 0, + b = p / 2 - m / 2, + v = h[u], + y = _ - d[c] - h[f], + w = _ / 2 - d[c] / 2 + b, + A = re(v, w, y), + E = l; + i.modifiersData[n] = (((e = {})[E] = A), (e.centerOffset = A - w), e); + } + }, + effect: function (t) { + var e = t.state, + i = t.options.element, + n = void 0 === i ? "[data-popper-arrow]" : i; + null != n && + ("string" != typeof n || (n = e.elements.popper.querySelector(n))) && + Jt(e.elements.popper, n) && + (e.elements.arrow = n); + }, + requires: ["popperOffsets"], + requiresIfExists: ["preventOverflow"], + }; + function he(t) { + return t.split("-")[1]; + } + var de = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; + function ue(t) { + var e, + i = t.popper, + n = t.popperRect, + s = t.placement, + o = t.variation, + r = t.offsets, + a = t.position, + l = t.gpuAcceleration, + c = t.adaptive, + h = t.roundOffsets, + d = t.isFixed, + u = r.x, + f = void 0 === u ? 0 : u, + p = r.y, + m = void 0 === p ? 0 : p, + g = "function" == typeof h ? h({ x: f, y: m }) : { x: f, y: m }; + (f = g.x), (m = g.y); + var _ = r.hasOwnProperty("x"), + b = r.hasOwnProperty("y"), + v = _t, + y = pt, + w = window; + if (c) { + var A = se(i), + E = "clientHeight", + T = "clientWidth"; + A === $t(i) && + "static" !== Zt((A = ee(i))).position && + "absolute" === a && + ((E = "scrollHeight"), (T = "scrollWidth")), + (s === pt || ((s === _t || s === gt) && o === wt)) && + ((y = mt), + (m -= + (d && A === w && w.visualViewport + ? w.visualViewport.height + : A[E]) - n.height), + (m *= l ? 1 : -1)), + (s !== _t && ((s !== pt && s !== mt) || o !== wt)) || + ((v = gt), + (f -= + (d && A === w && w.visualViewport ? w.visualViewport.width : A[T]) - + n.width), + (f *= l ? 1 : -1)); + } + var C, + O = Object.assign({ position: a }, c && de), + x = + !0 === h + ? (function (t, e) { + var i = t.x, + n = t.y, + s = e.devicePixelRatio || 1; + return { x: Qt(i * s) / s || 0, y: Qt(n * s) / s || 0 }; + })({ x: f, y: m }, $t(i)) + : { x: f, y: m }; + return ( + (f = x.x), + (m = x.y), + l + ? Object.assign( + {}, + O, + (((C = {})[y] = b ? "0" : ""), + (C[v] = _ ? "0" : ""), + (C.transform = + (w.devicePixelRatio || 1) <= 1 + ? "translate(" + f + "px, " + m + "px)" + : "translate3d(" + f + "px, " + m + "px, 0)"), + C) + ) + : Object.assign( + {}, + O, + (((e = {})[y] = b ? m + "px" : ""), + (e[v] = _ ? f + "px" : ""), + (e.transform = ""), + e) + ) + ); + } + const fe = { + name: "computeStyles", + enabled: !0, + phase: "beforeWrite", + fn: function (t) { + var e = t.state, + i = t.options, + n = i.gpuAcceleration, + s = void 0 === n || n, + o = i.adaptive, + r = void 0 === o || o, + a = i.roundOffsets, + l = void 0 === a || a, + c = { + placement: qt(e.placement), + variation: he(e.placement), + popper: e.elements.popper, + popperRect: e.rects.popper, + gpuAcceleration: s, + isFixed: "fixed" === e.options.strategy, + }; + null != e.modifiersData.popperOffsets && + (e.styles.popper = Object.assign( + {}, + e.styles.popper, + ue( + Object.assign({}, c, { + offsets: e.modifiersData.popperOffsets, + position: e.options.strategy, + adaptive: r, + roundOffsets: l, + }) + ) + )), + null != e.modifiersData.arrow && + (e.styles.arrow = Object.assign( + {}, + e.styles.arrow, + ue( + Object.assign({}, c, { + offsets: e.modifiersData.arrow, + position: "absolute", + adaptive: !1, + roundOffsets: l, + }) + ) + )), + (e.attributes.popper = Object.assign({}, e.attributes.popper, { + "data-popper-placement": e.placement, + })); + }, + data: {}, + }; + var pe = { passive: !0 }; + const me = { + name: "eventListeners", + enabled: !0, + phase: "write", + fn: function () {}, + effect: function (t) { + var e = t.state, + i = t.instance, + n = t.options, + s = n.scroll, + o = void 0 === s || s, + r = n.resize, + a = void 0 === r || r, + l = $t(e.elements.popper), + c = [].concat(e.scrollParents.reference, e.scrollParents.popper); + return ( + o && + c.forEach(function (t) { + t.addEventListener("scroll", i.update, pe); + }), + a && l.addEventListener("resize", i.update, pe), + function () { + o && + c.forEach(function (t) { + t.removeEventListener("scroll", i.update, pe); + }), + a && l.removeEventListener("resize", i.update, pe); + } + ); + }, + data: {}, + }; + var ge = { left: "right", right: "left", bottom: "top", top: "bottom" }; + function _e(t) { + return t.replace(/left|right|bottom|top/g, function (t) { + return ge[t]; + }); + } + var be = { start: "end", end: "start" }; + function ve(t) { + return t.replace(/start|end/g, function (t) { + return be[t]; + }); + } + function ye(t) { + var e = $t(t); + return { scrollLeft: e.pageXOffset, scrollTop: e.pageYOffset }; + } + function we(t) { + return Ut(ee(t)).left + ye(t).scrollLeft; + } + function Ae(t) { + var e = Zt(t), + i = e.overflow, + n = e.overflowX, + s = e.overflowY; + return /auto|scroll|overlay|hidden/.test(i + s + n); + } + function Ee(t) { + return ["html", "body", "#document"].indexOf(Ht(t)) >= 0 + ? t.ownerDocument.body + : Bt(t) && Ae(t) + ? t + : Ee(ie(t)); + } + function Te(t, e) { + var i; + void 0 === e && (e = []); + var n = Ee(t), + s = n === (null == (i = t.ownerDocument) ? void 0 : i.body), + o = $t(n), + r = s ? [o].concat(o.visualViewport || [], Ae(n) ? n : []) : n, + a = e.concat(r); + return s ? a : a.concat(Te(ie(r))); + } + function Ce(t) { + return Object.assign({}, t, { + left: t.x, + top: t.y, + right: t.x + t.width, + bottom: t.y + t.height, + }); + } + function Oe(t, e, i) { + return e === Et + ? Ce( + (function (t, e) { + var i = $t(t), + n = ee(t), + s = i.visualViewport, + o = n.clientWidth, + r = n.clientHeight, + a = 0, + l = 0; + if (s) { + (o = s.width), (r = s.height); + var c = Yt(); + (c || (!c && "fixed" === e)) && + ((a = s.offsetLeft), (l = s.offsetTop)); + } + return { width: o, height: r, x: a + we(t), y: l }; + })(t, i) + ) + : Wt(e) + ? (function (t, e) { + var i = Ut(t, !1, "fixed" === e); + return ( + (i.top = i.top + t.clientTop), + (i.left = i.left + t.clientLeft), + (i.bottom = i.top + t.clientHeight), + (i.right = i.left + t.clientWidth), + (i.width = t.clientWidth), + (i.height = t.clientHeight), + (i.x = i.left), + (i.y = i.top), + i + ); + })(e, i) + : Ce( + (function (t) { + var e, + i = ee(t), + n = ye(t), + s = null == (e = t.ownerDocument) ? void 0 : e.body, + o = Vt( + i.scrollWidth, + i.clientWidth, + s ? s.scrollWidth : 0, + s ? s.clientWidth : 0 + ), + r = Vt( + i.scrollHeight, + i.clientHeight, + s ? s.scrollHeight : 0, + s ? s.clientHeight : 0 + ), + a = -n.scrollLeft + we(t), + l = -n.scrollTop; + return ( + "rtl" === Zt(s || i).direction && + (a += Vt(i.clientWidth, s ? s.clientWidth : 0) - o), + { width: o, height: r, x: a, y: l } + ); + })(ee(t)) + ); + } + function xe(t) { + var e, + i = t.reference, + n = t.element, + s = t.placement, + o = s ? qt(s) : null, + r = s ? he(s) : null, + a = i.x + i.width / 2 - n.width / 2, + l = i.y + i.height / 2 - n.height / 2; + switch (o) { + case pt: + e = { x: a, y: i.y - n.height }; + break; + case mt: + e = { x: a, y: i.y + i.height }; + break; + case gt: + e = { x: i.x + i.width, y: l }; + break; + case _t: + e = { x: i.x - n.width, y: l }; + break; + default: + e = { x: i.x, y: i.y }; + } + var c = o ? oe(o) : null; + if (null != c) { + var h = "y" === c ? "height" : "width"; + switch (r) { + case yt: + e[c] = e[c] - (i[h] / 2 - n[h] / 2); + break; + case wt: + e[c] = e[c] + (i[h] / 2 - n[h] / 2); + } + } + return e; + } + function ke(t, e) { + void 0 === e && (e = {}); + var i = e, + n = i.placement, + s = void 0 === n ? t.placement : n, + o = i.strategy, + r = void 0 === o ? t.strategy : o, + a = i.boundary, + l = void 0 === a ? At : a, + c = i.rootBoundary, + h = void 0 === c ? Et : c, + d = i.elementContext, + u = void 0 === d ? Tt : d, + f = i.altBoundary, + p = void 0 !== f && f, + m = i.padding, + g = void 0 === m ? 0 : m, + _ = ae("number" != typeof g ? g : le(g, vt)), + b = u === Tt ? Ct : Tt, + v = t.rects.popper, + y = t.elements[p ? b : u], + w = (function (t, e, i, n) { + var s = + "clippingParents" === e + ? (function (t) { + var e = Te(ie(t)), + i = + ["absolute", "fixed"].indexOf(Zt(t).position) >= 0 && + Bt(t) + ? se(t) + : t; + return Wt(i) + ? e.filter(function (t) { + return Wt(t) && Jt(t, i) && "body" !== Ht(t); + }) + : []; + })(t) + : [].concat(e), + o = [].concat(s, [i]), + r = o[0], + a = o.reduce(function (e, i) { + var s = Oe(t, i, n); + return ( + (e.top = Vt(s.top, e.top)), + (e.right = Kt(s.right, e.right)), + (e.bottom = Kt(s.bottom, e.bottom)), + (e.left = Vt(s.left, e.left)), + e + ); + }, Oe(t, r, n)); + return ( + (a.width = a.right - a.left), + (a.height = a.bottom - a.top), + (a.x = a.left), + (a.y = a.top), + a + ); + })(Wt(y) ? y : y.contextElement || ee(t.elements.popper), l, h, r), + A = Ut(t.elements.reference), + E = xe({ reference: A, element: v, strategy: "absolute", placement: s }), + T = Ce(Object.assign({}, v, E)), + C = u === Tt ? T : A, + O = { + top: w.top - C.top + _.top, + bottom: C.bottom - w.bottom + _.bottom, + left: w.left - C.left + _.left, + right: C.right - w.right + _.right, + }, + x = t.modifiersData.offset; + if (u === Tt && x) { + var k = x[s]; + Object.keys(O).forEach(function (t) { + var e = [gt, mt].indexOf(t) >= 0 ? 1 : -1, + i = [pt, mt].indexOf(t) >= 0 ? "y" : "x"; + O[t] += k[i] * e; + }); + } + return O; + } + function Le(t, e) { + void 0 === e && (e = {}); + var i = e, + n = i.placement, + s = i.boundary, + o = i.rootBoundary, + r = i.padding, + a = i.flipVariations, + l = i.allowedAutoPlacements, + c = void 0 === l ? xt : l, + h = he(n), + d = h + ? a + ? Ot + : Ot.filter(function (t) { + return he(t) === h; + }) + : vt, + u = d.filter(function (t) { + return c.indexOf(t) >= 0; + }); + 0 === u.length && (u = d); + var f = u.reduce(function (e, i) { + return ( + (e[i] = ke(t, { + placement: i, + boundary: s, + rootBoundary: o, + padding: r, + })[qt(i)]), + e + ); + }, {}); + return Object.keys(f).sort(function (t, e) { + return f[t] - f[e]; + }); + } + const Se = { + name: "flip", + enabled: !0, + phase: "main", + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name; + if (!e.modifiersData[n]._skip) { + for ( + var s = i.mainAxis, + o = void 0 === s || s, + r = i.altAxis, + a = void 0 === r || r, + l = i.fallbackPlacements, + c = i.padding, + h = i.boundary, + d = i.rootBoundary, + u = i.altBoundary, + f = i.flipVariations, + p = void 0 === f || f, + m = i.allowedAutoPlacements, + g = e.options.placement, + _ = qt(g), + b = + l || + (_ !== g && p + ? (function (t) { + if (qt(t) === bt) return []; + var e = _e(t); + return [ve(t), e, ve(e)]; + })(g) + : [_e(g)]), + v = [g].concat(b).reduce(function (t, i) { + return t.concat( + qt(i) === bt + ? Le(e, { + placement: i, + boundary: h, + rootBoundary: d, + padding: c, + flipVariations: p, + allowedAutoPlacements: m, + }) + : i + ); + }, []), + y = e.rects.reference, + w = e.rects.popper, + A = new Map(), + E = !0, + T = v[0], + C = 0; + C < v.length; + C++ + ) { + var O = v[C], + x = qt(O), + k = he(O) === yt, + L = [pt, mt].indexOf(x) >= 0, + S = L ? "width" : "height", + D = ke(e, { + placement: O, + boundary: h, + rootBoundary: d, + altBoundary: u, + padding: c, + }), + I = L ? (k ? gt : _t) : k ? mt : pt; + y[S] > w[S] && (I = _e(I)); + var N = _e(I), + P = []; + if ( + (o && P.push(D[x] <= 0), + a && P.push(D[I] <= 0, D[N] <= 0), + P.every(function (t) { + return t; + })) + ) { + (T = O), (E = !1); + break; + } + A.set(O, P); + } + if (E) + for ( + var M = function (t) { + var e = v.find(function (e) { + var i = A.get(e); + if (i) + return i.slice(0, t).every(function (t) { + return t; + }); + }); + if (e) return (T = e), "break"; + }, + j = p ? 3 : 1; + j > 0 && "break" !== M(j); + j-- + ); + e.placement !== T && + ((e.modifiersData[n]._skip = !0), (e.placement = T), (e.reset = !0)); + } + }, + requiresIfExists: ["offset"], + data: { _skip: !1 }, + }; + function De(t, e, i) { + return ( + void 0 === i && (i = { x: 0, y: 0 }), + { + top: t.top - e.height - i.y, + right: t.right - e.width + i.x, + bottom: t.bottom - e.height + i.y, + left: t.left - e.width - i.x, + } + ); + } + function Ie(t) { + return [pt, gt, mt, _t].some(function (e) { + return t[e] >= 0; + }); + } + const Ne = { + name: "hide", + enabled: !0, + phase: "main", + requiresIfExists: ["preventOverflow"], + fn: function (t) { + var e = t.state, + i = t.name, + n = e.rects.reference, + s = e.rects.popper, + o = e.modifiersData.preventOverflow, + r = ke(e, { elementContext: "reference" }), + a = ke(e, { altBoundary: !0 }), + l = De(r, n), + c = De(a, s, o), + h = Ie(l), + d = Ie(c); + (e.modifiersData[i] = { + referenceClippingOffsets: l, + popperEscapeOffsets: c, + isReferenceHidden: h, + hasPopperEscaped: d, + }), + (e.attributes.popper = Object.assign({}, e.attributes.popper, { + "data-popper-reference-hidden": h, + "data-popper-escaped": d, + })); + }, + }, + Pe = { + name: "offset", + enabled: !0, + phase: "main", + requires: ["popperOffsets"], + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name, + s = i.offset, + o = void 0 === s ? [0, 0] : s, + r = xt.reduce(function (t, i) { + return ( + (t[i] = (function (t, e, i) { + var n = qt(t), + s = [_t, pt].indexOf(n) >= 0 ? -1 : 1, + o = + "function" == typeof i + ? i(Object.assign({}, e, { placement: t })) + : i, + r = o[0], + a = o[1]; + return ( + (r = r || 0), + (a = (a || 0) * s), + [_t, gt].indexOf(n) >= 0 ? { x: a, y: r } : { x: r, y: a } + ); + })(i, e.rects, o)), + t + ); + }, {}), + a = r[e.placement], + l = a.x, + c = a.y; + null != e.modifiersData.popperOffsets && + ((e.modifiersData.popperOffsets.x += l), + (e.modifiersData.popperOffsets.y += c)), + (e.modifiersData[n] = r); + }, + }, + Me = { + name: "popperOffsets", + enabled: !0, + phase: "read", + fn: function (t) { + var e = t.state, + i = t.name; + e.modifiersData[i] = xe({ + reference: e.rects.reference, + element: e.rects.popper, + strategy: "absolute", + placement: e.placement, + }); + }, + data: {}, + }, + je = { + name: "preventOverflow", + enabled: !0, + phase: "main", + fn: function (t) { + var e = t.state, + i = t.options, + n = t.name, + s = i.mainAxis, + o = void 0 === s || s, + r = i.altAxis, + a = void 0 !== r && r, + l = i.boundary, + c = i.rootBoundary, + h = i.altBoundary, + d = i.padding, + u = i.tether, + f = void 0 === u || u, + p = i.tetherOffset, + m = void 0 === p ? 0 : p, + g = ke(e, { + boundary: l, + rootBoundary: c, + padding: d, + altBoundary: h, + }), + _ = qt(e.placement), + b = he(e.placement), + v = !b, + y = oe(_), + w = "x" === y ? "y" : "x", + A = e.modifiersData.popperOffsets, + E = e.rects.reference, + T = e.rects.popper, + C = + "function" == typeof m + ? m(Object.assign({}, e.rects, { placement: e.placement })) + : m, + O = + "number" == typeof C + ? { mainAxis: C, altAxis: C } + : Object.assign({ mainAxis: 0, altAxis: 0 }, C), + x = e.modifiersData.offset + ? e.modifiersData.offset[e.placement] + : null, + k = { x: 0, y: 0 }; + if (A) { + if (o) { + var L, + S = "y" === y ? pt : _t, + D = "y" === y ? mt : gt, + I = "y" === y ? "height" : "width", + N = A[y], + P = N + g[S], + M = N - g[D], + j = f ? -T[I] / 2 : 0, + F = b === yt ? E[I] : T[I], + H = b === yt ? -T[I] : -E[I], + $ = e.elements.arrow, + W = f && $ ? Gt($) : { width: 0, height: 0 }, + B = e.modifiersData["arrow#persistent"] + ? e.modifiersData["arrow#persistent"].padding + : { top: 0, right: 0, bottom: 0, left: 0 }, + z = B[S], + R = B[D], + q = re(0, E[I], W[I]), + V = v + ? E[I] / 2 - j - q - z - O.mainAxis + : F - q - z - O.mainAxis, + K = v + ? -E[I] / 2 + j + q + R + O.mainAxis + : H + q + R + O.mainAxis, + Q = e.elements.arrow && se(e.elements.arrow), + X = Q ? ("y" === y ? Q.clientTop || 0 : Q.clientLeft || 0) : 0, + Y = null != (L = null == x ? void 0 : x[y]) ? L : 0, + U = N + K - Y, + G = re(f ? Kt(P, N + V - Y - X) : P, N, f ? Vt(M, U) : M); + (A[y] = G), (k[y] = G - N); + } + if (a) { + var J, + Z = "x" === y ? pt : _t, + tt = "x" === y ? mt : gt, + et = A[w], + it = "y" === w ? "height" : "width", + nt = et + g[Z], + st = et - g[tt], + ot = -1 !== [pt, _t].indexOf(_), + rt = null != (J = null == x ? void 0 : x[w]) ? J : 0, + at = ot ? nt : et - E[it] - T[it] - rt + O.altAxis, + lt = ot ? et + E[it] + T[it] - rt - O.altAxis : st, + ct = + f && ot + ? (function (t, e, i) { + var n = re(t, e, i); + return n > i ? i : n; + })(at, et, lt) + : re(f ? at : nt, et, f ? lt : st); + (A[w] = ct), (k[w] = ct - et); + } + e.modifiersData[n] = k; + } + }, + requiresIfExists: ["offset"], + }; + function Fe(t, e, i) { + void 0 === i && (i = !1); + var n, + s, + o = Bt(e), + r = + Bt(e) && + (function (t) { + var e = t.getBoundingClientRect(), + i = Qt(e.width) / t.offsetWidth || 1, + n = Qt(e.height) / t.offsetHeight || 1; + return 1 !== i || 1 !== n; + })(e), + a = ee(e), + l = Ut(t, r, i), + c = { scrollLeft: 0, scrollTop: 0 }, + h = { x: 0, y: 0 }; + return ( + (o || (!o && !i)) && + (("body" !== Ht(e) || Ae(a)) && + (c = + (n = e) !== $t(n) && Bt(n) + ? { scrollLeft: (s = n).scrollLeft, scrollTop: s.scrollTop } + : ye(n)), + Bt(e) + ? (((h = Ut(e, !0)).x += e.clientLeft), (h.y += e.clientTop)) + : a && (h.x = we(a))), + { + x: l.left + c.scrollLeft - h.x, + y: l.top + c.scrollTop - h.y, + width: l.width, + height: l.height, + } + ); + } + function He(t) { + var e = new Map(), + i = new Set(), + n = []; + function s(t) { + i.add(t.name), + [] + .concat(t.requires || [], t.requiresIfExists || []) + .forEach(function (t) { + if (!i.has(t)) { + var n = e.get(t); + n && s(n); + } + }), + n.push(t); + } + return ( + t.forEach(function (t) { + e.set(t.name, t); + }), + t.forEach(function (t) { + i.has(t.name) || s(t); + }), + n + ); + } + var $e = { placement: "bottom", modifiers: [], strategy: "absolute" }; + function We() { + for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) + e[i] = arguments[i]; + return !e.some(function (t) { + return !(t && "function" == typeof t.getBoundingClientRect); + }); + } + function Be(t) { + void 0 === t && (t = {}); + var e = t, + i = e.defaultModifiers, + n = void 0 === i ? [] : i, + s = e.defaultOptions, + o = void 0 === s ? $e : s; + return function (t, e, i) { + void 0 === i && (i = o); + var s, + r, + a = { + placement: "bottom", + orderedModifiers: [], + options: Object.assign({}, $e, o), + modifiersData: {}, + elements: { reference: t, popper: e }, + attributes: {}, + styles: {}, + }, + l = [], + c = !1, + h = { + state: a, + setOptions: function (i) { + var s = "function" == typeof i ? i(a.options) : i; + d(), + (a.options = Object.assign({}, o, a.options, s)), + (a.scrollParents = { + reference: Wt(t) + ? Te(t) + : t.contextElement + ? Te(t.contextElement) + : [], + popper: Te(e), + }); + var r, + c, + u = (function (t) { + var e = He(t); + return Ft.reduce(function (t, i) { + return t.concat( + e.filter(function (t) { + return t.phase === i; + }) + ); + }, []); + })( + ((r = [].concat(n, a.options.modifiers)), + (c = r.reduce(function (t, e) { + var i = t[e.name]; + return ( + (t[e.name] = i + ? Object.assign({}, i, e, { + options: Object.assign({}, i.options, e.options), + data: Object.assign({}, i.data, e.data), + }) + : e), + t + ); + }, {})), + Object.keys(c).map(function (t) { + return c[t]; + })) + ); + return ( + (a.orderedModifiers = u.filter(function (t) { + return t.enabled; + })), + a.orderedModifiers.forEach(function (t) { + var e = t.name, + i = t.options, + n = void 0 === i ? {} : i, + s = t.effect; + if ("function" == typeof s) { + var o = s({ state: a, name: e, instance: h, options: n }); + l.push(o || function () {}); + } + }), + h.update() + ); + }, + forceUpdate: function () { + if (!c) { + var t = a.elements, + e = t.reference, + i = t.popper; + if (We(e, i)) { + (a.rects = { + reference: Fe(e, se(i), "fixed" === a.options.strategy), + popper: Gt(i), + }), + (a.reset = !1), + (a.placement = a.options.placement), + a.orderedModifiers.forEach(function (t) { + return (a.modifiersData[t.name] = Object.assign( + {}, + t.data + )); + }); + for (var n = 0; n < a.orderedModifiers.length; n++) + if (!0 !== a.reset) { + var s = a.orderedModifiers[n], + o = s.fn, + r = s.options, + l = void 0 === r ? {} : r, + d = s.name; + "function" == typeof o && + (a = + o({ state: a, options: l, name: d, instance: h }) || a); + } else (a.reset = !1), (n = -1); + } + } + }, + update: + ((s = function () { + return new Promise(function (t) { + h.forceUpdate(), t(a); + }); + }), + function () { + return ( + r || + (r = new Promise(function (t) { + Promise.resolve().then(function () { + (r = void 0), t(s()); + }); + })), + r + ); + }), + destroy: function () { + d(), (c = !0); + }, + }; + if (!We(t, e)) return h; + function d() { + l.forEach(function (t) { + return t(); + }), + (l = []); + } + return ( + h.setOptions(i).then(function (t) { + !c && i.onFirstUpdate && i.onFirstUpdate(t); + }), + h + ); + }; + } + var ze = Be(), + Re = Be({ defaultModifiers: [me, Me, fe, Rt] }), + qe = Be({ defaultModifiers: [me, Me, fe, Rt, Pe, Se, je, ce, Ne] }); + const Ve = Object.freeze( + Object.defineProperty( + { + __proto__: null, + afterMain: Nt, + afterRead: St, + afterWrite: jt, + applyStyles: Rt, + arrow: ce, + auto: bt, + basePlacements: vt, + beforeMain: Dt, + beforeRead: kt, + beforeWrite: Pt, + bottom: mt, + clippingParents: At, + computeStyles: fe, + createPopper: qe, + createPopperBase: ze, + createPopperLite: Re, + detectOverflow: ke, + end: wt, + eventListeners: me, + flip: Se, + hide: Ne, + left: _t, + main: It, + modifierPhases: Ft, + offset: Pe, + placements: xt, + popper: Tt, + popperGenerator: Be, + popperOffsets: Me, + preventOverflow: je, + read: Lt, + reference: Ct, + right: gt, + start: yt, + top: pt, + variationPlacements: Ot, + viewport: Et, + write: Mt, + }, + Symbol.toStringTag, + { value: "Module" } + ) + ), + Ke = "dropdown", + Qe = "ArrowUp", + Xe = "ArrowDown", + Ye = "click.bs.dropdown.data-api", + Ue = "keydown.bs.dropdown.data-api", + Ge = "show", + Je = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)', + Ze = `${Je}.show`, + ti = ".dropdown-menu", + ei = p() ? "top-end" : "top-start", + ii = p() ? "top-start" : "top-end", + ni = p() ? "bottom-end" : "bottom-start", + si = p() ? "bottom-start" : "bottom-end", + oi = p() ? "left-start" : "right-start", + ri = p() ? "right-start" : "left-start", + ai = { + autoClose: !0, + boundary: "clippingParents", + display: "dynamic", + offset: [0, 2], + popperConfig: null, + reference: "toggle", + }, + li = { + autoClose: "(boolean|string)", + boundary: "(string|element)", + display: "string", + offset: "(array|string|function)", + popperConfig: "(null|object|function)", + reference: "(string|element|object)", + }; + class ci extends W { + constructor(t, e) { + super(t, e), + (this._popper = null), + (this._parent = this._element.parentNode), + (this._menu = + z.next(this._element, ti)[0] || + z.prev(this._element, ti)[0] || + z.findOne(ti, this._parent)), + (this._inNavbar = this._detectNavbar()); + } + static get Default() { + return ai; + } + static get DefaultType() { + return li; + } + static get NAME() { + return Ke; + } + toggle() { + return this._isShown() ? this.hide() : this.show(); + } + show() { + if (l(this._element) || this._isShown()) return; + const t = { relatedTarget: this._element }; + if (!P.trigger(this._element, "show.bs.dropdown", t).defaultPrevented) { + if ( + (this._createPopper(), + "ontouchstart" in document.documentElement && + !this._parent.closest(".navbar-nav")) + ) + for (const t of [].concat(...document.body.children)) + P.on(t, "mouseover", h); + this._element.focus(), + this._element.setAttribute("aria-expanded", !0), + this._menu.classList.add(Ge), + this._element.classList.add(Ge), + P.trigger(this._element, "shown.bs.dropdown", t); + } + } + hide() { + if (l(this._element) || !this._isShown()) return; + const t = { relatedTarget: this._element }; + this._completeHide(t); + } + dispose() { + this._popper && this._popper.destroy(), super.dispose(); + } + update() { + (this._inNavbar = this._detectNavbar()), + this._popper && this._popper.update(); + } + _completeHide(t) { + if (!P.trigger(this._element, "hide.bs.dropdown", t).defaultPrevented) { + if ("ontouchstart" in document.documentElement) + for (const t of [].concat(...document.body.children)) + P.off(t, "mouseover", h); + this._popper && this._popper.destroy(), + this._menu.classList.remove(Ge), + this._element.classList.remove(Ge), + this._element.setAttribute("aria-expanded", "false"), + H.removeDataAttribute(this._menu, "popper"), + P.trigger(this._element, "hidden.bs.dropdown", t); + } + } + _getConfig(t) { + if ( + "object" == typeof (t = super._getConfig(t)).reference && + !o(t.reference) && + "function" != typeof t.reference.getBoundingClientRect + ) + throw new TypeError( + `${Ke.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.` + ); + return t; + } + _createPopper() { + if (void 0 === Ve) + throw new TypeError( + "Bootstrap's dropdowns require Popper (https://popper.js.org)" + ); + let t = this._element; + "parent" === this._config.reference + ? (t = this._parent) + : o(this._config.reference) + ? (t = r(this._config.reference)) + : "object" == typeof this._config.reference && + (t = this._config.reference); + const e = this._getPopperConfig(); + this._popper = qe(t, this._menu, e); + } + _isShown() { + return this._menu.classList.contains(Ge); + } + _getPlacement() { + const t = this._parent; + if (t.classList.contains("dropend")) return oi; + if (t.classList.contains("dropstart")) return ri; + if (t.classList.contains("dropup-center")) return "top"; + if (t.classList.contains("dropdown-center")) return "bottom"; + const e = + "end" === + getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(); + return t.classList.contains("dropup") ? (e ? ii : ei) : e ? si : ni; + } + _detectNavbar() { + return null !== this._element.closest(".navbar"); + } + _getOffset() { + const { offset: t } = this._config; + return "string" == typeof t + ? t.split(",").map((t) => Number.parseInt(t, 10)) + : "function" == typeof t + ? (e) => t(e, this._element) + : t; + } + _getPopperConfig() { + const t = { + placement: this._getPlacement(), + modifiers: [ + { + name: "preventOverflow", + options: { boundary: this._config.boundary }, + }, + { name: "offset", options: { offset: this._getOffset() } }, + ], + }; + return ( + (this._inNavbar || "static" === this._config.display) && + (H.setDataAttribute(this._menu, "popper", "static"), + (t.modifiers = [{ name: "applyStyles", enabled: !1 }])), + { ...t, ...g(this._config.popperConfig, [t]) } + ); + } + _selectMenuItem({ key: t, target: e }) { + const i = z + .find( + ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", + this._menu + ) + .filter((t) => a(t)); + i.length && b(i, e, t === Xe, !i.includes(e)).focus(); + } + static jQueryInterface(t) { + return this.each(function () { + const e = ci.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + static clearMenus(t) { + if (2 === t.button || ("keyup" === t.type && "Tab" !== t.key)) return; + const e = z.find(Ze); + for (const i of e) { + const e = ci.getInstance(i); + if (!e || !1 === e._config.autoClose) continue; + const n = t.composedPath(), + s = n.includes(e._menu); + if ( + n.includes(e._element) || + ("inside" === e._config.autoClose && !s) || + ("outside" === e._config.autoClose && s) + ) + continue; + if ( + e._menu.contains(t.target) && + (("keyup" === t.type && "Tab" === t.key) || + /input|select|option|textarea|form/i.test(t.target.tagName)) + ) + continue; + const o = { relatedTarget: e._element }; + "click" === t.type && (o.clickEvent = t), e._completeHide(o); + } + } + static dataApiKeydownHandler(t) { + const e = /input|textarea/i.test(t.target.tagName), + i = "Escape" === t.key, + n = [Qe, Xe].includes(t.key); + if (!n && !i) return; + if (e && !i) return; + t.preventDefault(); + const s = this.matches(Je) + ? this + : z.prev(this, Je)[0] || + z.next(this, Je)[0] || + z.findOne(Je, t.delegateTarget.parentNode), + o = ci.getOrCreateInstance(s); + if (n) return t.stopPropagation(), o.show(), void o._selectMenuItem(t); + o._isShown() && (t.stopPropagation(), o.hide(), s.focus()); + } + } + P.on(document, Ue, Je, ci.dataApiKeydownHandler), + P.on(document, Ue, ti, ci.dataApiKeydownHandler), + P.on(document, Ye, ci.clearMenus), + P.on(document, "keyup.bs.dropdown.data-api", ci.clearMenus), + P.on(document, Ye, Je, function (t) { + t.preventDefault(), ci.getOrCreateInstance(this).toggle(); + }), + m(ci); + const hi = "show", + di = "mousedown.bs.backdrop", + ui = { + className: "modal-backdrop", + clickCallback: null, + isAnimated: !1, + isVisible: !0, + rootElement: "body", + }, + fi = { + className: "string", + clickCallback: "(function|null)", + isAnimated: "boolean", + isVisible: "boolean", + rootElement: "(element|string)", + }; + class pi extends $ { + constructor(t) { + super(), + (this._config = this._getConfig(t)), + (this._isAppended = !1), + (this._element = null); + } + static get Default() { + return ui; + } + static get DefaultType() { + return fi; + } + static get NAME() { + return "backdrop"; + } + show(t) { + if (!this._config.isVisible) return void g(t); + this._append(); + const e = this._getElement(); + this._config.isAnimated && d(e), + e.classList.add(hi), + this._emulateAnimation(() => { + g(t); + }); + } + hide(t) { + this._config.isVisible + ? (this._getElement().classList.remove(hi), + this._emulateAnimation(() => { + this.dispose(), g(t); + })) + : g(t); + } + dispose() { + this._isAppended && + (P.off(this._element, di), + this._element.remove(), + (this._isAppended = !1)); + } + _getElement() { + if (!this._element) { + const t = document.createElement("div"); + (t.className = this._config.className), + this._config.isAnimated && t.classList.add("fade"), + (this._element = t); + } + return this._element; + } + _configAfterMerge(t) { + return (t.rootElement = r(t.rootElement)), t; + } + _append() { + if (this._isAppended) return; + const t = this._getElement(); + this._config.rootElement.append(t), + P.on(t, di, () => { + g(this._config.clickCallback); + }), + (this._isAppended = !0); + } + _emulateAnimation(t) { + _(t, this._getElement(), this._config.isAnimated); + } + } + const mi = ".bs.focustrap", + gi = "backward", + _i = { autofocus: !0, trapElement: null }, + bi = { autofocus: "boolean", trapElement: "element" }; + class vi extends $ { + constructor(t) { + super(), + (this._config = this._getConfig(t)), + (this._isActive = !1), + (this._lastTabNavDirection = null); + } + static get Default() { + return _i; + } + static get DefaultType() { + return bi; + } + static get NAME() { + return "focustrap"; + } + activate() { + this._isActive || + (this._config.autofocus && this._config.trapElement.focus(), + P.off(document, mi), + P.on(document, "focusin.bs.focustrap", (t) => this._handleFocusin(t)), + P.on(document, "keydown.tab.bs.focustrap", (t) => + this._handleKeydown(t) + ), + (this._isActive = !0)); + } + deactivate() { + this._isActive && ((this._isActive = !1), P.off(document, mi)); + } + _handleFocusin(t) { + const { trapElement: e } = this._config; + if (t.target === document || t.target === e || e.contains(t.target)) + return; + const i = z.focusableChildren(e); + 0 === i.length + ? e.focus() + : this._lastTabNavDirection === gi + ? i[i.length - 1].focus() + : i[0].focus(); + } + _handleKeydown(t) { + "Tab" === t.key && + (this._lastTabNavDirection = t.shiftKey ? gi : "forward"); + } + } + const yi = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", + wi = ".sticky-top", + Ai = "padding-right", + Ei = "margin-right"; + class Ti { + constructor() { + this._element = document.body; + } + getWidth() { + const t = document.documentElement.clientWidth; + return Math.abs(window.innerWidth - t); + } + hide() { + const t = this.getWidth(); + this._disableOverFlow(), + this._setElementAttributes(this._element, Ai, (e) => e + t), + this._setElementAttributes(yi, Ai, (e) => e + t), + this._setElementAttributes(wi, Ei, (e) => e - t); + } + reset() { + this._resetElementAttributes(this._element, "overflow"), + this._resetElementAttributes(this._element, Ai), + this._resetElementAttributes(yi, Ai), + this._resetElementAttributes(wi, Ei); + } + isOverflowing() { + return this.getWidth() > 0; + } + _disableOverFlow() { + this._saveInitialAttribute(this._element, "overflow"), + (this._element.style.overflow = "hidden"); + } + _setElementAttributes(t, e, i) { + const n = this.getWidth(); + this._applyManipulationCallback(t, (t) => { + if (t !== this._element && window.innerWidth > t.clientWidth + n) + return; + this._saveInitialAttribute(t, e); + const s = window.getComputedStyle(t).getPropertyValue(e); + t.style.setProperty(e, `${i(Number.parseFloat(s))}px`); + }); + } + _saveInitialAttribute(t, e) { + const i = t.style.getPropertyValue(e); + i && H.setDataAttribute(t, e, i); + } + _resetElementAttributes(t, e) { + this._applyManipulationCallback(t, (t) => { + const i = H.getDataAttribute(t, e); + null !== i + ? (H.removeDataAttribute(t, e), t.style.setProperty(e, i)) + : t.style.removeProperty(e); + }); + } + _applyManipulationCallback(t, e) { + if (o(t)) e(t); + else for (const i of z.find(t, this._element)) e(i); + } + } + const Ci = ".bs.modal", + Oi = "hidden.bs.modal", + xi = "show.bs.modal", + ki = "modal-open", + Li = "show", + Si = "modal-static", + Di = { backdrop: !0, focus: !0, keyboard: !0 }, + Ii = { + backdrop: "(boolean|string)", + focus: "boolean", + keyboard: "boolean", + }; + class Ni extends W { + constructor(t, e) { + super(t, e), + (this._dialog = z.findOne(".modal-dialog", this._element)), + (this._backdrop = this._initializeBackDrop()), + (this._focustrap = this._initializeFocusTrap()), + (this._isShown = !1), + (this._isTransitioning = !1), + (this._scrollBar = new Ti()), + this._addEventListeners(); + } + static get Default() { + return Di; + } + static get DefaultType() { + return Ii; + } + static get NAME() { + return "modal"; + } + toggle(t) { + return this._isShown ? this.hide() : this.show(t); + } + show(t) { + this._isShown || + this._isTransitioning || + P.trigger(this._element, xi, { relatedTarget: t }).defaultPrevented || + ((this._isShown = !0), + (this._isTransitioning = !0), + this._scrollBar.hide(), + document.body.classList.add(ki), + this._adjustDialog(), + this._backdrop.show(() => this._showElement(t))); + } + hide() { + this._isShown && + !this._isTransitioning && + (P.trigger(this._element, "hide.bs.modal").defaultPrevented || + ((this._isShown = !1), + (this._isTransitioning = !0), + this._focustrap.deactivate(), + this._element.classList.remove(Li), + this._queueCallback( + () => this._hideModal(), + this._element, + this._isAnimated() + ))); + } + dispose() { + P.off(window, Ci), + P.off(this._dialog, Ci), + this._backdrop.dispose(), + this._focustrap.deactivate(), + super.dispose(); + } + handleUpdate() { + this._adjustDialog(); + } + _initializeBackDrop() { + return new pi({ + isVisible: Boolean(this._config.backdrop), + isAnimated: this._isAnimated(), + }); + } + _initializeFocusTrap() { + return new vi({ trapElement: this._element }); + } + _showElement(t) { + document.body.contains(this._element) || + document.body.append(this._element), + (this._element.style.display = "block"), + this._element.removeAttribute("aria-hidden"), + this._element.setAttribute("aria-modal", !0), + this._element.setAttribute("role", "dialog"), + (this._element.scrollTop = 0); + const e = z.findOne(".modal-body", this._dialog); + e && (e.scrollTop = 0), + d(this._element), + this._element.classList.add(Li), + this._queueCallback( + () => { + this._config.focus && this._focustrap.activate(), + (this._isTransitioning = !1), + P.trigger(this._element, "shown.bs.modal", { relatedTarget: t }); + }, + this._dialog, + this._isAnimated() + ); + } + _addEventListeners() { + P.on(this._element, "keydown.dismiss.bs.modal", (t) => { + "Escape" === t.key && + (this._config.keyboard + ? this.hide() + : this._triggerBackdropTransition()); + }), + P.on(window, "resize.bs.modal", () => { + this._isShown && !this._isTransitioning && this._adjustDialog(); + }), + P.on(this._element, "mousedown.dismiss.bs.modal", (t) => { + P.one(this._element, "click.dismiss.bs.modal", (e) => { + this._element === t.target && + this._element === e.target && + ("static" !== this._config.backdrop + ? this._config.backdrop && this.hide() + : this._triggerBackdropTransition()); + }); + }); + } + _hideModal() { + (this._element.style.display = "none"), + this._element.setAttribute("aria-hidden", !0), + this._element.removeAttribute("aria-modal"), + this._element.removeAttribute("role"), + (this._isTransitioning = !1), + this._backdrop.hide(() => { + document.body.classList.remove(ki), + this._resetAdjustments(), + this._scrollBar.reset(), + P.trigger(this._element, Oi); + }); + } + _isAnimated() { + return this._element.classList.contains("fade"); + } + _triggerBackdropTransition() { + if (P.trigger(this._element, "hidePrevented.bs.modal").defaultPrevented) + return; + const t = + this._element.scrollHeight > document.documentElement.clientHeight, + e = this._element.style.overflowY; + "hidden" === e || + this._element.classList.contains(Si) || + (t || (this._element.style.overflowY = "hidden"), + this._element.classList.add(Si), + this._queueCallback(() => { + this._element.classList.remove(Si), + this._queueCallback(() => { + this._element.style.overflowY = e; + }, this._dialog); + }, this._dialog), + this._element.focus()); + } + _adjustDialog() { + const t = + this._element.scrollHeight > document.documentElement.clientHeight, + e = this._scrollBar.getWidth(), + i = e > 0; + if (i && !t) { + const t = p() ? "paddingLeft" : "paddingRight"; + this._element.style[t] = `${e}px`; + } + if (!i && t) { + const t = p() ? "paddingRight" : "paddingLeft"; + this._element.style[t] = `${e}px`; + } + } + _resetAdjustments() { + (this._element.style.paddingLeft = ""), + (this._element.style.paddingRight = ""); + } + static jQueryInterface(t, e) { + return this.each(function () { + const i = Ni.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t](e); + } + }); + } + } + P.on( + document, + "click.bs.modal.data-api", + '[data-bs-toggle="modal"]', + function (t) { + const e = z.getElementFromSelector(this); + ["A", "AREA"].includes(this.tagName) && t.preventDefault(), + P.one(e, xi, (t) => { + t.defaultPrevented || + P.one(e, Oi, () => { + a(this) && this.focus(); + }); + }); + const i = z.findOne(".modal.show"); + i && Ni.getInstance(i).hide(), Ni.getOrCreateInstance(e).toggle(this); + } + ), + R(Ni), + m(Ni); + const Pi = "show", + Mi = "showing", + ji = "hiding", + Fi = ".offcanvas.show", + Hi = "hidePrevented.bs.offcanvas", + $i = "hidden.bs.offcanvas", + Wi = { backdrop: !0, keyboard: !0, scroll: !1 }, + Bi = { + backdrop: "(boolean|string)", + keyboard: "boolean", + scroll: "boolean", + }; + class zi extends W { + constructor(t, e) { + super(t, e), + (this._isShown = !1), + (this._backdrop = this._initializeBackDrop()), + (this._focustrap = this._initializeFocusTrap()), + this._addEventListeners(); + } + static get Default() { + return Wi; + } + static get DefaultType() { + return Bi; + } + static get NAME() { + return "offcanvas"; + } + toggle(t) { + return this._isShown ? this.hide() : this.show(t); + } + show(t) { + this._isShown || + P.trigger(this._element, "show.bs.offcanvas", { relatedTarget: t }) + .defaultPrevented || + ((this._isShown = !0), + this._backdrop.show(), + this._config.scroll || new Ti().hide(), + this._element.setAttribute("aria-modal", !0), + this._element.setAttribute("role", "dialog"), + this._element.classList.add(Mi), + this._queueCallback( + () => { + (this._config.scroll && !this._config.backdrop) || + this._focustrap.activate(), + this._element.classList.add(Pi), + this._element.classList.remove(Mi), + P.trigger(this._element, "shown.bs.offcanvas", { + relatedTarget: t, + }); + }, + this._element, + !0 + )); + } + hide() { + this._isShown && + (P.trigger(this._element, "hide.bs.offcanvas").defaultPrevented || + (this._focustrap.deactivate(), + this._element.blur(), + (this._isShown = !1), + this._element.classList.add(ji), + this._backdrop.hide(), + this._queueCallback( + () => { + this._element.classList.remove(Pi, ji), + this._element.removeAttribute("aria-modal"), + this._element.removeAttribute("role"), + this._config.scroll || new Ti().reset(), + P.trigger(this._element, $i); + }, + this._element, + !0 + ))); + } + dispose() { + this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose(); + } + _initializeBackDrop() { + const t = Boolean(this._config.backdrop); + return new pi({ + className: "offcanvas-backdrop", + isVisible: t, + isAnimated: !0, + rootElement: this._element.parentNode, + clickCallback: t + ? () => { + "static" !== this._config.backdrop + ? this.hide() + : P.trigger(this._element, Hi); + } + : null, + }); + } + _initializeFocusTrap() { + return new vi({ trapElement: this._element }); + } + _addEventListeners() { + P.on(this._element, "keydown.dismiss.bs.offcanvas", (t) => { + "Escape" === t.key && + (this._config.keyboard ? this.hide() : P.trigger(this._element, Hi)); + }); + } + static jQueryInterface(t) { + return this.each(function () { + const e = zi.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) + throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + P.on( + document, + "click.bs.offcanvas.data-api", + '[data-bs-toggle="offcanvas"]', + function (t) { + const e = z.getElementFromSelector(this); + if ((["A", "AREA"].includes(this.tagName) && t.preventDefault(), l(this))) + return; + P.one(e, $i, () => { + a(this) && this.focus(); + }); + const i = z.findOne(Fi); + i && i !== e && zi.getInstance(i).hide(), + zi.getOrCreateInstance(e).toggle(this); + } + ), + P.on(window, "load.bs.offcanvas.data-api", () => { + for (const t of z.find(Fi)) zi.getOrCreateInstance(t).show(); + }), + P.on(window, "resize.bs.offcanvas", () => { + for (const t of z.find("[aria-modal][class*=show][class*=offcanvas-]")) + "fixed" !== getComputedStyle(t).position && + zi.getOrCreateInstance(t).hide(); + }), + R(zi), + m(zi); + const Ri = { + "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i], + a: ["target", "href", "title", "rel"], + area: [], + b: [], + br: [], + col: [], + code: [], + div: [], + em: [], + hr: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + h6: [], + i: [], + img: ["src", "srcset", "alt", "title", "width", "height"], + li: [], + ol: [], + p: [], + pre: [], + s: [], + small: [], + span: [], + sub: [], + sup: [], + strong: [], + u: [], + ul: [], + }, + qi = new Set([ + "background", + "cite", + "href", + "itemtype", + "longdesc", + "poster", + "src", + "xlink:href", + ]), + Vi = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i, + Ki = (t, e) => { + const i = t.nodeName.toLowerCase(); + return e.includes(i) + ? !qi.has(i) || Boolean(Vi.test(t.nodeValue)) + : e.filter((t) => t instanceof RegExp).some((t) => t.test(i)); + }, + Qi = { + allowList: Ri, + content: {}, + extraClass: "", + html: !1, + sanitize: !0, + sanitizeFn: null, + template: "
", + }, + Xi = { + allowList: "object", + content: "object", + extraClass: "(string|function)", + html: "boolean", + sanitize: "boolean", + sanitizeFn: "(null|function)", + template: "string", + }, + Yi = { + entry: "(string|element|function|null)", + selector: "(string|element)", + }; + class Ui extends $ { + constructor(t) { + super(), (this._config = this._getConfig(t)); + } + static get Default() { + return Qi; + } + static get DefaultType() { + return Xi; + } + static get NAME() { + return "TemplateFactory"; + } + getContent() { + return Object.values(this._config.content) + .map((t) => this._resolvePossibleFunction(t)) + .filter(Boolean); + } + hasContent() { + return this.getContent().length > 0; + } + changeContent(t) { + return ( + this._checkContent(t), + (this._config.content = { ...this._config.content, ...t }), + this + ); + } + toHtml() { + const t = document.createElement("div"); + t.innerHTML = this._maybeSanitize(this._config.template); + for (const [e, i] of Object.entries(this._config.content)) + this._setContent(t, i, e); + const e = t.children[0], + i = this._resolvePossibleFunction(this._config.extraClass); + return i && e.classList.add(...i.split(" ")), e; + } + _typeCheckConfig(t) { + super._typeCheckConfig(t), this._checkContent(t.content); + } + _checkContent(t) { + for (const [e, i] of Object.entries(t)) + super._typeCheckConfig({ selector: e, entry: i }, Yi); + } + _setContent(t, e, i) { + const n = z.findOne(i, t); + n && + ((e = this._resolvePossibleFunction(e)) + ? o(e) + ? this._putElementInTemplate(r(e), n) + : this._config.html + ? (n.innerHTML = this._maybeSanitize(e)) + : (n.textContent = e) + : n.remove()); + } + _maybeSanitize(t) { + return this._config.sanitize + ? (function (t, e, i) { + if (!t.length) return t; + if (i && "function" == typeof i) return i(t); + const n = new window.DOMParser().parseFromString(t, "text/html"), + s = [].concat(...n.body.querySelectorAll("*")); + for (const t of s) { + const i = t.nodeName.toLowerCase(); + if (!Object.keys(e).includes(i)) { + t.remove(); + continue; + } + const n = [].concat(...t.attributes), + s = [].concat(e["*"] || [], e[i] || []); + for (const e of n) Ki(e, s) || t.removeAttribute(e.nodeName); + } + return n.body.innerHTML; + })(t, this._config.allowList, this._config.sanitizeFn) + : t; + } + _resolvePossibleFunction(t) { + return g(t, [this]); + } + _putElementInTemplate(t, e) { + if (this._config.html) return (e.innerHTML = ""), void e.append(t); + e.textContent = t.textContent; + } + } + const Gi = new Set(["sanitize", "allowList", "sanitizeFn"]), + Ji = "fade", + Zi = "show", + tn = ".modal", + en = "hide.bs.modal", + nn = "hover", + sn = "focus", + on = { + AUTO: "auto", + TOP: "top", + RIGHT: p() ? "left" : "right", + BOTTOM: "bottom", + LEFT: p() ? "right" : "left", + }, + rn = { + allowList: Ri, + animation: !0, + boundary: "clippingParents", + container: !1, + customClass: "", + delay: 0, + fallbackPlacements: ["top", "right", "bottom", "left"], + html: !1, + offset: [0, 6], + placement: "top", + popperConfig: null, + sanitize: !0, + sanitizeFn: null, + selector: !1, + template: + '', + title: "", + trigger: "hover focus", + }, + an = { + allowList: "object", + animation: "boolean", + boundary: "(string|element)", + container: "(string|element|boolean)", + customClass: "(string|function)", + delay: "(number|object)", + fallbackPlacements: "array", + html: "boolean", + offset: "(array|string|function)", + placement: "(string|function)", + popperConfig: "(null|object|function)", + sanitize: "boolean", + sanitizeFn: "(null|function)", + selector: "(string|boolean)", + template: "string", + title: "(string|element|function)", + trigger: "string", + }; + class ln extends W { + constructor(t, e) { + if (void 0 === Ve) + throw new TypeError( + "Bootstrap's tooltips require Popper (https://popper.js.org)" + ); + super(t, e), + (this._isEnabled = !0), + (this._timeout = 0), + (this._isHovered = null), + (this._activeTrigger = {}), + (this._popper = null), + (this._templateFactory = null), + (this._newContent = null), + (this.tip = null), + this._setListeners(), + this._config.selector || this._fixTitle(); + } + static get Default() { + return rn; + } + static get DefaultType() { + return an; + } + static get NAME() { + return "tooltip"; + } + enable() { + this._isEnabled = !0; + } + disable() { + this._isEnabled = !1; + } + toggleEnabled() { + this._isEnabled = !this._isEnabled; + } + toggle() { + this._isEnabled && + ((this._activeTrigger.click = !this._activeTrigger.click), + this._isShown() ? this._leave() : this._enter()); + } + dispose() { + clearTimeout(this._timeout), + P.off(this._element.closest(tn), en, this._hideModalHandler), + this._element.getAttribute("data-bs-original-title") && + this._element.setAttribute( + "title", + this._element.getAttribute("data-bs-original-title") + ), + this._disposePopper(), + super.dispose(); + } + show() { + if ("none" === this._element.style.display) + throw new Error("Please use show on visible elements"); + if (!this._isWithContent() || !this._isEnabled) return; + const t = P.trigger(this._element, this.constructor.eventName("show")), + e = ( + c(this._element) || this._element.ownerDocument.documentElement + ).contains(this._element); + if (t.defaultPrevented || !e) return; + this._disposePopper(); + const i = this._getTipElement(); + this._element.setAttribute("aria-describedby", i.getAttribute("id")); + const { container: n } = this._config; + if ( + (this._element.ownerDocument.documentElement.contains(this.tip) || + (n.append(i), + P.trigger(this._element, this.constructor.eventName("inserted"))), + (this._popper = this._createPopper(i)), + i.classList.add(Zi), + "ontouchstart" in document.documentElement) + ) + for (const t of [].concat(...document.body.children)) + P.on(t, "mouseover", h); + this._queueCallback( + () => { + P.trigger(this._element, this.constructor.eventName("shown")), + !1 === this._isHovered && this._leave(), + (this._isHovered = !1); + }, + this.tip, + this._isAnimated() + ); + } + hide() { + if ( + this._isShown() && + !P.trigger(this._element, this.constructor.eventName("hide")) + .defaultPrevented + ) { + if ( + (this._getTipElement().classList.remove(Zi), + "ontouchstart" in document.documentElement) + ) + for (const t of [].concat(...document.body.children)) + P.off(t, "mouseover", h); + (this._activeTrigger.click = !1), + (this._activeTrigger.focus = !1), + (this._activeTrigger.hover = !1), + (this._isHovered = null), + this._queueCallback( + () => { + this._isWithActiveTrigger() || + (this._isHovered || this._disposePopper(), + this._element.removeAttribute("aria-describedby"), + P.trigger(this._element, this.constructor.eventName("hidden"))); + }, + this.tip, + this._isAnimated() + ); + } + } + update() { + this._popper && this._popper.update(); + } + _isWithContent() { + return Boolean(this._getTitle()); + } + _getTipElement() { + return ( + this.tip || + (this.tip = this._createTipElement( + this._newContent || this._getContentForTemplate() + )), + this.tip + ); + } + _createTipElement(t) { + const e = this._getTemplateFactory(t).toHtml(); + if (!e) return null; + e.classList.remove(Ji, Zi), + e.classList.add(`bs-${this.constructor.NAME}-auto`); + const i = ((t) => { + do { + t += Math.floor(1e6 * Math.random()); + } while (document.getElementById(t)); + return t; + })(this.constructor.NAME).toString(); + return ( + e.setAttribute("id", i), this._isAnimated() && e.classList.add(Ji), e + ); + } + setContent(t) { + (this._newContent = t), + this._isShown() && (this._disposePopper(), this.show()); + } + _getTemplateFactory(t) { + return ( + this._templateFactory + ? this._templateFactory.changeContent(t) + : (this._templateFactory = new Ui({ + ...this._config, + content: t, + extraClass: this._resolvePossibleFunction( + this._config.customClass + ), + })), + this._templateFactory + ); + } + _getContentForTemplate() { + return { ".tooltip-inner": this._getTitle() }; + } + _getTitle() { + return ( + this._resolvePossibleFunction(this._config.title) || + this._element.getAttribute("data-bs-original-title") + ); + } + _initializeOnDelegatedTarget(t) { + return this.constructor.getOrCreateInstance( + t.delegateTarget, + this._getDelegateConfig() + ); + } + _isAnimated() { + return ( + this._config.animation || (this.tip && this.tip.classList.contains(Ji)) + ); + } + _isShown() { + return this.tip && this.tip.classList.contains(Zi); + } + _createPopper(t) { + const e = g(this._config.placement, [this, t, this._element]), + i = on[e.toUpperCase()]; + return qe(this._element, t, this._getPopperConfig(i)); + } + _getOffset() { + const { offset: t } = this._config; + return "string" == typeof t + ? t.split(",").map((t) => Number.parseInt(t, 10)) + : "function" == typeof t + ? (e) => t(e, this._element) + : t; + } + _resolvePossibleFunction(t) { + return g(t, [this._element]); + } + _getPopperConfig(t) { + const e = { + placement: t, + modifiers: [ + { + name: "flip", + options: { fallbackPlacements: this._config.fallbackPlacements }, + }, + { name: "offset", options: { offset: this._getOffset() } }, + { + name: "preventOverflow", + options: { boundary: this._config.boundary }, + }, + { + name: "arrow", + options: { element: `.${this.constructor.NAME}-arrow` }, + }, + { + name: "preSetPlacement", + enabled: !0, + phase: "beforeMain", + fn: (t) => { + this._getTipElement().setAttribute( + "data-popper-placement", + t.state.placement + ); + }, + }, + ], + }; + return { ...e, ...g(this._config.popperConfig, [e]) }; + } + _setListeners() { + const t = this._config.trigger.split(" "); + for (const e of t) + if ("click" === e) + P.on( + this._element, + this.constructor.eventName("click"), + this._config.selector, + (t) => { + this._initializeOnDelegatedTarget(t).toggle(); + } + ); + else if ("manual" !== e) { + const t = + e === nn + ? this.constructor.eventName("mouseenter") + : this.constructor.eventName("focusin"), + i = + e === nn + ? this.constructor.eventName("mouseleave") + : this.constructor.eventName("focusout"); + P.on(this._element, t, this._config.selector, (t) => { + const e = this._initializeOnDelegatedTarget(t); + (e._activeTrigger["focusin" === t.type ? sn : nn] = !0), e._enter(); + }), + P.on(this._element, i, this._config.selector, (t) => { + const e = this._initializeOnDelegatedTarget(t); + (e._activeTrigger["focusout" === t.type ? sn : nn] = + e._element.contains(t.relatedTarget)), + e._leave(); + }); + } + (this._hideModalHandler = () => { + this._element && this.hide(); + }), + P.on(this._element.closest(tn), en, this._hideModalHandler); + } + _fixTitle() { + const t = this._element.getAttribute("title"); + t && + (this._element.getAttribute("aria-label") || + this._element.textContent.trim() || + this._element.setAttribute("aria-label", t), + this._element.setAttribute("data-bs-original-title", t), + this._element.removeAttribute("title")); + } + _enter() { + this._isShown() || this._isHovered + ? (this._isHovered = !0) + : ((this._isHovered = !0), + this._setTimeout(() => { + this._isHovered && this.show(); + }, this._config.delay.show)); + } + _leave() { + this._isWithActiveTrigger() || + ((this._isHovered = !1), + this._setTimeout(() => { + this._isHovered || this.hide(); + }, this._config.delay.hide)); + } + _setTimeout(t, e) { + clearTimeout(this._timeout), (this._timeout = setTimeout(t, e)); + } + _isWithActiveTrigger() { + return Object.values(this._activeTrigger).includes(!0); + } + _getConfig(t) { + const e = H.getDataAttributes(this._element); + for (const t of Object.keys(e)) Gi.has(t) && delete e[t]; + return ( + (t = { ...e, ...("object" == typeof t && t ? t : {}) }), + (t = this._mergeConfigObj(t)), + (t = this._configAfterMerge(t)), + this._typeCheckConfig(t), + t + ); + } + _configAfterMerge(t) { + return ( + (t.container = !1 === t.container ? document.body : r(t.container)), + "number" == typeof t.delay && + (t.delay = { show: t.delay, hide: t.delay }), + "number" == typeof t.title && (t.title = t.title.toString()), + "number" == typeof t.content && (t.content = t.content.toString()), + t + ); + } + _getDelegateConfig() { + const t = {}; + for (const [e, i] of Object.entries(this._config)) + this.constructor.Default[e] !== i && (t[e] = i); + return (t.selector = !1), (t.trigger = "manual"), t; + } + _disposePopper() { + this._popper && (this._popper.destroy(), (this._popper = null)), + this.tip && (this.tip.remove(), (this.tip = null)); + } + static jQueryInterface(t) { + return this.each(function () { + const e = ln.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + m(ln); + const cn = { + ...ln.Default, + content: "", + offset: [0, 8], + placement: "right", + template: + '', + trigger: "click", + }, + hn = { ...ln.DefaultType, content: "(null|string|element|function)" }; + class dn extends ln { + static get Default() { + return cn; + } + static get DefaultType() { + return hn; + } + static get NAME() { + return "popover"; + } + _isWithContent() { + return this._getTitle() || this._getContent(); + } + _getContentForTemplate() { + return { + ".popover-header": this._getTitle(), + ".popover-body": this._getContent(), + }; + } + _getContent() { + return this._resolvePossibleFunction(this._config.content); + } + static jQueryInterface(t) { + return this.each(function () { + const e = dn.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + m(dn); + const un = "click.bs.scrollspy", + fn = "active", + pn = "[href]", + mn = { + offset: null, + rootMargin: "0px 0px -25%", + smoothScroll: !1, + target: null, + threshold: [0.1, 0.5, 1], + }, + gn = { + offset: "(number|null)", + rootMargin: "string", + smoothScroll: "boolean", + target: "element", + threshold: "array", + }; + class _n extends W { + constructor(t, e) { + super(t, e), + (this._targetLinks = new Map()), + (this._observableSections = new Map()), + (this._rootElement = + "visible" === getComputedStyle(this._element).overflowY + ? null + : this._element), + (this._activeTarget = null), + (this._observer = null), + (this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }), + this.refresh(); + } + static get Default() { + return mn; + } + static get DefaultType() { + return gn; + } + static get NAME() { + return "scrollspy"; + } + refresh() { + this._initializeTargetsAndObservables(), + this._maybeEnableSmoothScroll(), + this._observer + ? this._observer.disconnect() + : (this._observer = this._getNewObserver()); + for (const t of this._observableSections.values()) + this._observer.observe(t); + } + dispose() { + this._observer.disconnect(), super.dispose(); + } + _configAfterMerge(t) { + return ( + (t.target = r(t.target) || document.body), + (t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin), + "string" == typeof t.threshold && + (t.threshold = t.threshold + .split(",") + .map((t) => Number.parseFloat(t))), + t + ); + } + _maybeEnableSmoothScroll() { + this._config.smoothScroll && + (P.off(this._config.target, un), + P.on(this._config.target, un, pn, (t) => { + const e = this._observableSections.get(t.target.hash); + if (e) { + t.preventDefault(); + const i = this._rootElement || window, + n = e.offsetTop - this._element.offsetTop; + if (i.scrollTo) + return void i.scrollTo({ top: n, behavior: "smooth" }); + i.scrollTop = n; + } + })); + } + _getNewObserver() { + const t = { + root: this._rootElement, + threshold: this._config.threshold, + rootMargin: this._config.rootMargin, + }; + return new IntersectionObserver((t) => this._observerCallback(t), t); + } + _observerCallback(t) { + const e = (t) => this._targetLinks.get(`#${t.target.id}`), + i = (t) => { + (this._previousScrollData.visibleEntryTop = t.target.offsetTop), + this._process(e(t)); + }, + n = (this._rootElement || document.documentElement).scrollTop, + s = n >= this._previousScrollData.parentScrollTop; + this._previousScrollData.parentScrollTop = n; + for (const o of t) { + if (!o.isIntersecting) { + (this._activeTarget = null), this._clearActiveClass(e(o)); + continue; + } + const t = + o.target.offsetTop >= this._previousScrollData.visibleEntryTop; + if (s && t) { + if ((i(o), !n)) return; + } else s || t || i(o); + } + } + _initializeTargetsAndObservables() { + (this._targetLinks = new Map()), (this._observableSections = new Map()); + const t = z.find(pn, this._config.target); + for (const e of t) { + if (!e.hash || l(e)) continue; + const t = z.findOne(decodeURI(e.hash), this._element); + a(t) && + (this._targetLinks.set(decodeURI(e.hash), e), + this._observableSections.set(e.hash, t)); + } + } + _process(t) { + this._activeTarget !== t && + (this._clearActiveClass(this._config.target), + (this._activeTarget = t), + t.classList.add(fn), + this._activateParents(t), + P.trigger(this._element, "activate.bs.scrollspy", { + relatedTarget: t, + })); + } + _activateParents(t) { + if (t.classList.contains("dropdown-item")) + z.findOne(".dropdown-toggle", t.closest(".dropdown")).classList.add(fn); + else + for (const e of z.parents(t, ".nav, .list-group")) + for (const t of z.prev( + e, + ".nav-link, .nav-item > .nav-link, .list-group-item" + )) + t.classList.add(fn); + } + _clearActiveClass(t) { + t.classList.remove(fn); + const e = z.find("[href].active", t); + for (const t of e) t.classList.remove(fn); + } + static jQueryInterface(t) { + return this.each(function () { + const e = _n.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) + throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + P.on(window, "load.bs.scrollspy.data-api", () => { + for (const t of z.find('[data-bs-spy="scroll"]')) _n.getOrCreateInstance(t); + }), + m(_n); + const bn = "ArrowLeft", + vn = "ArrowRight", + yn = "ArrowUp", + wn = "ArrowDown", + An = "active", + En = "fade", + Tn = "show", + Cn = + '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', + On = `.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Cn}`; + class xn extends W { + constructor(t) { + super(t), + (this._parent = this._element.closest( + '.list-group, .nav, [role="tablist"]' + )), + this._parent && + (this._setInitialAttributes(this._parent, this._getChildren()), + P.on(this._element, "keydown.bs.tab", (t) => this._keydown(t))); + } + static get NAME() { + return "tab"; + } + show() { + const t = this._element; + if (this._elemIsActive(t)) return; + const e = this._getActiveElem(), + i = e ? P.trigger(e, "hide.bs.tab", { relatedTarget: t }) : null; + P.trigger(t, "show.bs.tab", { relatedTarget: e }).defaultPrevented || + (i && i.defaultPrevented) || + (this._deactivate(e, t), this._activate(t, e)); + } + _activate(t, e) { + t && + (t.classList.add(An), + this._activate(z.getElementFromSelector(t)), + this._queueCallback( + () => { + "tab" === t.getAttribute("role") + ? (t.removeAttribute("tabindex"), + t.setAttribute("aria-selected", !0), + this._toggleDropDown(t, !0), + P.trigger(t, "shown.bs.tab", { relatedTarget: e })) + : t.classList.add(Tn); + }, + t, + t.classList.contains(En) + )); + } + _deactivate(t, e) { + t && + (t.classList.remove(An), + t.blur(), + this._deactivate(z.getElementFromSelector(t)), + this._queueCallback( + () => { + "tab" === t.getAttribute("role") + ? (t.setAttribute("aria-selected", !1), + t.setAttribute("tabindex", "-1"), + this._toggleDropDown(t, !1), + P.trigger(t, "hidden.bs.tab", { relatedTarget: e })) + : t.classList.remove(Tn); + }, + t, + t.classList.contains(En) + )); + } + _keydown(t) { + if (![bn, vn, yn, wn].includes(t.key)) return; + t.stopPropagation(), t.preventDefault(); + const e = [vn, wn].includes(t.key), + i = b( + this._getChildren().filter((t) => !l(t)), + t.target, + e, + !0 + ); + i && (i.focus({ preventScroll: !0 }), xn.getOrCreateInstance(i).show()); + } + _getChildren() { + return z.find(On, this._parent); + } + _getActiveElem() { + return this._getChildren().find((t) => this._elemIsActive(t)) || null; + } + _setInitialAttributes(t, e) { + this._setAttributeIfNotExists(t, "role", "tablist"); + for (const t of e) this._setInitialAttributesOnChild(t); + } + _setInitialAttributesOnChild(t) { + t = this._getInnerElement(t); + const e = this._elemIsActive(t), + i = this._getOuterElement(t); + t.setAttribute("aria-selected", e), + i !== t && this._setAttributeIfNotExists(i, "role", "presentation"), + e || t.setAttribute("tabindex", "-1"), + this._setAttributeIfNotExists(t, "role", "tab"), + this._setInitialAttributesOnTargetPanel(t); + } + _setInitialAttributesOnTargetPanel(t) { + const e = z.getElementFromSelector(t); + e && + (this._setAttributeIfNotExists(e, "role", "tabpanel"), + t.id && this._setAttributeIfNotExists(e, "aria-labelledby", `${t.id}`)); + } + _toggleDropDown(t, e) { + const i = this._getOuterElement(t); + if (!i.classList.contains("dropdown")) return; + const n = (t, n) => { + const s = z.findOne(t, i); + s && s.classList.toggle(n, e); + }; + n(".dropdown-toggle", An), + n(".dropdown-menu", Tn), + i.setAttribute("aria-expanded", e); + } + _setAttributeIfNotExists(t, e, i) { + t.hasAttribute(e) || t.setAttribute(e, i); + } + _elemIsActive(t) { + return t.classList.contains(An); + } + _getInnerElement(t) { + return t.matches(On) ? t : z.findOne(On, t); + } + _getOuterElement(t) { + return t.closest(".nav-item, .list-group-item") || t; + } + static jQueryInterface(t) { + return this.each(function () { + const e = xn.getOrCreateInstance(this); + if ("string" == typeof t) { + if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) + throw new TypeError(`No method named "${t}"`); + e[t](); + } + }); + } + } + P.on(document, "click.bs.tab", Cn, function (t) { + ["A", "AREA"].includes(this.tagName) && t.preventDefault(), + l(this) || xn.getOrCreateInstance(this).show(); + }), + P.on(window, "load.bs.tab", () => { + for (const t of z.find( + '.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]' + )) + xn.getOrCreateInstance(t); + }), + m(xn); + const kn = "hide", + Ln = "show", + Sn = "showing", + Dn = { animation: "boolean", autohide: "boolean", delay: "number" }, + In = { animation: !0, autohide: !0, delay: 5e3 }; + class Nn extends W { + constructor(t, e) { + super(t, e), + (this._timeout = null), + (this._hasMouseInteraction = !1), + (this._hasKeyboardInteraction = !1), + this._setListeners(); + } + static get Default() { + return In; + } + static get DefaultType() { + return Dn; + } + static get NAME() { + return "toast"; + } + show() { + P.trigger(this._element, "show.bs.toast").defaultPrevented || + (this._clearTimeout(), + this._config.animation && this._element.classList.add("fade"), + this._element.classList.remove(kn), + d(this._element), + this._element.classList.add(Ln, Sn), + this._queueCallback( + () => { + this._element.classList.remove(Sn), + P.trigger(this._element, "shown.bs.toast"), + this._maybeScheduleHide(); + }, + this._element, + this._config.animation + )); + } + hide() { + this.isShown() && + (P.trigger(this._element, "hide.bs.toast").defaultPrevented || + (this._element.classList.add(Sn), + this._queueCallback( + () => { + this._element.classList.add(kn), + this._element.classList.remove(Sn, Ln), + P.trigger(this._element, "hidden.bs.toast"); + }, + this._element, + this._config.animation + ))); + } + dispose() { + this._clearTimeout(), + this.isShown() && this._element.classList.remove(Ln), + super.dispose(); + } + isShown() { + return this._element.classList.contains(Ln); + } + _maybeScheduleHide() { + this._config.autohide && + (this._hasMouseInteraction || + this._hasKeyboardInteraction || + (this._timeout = setTimeout(() => { + this.hide(); + }, this._config.delay))); + } + _onInteraction(t, e) { + switch (t.type) { + case "mouseover": + case "mouseout": + this._hasMouseInteraction = e; + break; + case "focusin": + case "focusout": + this._hasKeyboardInteraction = e; + } + if (e) return void this._clearTimeout(); + const i = t.relatedTarget; + this._element === i || + this._element.contains(i) || + this._maybeScheduleHide(); + } + _setListeners() { + P.on(this._element, "mouseover.bs.toast", (t) => + this._onInteraction(t, !0) + ), + P.on(this._element, "mouseout.bs.toast", (t) => + this._onInteraction(t, !1) + ), + P.on(this._element, "focusin.bs.toast", (t) => + this._onInteraction(t, !0) + ), + P.on(this._element, "focusout.bs.toast", (t) => + this._onInteraction(t, !1) + ); + } + _clearTimeout() { + clearTimeout(this._timeout), (this._timeout = null); + } + static jQueryInterface(t) { + return this.each(function () { + const e = Nn.getOrCreateInstance(this, t); + if ("string" == typeof t) { + if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](this); + } + }); + } + } + return ( + R(Nn), + m(Nn), + { + Alert: q, + Button: K, + Carousel: rt, + Collapse: ft, + Dropdown: ci, + Modal: Ni, + Offcanvas: zi, + Popover: dn, + ScrollSpy: _n, + Tab: xn, + Toast: Nn, + Tooltip: ln, + } + ); +}); +//# sourceMappingURL=bootstrap.bundle.min.js.map diff --git a/static/js/fontawesome.all.min.js b/static/js/fontawesome.all.min.js new file mode 100644 index 0000000..91bcb11 --- /dev/null +++ b/static/js/fontawesome.all.min.js @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +!function(){"use strict";var c={},l={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(l=document)}catch(c){}var h=(c.navigator||{}).userAgent,z=void 0===h?"":h,v=c,a=l,m=(v.document,!!a.documentElement&&!!a.head&&"function"==typeof a.addEventListener&&a.createElement,~z.indexOf("MSIE")||z.indexOf("Trident/"),"___FONT_AWESOME___"),s=function(){try{return!0}catch(c){return!1}}();var e=v||{};e[m]||(e[m]={}),e[m].styles||(e[m].styles={}),e[m].hooks||(e[m].hooks={}),e[m].shims||(e[m].shims=[]);var t=e[m];function M(c,z){var l=(2>>0;h--;)l[h]=c[h];return l}function gc(c){return c.classList?bc(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function Ac(c,l){var h,z=l.split("-"),v=z[0],a=z.slice(1).join("-");return v!==c||""===a||(h=a,~T.indexOf(h))?null:a}function Sc(c){return"".concat(c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function yc(h){return Object.keys(h||{}).reduce(function(c,l){return c+"".concat(l,": ").concat(h[l],";")},"")}function wc(c){return c.size!==Lc.size||c.x!==Lc.x||c.y!==Lc.y||c.rotate!==Lc.rotate||c.flipX||c.flipY}function kc(c){var l=c.transform,h=c.containerWidth,z=c.iconWidth,v={transform:"translate(".concat(h/2," 256)")},a="translate(".concat(32*l.x,", ").concat(32*l.y,") "),m="scale(".concat(l.size/16*(l.flipX?-1:1),", ").concat(l.size/16*(l.flipY?-1:1),") "),s="rotate(".concat(l.rotate," 0 0)");return{outer:v,inner:{transform:"".concat(a," ").concat(m," ").concat(s)},path:{transform:"translate(".concat(z/2*-1," -256)")}}}var xc={x:0,y:0,width:"100%",height:"100%"};function Zc(c){var l=!(1").concat(m.map(Jc).join(""),"")}var $c=function(){};function cl(c){return"string"==typeof(c.getAttribute?c.getAttribute(B):null)}var ll={replace:function(c){var l=c[0],h=c[1].map(function(c){return Jc(c)}).join("\n");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(K.keepOriginalSource&&"svg"!==l.tagName.toLowerCase()?"\x3c!-- ".concat(l.outerHTML," --\x3e"):"");else if(l.parentNode){var z=document.createElement("span");l.parentNode.replaceChild(z,l),z.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~gc(l).indexOf(K.replacementClass))return ll.replace(c);var z=new RegExp("".concat(K.familyPrefix,"-.*"));delete h[0].attributes.style,delete h[0].attributes.id;var v=h[0].attributes.class.split(" ").reduce(function(c,l){return l===K.replacementClass||l.match(z)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=v.toSvg.join(" ");var a=h.map(function(c){return Jc(c)}).join("\n");l.setAttribute("class",v.toNode.join(" ")),l.setAttribute(B,""),l.innerHTML=a}};function hl(c){c()}function zl(h,c){var z="function"==typeof c?c:$c;if(0===h.length)z();else{var l=hl;K.mutateApproach===y&&(l=o.requestAnimationFrame||hl),l(function(){var c=!0===K.autoReplaceSvg?ll.replace:ll[K.autoReplaceSvg]||ll.replace,l=_c.begin("mutate");h.map(c),l(),z()})}}var vl=!1;function al(){vl=!1}var ml=null;function sl(c){if(t&&K.observeMutations){var v=c.treeCallback,a=c.nodeCallback,m=c.pseudoElementsCallback,l=c.observeMutationsRoot,h=void 0===l?V:l;ml=new t(function(c){vl||bc(c).forEach(function(c){if("childList"===c.type&&0()=>(t&&(e=t(t=0)),e);var fr=(t,e)=>{for(var i in e)ih(t,i,{get:e[i],enumerable:!0});};var Ri=(t,e,i,s)=>{for(var r=s>1?void 0:s?tp(e,i):e,a=t.length-1,n;a>=0;a--)(n=t[a])&&(r=(s?n(e,i,r):n(r))||r);return s&&r&&ih(e,i,r),r};function pp(t,e,i){return i||(i=e,e={}),typeof i!="function"&&ps(7),lp(t,e,[hp],function(s){return xh(lo(s.data[0],Ph(s.data[1])))},1,i)}function lo(t,e){return _h(t,{i:2},e&&e.out,e&&e.dictionary)}function fa(t,e){if(e){for(var i="",s=0;s65558)return n(ps(13,0,1),null),r;var h=Qs(t,p+8);if(h){var y=h,P=Gs(t,p+16),c=P==4294967295||y==65535;if(c){var l=Gs(t,p-12);c=Gs(t,l)==101075792,c&&(y=h=Gs(t,l+32),P=Gs(t,l+48));}for(var E=e&&e.filter,b=function(w){var u=mp(t,P,c),f=u[0],g=u[1],_=u[2],k=u[3],z=u[4],q=u[5],W=up(t,q);P=z;var ot=function(gt,ut){gt?(r(),n(gt,null)):(ut&&(a[k]=ut),--h||n(null,a));};if(!E||E({name:k,size:g,originalSize:_,compression:f}))if(!f)ot(null,Pn(t,W,W+g));else if(f==8){var mt=t.subarray(W,W+g);if(g<32e4)try{ot(null,lo(mt,{out:new fs(_)}));}catch(gt){ot(gt,null);}else s.push(pp(mt,{size:_},ot));}else ot(ps(14,"unknown compression type "+f,1),null);else ot(null,null);},v=0;v{if(i.path){let s=i.path.map(({key:r})=>r).join(".");e.nested[s]=[...e.nested[s]||[],i.message];}else e.root=[...e.root||[],i.message];return e},{nested:{}})}function bp(t,e){return {reason:t==null?void 0:t.reason,validation:e.validation,origin:(t==null?void 0:t.origin)||"value",message:e.message,input:e.input,abortEarly:t==null?void 0:t.abortEarly,abortPipeEarly:t==null?void 0:t.abortPipeEarly}}function _p(t,e){return {reason:e,origin:t==null?void 0:t.origin,abortEarly:t==null?void 0:t.abortEarly,abortPipeEarly:t==null?void 0:t.abortPipeEarly}}function wr(t,e,i,s){if(!e||!e.length)return {output:t};let r,a,n=t;for(let p of e){let h=p(n);if(h.issue){r=r||_p(i,s);let y=bp(r,h.issue);if(a?a.push(y):a=[y],r.abortEarly||r.abortPipeEarly)break}else n=h.output;}return a?{issues:a}:{output:n}}function Hs(t,e){return !t||typeof t=="string"?[t,e]:[void 0,t]}function tr(t,e,i,s,r,a){return {issues:[{reason:e,validation:i,origin:(t==null?void 0:t.origin)||"value",message:s,input:r,issues:a,abortEarly:t==null?void 0:t.abortEarly,abortPipeEarly:t==null?void 0:t.abortPipeEarly}]}}function xp(t=[]){return {schema:"any",async:!1,_parse(e,i){return wr(e,t,i,"any")}}}function $a(t,e,i){let[s,r]=Hs(e,i);return {schema:"array",array:{item:t},async:!1,_parse(a,n){if(!Array.isArray(a))return tr(n,"type","array",s||"Invalid type",a);let p,h=[];for(let y=0;yp.length)return tr(h,"type","tuple",a||"Invalid type",p);let y,P=[];for(let c=0;c({...a,...n.object}),{}),s,r)}function kp(t,e,i,s){let[r,a]=Hs(i,s);return Ls(Object.entries(t.object).reduce((n,[p,h])=>e.includes(p)?n:{...n,[p]:h},{}),r,a)}function Tp(t,e,i){let s=t._parse(e,i);return s.issues?{success:!1,error:new vp(s.issues),issues:s.issues}:{success:!0,data:s.output,output:s.output}}function so(t,e){return i=>i>t?{issue:{validation:"max_value",message:e||"Invalid value",input:i}}:{output:i}}function ro(t,e){return i=>i"u")e=Buffer.from(t).toString("base64");else {let i=Array.prototype.map.call(t,s=>String.fromCharCode(s)).join("");e=window.btoa(i);}return `data:${ef(e)};base64,${e}`}function lh(t){return "w"in t&&"h"in t&&!("xt"in t)&&"p"in t}function ao(t){return !("h"in t)&&!("w"in t)&&"p"in t&&"e"in t&&"u"in t&&"id"in t}async function Ja(t,e=()=>!0){if(!(t instanceof Uint8Array))throw new co("DotLottie not found","INVALID_DOTLOTTIE");return await new Promise((i,s)=>{gp(t,{filter:e},(r,a)=>{r&&s(r),i(a);});})}async function uo(t,e,i){if(!(t instanceof Uint8Array))throw new co("DotLottie not found","INVALID_DOTLOTTIE");return (await Ja(t,s=>s.name===e&&(!i||i(s))))[e]}async function Sn(t){let e="manifest.json",i=(await Ja(t,s=>s.name===e))[e];if(!(typeof i>"u"))return JSON.parse(fa(i,!1))}async function sf(t){if(!(t instanceof Uint8Array))return {success:!1,error:"DotLottie not found"};let e=await Sn(t);if(typeof e>"u")return {success:!1,error:"Invalid .lottie file, manifest.json is missing"};let i=Tp(qp,e);return i.success?{success:!0}:{success:!1,error:`Invalid .lottie file, manifest.json structure is invalid, ${JSON.stringify(yp(i.error).nested,null,2)}`}}async function mo(t){let e=new Uint8Array(t),i=await sf(e);if(i.error)throw new co(i.error,"INVALID_DOTLOTTIE");return e}async function rf(t,e){let i=await Ja(t,r=>{let a=r.name.replace("audio/","");return r.name.startsWith("audio/")&&(!e||e({...r,name:a}))}),s={};for(let r in i){let a=i[r];if(a instanceof Uint8Array){let n=r.replace("audio/","");s[n]=Ch(a);}}return s}async function af(t,e){var i;let s=new Map;for(let[a,n]of Object.entries(e))for(let p of n.assets||[])if(ao(p)){let h=p.p;s.has(h)||s.set(h,new Set),(i=s.get(h))==null||i.add(a);}let r=await rf(t,a=>s.has(a.name));for(let[a,n]of s){let p=r[a];if(p)for(let h of n){let y=e[h];for(let P of (y==null?void 0:y.assets)||[])ao(P)&&P.p===a&&(P.p=p,P.u="",P.e=1);}}}async function nf(t,e){let i=await Ja(t,r=>{let a=r.name.replace("images/","");return r.name.startsWith("images/")&&(!e||e({...r,name:a}))}),s={};for(let r in i){let a=i[r];if(a instanceof Uint8Array){let n=r.replace("images/","");s[n]=Ch(a);}}return s}async function of(t,e){var i;let s=new Map;for(let[a,n]of Object.entries(e))for(let p of n.assets||[])if(lh(p)){let h=p.p;s.has(h)||s.set(h,new Set),(i=s.get(h))==null||i.add(a);}let r=await nf(t,a=>s.has(a.name));for(let[a,n]of s){let p=r[a];if(p)for(let h of n){let y=e[h];for(let P of (y==null?void 0:y.assets)||[])lh(P)&&P.p===a&&(P.p=p,P.u="",P.e=1);}}}async function kh(t,e,{inlineAssets:i}={},s){let r=`animations/${e}.json`,a=await uo(t,r,s);if(typeof a>"u")return;let n=JSON.parse(fa(a,!1));if(!i)return n;let p={[e]:n};return await of(t,p),await af(t,p),n}async function Th(t,e,i){let s=`themes/${e}.json`,r=await uo(t,s,i);if(!(typeof r>"u"))return JSON.parse(fa(r,!1))}async function Mh(t,e){let i={},s=await Ja(t,r=>{let a=r.name.replace("states/","").replace(".json","");return r.name.startsWith("states/")&&(!e||e({...r,name:a}))});for(let r in s){let a=s[r];if(a instanceof Uint8Array){let n=r.replace("states/","").replace(".json","");i[n]=fa(a,!1);}}return i}async function wh(t,e,i){let s=`states/${e}.json`,r=await uo(t,s,i);return typeof r>"u"?void 0:JSON.parse(fa(r,!1))}function Ie(t,e="dotLottie-common"){return new Error(`[${e}]: ${t}`)}function er(t,e="dotLottie-common",...i){console.error(`[${e}]:`,t,...i);}function li(t,e="dotLottie-common",...i){console.warn(`[${e}]:`,t,...i);}function go(t=""){let e=t.trim(),i=e.lastIndexOf("/"),s=e.substring(i+1),r=s.indexOf(".");return r!==-1?s.substring(0,r):s}function Jr(t){return ["v","ip","op","layers","fr","w","h"].every(e=>Object.prototype.hasOwnProperty.call(t,e))}function yo(t){let e=t.assets;return e?e.some(i=>ao(i)):!1}function vo(t){try{let e=JSON.parse(t);return Jr(e)}catch{return !1}}function En(t,e){let i=Object.keys(t).find(s=>t[s]===e);if(i===void 0)throw new Error("Value not found in the object.");return i}function Ua(t){return JSON.parse(JSON.stringify(t))}var sh,ep,fs,Xr,ph,no,oo,fh,ch,uh,ho,ip,sp,mh,xn,cr,Xe,pa,Wa,Xe,Xe,Xe,Xe,dh,Xe,gh,yh,bn,Is,_n,vh,Pn,bh,ps,_h,rp,ap,rh,vn,np,op,hp,xh,Ph,lp,Qs,Gs,Qn,eo,fp,cp,up,mp,dp,ah,vp,Ep,Mp,po,wp,Sh,Dp,Fp,Ip,Ya,Lp,Vp,Rp,Bp,Op,zp,Np,Gp,Eh,jp,Ah,Hp,qp,fo,Yr,$p,Wp,Xp,Yp,Jp,Up,Zp,Kp,Qp,tf,hh,ef,co,ca=ls(()=>{sh={},ep=function(t,e,i,s,r){var a=new Worker(sh[e]||(sh[e]=URL.createObjectURL(new Blob([t+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return a.onmessage=function(n){var p=n.data,h=p.$e$;if(h){var y=new Error(h[0]);y.code=h[1],y.stack=h[2],r(y,null);}else r(null,p);},a.postMessage(i,s),a},fs=Uint8Array,Xr=Uint16Array,ph=Int32Array,no=new fs([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),oo=new fs([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),fh=new fs([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ch=function(t,e){for(var i=new Xr(31),s=0;s<31;++s)i[s]=e+=1<>1|(Xe&21845)<<1,cr=(cr&52428)>>2|(cr&13107)<<2,cr=(cr&61680)>>4|(cr&3855)<<4,xn[Xe]=((cr&65280)>>8|(cr&255)<<8)>>1;pa=function(t,e,i){for(var s=t.length,r=0,a=new Xr(e);r>h]=y;}else for(p=new Xr(s),r=0;r>15-t[r]);return p},Wa=new fs(288);for(Xe=0;Xe<144;++Xe)Wa[Xe]=8;for(Xe=144;Xe<256;++Xe)Wa[Xe]=9;for(Xe=256;Xe<280;++Xe)Wa[Xe]=7;for(Xe=280;Xe<288;++Xe)Wa[Xe]=8;dh=new fs(32);for(Xe=0;Xe<32;++Xe)dh[Xe]=5;gh=pa(Wa,9,1),yh=pa(dh,5,1),bn=function(t){for(var e=t[0],i=1;ie&&(e=t[i]);return e},Is=function(t,e,i){var s=e/8|0;return (t[s]|t[s+1]<<8)>>(e&7)&i},_n=function(t,e){var i=e/8|0;return (t[i]|t[i+1]<<8|t[i+2]<<16)>>(e&7)},vh=function(t){return (t+7)/8|0},Pn=function(t,e,i){return (e==null||e<0)&&(e=0),(i==null||i>t.length)&&(i=t.length),new fs(t.subarray(e,i))},bh=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ps=function(t,e,i){var s=new Error(e||bh[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,ps),!i)throw s;return s},_h=function(t,e,i,s){var r=t.length,a=s?s.length:0;if(!r||e.f&&!e.l)return i||new fs(0);var n=!i,p=n||e.i!=2,h=e.i;n&&(i=new fs(r*3));var y=function(Wt){var fe=i.length;if(Wt>fe){var jt=new fs(Math.max(fe*2,Wt));jt.set(i),i=jt;}},P=e.f||0,c=e.p||0,l=e.b||0,E=e.l,b=e.d,v=e.m,w=e.n,u=r*8;do{if(!E){P=Is(t,c,1);var f=Is(t,c+1,3);if(c+=3,f)if(f==1)E=gh,b=yh,v=9,w=5;else if(f==2){var g=Is(t,c,31)+257,_=Is(t,c+10,15)+4,k=g+Is(t,c+5,31)+1;c+=14;for(var z=new fs(k),q=new fs(19),W=0;W<_;++W)q[fh[W]]=Is(t,c+W*3,7);c+=_*3;for(var ot=bn(q),mt=(1<>4;if(Ct<16)z[W++]=Ct;else {var ht=0,yt=0;for(Ct==16?(yt=3+Is(t,c,3),c+=2,ht=z[W-1]):Ct==17?(yt=3+Is(t,c,7),c+=3):Ct==18&&(yt=11+Is(t,c,127),c+=7);yt--;)z[W++]=ht;}}var D=z.subarray(0,g),V=z.subarray(g);v=bn(D),w=bn(V),E=pa(D,v,1),b=pa(V,w,1);}else ps(1);else {var Ct=vh(c)+4,S=t[Ct-4]|t[Ct-3]<<8,R=Ct+S;if(R>r){h&&ps(0);break}p&&y(l+S),i.set(t.subarray(Ct,R),l),e.b=l+=S,e.p=c=R*8,e.f=P;continue}if(c>u){h&&ps(0);break}}p&&y(l+131072);for(var tt=(1<>4;if(c+=ht&15,c>u){h&&ps(0);break}if(ht||ps(2),Vt<256)i[l++]=Vt;else if(Vt==256){Gt=c,E=null;break}else {var Xt=Vt-254;if(Vt>264){var W=Vt-257,Ht=no[W];Xt=Is(t,c,(1<>4;Qt||ps(3),c+=Qt&15;var V=mh[Zt];if(Zt>3){var Ht=oo[Zt];V+=_n(t,c)&(1<u){h&&ps(0);break}p&&y(l+131072);var ne=l+Xt;if(l>>0},Qn=function(t,e){return Gs(t,e)+Gs(t,e+4)*4294967296};eo=typeof TextDecoder<"u"&&new TextDecoder,fp=0;try{eo.decode(rp,{stream:!0}),fp=1;}catch{}cp=function(t){for(var e="",i=0;;){var s=t[i++],r=(s>127)+(s>223)+(s>239);if(i+r>t.length)return {s:e,r:Pn(t,i-1)};r?r==3?(s=((s&15)<<18|(t[i++]&63)<<12|(t[i++]&63)<<6|t[i++]&63)-65536,e+=String.fromCharCode(55296|s>>10,56320|s&1023)):r&1?e+=String.fromCharCode((s&31)<<6|t[i++]&63):e+=String.fromCharCode((s&15)<<12|(t[i++]&63)<<6|t[i++]&63):e+=String.fromCharCode(s);}};up=function(t,e){return e+30+Qs(t,e+26)+Qs(t,e+28)},mp=function(t,e,i){var s=Qs(t,e+28),r=fa(t.subarray(e+46,e+46+s),!(Qs(t,e+8)&2048)),a=e+46+s,n=Gs(t,e+20),p=i&&n==4294967295?dp(t,a):[n,Gs(t,e+24),Gs(t,e+42)],h=p[0],y=p[1],P=p[2];return [Qs(t,e+10),h,y,r,a+Qs(t,e+30)+Qs(t,e+32),P]},dp=function(t,e){for(;Qs(t,e)!=1;e+=4+Qs(t,e+2));return [Qn(t,e+12),Qn(t,e+4),Qn(t,e+20)]},ah=typeof queueMicrotask=="function"?queueMicrotask:typeof setTimeout=="function"?setTimeout:function(t){t();};vp=class extends Error{issues;constructor(t){super(t[0].message),this.name="ValiError",this.issues=t;}};Ep=["__proto__","prototype","constructor"];Mp=Object.create,po=Object.defineProperty,wp=Object.getOwnPropertyDescriptor,Sh=Object.getOwnPropertyNames,Dp=Object.getPrototypeOf,Fp=Object.prototype.hasOwnProperty,Ip=(t,e,i)=>e in t?po(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i,Ya=(t,e)=>function(){return e||(0, t[Sh(t)[0]])((e={exports:{}}).exports,e),e.exports},Lp=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Sh(e))!Fp.call(t,r)&&r!==i&&po(t,r,{get:()=>e[r],enumerable:!(s=wp(e,r))||s.enumerable});return t},Vp=(t,e,i)=>(i=t!=null?Mp(Dp(t)):{},Lp(e||!t||!t.__esModule?po(i,"default",{value:t,enumerable:!0}):i,t)),Rp=(t,e,i)=>(Ip(t,typeof e!="symbol"?e+"":e,i),i),Bp=Ya({"../../node_modules/.pnpm/@rgba-image+copy@0.1.3/node_modules/@rgba-image/copy/dist/index.js"(t){Object.defineProperty(t,"__esModule",{value:!0}),t.copy=void 0;var e=(i,s,r=0,a=0,n=i.width-r,p=i.height-a,h=0,y=0)=>{if(r=r|0,a=a|0,n=n|0,p=p|0,h=h|0,y=y|0,n<=0||p<=0)return;let P=new Uint32Array(i.data.buffer),c=new Uint32Array(s.data.buffer);for(let l=0;l=i.height)continue;let b=y+l;if(!(b<0||b>=s.height))for(let v=0;v=i.width)continue;let u=h+v;if(u<0||u>=s.width)continue;let f=E*i.width+w,g=b*s.width+u;c[g]=P[f];}}};t.copy=e;}}),Op=Ya({"../../node_modules/.pnpm/@rgba-image+create-image@0.1.1/node_modules/@rgba-image/create-image/dist/index.js"(t){Object.defineProperty(t,"__esModule",{value:!0}),t.CreateImageFactory=(e=[0,0,0,0],i=4)=>{if(i=Math.floor(i),isNaN(i)||i<1)throw TypeError("channels should be a positive non-zero number");if(!("length"in e)||e.lengthr===0);return (r,a,n)=>{if(r===void 0||a===void 0)throw TypeError("Not enough arguments");if(r=Math.floor(r),a=Math.floor(a),isNaN(r)||r<1||isNaN(a)||a<1)throw TypeError("Index or size is negative or greater than the allowed amount");let p=r*a*i;if(n===void 0&&(n=new Uint8ClampedArray(p)),n instanceof Uint8ClampedArray){if(n.length!==p)throw TypeError("Index or size is negative or greater than the allowed amount");if(!s)for(let h=0;h{if(a<=-n||a>=n||a==0)return 0;let p=a*Math.PI;return Math.sin(p)/p*Math.sin(p/n)/(p/n)},s=a=>Math.round(a*((1<{let P=y?2:3,c=1/p,l=Math.min(1,p),E=P/l,b=Math.floor((E+1)*2),v=new Int16Array((b+2)*n),w=0;for(let u=0;u>1]+=s(1-mt);let gt=0;for(;gt0&&q[ut]===0;)ut--;let Ct=g+gt,ht=ut-gt+1;v[w++]=Ct,v[w++]=ht,v.set(q.subarray(gt,ut+1),w),w+=ht;}return v};t.filters=r;}}),Np=Ya({"../../node_modules/.pnpm/@rgba-image+lanczos@0.1.1/node_modules/@rgba-image/lanczos/dist/convolve.js"(t){Object.defineProperty(t,"__esModule",{value:!0}),t.convolve=void 0;var e=14,i=(s,r,a,n,p,h)=>{let y=0,P=0;for(let c=0;c0;_--){let k=h[l++];w=w+k*s[v]|0,u=u+k*s[v+1]|0,f=f+k*s[v+2]|0,g=g+k*s[v+3]|0,v=v+4|0;}r[P]=w+8192>>e,r[P+1]=u+8192>>e,r[P+2]=f+8192>>e,r[P+3]=g+8192>>e,P=P+n*4|0;}P=(c+1)*4|0,y=(c+1)*a*4|0;}};t.convolve=i;}}),Gp=Ya({"../../node_modules/.pnpm/@rgba-image+lanczos@0.1.1/node_modules/@rgba-image/lanczos/dist/index.js"(t){Object.defineProperty(t,"__esModule",{value:!0}),t.lanczos2=t.lanczos=void 0;var e=Bp(),i=Op(),s=zp(),r=Np(),a=(h,y,P=!1)=>{let c=y.width/h.width,l=y.height/h.height,E=s.filters(h.width,y.width,c,0,P),b=s.filters(h.height,y.height,l,0,P),v=new Uint8ClampedArray(y.width*h.height*4);r.convolve(h.data,v,h.width,h.height,y.width,E),r.convolve(v,y.data,h.height,y.width,y.height,b);},n=(h,y,P=0,c=0,l=h.width-P,E=h.height-c,b=0,v=0,w=y.width-b,u=y.height-v)=>{if(P=P|0,c=c|0,l=l|0,E=E|0,b=b|0,v=v|0,w=w|0,u=u|0,l<=0||E<=0||w<=0||u<=0)return;if(P===0&&c===0&&l===h.width&&E===h.height&&b===0&&v===0&&w===y.width&&u===y.height){a(h,y);return}let f=i.createImage(l,E),g=i.createImage(w,u);e.copy(h,f,P,c),a(f,g),e.copy(g,y,0,0,g.width,g.height,b,v);};t.lanczos=n;var p=(h,y,P=0,c=0,l=h.width-P,E=h.height-c,b=0,v=0,w=y.width-b,u=y.height-v)=>{if(P=P|0,c=c|0,l=l|0,E=E|0,b=b|0,v=v|0,w=w|0,u=u|0,l<=0||E<=0||w<=0||u<=0)return;if(P===0&&c===0&&l===h.width&&E===h.height&&b===0&&v===0&&w===y.width&&u===y.height){a(h,y,!0);return}let f=i.createImage(l,E),g=i.createImage(w,u);e.copy(h,f,P,c),a(f,g,!0),e.copy(g,y,0,0,g.width,g.height,b,v);};t.lanczos2=p;}}),Eh=(t=>(t.Bounce="bounce",t.Normal="normal",t))(Eh||{}),jp=Pp(Eh),Ah=Ls({autoplay:Ke(to()),defaultTheme:Ke(Ji()),direction:Ke(io([nh(1),nh(-1)])),hover:Ke(to()),id:Ji(),intermission:Ke(js()),loop:Ke(io([to(),js()])),playMode:Ke(jp),speed:Ke(js()),themeColor:Ke(Ji())}),Hp=Ls({animations:$a(Ji()),id:Ji()}),qp=Ls({activeAnimationId:Ke(Ji()),animations:$a(Ah),author:Ke(Ji()),custom:Ke(Ap(Ji(),xp())),description:Ke(Ji()),generator:Ke(Ji()),keywords:Ke(Ji()),revision:Ke(js()),themes:Ke($a(Hp)),states:Ke($a(Ji())),version:Ke(Ji())}),fo=kp(Ah,["id"]),Yr=Ls({state:Ji()}),$p=Yr,Wp=Xa([Yr,Ls({ms:js()})]),Xp=Xa([Yr,Ls({count:js()})]),Yp=Yr,Jp=Yr,Up=Yr,Zp=Xa([Yr,Ls({threshold:Ke($a(js([ro(0),so(1)])))})]),Kp=Ls({onAfter:Ke(Wp),onClick:Ke($p),onComplete:Ke(Up),onEnter:Ke(Xp),onMouseEnter:Ke(Yp),onMouseLeave:Ke(Jp),onShow:Ke(Zp)}),Qp=Xa([fo,Ls({playOnScroll:Ke(oh([js([ro(0),so(1)]),js([ro(0),so(1)])])),segments:Ke(io([oh([js(),js()]),Ji()]))})]);Xa([Kp,Ls({animationId:Ke(Ji()),playbackSettings:Qp})]);tf={jpeg:"image/jpeg",png:"image/png",gif:"image/gif",bmp:"image/bmp",svg:"image/svg+xml",webp:"image/webp",mpeg:"audio/mpeg",mp3:"audio/mp3"},hh={jpeg:[255,216,255],png:[137,80,78,71,13,10,26,10],gif:[71,73,70],bmp:[66,77],webp:[82,73,70,70,87,69,66,80],svg:[60,63,120],mp3:[73,68,51,3,0,0,0,0],mpeg:[73,68,51,3,0,0,0,0]},ef=t=>{let e=null,i=[];if(!t)return null;let s=t.substring(t.indexOf(",")+1);typeof window>"u"?e=Buffer.from(s,"base64").toString("binary"):e=atob(s);let r=new Uint8Array(e.length);for(let a=0;ap===n[h]))return tf[a]}return null},co=class extends Error{constructor(t,e){super(t),Rp(this,"code"),this.name="[dotlottie-js]",this.code=e;}};Vp(Gp());});var Dh,An=ls(()=>{ca();Dh=class{_dotLottie;_animationsMap=new Map;_themeMap=new Map;_stateMachinesMap=new Map;_manifest;get dotLottie(){return this._dotLottie}get animationsMap(){return this._animationsMap}get themeMap(){return this._themeMap}get stateMachinesMap(){return this._stateMachinesMap}get manifest(){return this._manifest}async loadFromUrl(t){let e=await fetch(t,{method:"GET",mode:"cors"});if(!e.ok)throw new Error(`Failed to load dotLottie from ${t} with status ${e.status}`);let i=e.headers.get("content-type");if(i!=null&&i.includes("application/json")){let s=await e.json();if(!Jr(s))throw new Error(`Invalid lottie JSON at ${t}`);let r=go(t);this._animationsMap.set(r,s);let a={activeAnimationId:r,animations:[{id:r}]};this._manifest=a;}else {this._dotLottie=await mo(await e.arrayBuffer());let s=await Sn(this._dotLottie);if(!s)throw new Error("Manifest not found");this._manifest=s;}}loadFromLottieJSON(t){if(!Jr(t))throw new Error("Invalid lottie JSON");let e="my-animation";this._animationsMap.set(e,t);let i={activeAnimationId:e,animations:[{id:e}]};this._manifest=i;}async loadFromArrayBuffer(t){this._dotLottie=await mo(t);let e=await Sn(this._dotLottie);if(!e)throw new Error("Manifest not found");this._manifest=e;}async getAnimation(t){if(this._animationsMap.get(t))return this._animationsMap.get(t);if(!this._dotLottie)return;let e=await kh(this._dotLottie,t,{inlineAssets:!0});return e&&this._animationsMap.set(t,e),e}async getTheme(t){if(this._themeMap.get(t))return this._themeMap.get(t);if(!this._dotLottie)return;let e=await Th(this._dotLottie,t);return e&&this._themeMap.set(t,e),e}async getStateMachines(){if(!this._dotLottie)return;let t=await Mh(this._dotLottie);for(let e in t)if(e){let i=t[e];if(i){let s=JSON.parse(i);if(s){let r=s.descriptor.id;this._stateMachinesMap.get(r)||this._stateMachinesMap.set(r,s);}}}return Array.from(this._stateMachinesMap.values())}async getStateMachine(t){if(this._stateMachinesMap.get(t))return this._stateMachinesMap.get(t);if(!this._dotLottie)return;let e=await wh(this._dotLottie,t);return e&&this._stateMachinesMap.set(e.descriptor.id,e),e}};});function kn(){throw new Error("Cycle detected")}function _o(){if(ua>1)ua--;else {for(var t,e=!1;Za!==void 0;){var i=Za;for(Za=void 0,bo++;i!==void 0;){var s=i.o;if(i.o=void 0,i.f&=-3,!(8&i.f)&&Ih(i))try{i.c();}catch(r){e||(t=r,e=!0);}i=s;}}if(bo=0,ua--,e)throw t}}function Fh(t){if(Ei!==void 0){var e=t.n;if(e===void 0||e.t!==Ei)return e={i:0,S:t,p:Ei.s,n:void 0,t:Ei,e:void 0,x:void 0,r:e},Ei.s!==void 0&&(Ei.s.n=e),Ei.s=e,t.n=e,32&Ei.f&&t.S(e),e;if(e.i===-1)return e.i=0,e.n!==void 0&&(e.n.p=e.p,e.p!==void 0&&(e.p.n=e.n),e.p=Ei.s,e.n=void 0,Ei.s.n=e,Ei.s=e),e}}function vs(t){this.v=t,this.i=0,this.n=void 0,this.t=void 0;}function hf(t){return new vs(t)}function Ih(t){for(var e=t.s;e!==void 0;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return !0;return !1}function Lh(t){for(var e=t.s;e!==void 0;e=e.n){var i=e.S.n;if(i!==void 0&&(e.r=i),e.S.n=e,e.i=-1,e.n===void 0){t.s=e;break}}}function Vh(t){for(var e=t.s,i=void 0;e!==void 0;){var s=e.p;e.i===-1?(e.S.U(e),s!==void 0&&(s.n=e.n),e.n!==void 0&&(e.n.p=s)):i=e,e.S.n=e.r,e.r!==void 0&&(e.r=void 0),e=s;}t.s=i;}function Ur(t){vs.call(this,void 0),this.x=t,this.s=void 0,this.g=Cn-1,this.f=4;}function Rh(t){var e=t.u;if(t.u=void 0,typeof e=="function"){ua++;var i=Ei;Ei=void 0;try{e();}catch(s){throw t.f&=-2,t.f|=8,xo(t),s}finally{Ei=i,_o();}}}function xo(t){for(var e=t.s;e!==void 0;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,Rh(t);}function lf(t){if(Ei!==this)throw new Error("Out-of-order effect");Vh(this),Ei=t,this.f&=-2,8&this.f&&xo(this),_o();}function Ka(t){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32;}function pf(t){var e=new Ka(t);try{e.c();}catch(i){throw e.d(),i}return e.d.bind(e)}var Ei,Za,ua,bo,Cn,Bh,Tn=ls(()=>{Ei=void 0,Za=void 0,ua=0,bo=0,Cn=0;vs.prototype.h=function(){return !0};vs.prototype.S=function(t){this.t!==t&&t.e===void 0&&(t.x=this.t,this.t!==void 0&&(this.t.e=t),this.t=t);};vs.prototype.U=function(t){if(this.t!==void 0){var e=t.e,i=t.x;e!==void 0&&(e.x=i,t.e=void 0),i!==void 0&&(i.e=e,t.x=void 0),t===this.t&&(this.t=i);}};vs.prototype.subscribe=function(t){var e=this;return pf(function(){var i=e.value,s=32&this.f;this.f&=-33;try{t(i);}finally{this.f|=s;}})};vs.prototype.valueOf=function(){return this.value};vs.prototype.toString=function(){return this.value+""};vs.prototype.toJSON=function(){return this.value};vs.prototype.peek=function(){return this.v};Object.defineProperty(vs.prototype,"value",{get:function(){var t=Fh(this);return t!==void 0&&(t.i=this.i),this.v},set:function(t){if(Ei instanceof Ur&&function(){throw new Error("Computed cannot have side-effects")}(),t!==this.v){bo>100&&kn(),this.v=t,this.i++,Cn++,ua++;try{for(var e=this.t;e!==void 0;e=e.x)e.t.N();}finally{_o();}}}});(Ur.prototype=new vs).h=function(){if(this.f&=-3,1&this.f)return !1;if((36&this.f)==32||(this.f&=-5,this.g===Cn))return !0;if(this.g=Cn,this.f|=1,this.i>0&&!Ih(this))return this.f&=-2,!0;var t=Ei;try{Lh(this),Ei=this;var e=this.x();(16&this.f||this.v!==e||this.i===0)&&(this.v=e,this.f&=-17,this.i++);}catch(i){this.v=i,this.f|=16,this.i++;}return Ei=t,Vh(this),this.f&=-2,!0};Ur.prototype.S=function(t){if(this.t===void 0){this.f|=36;for(var e=this.s;e!==void 0;e=e.n)e.S.S(e);}vs.prototype.S.call(this,t);};Ur.prototype.U=function(t){if(this.t!==void 0&&(vs.prototype.U.call(this,t),this.t===void 0)){this.f&=-33;for(var e=this.s;e!==void 0;e=e.n)e.S.U(e);}};Ur.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;t!==void 0;t=t.x)t.t.N();}};Ur.prototype.peek=function(){if(this.h()||kn(),16&this.f)throw this.v;return this.v};Object.defineProperty(Ur.prototype,"value",{get:function(){1&this.f&&kn();var t=Fh(this);if(this.h(),t!==void 0&&(t.i=this.i),16&this.f)throw this.v;return this.v}});Ka.prototype.c=function(){var t=this.S();try{if(8&this.f||this.x===void 0)return;var e=this.x();typeof e=="function"&&(this.u=e);}finally{t();}};Ka.prototype.S=function(){1&this.f&&kn(),this.f|=1,this.f&=-9,Rh(this),Lh(this),ua++;var t=Ei;return Ei=this,lf.bind(this,t)};Ka.prototype.N=function(){2&this.f||(this.f|=2,this.o=Za,Za=this);};Ka.prototype.d=function(){this.f|=8,1&this.f||xo(this);};Bh=class{_state;_prevState;constructor(t){this._prevState=t,this._state=hf(t);}setState(t){this._prevState=this._state.value,this._state.value=t;}subscribe(t){return this._state.subscribe(e=>t(e,this._prevState))}};});var ff,Oh,cf,uf,mf,df,is,gf,zh,qs=ls(()=>{ff=Object.create,Oh=Object.defineProperty,cf=Object.getOwnPropertyDescriptor,uf=Object.getOwnPropertyNames,mf=Object.getPrototypeOf,df=Object.prototype.hasOwnProperty,is=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),gf=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of uf(e))!df.call(t,r)&&r!==i&&Oh(t,r,{get:()=>e[r],enumerable:!(s=cf(e,r))||s.enumerable});return t},zh=(t,e,i)=>(i=t!=null?ff(mf(t)):{},gf(e||!t||!t.__esModule?Oh(i,"default",{value:t,enumerable:!0}):i,t));});var fl={};fr(fl,{DotLottieStateMachineManager:()=>cc});function Fo(t,e){var i={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,s=Object.getOwnPropertySymbols(t);r=t.length&&(t=void 0),{value:t&&t[s++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function qe(t,e){var i=typeof Symbol=="function"&&t[Symbol.iterator];if(!i)return t;var s=i.call(t),r,a=[],n;try{for(;(e===void 0||e-- >0)&&!(r=s.next()).done;)a.push(r.value);}catch(p){n={error:p};}finally{try{r&&!r.done&&(i=s.return)&&i.call(s);}finally{if(n)throw n.error}}return a}function ui(t,e,i){if(i||arguments.length===2)for(var s=0,r=e.length,a;s"u"||typeof s=="string"||xa(s)?{target:s,event:t}:ae(ae({},s),{event:t})});return i}function If(t){if(!(t===void 0||t===Pf))return $s(t)}function il(t,e,i,s,r){var a=t.options.guards,n={state:r,cond:e,_event:s};if(e.type===Co)return ((a==null?void 0:a[e.name])||e.predicate)(i,s.data,n);var p=a==null?void 0:a[e.type];if(!p)throw new Error("Guard '".concat(e.type,"' is not implemented on machine '").concat(t.id,"'."));return p(i,s.data,n)}function sl(t){return typeof t=="string"?{type:t}:t}function Vn(t,e,i){var s=function(){},r=typeof t=="object",a=r?t:null;return {next:((r?t.next:t)||s).bind(a),error:((r?t.error:e)||s).bind(a),complete:((r?t.complete:i)||s).bind(a)}}function wn(t,e){return "".concat(t,":invocation[").concat(e,"]")}function To(t){return (t.type===hn||t.type===jn&&t.to===_a.Internal)&&typeof t.delay!="number"}function Mo(t,e){return e&&e[t]||void 0}function nn(t,e){var i;if(Qe(t)||typeof t=="number"){var s=Mo(t,e);Ye(s)?i={type:t,exec:s}:s?i=s:i={type:t,exec:void 0};}else if(Ye(t))i={type:t.name||t.toString(),exec:t};else {var s=Mo(t.type,e);if(Ye(s))i=ae(ae({},t),{exec:s});else if(s){var r=s.type||t.type;i=ae(ae(ae({},s),t),{type:r});}else i=t;}return i}function Vo(t){var e=nn(t);return ae(ae({id:Qe(t)?t:e.id},e),{type:e.type})}function Lf(t,e){return {type:hn,event:typeof t=="function"?t:Hn(t),delay:e?e.delay:void 0,id:e==null?void 0:e.id}}function Vf(t,e,i,s){var r={_event:i},a=Ui(Ye(t.event)?t.event(e,i.data,r):t.event),n;if(Qe(t.delay)){var p=s&&s[t.delay];n=Ye(p)?p(e,i.data,r):p;}else n=Ye(t.delay)?t.delay(e,i.data,r):t.delay;return ae(ae({},t),{type:hn,_event:a,delay:n})}function Rf(t,e){return {to:e?e.to:void 0,type:jn,event:Ye(t)?t:Hn(t),delay:e?e.delay:void 0,id:e&&e.id!==void 0?e.id:Ye(t)?t.name:Kh(t)}}function Bf(t,e,i,s){var r={_event:i},a=Ui(Ye(t.event)?t.event(e,i.data,r):t.event),n;if(Qe(t.delay)){var p=s&&s[t.delay];n=Ye(p)?p(e,i.data,r):p;}else n=Ye(t.delay)?t.delay(e,i.data,r):t.delay;var h=Ye(t.to)?t.to(e,i.data,r):t.to;return ae(ae({},t),{to:h,_event:a,event:a.data,delay:n})}function Nf(t){var e=Vo(t);return {type:ai.Start,activity:e,exec:void 0}}function Gf(t){var e=Ye(t)?t:Vo(t);return {type:ai.Stop,activity:e,exec:void 0}}function jf(t,e,i){var s=Ye(t.activity)?t.activity(e,i.data):t.activity,r=typeof s=="string"?{id:s}:s,a={type:ai.Stop,activity:r};return a}function Hf(t,e){var i=e?"#".concat(e):"";return "".concat(ai.After,"(").concat(t,")").concat(i)}function Dn(t,e){var i="".concat(ai.DoneState,".").concat(t),s={type:i,data:e};return s.toString=function(){return i},s}function Rn(t,e){var i="".concat(ai.DoneInvoke,".").concat(t),s={type:i,data:e};return s.toString=function(){return i},s}function en(t,e){var i="".concat(ai.ErrorPlatform,".").concat(t),s={type:i,data:e};return s.toString=function(){return i},s}function Nn(t,e,i,s,r,a,n){n===void 0&&(n=!1);var p=n?[]:qf(r),h=p.length?qh(i,s,p,e):i,y=n?[i]:void 0,P=[];function c(b,v){var w;switch(v.type){case hn:{var u=Vf(v,h,s,t.options.delays);return a&&typeof u.delay=="number"&&a(u,h,s),u}case jn:var f=Bf(v,h,s,t.options.delays);return a&&f.to!==_a.Internal&&(b==="entry"?P.push(f):a(f,h,s)),f;case Jh:{var g=Of(v,h,s);return a==null||a(g,h,s),g}case _f:{var _=v,k=(w=_.conds.find(function(D){var V=el(D.cond,t.options.guards);return !V||il(t,V,h,s,a?void 0:e)}))===null||w===void 0?void 0:w.actions;if(!k)return [];var z=qe(Nn(t,e,h,s,[{type:b,actions:Fr($s(k),t.options.actions)}],a,n),2),q=z[0],W=z[1];return h=W,y==null||y.push(h),q}case xf:{var k=v.get(h,s.data);if(!k)return [];var ot=qe(Nn(t,e,h,s,[{type:b,actions:Fr($s(k),t.options.actions)}],a,n),2),mt=ot[0],gt=ot[1];return h=gt,y==null||y.push(h),mt}case Io:{var g=jf(v,h,s);return a==null||a(g,i,s),g}case Yh:{h=qh(h,s,[v],a?void 0:e),y==null||y.push(h);break}default:var ut=nn(v,t.options.actions),Ct=ut.exec;if(a)a(ut,h,s);else if(Ct&&y){var ht=y.length-1,yt=ae(ae({},ut),{exec:function(D){for(var V=[],S=1;S0;){var y=r.shift();i=t.transition(i,y,h),s.forEach(function(P){return P.next(i)});}a=!1;}},p=Yf({id:e.id,send:function(y){r.push(y),n();},getSnapshot:function(){return i},subscribe:function(y,P,c){var l=Vn(y,P,c);return s.add(l),l.next(i),{unsubscribe:function(){s.delete(l);}}}}),h={parent:e.parent,self:p,id:e.id||"anonymous",observers:s};return i=t.start?t.start(h):i,p}function pl(t,e){var i=new nc(t,e);return i}function oc(t){if(typeof t=="string"){var e={type:t};return e.toString=function(){return t},e}return t}function Fn(t){return ae(ae({type:Ao},t),{toJSON:function(){t.onDone,t.onError;var e=Fo(t,["onDone","onError"]);return ae(ae({},e),{type:Ao,src:oc(t.src)})}})}function pc(t,e){return new lc(t,e)}var ae,ai,_a,Eo,Io,hn,jn,Xh,yf,Yh,Jh,vf,Ao,Nh,bf,Uh,_f,xf,Zh,Gh,Co,Pf,Mn,Ef,wf,Dr,ba,Fr,Of,zf,qf,ya,Gn,ir,tc,Wh,Po,ec,Qa,ac,ji,nc,In,Do,So,da,ga,hc,lc,va,fc,cc,cl=ls(()=>{Bo();An();qn();Tn();ca();qs();ae=function(){return ae=Object.assign||function(t){for(var e,i=1,s=arguments.length;i0});if(!v)return this.next(i,s);var w=bi(Object.keys(n).map(function(u){return n[u].configuration}));return {transitions:b,exitSet:bi(E.map(function(u){return u.exitSet})),configuration:w,source:i,actions:bi(Object.keys(n).map(function(u){return n[u].actions}))}},t.prototype._transition=function(e,i,s){return Qe(e)?this.transitionLeafNode(e,i,s):Object.keys(e).length===1?this.transitionCompoundNode(e,i,s):this.transitionParallelNode(e,i,s)},t.prototype.getTransitionData=function(e,i){return this._transition(e.value,e,Ui(i))},t.prototype.next=function(e,i){var s,r,a=this,n=i.name,p=[],h=[],y;try{for(var P=ze(this.getCandidates(n)),c=P.next();!c.done;c=P.next()){var l=c.value,E=l.cond,b=l.in,v=e.context,w=b?Qe(b)&&ga(b)?e.matches(an(this.getStateNodeById(b).path,this.delimiter)):Lo(an(b,this.delimiter),Ef(this.path.slice(0,-2))(e.value)):!0,u=!1;try{u=!E||il(this.machine,E,v,i,e);}catch(_){throw new Error("Unable to evaluate guard '".concat(E.name||E.type,"' in transition for event '").concat(n,"' in state node '").concat(this.id,`': +`).concat(_.message))}if(u&&w){l.target!==void 0&&(h=l.target),p.push.apply(p,ui([],qe(l.actions),!1)),y=l;break}}}catch(_){s={error:_};}finally{try{c&&!c.done&&(r=P.return)&&r.call(P);}finally{if(s)throw s.error}}if(y){if(!h.length)return {transitions:[y],exitSet:[],configuration:e.value?[this]:[],source:e,actions:p};var f=bi(h.map(function(_){return a.getRelativeStateNodes(_,e.historyValue)})),g=!!y.internal;return {transitions:[y],exitSet:g?[]:bi(h.map(function(_){return a.getPotentiallyReenteringNodes(_)})),configuration:f,source:e,actions:p}}},t.prototype.getPotentiallyReenteringNodes=function(e){if(this.order0,E=l?e.configuration:i?i.configuration:[],b=Bn(E,this),v=l?Jf(this.machine,c):void 0,w=i?i.historyValue?i.historyValue:e.source?this.machine.historyValue(i.value):void 0:void 0,u=this.getActions(new Set(E),b,e,s,a,i,r),f=i?ae({},i.activities):{};try{for(var g=ze(u),_=g.next();!_.done;_=g.next()){var k=_.value;try{for(var z=(h=void 0,ze(k.actions)),q=z.next();!q.done;q=z.next()){var W=q.value;W.type===Eo?f[W.activity.id||W.activity.type]=W:W.type===Io&&(f[W.activity.id||W.activity.type]=!1);}}catch(Xt){h={error:Xt};}finally{try{q&&!q.done&&(y=z.return)&&y.call(z);}finally{if(h)throw h.error}}}}catch(Xt){n={error:Xt};}finally{try{_&&!_.done&&(p=g.return)&&p.call(g);}finally{if(n)throw n.error}}var ot=qe(Nn(this,i,s,a,u,r,this.machine.config.predictableActionArguments||this.machine.config.preserveActionOrder),2),mt=ot[0],gt=ot[1],ut=qe(Tf(mt,To),2),Ct=ut[0],ht=ut[1],yt=mt.filter(function(Xt){var Ht;return Xt.type===Eo&&((Ht=Xt.activity)===null||Ht===void 0?void 0:Ht.type)===Ao}),D=yt.reduce(function(Xt,Ht){return Xt[Ht.activity.id]=$f(Ht.activity,P.machine,gt,a),Xt},i?ae({},i.children):{}),V=new ir({value:v||i.value,context:gt,_event:a,_sessionid:i?i._sessionid:null,historyValue:v?w?Mf(w,v):void 0:i?i.historyValue:void 0,history:!v||e.source?i:void 0,actions:v?ht:[],activities:v?f:i?i.activities:{},events:[],configuration:E,transitions:e.transitions,children:D,done:b,tags:$h(E),machine:this}),S=s!==gt;V.changed=a.name===Uh||S;var R=V.history;R&&delete R.history;var tt=!b&&(this._transient||c.some(function(Xt){return Xt._transient}));if(!l&&(!tt||a.name===In))return V;var J=V;if(!b)for(tt&&(J=this.resolveRaisedTransition(J,{type:yf},a,r));Ct.length;){var Gt=Ct.shift();J=this.resolveRaisedTransition(J,Gt._event,a,r);}var Vt=J.changed||(R?!!J.actions.length||S||typeof R.value!=typeof J.value||!ll(J.value,R.value):void 0);return J.changed=Vt,J.history=R,J},t.prototype.getStateNode=function(e){if(ga(e))return this.machine.getStateNodeById(e);if(!this.states)throw new Error("Unable to retrieve child state '".concat(e,"' from '").concat(this.id,"'; no child states exist."));var i=this.states[e];if(!i)throw new Error("Child state '".concat(e,"' does not exist on '").concat(this.id,"'"));return i},t.prototype.getStateNodeById=function(e){var i=ga(e)?e.slice(Do.length):e;if(i===this.id)return this;var s=this.machine.idMap[i];if(!s)throw new Error("Child state node '#".concat(i,"' does not exist on machine '").concat(this.id,"'"));return s},t.prototype.getStateNodeByPath=function(e){if(typeof e=="string"&&ga(e))try{return this.getStateNodeById(e.slice(1))}catch{}for(var i=ko(e,this.delimiter).slice(),s=this;i.length;){var r=i.shift();if(!r.length)break;s=s.getStateNode(r);}return s},t.prototype.resolve=function(e){var i,s=this;if(!e)return this.initialStateValue||da;switch(this.type){case"parallel":return tn(this.initialStateValue,function(a,n){return a?s.getStateNode(n).resolve(e[n]||a):da});case"compound":if(Qe(e)){var r=this.getStateNode(e);return r.type==="parallel"||r.type==="compound"?(i={},i[e]=r.initialStateValue,i):e}return Object.keys(e).length?tn(e,function(a,n){return a?s.getStateNode(n).resolve(a):da}):this.initialStateValue||{};default:return e||da}},t.prototype.getResolvedPath=function(e){if(ga(e)){var i=this.machine.idMap[e.slice(Do.length)];if(!i)throw new Error("Unable to find state node '".concat(e,"'"));return i.path}return ko(e,this.delimiter)},Object.defineProperty(t.prototype,"initialStateValue",{get:function(){var e;if(this.__cache.initialStateValue)return this.__cache.initialStateValue;var i;if(this.type==="parallel")i=jh(this.states,function(s){return s.initialStateValue||da},function(s){return s.type!=="history"});else if(this.initial!==void 0){if(!this.states[this.initial])throw new Error("Initial state '".concat(this.initial,"' not found on '").concat(this.key,"'"));i=Gn(this.states[this.initial])?this.initial:(e={},e[this.initial]=this.states[this.initial].initialStateValue,e);}else i={};return this.__cache.initialStateValue=i,this.__cache.initialStateValue},enumerable:!1,configurable:!0}),t.prototype.getInitialState=function(e,i){this._init();var s=this.getStateNodes(e);return this.resolveTransition({configuration:s,exitSet:[],transitions:[],source:void 0,actions:[]},void 0,i!=null?i:this.machine.context,void 0)},Object.defineProperty(t.prototype,"initialState",{get:function(){var e=this.initialStateValue;if(!e)throw new Error("Cannot retrieve initial state from simple state '".concat(this.id,"'."));return this.getInitialState(e)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"target",{get:function(){var e;if(this.type==="history"){var i=this.config;Qe(i.target)?e=ga(i.target)?On(this.machine.getStateNodeById(i.target).path.slice(this.path.length-1)):i.target:e=i.target;}return e},enumerable:!1,configurable:!0}),t.prototype.getRelativeStateNodes=function(e,i,s){return s===void 0&&(s=!0),s?e.type==="history"?e.resolveHistory(i):e.initialStateNodes:[e]},Object.defineProperty(t.prototype,"initialStateNodes",{get:function(){var e=this;if(Gn(this))return [this];if(this.type==="compound"&&!this.initial)return [this];var i=Ln(this.initialStateValue);return bi(i.map(function(s){return e.getFromRelativePath(s)}))},enumerable:!1,configurable:!0}),t.prototype.getFromRelativePath=function(e){if(!e.length)return [this];var i=qe(e),s=i[0],r=i.slice(1);if(!this.states)throw new Error("Cannot retrieve subPath '".concat(s,"' from node with no states"));var a=this.getStateNode(s);if(a.type==="history")return a.resolveHistory();if(!this.states[s])throw new Error("Child state '".concat(s,"' does not exist on '").concat(this.id,"'"));return this.states[s].getFromRelativePath(r)},t.prototype.historyValue=function(e){if(Object.keys(this.states).length)return {current:e||this.initialStateValue,states:jh(this.states,function(i,s){if(!e)return i.historyValue();var r=Qe(e)?void 0:e[s];return i.historyValue(r||i.initialStateValue)},function(i){return !i.history})}},t.prototype.resolveHistory=function(e){var i=this;if(this.type!=="history")return [this];var s=this.parent;if(!e){var r=this.target;return r?bi(Ln(r).map(function(n){return s.getFromRelativePath(n)})):s.initialStateNodes}var a=Af(s.path,"states")(e).current;return Qe(a)?[s.getStateNode(a)]:bi(Ln(a).map(function(n){return i.history==="deep"?s.getFromRelativePath(n):[s.states[n[0]]]}))},Object.defineProperty(t.prototype,"stateIds",{get:function(){var e=this,i=bi(Object.keys(this.states).map(function(s){return e.states[s].stateIds}));return [this.id].concat(i)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"events",{get:function(){var e,i,s,r;if(this.__cache.events)return this.__cache.events;var a=this.states,n=new Set(this.ownEvents);if(a)try{for(var p=ze(Object.keys(a)),h=p.next();!h.done;h=p.next()){var y=h.value,P=a[y];if(P.states)try{for(var c=(s=void 0,ze(P.events)),l=c.next();!l.done;l=c.next()){var E=l.value;n.add("".concat(E));}}catch(b){s={error:b};}finally{try{l&&!l.done&&(r=c.return)&&r.call(c);}finally{if(s)throw s.error}}}}catch(b){e={error:b};}finally{try{h&&!h.done&&(i=p.return)&&i.call(p);}finally{if(e)throw e.error}}return this.__cache.events=Array.from(n)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"ownEvents",{get:function(){var e=new Set(this.transitions.filter(function(i){return !(!i.target&&!i.actions.length&&i.internal)}).map(function(i){return i.eventType}));return Array.from(e)},enumerable:!1,configurable:!0}),t.prototype.resolveTarget=function(e){var i=this;if(e!==void 0)return e.map(function(s){if(!Qe(s))return s;var r=s[0]===i.delimiter;if(r&&!i.parent)return i.getStateNodeByPath(s.slice(1));var a=r?i.key+s:s;if(i.parent)try{var n=i.parent.getStateNodeByPath(a);return n}catch(p){throw new Error("Invalid transition definition for state node '".concat(i.id,`': +`).concat(p.message))}else return i.getStateNodeByPath(a)})},t.prototype.formatTransition=function(e){var i=this,s=If(e.target),r="internal"in e?e.internal:s?s.some(function(h){return Qe(h)&&h[0]===i.delimiter}):!0,a=this.machine.options.guards,n=this.resolveTarget(s),p=ae(ae({},e),{actions:Fr($s(e.actions)),cond:el(e.cond,a),target:n,source:this,internal:r,eventType:e.event,toJSON:function(){return ae(ae({},p),{target:p.target?p.target.map(function(h){return "#".concat(h.id)}):void 0,source:"#".concat(i.id)})}});return p},t.prototype.formatTransitions=function(){var e,i,s=this,r;if(!this.config.on)r=[];else if(Array.isArray(this.config.on))r=this.config.on;else {var a=this.config.on,n=So,p=a[n],h=p===void 0?[]:p,y=Fo(a,[typeof n=="symbol"?n:n+""]);r=bi(Object.keys(y).map(function(f){var g=ma(f,y[f]);return g}).concat(ma(So,h)));}var P=this.config.always?ma("",this.config.always):[],c=this.config.onDone?ma(String(Dn(this.id)),this.config.onDone):[],l=bi(this.invoke.map(function(f){var g=[];return f.onDone&&g.push.apply(g,ui([],qe(ma(String(Rn(f.id)),f.onDone)),!1)),f.onError&&g.push.apply(g,ui([],qe(ma(String(en(f.id)),f.onError)),!1)),g})),E=this.after,b=bi(ui(ui(ui(ui([],qe(c),!1),qe(l),!1),qe(r),!1),qe(P),!1).map(function(f){return $s(f).map(function(g){return s.formatTransition(g)})}));try{for(var v=ze(E),w=v.next();!w.done;w=v.next()){var u=w.value;b.push(u);}}catch(f){e={error:f};}finally{try{w&&!w.done&&(i=v.return)&&i.call(v);}finally{if(e)throw e.error}}return b},t}();va={click:"onClick",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",complete:"onComplete",after:"onAfter",enter:"onEnter",show:"onShow"};Object.values(va);fc=Object.keys(va),cc=class{activeStateId="";_service;_domListeners=new Map;_domElement;_playerListeners=new Map;_player;_machineSchemas=new Map;_onShowPrevValue=0;constructor(t,e){this._player=e,this._machineSchemas=this._transformToXStateSchema(t),this._domElement=e.container;}start(t){this.stop();let e=this._machineSchemas.get(t);if(typeof e>"u")throw Ie(`invalid state machine id ${t}`);this._service=pl(pc(e)),this._addEventListeners(),this._service.start();}stop(){var t;this._removeEventListeners(),(t=this._service)==null||t.stop(),this._player.stop();}_removeEventListeners(){var t;this._requiresDomElement();for(let[e,i]of this._domListeners)e==="visibilityChange"&&this._player.stopPlayOnShow(),(t=this._domElement)==null||t.removeEventListener(e,i),this._domListeners.delete(e);for(let[e,i]of this._playerListeners)this._player.removeEventListener(e,i),this._playerListeners.delete(e);}_addEventListeners(){this._requiresDomElement();let t=i=>{this._service.send({type:i});},e=i=>{function s(){t(i);}return s};this._service.subscribe(i=>{var s;if(typeof i.changed>"u"||i.changed){this._removeEventListeners();for(let r of i.nextEvents)if(fc.filter(a=>a!=="complete"&&a!=="show").includes(r)){let a=e(r);this._domListeners.set(r,a),(s=this._domElement)==null||s.addEventListener(r,a,{once:!0});}else if(r==="complete"){let a=e(r);this._player.addEventListener(r,a),this._playerListeners.set(r,a);}else if(r==="show"){let a=e(r);this._player.addIntersectionObserver({callbackOnIntersect:n=>{n>0&&(n!==100&&this._onShowPrevValue!==n&&a(),this._onShowPrevValue=n);},threshold:[]}),this._domListeners.set("visibilityChange",a);}}});}subscribe(t){throw Ie(t.toString())}_transformToXStateSchema(t){var e,i,s;let r=new Map;for(let a of t){let n={},p={};if(p.id=a.descriptor.id,typeof a.descriptor.initial<"u"&&(p.initial=a.descriptor.initial),typeof a<"u"){let h=a.states;for(let y in h)if(typeof h[y]<"u"&&h[y]){let P=h[y],c=P.playbackSettings,l=Object.keys(P).filter(v=>v.startsWith("on")),E={},b={};for(let v of l)if(typeof P[v]<"u"){let w=P[v];if(v===va.after){let u=w;b[u.ms]={target:(e=w==null?void 0:w.state)!=null?e:""};}else v===va.enter?E[En(va,v)]={target:(i=w==null?void 0:w.state)!=null?i:""}:E[En(va,v)]={target:(s=w==null?void 0:w.state)!=null?s:""};}n[y]={entry:()=>{!this._player.getAnimationInstance()||P.animationId&&P.animationId!==this._player.currentAnimationId?this._player.play(P.animationId,()=>({...cs,...c})).then(()=>{this._updatePlaybackSettings(c);}).catch(v=>{er(`State machine error: ${v.message}`);}):this._updatePlaybackSettings(c);},exit:()=>{typeof c.segments<"u"&&this._player.resetSegments(!1),typeof c.playOnScroll<"u"&&this._player.stopPlayOnScroll();},on:E,after:b,meta:c};}}p.states=n,r.set(p.id,p);}return r}_handlePlaySegments(t){if(typeof t.segments=="string")this._player.goToAndPlay(t.segments,!0);else {let[e,i]=t.segments,s=e;e!==0&&e===i&&(s=e-1),e===0&&e===i?this._player.goToAndPlay(e,!0):this._player.playSegments([s,i],!0);}}_handlePlayOnScroll(t){let e=t.playOnScroll;if(t.segments&&typeof t.segments!="string"){let i=t.segments;this._player.playOnScroll({threshold:e,segments:i});}else this._player.playOnScroll({threshold:e});}_updatePlaybackSettings(t){if(!this._player.getAnimationInstance())throw new Error("Unable to update playbackSettings. Animations is not rendered yet.");typeof t.autoplay<"u"&&(this._player.setAutoplay(t.autoplay),t.autoplay?this._player.play():this._player.pause()),typeof t.direction<"u"&&this._player.setDirection(t.direction),typeof t.intermission<"u"&&this._player.setIntermission(t.intermission),typeof t.loop<"u"&&this._player.setLoop(t.loop),typeof t.playMode<"u"&&this._player.setMode(t.playMode),typeof t.speed<"u"&&this._player.setSpeed(t.speed),typeof t.defaultTheme<"u"&&this._player.setDefaultTheme(t.defaultTheme),typeof t.playOnScroll<"u"&&this._handlePlayOnScroll(t),t.segments&&this._handlePlaySegments(t),t.autoplay||this._player.pause();}_requiresDomElement(){if(!this._domElement)throw Ie("Requires a DOM element to attach events.")}};});async function ul(t,e){let[{DotLottieStateMachineManager:i}]=await Promise.all([Promise.resolve().then(()=>(cl(),fl))]);if(!t.length)throw Ie("No state machines available inside this .lottie!");return new i(t,e)}var qn=ls(()=>{ca();});var ml={};fr(ml,{DotLottieAudio:()=>dc});var uc,mc,dc,dl=ls(()=>{qs();uc=is(t=>{((function(){var e=function(){this.init();};e.prototype={init:function(){var c=this||i;return c._counter=1e3,c._html5AudioPool=[],c.html5PoolSize=10,c._codecs={},c._howls=[],c._muted=!1,c._volume=1,c._canPlayEvent="canplaythrough",c._navigator=typeof window<"u"&&window.navigator?window.navigator:null,c.masterGain=null,c.noAudio=!1,c.usingWebAudio=!0,c.autoSuspend=!0,c.ctx=null,c.autoUnlock=!0,c._setup(),c},volume:function(c){var l=this||i;if(c=parseFloat(c),l.ctx||P(),typeof c<"u"&&c>=0&&c<=1){if(l._volume=c,l._muted)return l;l.usingWebAudio&&l.masterGain.gain.setValueAtTime(c,i.ctx.currentTime);for(var E=0;E=0;l--)c._howls[l].unload();return c.usingWebAudio&&c.ctx&&typeof c.ctx.close<"u"&&(c.ctx.close(),c.ctx=null,P()),c},codecs:function(c){return (this||i)._codecs[c.replace(/^x-/,"")]},_setup:function(){var c=this||i;if(c.state=c.ctx&&c.ctx.state||"suspended",c._autoSuspend(),!c.usingWebAudio)if(typeof Audio<"u")try{var l=new Audio;typeof l.oncanplaythrough>"u"&&(c._canPlayEvent="canplay");}catch{c.noAudio=!0;}else c.noAudio=!0;try{var l=new Audio;l.muted&&(c.noAudio=!0);}catch{}return c.noAudio||c._setupCodecs(),c},_setupCodecs:function(){var c=this||i,l=null;try{l=typeof Audio<"u"?new Audio:null;}catch{return c}if(!l||typeof l.canPlayType!="function")return c;var E=l.canPlayType("audio/mpeg;").replace(/^no$/,""),b=c._navigator?c._navigator.userAgent:"",v=b.match(/OPR\/([0-6].)/g),w=v&&parseInt(v[0].split("/")[1],10)<33,u=b.indexOf("Safari")!==-1&&b.indexOf("Chrome")===-1,f=b.match(/Version\/(.*?) /),g=u&&f&&parseInt(f[1],10)<15;return c._codecs={mp3:!!(!w&&(E||l.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!E,opus:!!l.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!l.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!l.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(l.canPlayType('audio/wav; codecs="1"')||l.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!l.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!l.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(l.canPlayType("audio/x-m4a;")||l.canPlayType("audio/m4a;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(l.canPlayType("audio/x-m4b;")||l.canPlayType("audio/m4b;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(l.canPlayType("audio/x-mp4;")||l.canPlayType("audio/mp4;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!(!g&&l.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!!(!g&&l.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!l.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(l.canPlayType("audio/x-flac;")||l.canPlayType("audio/flac;")).replace(/^no$/,"")},c},_unlockAudio:function(){var c=this||i;if(!(c._audioUnlocked||!c.ctx)){c._audioUnlocked=!1,c.autoUnlock=!1,!c._mobileUnloaded&&c.ctx.sampleRate!==44100&&(c._mobileUnloaded=!0,c.unload()),c._scratchBuffer=c.ctx.createBuffer(1,1,22050);var l=function(E){for(;c._html5AudioPool.length"u"?g.noteOn(0):g.start(0),typeof c.ctx.resume=="function"&&c.ctx.resume(),g.onended=function(){g.disconnect(0),c._audioUnlocked=!0,document.removeEventListener("touchstart",l,!0),document.removeEventListener("touchend",l,!0),document.removeEventListener("click",l,!0),document.removeEventListener("keydown",l,!0);for(var _=0;_"u"||!i.usingWebAudio)){for(var l=0;l"u"||!i.usingWebAudio))return c.state==="running"&&c.ctx.state!=="interrupted"&&c._suspendTimer?(clearTimeout(c._suspendTimer),c._suspendTimer=null):c.state==="suspended"||c.state==="running"&&c.ctx.state==="interrupted"?(c.ctx.resume().then(function(){c.state="running";for(var l=0;l"u"&&(c="__default",!E._playLock)){for(var v=0,w=0;w0?u._seek:E._sprite[c][0]/1e3),_=Math.max(0,(E._sprite[c][0]+E._sprite[c][1])/1e3-g),k=_*1e3/Math.abs(u._rate),z=E._sprite[c][0]/1e3,q=(E._sprite[c][0]+E._sprite[c][1])/1e3;u._sprite=c,u._ended=!1;var W=function(){u._paused=!1,u._seek=g,u._start=z,u._stop=q,u._loop=!!(u._loop||E._sprite[c][2]);};if(g>=q){E._ended(u);return}var ot=u._node;if(E._webAudio){var mt=function(){E._playLock=!1,W(),E._refreshBuffer(u);var ht=u._muted||E._muted?0:u._volume;ot.gain.setValueAtTime(ht,i.ctx.currentTime),u._playStart=i.ctx.currentTime,typeof ot.bufferSource.start>"u"?u._loop?ot.bufferSource.noteGrainOn(0,g,86400):ot.bufferSource.noteGrainOn(0,g,_):u._loop?ot.bufferSource.start(0,g,86400):ot.bufferSource.start(0,g,_),k!==1/0&&(E._endTimers[u._id]=setTimeout(E._ended.bind(E,u),k)),l||setTimeout(function(){E._emit("play",u._id),E._loadQueue();},0);};i.state==="running"&&i.ctx.state!=="interrupted"?mt():(E._playLock=!0,E.once("resume",mt),E._clearTimer(u._id));}else {var gt=function(){ot.currentTime=g,ot.muted=u._muted||E._muted||i._muted||ot.muted,ot.volume=u._volume*i.volume(),ot.playbackRate=u._rate;try{var ht=ot.play();if(ht&&typeof Promise<"u"&&(ht instanceof Promise||typeof ht.then=="function")?(E._playLock=!0,W(),ht.then(function(){E._playLock=!1,ot._unlocked=!0,l?E._loadQueue():E._emit("play",u._id);}).catch(function(){E._playLock=!1,E._emit("playerror",u._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),u._ended=!0,u._paused=!0;})):l||(E._playLock=!1,W(),E._emit("play",u._id)),ot.playbackRate=u._rate,ot.paused){E._emit("playerror",u._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");return}c!=="__default"||u._loop?E._endTimers[u._id]=setTimeout(E._ended.bind(E,u),k):(E._endTimers[u._id]=function(){E._ended(u),ot.removeEventListener("ended",E._endTimers[u._id],!1);},ot.addEventListener("ended",E._endTimers[u._id],!1));}catch(yt){E._emit("playerror",u._id,yt);}};ot.src==="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"&&(ot.src=E._src,ot.load());var ut=window&&window.ejecta||!ot.readyState&&i._navigator.isCocoonJS;if(ot.readyState>=3||ut)gt();else {E._playLock=!0,E._state="loading";var Ct=function(){E._state="loaded",gt(),ot.removeEventListener(i._canPlayEvent,Ct,!1);};ot.addEventListener(i._canPlayEvent,Ct,!1),E._clearTimer(u._id);}}return u._id},pause:function(c){var l=this;if(l._state!=="loaded"||l._playLock)return l._queue.push({event:"pause",action:function(){l.pause(c);}}),l;for(var E=l._getSoundIds(c),b=0;b"u"?v._node.bufferSource.noteOff(0):v._node.bufferSource.stop(0),l._cleanBuffer(v._node);}else (!isNaN(v._node.duration)||v._node.duration===1/0)&&v._node.pause();arguments[1]||l._emit("pause",v?v._id:null);}return l},stop:function(c,l){var E=this;if(E._state!=="loaded"||E._playLock)return E._queue.push({event:"stop",action:function(){E.stop(c);}}),E;for(var b=E._getSoundIds(c),v=0;v"u"?w._node.bufferSource.noteOff(0):w._node.bufferSource.stop(0),E._cleanBuffer(w._node)):(!isNaN(w._node.duration)||w._node.duration===1/0)&&(w._node.currentTime=w._start||0,w._node.pause(),w._node.duration===1/0&&E._clearSound(w._node))),l||E._emit("stop",w._id));}return E},mute:function(c,l){var E=this;if(E._state!=="loaded"||E._playLock)return E._queue.push({event:"mute",action:function(){E.mute(c,l);}}),E;if(typeof l>"u")if(typeof c=="boolean")E._muted=c;else return E._muted;for(var b=E._getSoundIds(l),v=0;v"u"){var v=c._getSoundIds(),w=v.indexOf(l[0]);w>=0?b=parseInt(l[0],10):E=parseFloat(l[0]);}else l.length>=2&&(E=parseFloat(l[0]),b=parseInt(l[1],10));var u;if(typeof E<"u"&&E>=0&&E<=1){if(c._state!=="loaded"||c._playLock)return c._queue.push({event:"volume",action:function(){c.volume.apply(c,l);}}),c;typeof b>"u"&&(c._volume=E),b=c._getSoundIds(b);for(var f=0;f"u");}}return v},_startFadeInterval:function(c,l,E,b,v,w){var u=this,f=l,g=E-l,_=Math.abs(g/.01),k=Math.max(4,_>0?b/_:b),z=Date.now();c._fadeTo=E,c._interval=setInterval(function(){var q=(Date.now()-z)/b;z=Date.now(),f+=g*q,f=Math.round(f*100)/100,g<0?f=Math.max(E,f):f=Math.min(E,f),u._webAudio?c._volume=f:u.volume(f,c._id,!0),w&&(u._volume=f),(El&&f>=E)&&(clearInterval(c._interval),c._interval=null,c._fadeTo=null,u.volume(E,c._id),u._emit("fade",c._id));},k);},_stopFade:function(c){var l=this,E=l._soundById(c);return E&&E._interval&&(l._webAudio&&E._node.gain.cancelScheduledValues(i.ctx.currentTime),clearInterval(E._interval),E._interval=null,l.volume(E._fadeTo,c),E._fadeTo=null,l._emit("fade",c)),l},loop:function(){var c=this,l=arguments,E,b,v;if(l.length===0)return c._loop;if(l.length===1)if(typeof l[0]=="boolean")E=l[0],c._loop=E;else return v=c._soundById(parseInt(l[0],10)),v?v._loop:!1;else l.length===2&&(E=l[0],b=parseInt(l[1],10));for(var w=c._getSoundIds(b),u=0;u=0?b=parseInt(l[0],10):E=parseFloat(l[0]);}else l.length===2&&(E=parseFloat(l[0]),b=parseInt(l[1],10));var u;if(typeof E=="number"){if(c._state!=="loaded"||c._playLock)return c._queue.push({event:"rate",action:function(){c.rate.apply(c,l);}}),c;typeof b>"u"&&(c._rate=E),b=c._getSoundIds(b);for(var f=0;f=0?b=parseInt(l[0],10):c._sounds.length&&(b=c._sounds[0]._id,E=parseFloat(l[0]));}else l.length===2&&(E=parseFloat(l[0]),b=parseInt(l[1],10));if(typeof b>"u")return 0;if(typeof E=="number"&&(c._state!=="loaded"||c._playLock))return c._queue.push({event:"seek",action:function(){c.seek.apply(c,l);}}),c;var u=c._soundById(b);if(u)if(typeof E=="number"&&E>=0){var f=c.playing(b);f&&c.pause(b,!0),u._seek=E,u._ended=!1,c._clearTimer(b),!c._webAudio&&u._node&&!isNaN(u._node.duration)&&(u._node.currentTime=E);var g=function(){f&&c.play(b,!0),c._emit("seek",b);};if(f&&!c._webAudio){var _=function(){c._playLock?setTimeout(_,0):g();};setTimeout(_,0);}else g();}else if(c._webAudio){var k=c.playing(b)?i.ctx.currentTime-u._playStart:0,z=u._rateSeek?u._rateSeek-u._seek:0;return u._seek+(z+k*Math.abs(u._rate))}else return u._node.currentTime;return c},playing:function(c){var l=this;if(typeof c=="number"){var E=l._soundById(c);return E?!E._paused:!1}for(var b=0;b=0&&i._howls.splice(b,1);var v=!0;for(E=0;E=0){v=!1;break}return a&&v&&delete a[c._src],i.noAudio=!1,c._state="unloaded",c._sounds=[],c=null,null},on:function(c,l,E,b){var v=this,w=v["_on"+c];return typeof l=="function"&&w.push(b?{id:E,fn:l,once:b}:{id:E,fn:l}),v},off:function(c,l,E){var b=this,v=b["_on"+c],w=0;if(typeof l=="number"&&(E=l,l=null),l||E)for(w=0;w=0;w--)(!v[w].id||v[w].id===l||c==="load")&&(setTimeout(function(u){u.call(this,l,E);}.bind(b,v[w].fn),0),v[w].once&&b.off(c,v[w].fn,v[w].id));return b._loadQueue(c),b},_loadQueue:function(c){var l=this;if(l._queue.length>0){var E=l._queue[0];E.event===c&&(l._queue.shift(),l._loadQueue()),c||E.action();}return l},_ended:function(c){var l=this,E=c._sprite;if(!l._webAudio&&c._node&&!c._node.paused&&!c._node.ended&&c._node.currentTime=0;b--){if(E<=l)return;c._sounds[b]._ended&&(c._webAudio&&c._sounds[b]._node&&c._sounds[b]._node.disconnect(0),c._sounds.splice(b,1),E--);}}},_getSoundIds:function(c){var l=this;if(typeof c>"u"){for(var E=[],b=0;b=0;if(i._scratchBuffer&&c.bufferSource&&(c.bufferSource.onended=null,c.bufferSource.disconnect(0),E))try{c.bufferSource.buffer=i._scratchBuffer;}catch{}return c.bufferSource=null,l},_clearSound:function(c){var l=/MSIE |Trident\//.test(i._navigator&&i._navigator.userAgent);l||(c.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA");}};var r=function(c){this._parent=c,this.init();};r.prototype={init:function(){var c=this,l=c._parent;return c._muted=l._muted,c._loop=l._loop,c._volume=l._volume,c._rate=l._rate,c._seek=0,c._paused=!0,c._ended=!0,c._sprite="__default",c._id=++i._counter,l._sounds.push(c),c.create(),c},create:function(){var c=this,l=c._parent,E=i._muted||c._muted||c._parent._muted?0:c._volume;return l._webAudio?(c._node=typeof i.ctx.createGain>"u"?i.ctx.createGainNode():i.ctx.createGain(),c._node.gain.setValueAtTime(E,i.ctx.currentTime),c._node.paused=!0,c._node.connect(i.masterGain)):i.noAudio||(c._node=i._obtainHtml5Audio(),c._errorFn=c._errorListener.bind(c),c._node.addEventListener("error",c._errorFn,!1),c._loadFn=c._loadListener.bind(c),c._node.addEventListener(i._canPlayEvent,c._loadFn,!1),c._endFn=c._endListener.bind(c),c._node.addEventListener("ended",c._endFn,!1),c._node.src=l._src,c._node.preload=l._preload===!0?"auto":l._preload,c._node.volume=E*i.volume(),c._node.load()),c},reset:function(){var c=this,l=c._parent;return c._muted=l._muted,c._loop=l._loop,c._volume=l._volume,c._rate=l._rate,c._seek=0,c._rateSeek=0,c._paused=!0,c._ended=!0,c._sprite="__default",c._id=++i._counter,c},_errorListener:function(){var c=this;c._parent._emit("loaderror",c._id,c._node.error?c._node.error.code:0),c._node.removeEventListener("error",c._errorFn,!1);},_loadListener:function(){var c=this,l=c._parent;l._duration=Math.ceil(c._node.duration*10)/10,Object.keys(l._sprite).length===0&&(l._sprite={__default:[0,l._duration*1e3]}),l._state!=="loaded"&&(l._state="loaded",l._emit("load"),l._loadQueue()),c._node.removeEventListener(i._canPlayEvent,c._loadFn,!1);},_endListener:function(){var c=this,l=c._parent;l._duration===1/0&&(l._duration=Math.ceil(c._node.duration*10)/10,l._sprite.__default[1]===1/0&&(l._sprite.__default[1]=l._duration*1e3),l._ended(c)),c._node.removeEventListener("ended",c._endFn,!1);}};var a={},n=function(c){var l=c._src;if(a[l]){c._duration=a[l].duration,y(c);return}if(/^data:[^;]+;base64,/.test(l)){for(var E=atob(l.split(",")[1]),b=new Uint8Array(E.length),v=0;v0?(a[l._src]=v,y(l,v)):E();};typeof Promise<"u"&&i.ctx.decodeAudioData.length===1?i.ctx.decodeAudioData(c).then(b).catch(E):i.ctx.decodeAudioData(c,b,E);},y=function(c,l){l&&!c._duration&&(c._duration=l.duration),Object.keys(c._sprite).length===0&&(c._sprite={__default:[0,c._duration*1e3]}),c._state!=="loaded"&&(c._state="loaded",c._emit("load"),c._loadQueue());},P=function(){if(i.usingWebAudio){try{typeof AudioContext<"u"?i.ctx=new AudioContext:typeof webkitAudioContext<"u"?i.ctx=new webkitAudioContext:i.usingWebAudio=!1;}catch{i.usingWebAudio=!1;}i.ctx||(i.usingWebAudio=!1);var c=/iP(hone|od|ad)/.test(i._navigator&&i._navigator.platform),l=i._navigator&&i._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),E=l?parseInt(l[1],10):null;if(c&&E&&E<9){var b=/safari/.test(i._navigator&&i._navigator.userAgent.toLowerCase());i._navigator&&!b&&(i.usingWebAudio=!1);}i.usingWebAudio&&(i.masterGain=typeof i.ctx.createGain>"u"?i.ctx.createGainNode():i.ctx.createGain(),i.masterGain.gain.setValueAtTime(i._muted?0:i._volume,i.ctx.currentTime),i.masterGain.connect(i.ctx.destination)),i._setup();}};typeof define=="function"&&define.amd&&define([],function(){return {Howler:i,Howl:s}}),typeof t<"u"&&(t.Howler=i,t.Howl=s),typeof global<"u"?(global.HowlerGlobal=e,global.Howler=i,global.Howl=s,global.Sound=r):typeof window<"u"&&(window.HowlerGlobal=e,window.Howler=i,window.Howl=s,window.Sound=r);}))(),function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(i){var s=this;if(!s.ctx||!s.ctx.listener)return s;for(var r=s._howls.length-1;r>=0;r--)s._howls[r].stereo(i);return s},HowlerGlobal.prototype.pos=function(i,s,r){var a=this;if(!a.ctx||!a.ctx.listener)return a;if(s=typeof s!="number"?a._pos[1]:s,r=typeof r!="number"?a._pos[2]:r,typeof i=="number")a._pos=[i,s,r],typeof a.ctx.listener.positionX<"u"?(a.ctx.listener.positionX.setTargetAtTime(a._pos[0],Howler.ctx.currentTime,.1),a.ctx.listener.positionY.setTargetAtTime(a._pos[1],Howler.ctx.currentTime,.1),a.ctx.listener.positionZ.setTargetAtTime(a._pos[2],Howler.ctx.currentTime,.1)):a.ctx.listener.setPosition(a._pos[0],a._pos[1],a._pos[2]);else return a._pos;return a},HowlerGlobal.prototype.orientation=function(i,s,r,a,n,p){var h=this;if(!h.ctx||!h.ctx.listener)return h;var y=h._orientation;if(s=typeof s!="number"?y[1]:s,r=typeof r!="number"?y[2]:r,a=typeof a!="number"?y[3]:a,n=typeof n!="number"?y[4]:n,p=typeof p!="number"?y[5]:p,typeof i=="number")h._orientation=[i,s,r,a,n,p],typeof h.ctx.listener.forwardX<"u"?(h.ctx.listener.forwardX.setTargetAtTime(i,Howler.ctx.currentTime,.1),h.ctx.listener.forwardY.setTargetAtTime(s,Howler.ctx.currentTime,.1),h.ctx.listener.forwardZ.setTargetAtTime(r,Howler.ctx.currentTime,.1),h.ctx.listener.upX.setTargetAtTime(a,Howler.ctx.currentTime,.1),h.ctx.listener.upY.setTargetAtTime(n,Howler.ctx.currentTime,.1),h.ctx.listener.upZ.setTargetAtTime(p,Howler.ctx.currentTime,.1)):h.ctx.listener.setOrientation(i,s,r,a,n,p);else return y;return h},Howl.prototype.init=function(i){return function(s){var r=this;return r._orientation=s.orientation||[1,0,0],r._stereo=s.stereo||null,r._pos=s.pos||null,r._pannerAttr={coneInnerAngle:typeof s.coneInnerAngle<"u"?s.coneInnerAngle:360,coneOuterAngle:typeof s.coneOuterAngle<"u"?s.coneOuterAngle:360,coneOuterGain:typeof s.coneOuterGain<"u"?s.coneOuterGain:0,distanceModel:typeof s.distanceModel<"u"?s.distanceModel:"inverse",maxDistance:typeof s.maxDistance<"u"?s.maxDistance:1e4,panningModel:typeof s.panningModel<"u"?s.panningModel:"HRTF",refDistance:typeof s.refDistance<"u"?s.refDistance:1,rolloffFactor:typeof s.rolloffFactor<"u"?s.rolloffFactor:1},r._onstereo=s.onstereo?[{fn:s.onstereo}]:[],r._onpos=s.onpos?[{fn:s.onpos}]:[],r._onorientation=s.onorientation?[{fn:s.onorientation}]:[],i.call(this,s)}}(Howl.prototype.init),Howl.prototype.stereo=function(i,s){var r=this;if(!r._webAudio)return r;if(r._state!=="loaded")return r._queue.push({event:"stereo",action:function(){r.stereo(i,s);}}),r;var a=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof s>"u")if(typeof i=="number")r._stereo=i,r._pos=[i,0,0];else return r._stereo;for(var n=r._getSoundIds(s),p=0;p"u")if(typeof i=="number")n._pos=[i,s,r];else return n._pos;for(var p=n._getSoundIds(a),h=0;h"u")if(typeof i=="number")n._orientation=[i,s,r];else return n._orientation;for(var p=n._getSoundIds(a),h=0;h"u"&&(r.pannerAttr||(r.pannerAttr={coneInnerAngle:r.coneInnerAngle,coneOuterAngle:r.coneOuterAngle,coneOuterGain:r.coneOuterGain,distanceModel:r.distanceModel,maxDistance:r.maxDistance,refDistance:r.refDistance,rolloffFactor:r.rolloffFactor,panningModel:r.panningModel}),i._pannerAttr={coneInnerAngle:typeof r.pannerAttr.coneInnerAngle<"u"?r.pannerAttr.coneInnerAngle:i._coneInnerAngle,coneOuterAngle:typeof r.pannerAttr.coneOuterAngle<"u"?r.pannerAttr.coneOuterAngle:i._coneOuterAngle,coneOuterGain:typeof r.pannerAttr.coneOuterGain<"u"?r.pannerAttr.coneOuterGain:i._coneOuterGain,distanceModel:typeof r.pannerAttr.distanceModel<"u"?r.pannerAttr.distanceModel:i._distanceModel,maxDistance:typeof r.pannerAttr.maxDistance<"u"?r.pannerAttr.maxDistance:i._maxDistance,refDistance:typeof r.pannerAttr.refDistance<"u"?r.pannerAttr.refDistance:i._refDistance,rolloffFactor:typeof r.pannerAttr.rolloffFactor<"u"?r.pannerAttr.rolloffFactor:i._rolloffFactor,panningModel:typeof r.pannerAttr.panningModel<"u"?r.pannerAttr.panningModel:i._panningModel});else return n=i._soundById(parseInt(s[0],10)),n?n._pannerAttr:i._pannerAttr;else s.length===2&&(r=s[0],a=parseInt(s[1],10));for(var p=i._getSoundIds(a),h=0;hyc});var gc,yc,yl=ls(()=>{qs();gc=is((exports,module)=>{typeof navigator<"u"&&function(t,e){typeof define=="function"&&define.amd?define(function(){return e(t)}):typeof module=="object"&&module.exports?module.exports=e(t):(t.lottie=e(t),t.bodymovin=t.lottie);}(self||{},function(window){function workerContent(){function extendPrototype(t,e){var i,s=t.length,r;for(i=0;i1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}var rgbToHex=function(){var t=[],e,i;for(e=0;e<256;e+=1)i=e.toString(16),t[e]=i.length===1?"0"+i:i;return function(s,r,a){return s<0&&(s=0),r<0&&(r=0),a<0&&(a=0),"#"+t[s]+t[r]+t[a]}}(),setSubframeEnabled=function(t){subframeEnabled=!!t;},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(t){expressionsPlugin=t;},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(t){expressionsInterfaces=t;},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(t){defaultCurveSegments=t;},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(t){idPrefix$1=t;};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(e){return typeof e}:_typeof$5=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$5(t)}var dataManager=function(){var t=1,e=[],i,s,r={onmessage:function(){},postMessage:function(l){i({data:l});}},a={postMessage:function(l){r.onmessage({data:l});}};function n(l){if(window.Worker&&window.Blob&&getWebWorker()){var E=new Blob(["var _workerSelf = self; self.onmessage = ",l.toString()],{type:"text/javascript"}),b=URL.createObjectURL(E);return new Worker(b)}return i=l,r}function p(){s||(s=n(function(l){function E(){function v(ht,yt){var D,V,S=ht.length,R,tt,J,Gt;for(V=0;V=0;yt-=1)if(ht[yt].ty==="sh")if(ht[yt].ks.k.i)_(ht[yt].ks.k);else for(S=ht[yt].ks.k.length,V=0;VD[0]?!0:D[0]>ht[0]?!1:ht[1]>D[1]?!0:D[1]>ht[1]?!1:ht[2]>D[2]?!0:D[2]>ht[2]?!1:null}var z=function(){var ht=[4,4,14];function yt(V){var S=V.t.d;V.t.d={k:[{s:S,t:0}]};}function D(V){var S,R=V.length;for(S=0;S=0;S-=1)if(V[S].ty==="sh")if(V[S].ks.k.i)V[S].ks.k.c=V[S].closed;else for(J=V[S].ks.k.length,tt=0;tt500)&&(this._imageLoaded(),clearInterval(g)),f+=1;}.bind(this),50);}function a(u){var f=s(u,this.assetsPath,this.path),g=createNS("image");isSafari?this.testImageLoaded(g):g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.setAttributeNS("http://www.w3.org/1999/xlink","href",f),this._elementHelper.append?this._elementHelper.append(g):this._elementHelper.appendChild(g);var _={img:g,assetData:u};return _}function n(u){var f=s(u,this.assetsPath,this.path),g=createTag("img");g.crossOrigin="anonymous",g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.src=f;var _={img:g,assetData:u};return _}function p(u){var f={assetData:u},g=s(u,this.assetsPath,this.path);return dataManager.loadData(g,function(_){f.img=_,this._footageLoaded();}.bind(this),function(){f.img={},this._footageLoaded();}.bind(this)),f}function h(u,f){this.imagesLoadedCb=f;var g,_=u.length;for(g=0;g<_;g+=1)u[g].layers||(!u[g].t||u[g].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(u[g]))):u[g].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(u[g]))));}function y(u){this.path=u||"";}function P(u){this.assetsPath=u||"";}function c(u){for(var f=0,g=this.images.length;fthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e=this.animationData.layers,i,s=e.length,r=t.layers,a,n=r.length;for(a=0;athis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(t){this.triggerRenderFrameError(t);}},AnimationItem.prototype.play=function(t){t&&this.name!==t||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},AnimationItem.prototype.pause=function(t){t&&this.name!==t||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(this.isPaused===!0?this.play():this.pause());},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},AnimationItem.prototype.getMarkerData=function(t){for(var e,i=0;i=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):e<0?this.checkSegments(e%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(i=!0,e=0)):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"));}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart");},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(i=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,i!==-1&&this.goToAndStop(i,!0);},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),_typeof$4(t[0])==="object"){var i,s=t.length;for(i=0;i=0;V-=1)e[V].animation.destroy(D);}function W(D,V,S){var R=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),tt,J=R.length;for(tt=0;tt0?_=W:g=W;while(Math.abs(q)>a&&++ot=r?w(f,mt,g,_):gt===0?mt:v(f,z,z+h,g,_)}},t}(),pooling=function(){function t(e){return e.concat(createSizedArray(e.length))}return {double:t}}(),poolFactory=function(){return function(t,e,i){var s=0,r=t,a=createSizedArray(r),n={newElement:p,release:h};function p(){var y;return s?(s-=1,y=a[s]):y=e(),y}function h(y){s===r&&(a=pooling.double(a),r*=2),i&&i(y),a[s]=y,s+=1;}return n}}(),bezierLengthPool=function(){function t(){return {addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,t)}(),segmentsLengthPool=function(){function t(){return {lengths:[],totalLength:0}}function e(i){var s,r=i.lengths.length;for(s=0;s-.001&&f<.001}function i(l,E,b,v,w,u,f,g,_){if(b===0&&u===0&&_===0)return e(l,E,v,w,f,g);var k=t.sqrt(t.pow(v-l,2)+t.pow(w-E,2)+t.pow(u-b,2)),z=t.sqrt(t.pow(f-l,2)+t.pow(g-E,2)+t.pow(_-b,2)),q=t.sqrt(t.pow(f-v,2)+t.pow(g-w,2)+t.pow(_-u,2)),W;return k>z?k>q?W=k-z-q:W=q-z-k:q>z?W=q-z-k:W=z-k-q,W>-1e-4&&W<1e-4}var s=function(){return function(l,E,b,v){var w=getDefaultCurveSegments(),u,f,g,_,k,z=0,q,W=[],ot=[],mt=bezierLengthPool.newElement();for(g=b.length,u=0;uf?-1:1,k=!0;k;)if(v[u]<=f&&v[u+1]>f?(g=(f-v[u])/(v[u+1]-v[u]),k=!1):u+=_,u<0||u>=w-1){if(u===w-1)return b[u];k=!1;}return b[u]+(b[u+1]-b[u])*g}function y(l,E,b,v,w,u){var f=h(w,u),g=1-f,_=t.round((g*g*g*l[0]+(f*g*g+g*f*g+g*g*f)*b[0]+(f*f*g+g*f*f+f*g*f)*v[0]+f*f*f*E[0])*1e3)/1e3,k=t.round((g*g*g*l[1]+(f*g*g+g*f*g+g*g*f)*b[1]+(f*f*g+g*f*f+f*g*f)*v[1]+f*f*f*E[1])*1e3)/1e3;return [_,k]}var P=createTypedArray("float32",8);function c(l,E,b,v,w,u,f){w<0?w=0:w>1&&(w=1);var g=h(w,f);u=u>1?1:u;var _=h(u,f),k,z=l.length,q=1-g,W=1-_,ot=q*q*q,mt=g*q*q*3,gt=g*g*q*3,ut=g*g*g,Ct=q*q*W,ht=g*q*W+q*g*W+q*q*_,yt=g*g*W+q*g*_+g*q*_,D=g*g*_,V=q*W*W,S=g*W*W+q*_*W+q*W*_,R=g*_*W+q*_*_+g*W*_,tt=g*_*_,J=W*W*W,Gt=_*W*W+W*_*W+W*W*_,Vt=_*_*W+W*_*_+_*W*_,Xt=_*_*_;for(k=0;k=y.t-i){h.h&&(h=y),r=0;break}if(y.t-i>t){r=a;break}a=u||t=u?_.points.length-1:0;for(l=_.points[k].point.length,c=0;c=W&&z=u)s[0]=g[0],s[1]=g[1],s[2]=g[2];else if(t<=f)s[0]=h.s[0],s[1]=h.s[1],s[2]=h.s[2];else {var ht=createQuaternion(h.s),yt=createQuaternion(g),D=(t-f)/(u-f);quaternionToEuler(s,slerp(ht,yt,D));}else for(a=0;a=u?E=1:t1e-6?(l=Math.acos(E),b=Math.sin(l),v=Math.sin((1-i)*l)/b,w=Math.sin(i*l)/b):(v=1-i,w=i),s[0]=v*r+w*h,s[1]=v*a+w*y,s[2]=v*n+w*P,s[3]=v*p+w*c,s}function quaternionToEuler(t,e){var i=e[0],s=e[1],r=e[2],a=e[3],n=Math.atan2(2*s*a-2*i*r,1-2*s*s-2*r*r),p=Math.asin(2*i*s+2*r*a),h=Math.atan2(2*i*a-2*s*r,1-2*i*i-2*r*r);t[0]=n/degToRads,t[1]=p/degToRads,t[2]=h/degToRads;}function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,s=t[2]*degToRads,r=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(s/2),p=Math.sin(e/2),h=Math.sin(i/2),y=Math.sin(s/2),P=r*a*n-p*h*y,c=p*h*n+r*a*y,l=p*a*n+r*h*y,E=r*h*n-p*a*y;return [c,l,E,P]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var s=this.interpolateValue(t,this._caching);this.pv=s;}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if(this.propType==="unidimensional")e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,s=this.v.length;i1e-5&&(this.v[i]=e,this._mdf=!0),i+=1;}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t=this._maxLength&&this.doubleArrayLength(),i){case"v":a=this.v;break;case"i":a=this.i;break;case"o":a=this.o;break;default:a=[];break}(!a[s]||a[s]&&!r)&&(a[s]=pointPool.newElement()),a[s][0]=t,a[s][1]=e;},ShapePath.prototype.setTripleAt=function(t,e,i,s,r,a,n,p){this.setXYAt(t,e,"v",n,p),this.setXYAt(i,s,"o",n,p),this.setXYAt(r,a,"i",n,p);},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,s=this.i,r=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],s[0][0],s[0][1],i[0][0],i[0][1],0,!1),r=1);var a=this._length-1,n=this._length,p;for(p=r;p=ht[ht.length-1].t-this.offsetTime)k=ht[ht.length-1].s?ht[ht.length-1].s[0]:ht[ht.length-2].e[0],q=!0;else {for(var yt=_,D=ht.length-1,V=!0,S,R,tt;V&&(S=ht[yt],R=ht[yt+1],!(R.t-this.offsetTime>u));)yt=R.t-this.offsetTime)ut=1;else if(ug&&u>g)||(this._caching.lastIndex=_0||S>-1e-6&&S<0?s(S*R)/R:S}function V(){var S=this.props,R=D(S[0]),tt=D(S[1]),J=D(S[4]),Gt=D(S[5]),Vt=D(S[12]),Xt=D(S[13]);return "matrix("+R+","+tt+","+J+","+Gt+","+Vt+","+Xt+")"}return function(){this.reset=r,this.rotate=a,this.rotateX=n,this.rotateY=p,this.rotateZ=h,this.skew=P,this.skewFromAxis=c,this.shear=y,this.scale=l,this.setTransform=E,this.translate=b,this.transform=v,this.multiply=w,this.applyToPoint=k,this.applyToX=z,this.applyToY=q,this.applyToZ=W,this.applyToPointArray=Ct,this.applyToTriplePoints=ut,this.applyToPointStringified=ht,this.toCSS=yt,this.to2dCSS=V,this.clone=g,this.cloneFromProps=_,this.equals=f,this.inversePoints=gt,this.inversePoint=mt,this.getInverseMatrix=ot,this._t=this.transform,this.isIdentity=u,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset();}}();function _typeof$3(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$3=function(e){return typeof e}:_typeof$3=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$3(t)}var lottie={};function setLocation(t){setLocationHref(t);}function searchAnimations(){animationManager.searchAnimations();}function setSubframeRendering(t){setSubframeEnabled(t);}function setPrefix(t){setIdPrefix(t);}function loadAnimation(t){return animationManager.loadAnimation(t)}function setQuality(t){if(typeof t=="string")switch(t){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10);break}else !isNaN(t)&&t>1&&setDefaultCurveSegments(t);}function inBrowser(){return typeof navigator<"u"}function installPlugin(t,e){t==="expressions"&&setExpressionsPlugin(e);}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.12.2";function checkReady(){document.readyState==="complete"&&(clearInterval(readyStateCheckInterval),searchAnimations());}function getQueryVariable(t){for(var e=queryString.split("&"),i=0;i"u"?"undefined":_typeof$3(exports))==="object"&&typeof module<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=lottie);}catch(t){}var ShapeModifiers=function(){var t={},e={};t.registerModifier=i,t.getModifier=s;function i(r,a){e[r]||(e[r]=a);}function s(r,a,n){return new e[r](a,n)}return t}();function ShapeModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated();}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},extendPrototype([DynamicPropertyContainer],ShapeModifier);function TrimModifier(){}extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[];},TrimModifier.prototype.calculateShapeEdges=function(t,e,i,s,r){var a=[];e<=1?a.push({s:t,e}):t>=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n=[],p,h=a.length,y;for(p=0;ps+i)){var P,c;y.s*r<=s?P=0:P=(y.s*r-s)/i,y.e*r>=s+i?c=1:c=(y.e*r-s)/i,n.push([P,c]);}return n.length||n.push([0,0]),n},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;e1?e=1+s:this.s.v<0?e=0+s:e=this.s.v+s,this.e.v>1?i=1+s:this.e.v<0?i=0+s:i=this.e.v+s,e>i){var r=e;e=i,i=r;}e=Math.round(e*1e4)*1e-4,i=Math.round(i*1e4)*1e-4,this.sValue=e,this.eValue=i;}else e=this.sValue,i=this.eValue;var a,n,p=this.shapes.length,h,y,P,c,l,E=0;if(i===e)for(n=0;n=0;n-=1)if(v=this.shapes[n],v.shape._mdf){for(w=v.localShapeCollection,w.releaseShapes(),this.m===2&&p>1?(_=this.calculateShapeEdges(e,i,v.totalShapeLength,g,E),g+=v.totalShapeLength):_=[[u,f]],y=_.length,h=0;h=1?b.push({s:v.totalShapeLength*(u-1),e:v.totalShapeLength*(f-1)}):(b.push({s:v.totalShapeLength*u,e:v.totalShapeLength}),b.push({s:0,e:v.totalShapeLength*(f-1)}));var k=this.addShapes(v,b[0]);if(b[0].s!==b[0].e){if(b.length>1){var z=v.shape.paths.shapes[v.shape.paths._length-1];if(z.c){var q=k.pop();this.addPaths(k,w),k=this.addShapes(v,b[1],q);}else this.addPaths(k,w),k=this.addShapes(v,b[1]);}this.addPaths(k,w);}}v.shape.paths=w;}}},TrimModifier.prototype.addPaths=function(t,e){var i,s=t.length;for(i=0;ie.e){i.c=!1;break}else e.s<=y&&e.e>=y+P.addedLength?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[p],r[a].v[p],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[p],r[a].o[p-1],r[a].i[p],(e.s-y)/P.addedLength,(e.e-y)/P.addedLength,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1),y+=P.addedLength,c+=1;if(r[a].c&&l.length){if(P=l[p-1],y<=e.e){var u=l[p-1].addedLength;e.s<=y&&e.e>=y+u?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[0],r[a].v[0],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[0],r[a].o[p-1],r[a].i[0],(e.s-y)/u,(e.e-y)/u,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1);}else i.c=!1;y+=P.addedLength,c+=1;}if(i._length&&(i.setXYAt(i.v[v][0],i.v[v][1],"i",v),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],"o",i._length-1)),y>e.e)break;a=this.p.keyframes[this.p.keyframes.length-1].t?(P=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/y,0),c=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/y,0)):(P=this.p.pv,c=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/y,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){P=[],c=[];var l=this.px,E=this.py;l._caching.lastFrame+l.offsetTime<=l.keyframes[0].t?(P[0]=l.getValueAtTime((l.keyframes[0].t+.01)/y,0),P[1]=E.getValueAtTime((E.keyframes[0].t+.01)/y,0),c[0]=l.getValueAtTime(l.keyframes[0].t/y,0),c[1]=E.getValueAtTime(E.keyframes[0].t/y,0)):l._caching.lastFrame+l.offsetTime>=l.keyframes[l.keyframes.length-1].t?(P[0]=l.getValueAtTime(l.keyframes[l.keyframes.length-1].t/y,0),P[1]=E.getValueAtTime(E.keyframes[E.keyframes.length-1].t/y,0),c[0]=l.getValueAtTime((l.keyframes[l.keyframes.length-1].t-.01)/y,0),c[1]=E.getValueAtTime((E.keyframes[E.keyframes.length-1].t-.01)/y,0)):(P=[l.pv,E.pv],c[0]=l.getValueAtTime((l._caching.lastFrame+l.offsetTime-.01)/y,l.offsetTime),c[1]=E.getValueAtTime((E._caching.lastFrame+E.offsetTime-.01)/y,E.offsetTime));}else c=t,P=c;this.v.rotate(-Math.atan2(P[1]-c[1],P[0]-c[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function s(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function r(){}function a(h){this._addDynamicProperty(h),this.elem.addDynamicProperty(h),this._isDirty=!0;}function n(h,y,P){if(this.elem=h,this.frameId=-1,this.propType="transform",this.data=y,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(P||h),y.p&&y.p.s?(this.px=PropertyFactory.getProp(h,y.p.x,0,0,this),this.py=PropertyFactory.getProp(h,y.p.y,0,0,this),y.p.z&&(this.pz=PropertyFactory.getProp(h,y.p.z,0,0,this))):this.p=PropertyFactory.getProp(h,y.p||{k:[0,0,0]},1,0,this),y.rx){if(this.rx=PropertyFactory.getProp(h,y.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(h,y.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(h,y.rz,0,degToRads,this),y.or.k[0].ti){var c,l=y.or.k.length;for(c=0;c0;)i-=1,this._elements.unshift(e[i]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),v=this.pMatrix.props,w=this.rMatrix.props,u=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var f=0;if(l>0){for(;fb;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),f-=1;E&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-E,!0),f-=E);}s=this.data.m===1?0:this._currentCopies-1,r=this.data.m===1?1:-1,a=this._currentCopies;for(var g,_;a;){if(e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,_=i.length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(s/(this._currentCopies-1)),f!==0){for((s!==0&&r===1||s!==this._currentCopies-1&&r===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15]),this.matrix.transform(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]),this.matrix.transform(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15]),g=0;g<_;g+=1)i[g]=this.matrix.props[g];this.matrix.reset();}else for(this.matrix.reset(),g=0;g<_;g+=1)i[g]=this.matrix.props[g];f+=1,a-=1,s+=r;}}else for(a=this._currentCopies,s=0,r=1;a;)e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,a-=1,s+=r;return n},RepeaterModifier.prototype.addShape=function(){};function RoundCornersModifier(){}extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length;},RoundCornersModifier.prototype.processPath=function(t,e){var i=shapePool.newElement();i.c=t.c;var s,r=t._length,a,n,p,h,y,P,c=0,l,E,b,v,w,u;for(s=0;s0&&s<1?[e]:[]:[e-s,e+s].filter(function(r){return r>0&&r<1})},PolynomialBezier.prototype.split=function(t){if(t<=0)return [singlePoint(this.points[0]),this];if(t>=1)return [this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),i=lerpPoint(this.points[1],this.points[2],t),s=lerpPoint(this.points[2],this.points[3],t),r=lerpPoint(e,i,t),a=lerpPoint(i,s,t),n=lerpPoint(r,a,t);return [new PolynomialBezier(this.points[0],e,r,n,!0),new PolynomialBezier(n,a,s,this.points[3],!0)]};function extrema(t,e){var i=t.points[0][e],s=t.points[t.points.length-1][e];if(i>s){var r=s;s=i,i=r;}for(var a=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n0&&a[n]<1){var p=t.point(a[n])[e];ps&&(s=p);}return {min:i,max:s}}PolynomialBezier.prototype.bounds=function(){return {x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return {left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}};function intersectData(t,e,i){var s=t.boundingBox();return {cx:s.cx,cy:s.cy,width:s.width,height:s.height,bez:t,t:(e+i)/2,t1:e,t2:i}}function splitData(t){var e=t.bez.split(.5);return [intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return Math.abs(t.cx-e.cx)*2=a||t.width<=s&&t.height<=s&&e.width<=s&&e.height<=s){r.push([t.t,e.t]);return}var n=splitData(t),p=splitData(e);intersectsImpl(n[0],p[0],i+1,s,r,a),intersectsImpl(n[0],p[1],i+1,s,r,a),intersectsImpl(n[1],p[0],i+1,s,r,a),intersectsImpl(n[1],p[1],i+1,s,r,a);}}PolynomialBezier.prototype.intersections=function(t,e,i){e===void 0&&(e=2),i===void 0&&(i=7);var s=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,s,i),s},PolynomialBezier.shapeSegment=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[i],t.v[i],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[i],t.i[i],t.o[e],t.v[e],!0)};function crossProduct(t,e){return [t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,i,s){var r=[t[0],t[1],1],a=[e[0],e[1],1],n=[i[0],i[1],1],p=[s[0],s[1],1],h=crossProduct(crossProduct(r,a),crossProduct(n,p));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,i){return [t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function setPoint(t,e,i,s,r,a,n){var p=i-Math.PI/2,h=i+Math.PI/2,y=e[0]+Math.cos(i)*s*r,P=e[1]-Math.sin(i)*s*r;t.setTripleAt(y,P,y+Math.cos(p)*a,P-Math.sin(p)*a,y+Math.cos(h)*n,P-Math.sin(h)*n,t.length());}function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],s=-Math.PI*.5,r=[Math.cos(s)*i[0]-Math.sin(s)*i[1],Math.sin(s)*i[0]+Math.cos(s)*i[1]];return r}function getProjectingAngle(t,e){var i=e===0?t.length()-1:e-1,s=(e+1)%t.length(),r=t.v[i],a=t.v[s],n=getPerpendicularVector(r,a);return Math.atan2(0,1)-Math.atan2(n[1],n[0])}function zigZagCorner(t,e,i,s,r,a,n){var p=getProjectingAngle(e,i),h=e.v[i%e._length],y=e.v[i===0?e._length-1:i-1],P=e.v[(i+1)%e._length],c=a===2?Math.sqrt(Math.pow(h[0]-y[0],2)+Math.pow(h[1]-y[1],2)):0,l=a===2?Math.sqrt(Math.pow(h[0]-P[0],2)+Math.pow(h[1]-P[1],2)):0;setPoint(t,e.v[i%e._length],p,n,s,l/((r+1)*2),c/((r+1)*2));}function zigZagSegment(t,e,i,s,r,a){for(var n=0;n1&&e.length>1&&(r=getIntersection(t[0],e[e.length-1]),r)?[[t[0].split(r[0])[0]],[e[e.length-1].split(r[1])[1]]]:[i,s]}function pruneIntersections(t){for(var e,i=1;i1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var i=t.inflectionPoints(),s,r,a,n;if(i.length===0)return [offsetSegment(t,e)];if(i.length===1||floatEqual(i[1],1))return a=t.split(i[0]),s=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(r,e)];a=t.split(i[0]),s=a[0];var p=(i[1]-i[0])/(1-i[0]);return a=a[1].split(p),n=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(n,e),offsetSegment(r,e)]}function OffsetPathModifier(){}extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},OffsetPathModifier.prototype.processPath=function(t,e,i,s){var r=shapePool.newElement();r.c=t.c;var a=t.length();t.c||(a-=1);var n,p,h,y=[];for(n=0;n=0;n-=1)h=PolynomialBezier.shapeSegmentInverted(t,n),y.push(offsetSegmentSplit(h,e));y=pruneIntersections(y);var P=null,c=null;for(n=0;n0&&(Gt=!1),Gt){var Ht=createTag("style");Ht.setAttribute("f-forigin",S[R].fOrigin),Ht.setAttribute("f-origin",S[R].origin),Ht.setAttribute("f-family",S[R].fFamily),Ht.type="text/css",Ht.innerText="@font-face {font-family: "+S[R].fFamily+"; font-style: normal; src: url('"+S[R].fPath+"');}",V.appendChild(Ht);}}else if(S[R].fOrigin==="g"||S[R].origin===1){for(Vt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),Xt=0;Xt=55296&&S<=56319){var R=D.charCodeAt(1);R>=56320&&R<=57343&&(V=(S-55296)*1024+R-56320+65536);}return V}function z(D,V){var S=D.toString(16)+V.toString(16);return c.indexOf(S)!==-1}function q(D){return D===h}function W(D){return D===p}function ot(D){var V=k(D);return V>=y&&V<=P}function mt(D){return ot(D.substr(0,2))&&ot(D.substr(2,2))}function gt(D){return i.indexOf(D)!==-1}function ut(D,V){var S=k(D.substr(V,2));if(S!==s)return !1;var R=0;for(V+=2;R<5;){if(S=k(D.substr(V,2)),Sn)return !1;R+=1,V+=2;}return k(D.substr(V,2))===r}function Ct(){this.isLoaded=!0;}var ht=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};ht.isModifier=z,ht.isZeroWidthJoiner=q,ht.isFlagEmoji=mt,ht.isRegionalCode=ot,ht.isCombinedCharacter=gt,ht.isRegionalFlag=ut,ht.isVariationSelector=W,ht.BLACK_FLAG_CODE_POINT=s;var yt={addChars:u,addFonts:w,getCharData:f,getFontByName:_,measureText:g,checkLoadedFonts:b,setIsLoaded:Ct};return ht.prototype=yt,ht}();function SlotManager(t){this.animationData=t;}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t};function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(t){this.renderableComponents.indexOf(t)===-1&&this.renderableComponents.push(t);},removeRenderableComponent:function(t){this.renderableComponents.indexOf(t)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1);},prepareRenderableFrame:function(t){this.checkLayerLimits(t);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},AudioElement.prototype.resume=function(){this._canPlay=!0;},AudioElement.prototype.setRate=function(t){this.audio.rate(t);},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume);},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){};function BaseRenderer(){}BaseRenderer.prototype.checkLayers=function(t){var e,i=this.layers.length,s;for(this.completeLayers=!0,e=i-1;e>=0;e-=1)this.elements[e]||(s=this.layers[e],s.ip-s.st<=t-this.layers[e].st&&s.op-s.st>t-this.layers[e].st&&this.buildItem(e)),this.completeLayers=this.elements[e]?this.completeLayers:!1;this.checkPendingElements();},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t);default:return this.createNull(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t0&&(this.maskElement.setAttribute("id",l),this.element.maskedElement.setAttribute(f,"url("+getLocationHref()+"#"+l+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e=this.element.finalTransform.mat,i,s=this.masksProperties.length;for(i=0;i1&&(s+=" C"+e.o[r-1][0]+","+e.o[r-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),i.lastPath!==s){var n="";i.elem&&(e.c&&(n=t.inv?this.solidPath+s:s),i.elem.setAttribute("d",n)),i.lastPath=s;}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var filtersFactory=function(){var t={};t.createFilter=e,t.createAlphaToLuminanceFilter=i;function e(s,r){var a=createNS("filter");return a.setAttribute("id",s),r!==!0&&(a.setAttribute("filterUnits","objectBoundingBox"),a.setAttribute("x","0%"),a.setAttribute("y","0%"),a.setAttribute("width","100%"),a.setAttribute("height","100%")),a}function i(){var s=createNS("feColorMatrix");return s.setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),s}return t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects$1={},idPrefix="filter_result_";function SVGEffects(t){var e,i="SourceGraphic",s=t.data.ef?t.data.ef.length:0,r=createElementID(),a=filtersFactory.createFilter(r,!0),n=0;this.filters=[];var p;for(e=0;e=0&&(i=this.shapeModifiers[t].processShapes(this._isFirstFrame),!i);t-=1);}},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,s=e.length;i.01)return !1;i+=1;}return !0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t0;)u=l.transformers[ot].mProps._mdf||u,W-=1,ot-=1;if(u)for(W=k-l.styles[g].lvl,ot=l.transformers.length-1;W>0;)q.multiply(l.transformers[ot].mProps.v),W-=1,ot-=1;}else q=t;if(z=l.sh.paths,v=z._length,u){for(w="",b=0;b=1?Ct=.99:Ct<=-1&&(Ct=-.99);var ht=gt*Ct,yt=Math.cos(ut+l.a.v)*ht+w[0],D=Math.sin(ut+l.a.v)*ht+w[1];b.setAttribute("fx",yt),b.setAttribute("fy",D),v&&!l.g._collapsable&&(l.of.setAttribute("fx",yt),l.of.setAttribute("fy",D));}}}function P(c,l,E){var b=l.style,v=l.d;v&&(v._mdf||E)&&v.dashStr&&(b.pElem.setAttribute("stroke-dasharray",v.dashStr),b.pElem.setAttribute("stroke-dashoffset",v.dashoffset[0])),l.c&&(l.c._mdf||E)&&b.pElem.setAttribute("stroke","rgb("+bmFloor(l.c.v[0])+","+bmFloor(l.c.v[1])+","+bmFloor(l.c.v[2])+")"),(l.o._mdf||E)&&b.pElem.setAttribute("stroke-opacity",l.o.v),(l.w._mdf||E)&&(b.pElem.setAttribute("stroke-width",l.w.v),b.msElem&&b.msElem.setAttribute("stroke-width",l.w.v));}return i}();function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,i),this.prevViewData=[];}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e=this.shapes.length,i,s,r=this.stylesList.length,a,n=[],p=!1;for(s=0;s1&&p&&this.setShapesAsAnimated(n);}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e=0;h-=1){if(w=this.searchProcessedElement(t[h]),w?e[h]=i[w-1]:t[h]._render=n,t[h].ty==="fl"||t[h].ty==="st"||t[h].ty==="gf"||t[h].ty==="gs"||t[h].ty==="no")w?e[h].style.closed=!1:e[h]=this.createStyleElement(t[h],r),t[h]._render&&e[h].style.pElem.parentNode!==s&&s.appendChild(e[h].style.pElem),l.push(e[h].style);else if(t[h].ty==="gr"){if(!w)e[h]=this.createGroupElement(t[h]);else for(c=e[h].it.length,P=0;P1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this);},TextProperty.prototype.getValue=function(t){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!t)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,i=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var s,r=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(s=0;se);)i+=1;return this.keysIndex!==i&&(this.keysIndex=i),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e=[],i=0,s=t.length,r,a,n=!1,p=!1,h="";i=55296&&r<=56319?FontManager.isRegionalFlag(t,i)?h=t.substr(i,14):(a=t.charCodeAt(i+1),a>=56320&&a<=57343&&(FontManager.isModifier(r,a)?(h=t.substr(i,2),n=!0):FontManager.isFlagEmoji(t.substr(i,4))?h=t.substr(i,4):h=t.substr(i,2))):r>56319?(a=t.charCodeAt(i+1),FontManager.isVariationSelector(r)&&(n=!0)):FontManager.isZeroWidthJoiner(r)&&(n=!0,p=!0),n?(e[e.length-1]+=h,n=!1):e.push(h),i+=h.length;return e},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e=this.elem.globalData.fontManager,i=this.data,s=[],r,a,n,p=0,h,y=i.m.g,P=0,c=0,l=0,E=[],b=0,v=0,w,u,f=e.getFontByName(t.f),g,_=0,k=getFontProperties(f);t.fWeight=k.weight,t.fStyle=k.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),a=t.finalText.length,t.finalLineHeight=t.lh;var z=t.tr/1e3*t.finalSize,q;if(t.sz)for(var W=!0,ot=t.sz[0],mt=t.sz[1],gt,ut;W;){ut=this.buildFinalText(t.t),gt=0,b=0,a=ut.length,z=t.tr/1e3*t.finalSize;var Ct=-1;for(r=0;rot&&ut[r]!==" "?(Ct===-1?a+=1:r=Ct,gt+=t.finalLineHeight||t.finalSize*1.2,ut.splice(r,Ct===r?1:0,"\r"),Ct=-1,b=0):(b+=_,b+=z);gt+=f.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&mtv?b:v,b=-2*z,h="",n=!0,l+=1):h=yt,e.chars?(g=e.getCharData(yt,f.fStyle,e.getFontByName(t.f).fFamily),_=n?0:g.w*t.finalSize/100):_=e.measureText(h,t.f,t.finalSize),yt===" "?ht+=_+z:(b+=_+z+ht,ht=0),s.push({l:_,an:_,add:P,n,anIndexes:[],val:h,line:l,animatorJustifyOffset:0}),y==2){if(P+=_,h===""||h===" "||r===a-1){for((h===""||h===" ")&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;p+=1,P=0;}}else if(y==3){if(P+=_,h===""||r===a-1){for(h===""&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;P=0,p+=1;}}else s[p].ind=p,s[p].extra=0,p+=1;if(t.l=s,v=b>v?b:v,E.push(b),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0;}t.lineWidths=E;var D=i.a,V,S;u=D.length;var R,tt,J=[];for(w=0;w0?n=this.ne.v/100:p=-this.ne.v/100,this.xe.v>0?h=1-this.xe.v/100:y=1+this.xe.v/100;var P=BezierFactory.getBezierEasing(n,p,h,y).get,c=0,l=this.finalS,E=this.finalE,b=this.data.sh;if(b===2)E===l?c=a>=E?1:0:c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===3)E===l?c=a>=E?0:1:c=1-t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===4)E===l?c=0:(c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c<.5?c*=2:c=1-2*(c-.5)),c=P(c);else if(b===5){if(E===l)c=0;else {var v=E-l;a=e(t(0,a+.5-l),E-l);var w=-v/2+a,u=v/2;c=Math.sqrt(1-w*w/(u*u));}c=P(c);}else b===6?(E===l?c=0:(a=e(t(0,a+.5-l),E-l),c=(1+Math.cos(Math.PI+Math.PI*2*a/(E-l)))/2),c=P(c)):(a>=i(l)&&(a-l<0?c=t(0,e(e(E,1)-(l-a),1)):c=t(0,e(E-a,1))),c=P(c));if(this.sm.v!==100){var f=this.sm.v*.01;f===0&&(f=1e-8);var g=.5-f*.5;c1&&(c=1));}return c*this.a.v},getValue:function(a){this.iterateDynamicProperties(),this._mdf=a||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,a&&this.data.r===2&&(this.e.v=this._currentTextLength);var n=this.data.r===2?1:100/this.data.totalChars,p=this.o.v/n,h=this.s.v/n+p,y=this.e.v/n+p;if(h>y){var P=h;h=y,y=P;}this.finalS=h,this.finalE=y;}},extendPrototype([DynamicPropertyContainer],s);function r(a,n,p){return new s(a,n)}return {getTextSelectorProp:r}}();function TextAnimatorDataProperty(t,e,i){var s={propType:!1},r=PropertyFactory.getProp,a=e.a;this.a={r:a.r?r(t,a.r,0,degToRads,i):s,rx:a.rx?r(t,a.rx,0,degToRads,i):s,ry:a.ry?r(t,a.ry,0,degToRads,i):s,sk:a.sk?r(t,a.sk,0,degToRads,i):s,sa:a.sa?r(t,a.sa,0,degToRads,i):s,s:a.s?r(t,a.s,1,.01,i):s,a:a.a?r(t,a.a,1,0,i):s,o:a.o?r(t,a.o,0,.01,i):s,p:a.p?r(t,a.p,1,0,i):s,sw:a.sw?r(t,a.sw,0,0,i):s,sc:a.sc?r(t,a.sc,1,0,i):s,fc:a.fc?r(t,a.fc,1,0,i):s,fh:a.fh?r(t,a.fh,0,0,i):s,fs:a.fs?r(t,a.fs,0,.01,i):s,fb:a.fb?r(t,a.fb,0,.01,i):s,t:a.t?r(t,a.t,0,0,i):s},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,i),this.s.t=e.s.t;}function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=i,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(i);}TextAnimatorProperty.prototype.searchProperties=function(){var t,e=this._textData.a.length,i,s=PropertyFactory.getProp;for(t=0;t=b+oe||!k?(ot=(b+oe-w)/v.partialLength,Xt=_.point[0]+(v.point[0]-_.point[0])*ot,Ht=_.point[1]+(v.point[1]-_.point[1])*ot,a.translate(-i[0]*l[P].an*.005,-(i[1]*ht)*.01),u=!1):k&&(w+=v.partialLength,f+=1,f>=k.length&&(f=0,g+=1,z[g]?k=z[g].points:gt.v.c?(f=0,g=0,k=z[g].points):(w-=v.partialLength,k=null)),k&&(_=v,v=k[f],q=v.partialLength));Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0);}else Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0),a.translate(-i[0]*l[P].an*.005,-i[1]*ht*.01,0);for(S=0;St?this.textSpans[t].span:createNS(p?"g":"text"),g<=t){if(h.setAttribute("stroke-linecap","butt"),h.setAttribute("stroke-linejoin","round"),h.setAttribute("stroke-miterlimit","4"),this.textSpans[t].span=h,p){var k=createNS("g");h.appendChild(k),this.textSpans[t].childSpan=k;}this.textSpans[t].span=h,this.layerElement.appendChild(h);}h.style.display="inherit";}if(y.reset(),c&&(n[t].n&&(l=-v,E+=i.yOffset,E+=b?1:0,b=!1),this.applyTextPropertiesToMatrix(i,y,n[t].line,l,E),l+=n[t].l||0,l+=v),p){_=this.globalData.fontManager.getCharData(i.finalText[t],s.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily);var z;if(_.t===1)z=new SVGCompElement(_.data,this.globalData,this);else {var q=emptyShapeData;_.data&&_.data.shapes&&(q=this.buildShapeData(_.data,i.finalSize)),z=new SVGShapeElement(q,this.globalData,this);}if(this.textSpans[t].glyph){var W=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(W.layerElement),W.destroy();}this.textSpans[t].glyph=z,z._debug=!0,z.prepareFrame(0),z.renderFrame(),this.textSpans[t].childSpan.appendChild(z.layerElement),_.t===1&&this.textSpans[t].childSpan.setAttribute("transform","scale("+i.finalSize/100+","+i.finalSize/100+")");}else c&&h.setAttribute("transform","translate("+y.props[12]+","+y.props[13]+")"),h.textContent=n[t].val,h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}c&&h&&h.setAttribute("d",P);}for(;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0));}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t=0;i-=1)t.finalTransform.multiply(t.transforms[i].transform.mProps.v);t._mdf=r;},processSequences:function(t){var e,i=this.sequenceList.length;for(e=0;e=1){this.buffers=[];var t=this.globalData.canvasContext,e=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(e);var i=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(i),this.data.tt>=3&&!document._isProxy&&assetLoader.loadLumaCanvas();}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new CVEffects(this),this.searchEffectTransforms();},createContent:function(){},setBlendMode:function(){var t=this.globalData;if(t.blendMode!==this.data.bm){t.blendMode=this.data.bm;var e=getBlendMode(this.data.bm);t.canvasContext.globalCompositeOperation=e;}},createRenderableComponents:function(){this.maskManager=new CVMaskElement(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);},hideElement:function(){!this.hidden&&(!this.isInRange||this.isTransparent)&&(this.hidden=!0);},showElement:function(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0);},clearCanvas:function(t){t.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy);},prepareLayer:function(){if(this.data.tt>=1){var t=this.buffers[0],e=t.getContext("2d");this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);}},exitLayer:function(){if(this.data.tt>=1){var t=this.buffers[1],e=t.getContext("2d");this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);var i=this.comp.getElementById("tp"in this.data?this.data.tp:this.data.ind-1);if(i.renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var s=assetLoader.getLumaCanvas(this.canvasContext.canvas),r=s.getContext("2d");r.drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(s,0,0);}this.canvasContext.globalCompositeOperation=operationsMap[this.data.tt],this.canvasContext.drawImage(t,0,0),this.canvasContext.globalCompositeOperation="destination-over",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation="source-over";}},renderFrame:function(t){if(!(this.hidden||this.data.hd)&&!(this.data.td===1&&!t)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var e=this.data.ty===0;this.prepareLayer(),this.globalData.renderer.save(e),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(e),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1);}},destroy:function(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy();},mHelper:new Matrix},CVBaseElement.prototype.hide=CVBaseElement.prototype.hideElement,CVBaseElement.prototype.show=CVBaseElement.prototype.showElement;function CVShapeData(t,e,i,s){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var r=4;e.ty==="rc"?r=5:e.ty==="el"?r=6:e.ty==="sr"&&(r=7),this.sh=ShapePropertyFactory.getShapeProp(t,e,r,t);var a,n=i.length,p;for(a=0;a=0;a-=1){if(c=this.searchProcessedElement(t[a]),c?e[a]=i[c-1]:t[a]._shouldRender=s,t[a].ty==="fl"||t[a].ty==="st"||t[a].ty==="gf"||t[a].ty==="gs")c?e[a].style.closed=!1:e[a]=this.createStyleElement(t[a],b),y.push(e[a].style);else if(t[a].ty==="gr"){if(!c)e[a]=this.createGroupElement(t[a]);else for(h=e[a].it.length,p=0;p=0;r-=1)e[r].ty==="tr"?(n=i[r].transform,this.renderShapeTransform(t,n)):e[r].ty==="sh"||e[r].ty==="el"||e[r].ty==="rc"||e[r].ty==="sr"?this.renderPath(e[r],i[r]):e[r].ty==="fl"?this.renderFill(e[r],i[r],n):e[r].ty==="st"?this.renderStroke(e[r],i[r],n):e[r].ty==="gf"||e[r].ty==="gs"?this.renderGradientFill(e[r],i[r],n):e[r].ty==="gr"?this.renderShape(n,e[r].it,i[r].it):e[r].ty;s&&this.drawLayer();},CVShapeElement.prototype.renderStyledShape=function(t,e){if(this._isFirstFrame||e._mdf||t.transforms._mdf){var i=t.trNodes,s=e.paths,r,a,n,p=s._length;i.length=0;var h=t.transforms.finalTransform;for(n=0;n=1?P=.99:P<=-1&&(P=-.99);var c=h*P,l=Math.cos(y+e.a.v)*c+n[0],E=Math.sin(y+e.a.v)*c+n[1];r=a.createRadialGradient(l,E,0,n[0],n[1],h);}var b,v=t.g.p,w=e.g.c,u=1;for(b=0;ba&&h==="xMidYMid slice"||rr&&p==="meet"||ar&&p==="slice")?this.transformCanvas.tx=(i-this.transformCanvas.w*(s/this.transformCanvas.h))/2*this.renderConfig.dpr:y==="xMax"&&(ar&&p==="slice")?this.transformCanvas.tx=(i-this.transformCanvas.w*(s/this.transformCanvas.h))*this.renderConfig.dpr:this.transformCanvas.tx=0,P==="YMid"&&(a>r&&p==="meet"||ar&&p==="meet"||a=0;t-=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0;},CanvasRendererBase.prototype.renderFrame=function(t,e){if(!(this.renderedFrame===t&&this.renderConfig.clearCanvas===!0&&!e||this.destroyed||t===-1)){this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||e,this.globalData.projectInterface.currentFrame=t;var i,s=this.layers.length;for(this.completeLayers||this.checkLayers(t),i=s-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].prepareFrame(t-this.layers[i].st);if(this.globalData._mdf){for(this.renderConfig.clearCanvas===!0?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),i=s-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].renderFrame();this.renderConfig.clearCanvas!==!0&&this.restore();}}},CanvasRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!(e[t]||this.layers[t].ty===99)){var i=this.createItem(this.layers[t],this,this.globalData);e[t]=i,i.initExpressions();}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();t.checkParenting();}},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display="none";},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display="block";};function CanvasContext(){this.opacity=-1,this.transform=createTypedArray("float32",16),this.fillStyle="",this.strokeStyle="",this.lineWidth="",this.lineCap="",this.lineJoin="",this.miterLimit="",this.id=Math.random();}function CVContextData(){this.stack=[],this.cArrPos=0,this.cTr=new Matrix;var t,e=15;for(t=0;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame();},CVCompElement.prototype.destroy=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null;},CVCompElement.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)};function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig={clearCanvas:e&&e.clearCanvas!==void 0?e.clearCanvas:!0,context:e&&e.context||null,progressiveLoad:e&&e.progressiveLoad||!1,preserveAspectRatio:e&&e.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:e&&e.contentVisibility||"visible",className:e&&e.className||"",id:e&&e.id||"",runExpressions:!e||e.runExpressions===void 0||e.runExpressions},this.renderConfig.dpr=e&&e.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=e&&e.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new CVContextData,this.elements=[],this.pendingElements=[],this.transformMat=new Matrix,this.completeLayers=!1,this.rendererType="canvas",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData));}extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)};function HBaseElement(){}HBaseElement.prototype={checkBlendMode:function(){},initRendererElement:function(){this.baseElement=createTag(this.data.tg||"div"),this.data.hasMask?(this.svgElement=createNS("svg"),this.layerElement=createNS("g"),this.maskedElement=this.layerElement,this.svgElement.appendChild(this.layerElement),this.baseElement.appendChild(this.svgElement)):this.layerElement=this.baseElement,styleDiv(this.baseElement);},createContainerElements:function(){this.renderableEffectsManager=new CVEffects(this),this.transformedElement=this.baseElement,this.maskedElement=this.layerElement,this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),this.data.bm!==0&&this.setBlendMode();},renderElement:function(){var t=this.transformedElement?this.transformedElement.style:{};if(this.finalTransform._matMdf){var e=this.finalTransform.mat.toCSS();t.transform=e,t.webkitTransform=e;}this.finalTransform._opMdf&&(t.opacity=this.finalTransform.mProp.o.v);},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1));},destroy:function(){this.layerElement=null,this.transformedElement=null,this.matteElement&&(this.matteElement=null),this.maskManager&&(this.maskManager.destroy(),this.maskManager=null);},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData);},addEffects:function(){},setMatte:function(){}},HBaseElement.prototype.getBaseElement=SVGBaseElement.prototype.getBaseElement,HBaseElement.prototype.destroyBaseElement=HBaseElement.prototype.destroy,HBaseElement.prototype.buildElementParenting=BaseRenderer.prototype.buildElementParenting;function HSolidElement(t,e,i){this.initElement(t,e,i);}extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],HSolidElement),HSolidElement.prototype.createContent=function(){var t;this.data.hasMask?(t=createNS("rect"),t.setAttribute("width",this.data.sw),t.setAttribute("height",this.data.sh),t.setAttribute("fill",this.data.sc),this.svgElement.setAttribute("width",this.data.sw),this.svgElement.setAttribute("height",this.data.sh)):(t=createTag("div"),t.style.width=this.data.sw+"px",t.style.height=this.data.sh+"px",t.style.backgroundColor=this.data.sc),this.layerElement.appendChild(t);};function HShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.shapesContainer=createNS("g"),this.initElement(t,e,i),this.prevViewData=[],this.currentBBox={x:999999,y:-999999,h:0,w:0};}extendPrototype([BaseElement,TransformElement,HSolidElement,SVGShapeElement,HBaseElement,HierarchyElement,FrameElement,RenderableElement],HShapeElement),HShapeElement.prototype._renderShapeFrame=HShapeElement.prototype.renderInnerContent,HShapeElement.prototype.createContent=function(){var t;if(this.baseElement.style.fontSize=0,this.data.hasMask)this.layerElement.appendChild(this.shapesContainer),t=this.svgElement;else {t=createNS("svg");var e=this.comp.data?this.comp.data:this.globalData.compSize;t.setAttribute("width",e.w),t.setAttribute("height",e.h),t.appendChild(this.shapesContainer),this.layerElement.appendChild(t);}this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.shapesContainer,0,[],!0),this.filterUniqueShapes(),this.shapeCont=t;},HShapeElement.prototype.getTransformedPoint=function(t,e){var i,s=t.length;for(i=0;i0&&h<1&&r[l].push(this.calculateF(h,t,e,i,s,l))):(y=n*n-4*p*a,y>=0&&(P=(-n+bmSqrt(y))/(2*a),P>0&&P<1&&r[l].push(this.calculateF(P,t,e,i,s,l)),c=(-n-bmSqrt(y))/(2*a),c>0&&c<1&&r[l].push(this.calculateF(c,t,e,i,s,l)))));this.shapeBoundingBox.left=bmMin.apply(null,r[0]),this.shapeBoundingBox.top=bmMin.apply(null,r[1]),this.shapeBoundingBox.right=bmMax.apply(null,r[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,r[1]);},HShapeElement.prototype.calculateF=function(t,e,i,s,r,a){return bmPow(1-t,3)*e[a]+3*bmPow(1-t,2)*t*i[a]+3*(1-t)*bmPow(t,2)*s[a]+bmPow(t,3)*r[a]},HShapeElement.prototype.calculateBoundingBox=function(t,e){var i,s=t.length;for(i=0;ii&&(i=r);}i*=t.mult;}else i=t.v*t.mult;e.x-=i,e.xMax+=i,e.y-=i,e.yMax+=i;},HShapeElement.prototype.currentBoxContains=function(t){return this.currentBBox.x<=t.x&&this.currentBBox.y<=t.y&&this.currentBBox.width+this.currentBBox.x>=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax=0;e-=1){var s=this.hierarchy[e].finalTransform.mProp;this.mat.translate(-s.p.v[0],-s.p.v[1],s.p.v[2]),this.mat.rotateX(-s.or.v[0]).rotateY(-s.or.v[1]).rotateZ(s.or.v[2]),this.mat.rotateX(-s.rx.v).rotateY(-s.ry.v).rotateZ(s.rz.v),this.mat.scale(1/s.s.v[0],1/s.s.v[1],1/s.s.v[2]),this.mat.translate(s.a.v[0],s.a.v[1],s.a.v[2]);}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var r;this.p?r=[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:r=[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var a=Math.sqrt(Math.pow(r[0],2)+Math.pow(r[1],2)+Math.pow(r[2],2)),n=[r[0]/a,r[1]/a,r[2]/a],p=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],p),y=Math.atan2(n[0],-n[2]);this.mat.rotateY(y).rotateX(-h);}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var P=!this._prevMat.equals(this.mat);if((P||this.pe._mdf)&&this.comp.threeDElements){i=this.comp.threeDElements.length;var c,l,E;for(e=0;e=t)return this.threeDElements[e].perspectiveElem;e+=1;}return null},HybridRendererBase.prototype.createThreeDContainer=function(t,e){var i=createTag("div"),s,r;styleDiv(i);var a=createTag("div");if(styleDiv(a),e==="3d"){s=i.style,s.width=this.globalData.compSize.w+"px",s.height=this.globalData.compSize.h+"px";var n="50% 50%";s.webkitTransformOrigin=n,s.mozTransformOrigin=n,s.transformOrigin=n,r=a.style;var p="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";r.transform=p,r.webkitTransform=p;}i.appendChild(a);var h={container:a,perspectiveElem:i,startPos:t,endPos:t,type:e};return this.threeDElements.push(h),h},HybridRendererBase.prototype.build3dContainers=function(){var t,e=this.layers.length,i,s="";for(t=0;t=0;t-=1)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem);},HybridRendererBase.prototype.addTo3dContainer=function(t,e){for(var i=0,s=this.threeDElements.length;ii?(r=t/this.globalData.compSize.w,a=t/this.globalData.compSize.w,n=0,p=(e-this.globalData.compSize.h*(t/this.globalData.compSize.w))/2):(r=e/this.globalData.compSize.h,a=e/this.globalData.compSize.h,n=(t-this.globalData.compSize.w*(e/this.globalData.compSize.h))/2,p=0);var h=this.resizerElem.style;h.webkitTransform="matrix3d("+r+",0,0,0,0,"+a+",0,0,0,0,1,0,"+n+","+p+",0,1)",h.transform=h.webkitTransform;},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display="none";},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display="block";},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else {var t=this.globalData.compSize.w,e=this.globalData.compSize.h,i,s=this.threeDElements.length;for(i=0;i=y;)mt/=2,gt/=2,ut>>>=1;return (mt+ut)/gt};return ot.int32=function(){return W.g(4)|0},ot.quick=function(){return W.g(4)/4294967296},ot.double=ot,w(f(W.S),t),(_.pass||k||function(mt,gt,ut,Ct){return Ct&&(Ct.S&&b(Ct,W),mt.state=function(){return b(W,{})}),ut?(e[n]=mt,gt):mt})(ot,q,"global"in _?_.global:this==e,_.state)}e["seed"+n]=l;function E(g){var _,k=g.length,z=this,q=0,W=z.i=z.j=0,ot=z.S=[];for(k||(g=[k++]);qi){var s=i;i=e,e=s;}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if(typeof t=="number"||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var i,s=Math.min(t.length,e.length),r=0;for(i=0;i.5?y/(2-r-a):y/(r+a),r){case e:n=(i-s)/y+(i1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e=t[0],i=t[1],s=t[2],r,a,n;if(i===0)r=s,n=s,a=s;else {var p=s<.5?s*(1+i):s+i-s*i,h=2*s-p;r=hue2rgb(h,p,e+1/3),a=hue2rgb(h,p,e),n=hue2rgb(h,p,e-1/3);}return [r,a,n,t[3]]}function linear(t,e,i,s,r){if((s===void 0||r===void 0)&&(s=e,r=i,e=0,i=1),i=i)return r;var n=i===e?0:(t-e)/(i-e);if(!s.length)return s+(r-s)*n;var p,h=s.length,y=createTypedArray("float32",h);for(p=0;p1){for(r=0;r1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(r)){var p,h=r.length,y=createTypedArray("float32",h);for(p=0;pdata.k[e].t&&tdata.k[e+1].t-t?(s=e+2,r=data.k[e+1].t):(s=e+1,r=data.k[e].t);break}s===-1&&(s=e+1,r=data.k[e].t);}var a={};return a.index=s,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,s;if(!data.k.length||typeof data.k[0]=="number")throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var r=Object.prototype.hasOwnProperty.call(data.k[t],"s")?data.k[t].s:data.k[t-1].e;for(s=r.length,i=0;iw.length-1)&&(E=w.length-1),g=w[w.length-1-E].t,f=u-g);var _,k,z;if(l==="pingpong"){var q=Math.floor((v-g)/f);if(q%2!==0)return this.getValueAtTime((f-(v-g)%f+g)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(g/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(u/this.comp.globalData.frameRate,0),mt=this.getValueAtTime(((v-g)%f+g)/this.comp.globalData.frameRate,0),gt=Math.floor((v-g)/f);if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_=u)return this.pv;var f,g;b?(E?f=Math.abs(this.elem.comp.globalData.frameRate*E):f=Math.max(0,this.elem.data.op-u),g=u+f):((!E||E>w.length-1)&&(E=w.length-1),g=w[E].t,f=g-u);var _,k,z;if(l==="pingpong"){var q=Math.floor((u-v)/f);if(q%2===0)return this.getValueAtTime(((u-v)%f+u)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(u/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(g/this.comp.globalData.frameRate,0),mt=this.getValueAtTime((f-(u-v)%f+u)/this.comp.globalData.frameRate,0),gt=Math.floor((u-v)/f)+1;if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_1?(w-v)/(E-1):1,f=0,g=0,_;this.pv.length?_=createTypedArray("float32",this.pv.length):_=0;for(var k;fu){var z=f,q=b.c&&f===g-1?0:f+1,W=(u-_)/w[f].addedLength;k=bez.getPointInSegment(b.v[z],b.v[q],b.o[z],b.i[q],W,w[f]);break}else _+=w[f].addedLength;f+=1;}return k||(k=b.c?[b.v[0][0],b.v[0][1]]:[b.v[b._length-1][0],b.v[b._length-1][1]]),k},vectorOnPath:function(l,E,b){l==1?l=this.v.c:l==0&&(l=.999);var v=this.pointOnPath(l,E),w=this.pointOnPath(l+.001,E),u=w[0]-v[0],f=w[1]-v[1],g=Math.sqrt(Math.pow(u,2)+Math.pow(f,2));if(g===0)return [0,0];var _=b==="tangent"?[u/g,f/g]:[-f/g,u/g];return _},tangentOnPath:function(l,E){return this.vectorOnPath(l,E,"tangent")},normalOnPath:function(l,E){return this.vectorOnPath(l,E,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([P],h),extendPrototype([P],y),y.prototype.getValueAtTime=p,y.prototype.initiateExpression=ExpressionManager.initiateExpression;var c=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(l,E,b,v,w){var u=c(l,E,b,v,w);return u.propertyIndex=E.ix,u.lock=!1,b===3?expressionHelpers.searchExpressions(l,E.pt,u):b===4&&expressionHelpers.searchExpressions(l,E.ks,u),u.k&&l.addDynamicProperty(u),u};}function initialize$1(){addPropertyDecorator();}function addDecorator(){function t(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}TextProperty.prototype.getExpressionValue=function(e,i){var s=this.calculateExpression(i);if(e.t!==s){var r={};return this.copyData(r,e),r.t=s.toString(),r.__complete=!1,r}return e},TextProperty.prototype.searchProperty=function(){var e=this.searchKeyframes(),i=this.searchExpressions();return this.kf=e||i,this.kf},TextProperty.prototype.searchExpressions=t;}function initialize(){addDecorator();}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function t(e,i){var s=createNS("feMerge");s.setAttribute("result",e);var r,a;for(a=0;a=y?c=b<0?s:r:c=s+E*Math.pow((p-t)/b,1/i),P[l]=c,l+=1,a+=256/(n-1);return P.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,i=this.filterManager.effectElements;this.feFuncRComposed&&(t||i[3].p._mdf||i[4].p._mdf||i[5].p._mdf||i[6].p._mdf||i[7].p._mdf)&&(e=this.getTableValue(i[3].p.v,i[4].p.v,i[5].p.v,i[6].p.v,i[7].p.v),this.feFuncRComposed.setAttribute("tableValues",e),this.feFuncGComposed.setAttribute("tableValues",e),this.feFuncBComposed.setAttribute("tableValues",e)),this.feFuncR&&(t||i[10].p._mdf||i[11].p._mdf||i[12].p._mdf||i[13].p._mdf||i[14].p._mdf)&&(e=this.getTableValue(i[10].p.v,i[11].p.v,i[12].p.v,i[13].p.v,i[14].p.v),this.feFuncR.setAttribute("tableValues",e)),this.feFuncG&&(t||i[17].p._mdf||i[18].p._mdf||i[19].p._mdf||i[20].p._mdf||i[21].p._mdf)&&(e=this.getTableValue(i[17].p.v,i[18].p.v,i[19].p.v,i[20].p.v,i[21].p.v),this.feFuncG.setAttribute("tableValues",e)),this.feFuncB&&(t||i[24].p._mdf||i[25].p._mdf||i[26].p._mdf||i[27].p._mdf||i[28].p._mdf)&&(e=this.getTableValue(i[24].p.v,i[25].p.v,i[26].p.v,i[27].p.v,i[28].p.v),this.feFuncB.setAttribute("tableValues",e)),this.feFuncA&&(t||i[31].p._mdf||i[32].p._mdf||i[33].p._mdf||i[34].p._mdf||i[35].p._mdf)&&(e=this.getTableValue(i[31].p.v,i[32].p.v,i[33].p.v,i[34].p.v,i[35].p.v),this.feFuncA.setAttribute("tableValues",e));}};function SVGDropShadowEffect(t,e,i,s,r){var a=e.container.globalData.renderConfig.filterSize,n=e.data.fs||a;t.setAttribute("x",n.x||a.x),t.setAttribute("y",n.y||a.y),t.setAttribute("width",n.width||a.width),t.setAttribute("height",n.height||a.height),this.filterManager=e;var p=createNS("feGaussianBlur");p.setAttribute("in","SourceAlpha"),p.setAttribute("result",s+"_drop_shadow_1"),p.setAttribute("stdDeviation","0"),this.feGaussianBlur=p,t.appendChild(p);var h=createNS("feOffset");h.setAttribute("dx","25"),h.setAttribute("dy","0"),h.setAttribute("in",s+"_drop_shadow_1"),h.setAttribute("result",s+"_drop_shadow_2"),this.feOffset=h,t.appendChild(h);var y=createNS("feFlood");y.setAttribute("flood-color","#00ff00"),y.setAttribute("flood-opacity","1"),y.setAttribute("result",s+"_drop_shadow_3"),this.feFlood=y,t.appendChild(y);var P=createNS("feComposite");P.setAttribute("in",s+"_drop_shadow_3"),P.setAttribute("in2",s+"_drop_shadow_2"),P.setAttribute("operator","in"),P.setAttribute("result",s+"_drop_shadow_4"),t.appendChild(P);var c=this.createMergeNode(s,[s+"_drop_shadow_4",r]);t.appendChild(c);}extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(e[0]*255),Math.round(e[1]*255),Math.round(e[2]*255)));}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var i=this.filterManager.effectElements[3].p.v,s=(this.filterManager.effectElements[2].p.v-90)*degToRads,r=i*Math.cos(s),a=i*Math.sin(s);this.feOffset.setAttribute("dx",r),this.feOffset.setAttribute("dy",a);}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,i){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=i,i.matteElement=createNS("g"),i.matteElement.appendChild(i.layerElement),i.matteElement.appendChild(i.transformedElement),i.baseElement=i.matteElement;}SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,i=_svgMatteSymbols.length;ez.timeCompleted&&(q.animInstance.currentFrame=z.timeCompleted);}}(),p=function(){return function(z){var q=s[z.id],W=q.container,ot=q.elements;a(z.tree,W,ot);}}();function h(z,q){for(var W,ot=0;ot"u"?(W.canvas=ut,W.instructionsHandler=E(ut)):(ut instanceof OffscreenCanvas||(ht=ut.transferControlToOffscreen(),mt.rendererSettings.canvas=ht),gt.push(ht));}s[q]=W,t.postMessage({type:"load",payload:{params:mt,id:q}},gt);}),ot}var k={loadAnimation:_};return k}();return lottie});}),yc=gc();});var vl={};fr(vl,{default:()=>bc});var vc,bc,bl=ls(()=>{qs();vc=is((t,e)=>{typeof navigator<"u"&&function(i,s){typeof t=="object"&&typeof e<"u"?e.exports=s():typeof define=="function"&&define.amd?define(s):(i=typeof globalThis<"u"?globalThis:i||self,i.lottie=s());}(t,function(){var i="http://www.w3.org/2000/svg",s="",r=!1,a=-999999,n=function(A){r=!!A;},p=function(){return r},h=function(A){s=A;},y=function(){return s};function P(A){return document.createElement(A)}function c(A,F){var j,U=A.length,at;for(j=0;j1?j[1]=1:j[1]<=0&&(j[1]=0),R(j[0],j[1],j[2])}function Gt(A,F){var j=tt(A[0]*255,A[1]*255,A[2]*255);return j[2]+=F,j[2]>1?j[2]=1:j[2]<0&&(j[2]=0),R(j[0],j[1],j[2])}function Vt(A,F){var j=tt(A[0]*255,A[1]*255,A[2]*255);return j[0]+=F/360,j[0]>1?j[0]-=1:j[0]<0&&(j[0]+=1),R(j[0],j[1],j[2])}(function(){var A=[],F,j;for(F=0;F<256;F+=1)j=F.toString(16),A[F]=j.length===1?"0"+j:j;return function(U,at,it){return U<0&&(U=0),at<0&&(at=0),it<0&&(it=0),"#"+A[U]+A[at]+A[it]}})();var Xt=function(A){w=!!A;},Ht=function(){return w},Qt=function(A){u=A;},Zt=function(){return u},ne=function(A){W=A;},ue=function(){return W},pe=function(A){f=A;};function Wt(A){return document.createElementNS(i,A)}function fe(A){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?fe=function(F){return typeof F}:fe=function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},fe(A)}var jt=function(){var A=1,F=[],j,U,at={onmessage:function(){},postMessage:function(St){j({data:St});}},it={postMessage:function(St){at.onmessage({data:St});}};function vt(St){if(window.Worker&&window.Blob&&p()){var m=new Blob(["var _workerSelf = self; self.onmessage = ",St.toString()],{type:"text/javascript"}),C=URL.createObjectURL(m);return new Worker(C)}return j=St,at}function Mt(){U||(U=vt(function(St){function m(){function T(et,X){var $,Y,N=et.length,rt,nt,K,ft;for(Y=0;Y=0;X-=1)if(et[X].ty==="sh")if(et[X].ks.k.i)d(et[X].ks.k);else for(N=et[X].ks.k.length,Y=0;Y$[0]?!0:$[0]>et[0]?!1:et[1]>$[1]?!0:$[1]>et[1]?!1:et[2]>$[2]?!0:$[2]>et[2]?!1:null}var M=function(){var et=[4,4,14];function X(Y){var N=Y.t.d;Y.t.d={k:[{s:N,t:0}]};}function $(Y){var N,rt=Y.length;for(N=0;N=0;N-=1)if(Y[N].ty==="sh")if(Y[N].ks.k.i)Y[N].ks.k.c=Y[N].closed;else for(K=Y[N].ks.k.length,nt=0;nt500)&&(this._imageLoaded(),clearInterval(o)),O+=1;}.bind(this),50);}function it(G){var O=U(G,this.assetsPath,this.path),o=Wt("image");g?this.testImageLoaded(o):o.addEventListener("load",this._imageLoaded,!1),o.addEventListener("error",function(){d.img=A,this._imageLoaded();}.bind(this),!1),o.setAttributeNS("http://www.w3.org/1999/xlink","href",O),this._elementHelper.append?this._elementHelper.append(o):this._elementHelper.appendChild(o);var d={img:o,assetData:G};return d}function vt(G){var O=U(G,this.assetsPath,this.path),o=P("img");o.crossOrigin="anonymous",o.addEventListener("load",this._imageLoaded,!1),o.addEventListener("error",function(){d.img=A,this._imageLoaded();}.bind(this),!1),o.src=O;var d={img:o,assetData:G};return d}function Mt(G){var O={assetData:G},o=U(G,this.assetsPath,this.path);return jt.loadData(o,function(d){O.img=d,this._footageLoaded();}.bind(this),function(){O.img={},this._footageLoaded();}.bind(this)),O}function bt(G,O){this.imagesLoadedCb=O;var o,d=G.length;for(o=0;othis.animationData.op&&(this.animationData.op=A.op,this.totalFrames=Math.floor(A.op-this.animationData.ip));var F=this.animationData.layers,j,U=F.length,at=A.layers,it,vt=at.length;for(it=0;itthis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},Jt.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(A){this.triggerRenderFrameError(A);}},Jt.prototype.play=function(A){A&&this.name!==A||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},Jt.prototype.pause=function(A){A&&this.name!==A||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},Jt.prototype.togglePause=function(A){A&&this.name!==A||(this.isPaused===!0?this.play():this.pause());},Jt.prototype.stop=function(A){A&&this.name!==A||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},Jt.prototype.getMarkerData=function(A){for(var F,j=0;j=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(F>this.totalFrames?F%this.totalFrames:0)||(j=!0,F=this.totalFrames-1):F>=this.totalFrames?(this.playCount+=1,this.checkSegments(F%this.totalFrames)||(this.setCurrentRawFrameValue(F%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(F):F<0?this.checkSegments(F%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+F%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(j=!0,F=0)):this.setCurrentRawFrameValue(F),j&&(this.setCurrentRawFrameValue(F),this.pause(),this.trigger("complete"));}},Jt.prototype.adjustSegment=function(A,F){this.playCount=0,A[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=A[0]-A[1],this.timeCompleted=this.totalFrames,this.firstFrame=A[1],this.setCurrentRawFrameValue(this.totalFrames-.001-F)):A[1]>A[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=A[1]-A[0],this.timeCompleted=this.totalFrames,this.firstFrame=A[0],this.setCurrentRawFrameValue(.001+F)),this.trigger("segmentStart");},Jt.prototype.setSegment=function(A,F){var j=-1;this.isPaused&&(this.currentRawFrame+this.firstFrameF&&(j=F-A)),this.firstFrame=A,this.totalFrames=F-A,this.timeCompleted=this.totalFrames,j!==-1&&this.goToAndStop(j,!0);},Jt.prototype.playSegments=function(A,F){if(F&&(this.segments.length=0),_e(A[0])==="object"){var j,U=A.length;for(j=0;j=0;Y-=1)F[Y].animation.destroy($);}function I($,Y,N){var rt=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),nt,K=rt.length;for(nt=0;nt0?d=I:o=I;while(Math.abs(L)>it&&++H=at?B(O,Q,o,d):Z===0?Q:T(O,M,M+bt,o,d)}},A}(),oe=function(){function A(F){return F.concat(v(F.length))}return {double:A}}(),xe=function(){return function(A,F,j){var U=0,at=A,it=v(at),vt={newElement:Mt,release:bt};function Mt(){var Bt;return U?(U-=1,Bt=it[U]):Bt=F(),Bt}function bt(Bt){U===at&&(it=oe.double(it),at*=2),j&&j(Bt),it[U]=Bt,U+=1;}return vt}}(),ei=function(){function A(){return {addedLength:0,percents:b("float32",ue()),lengths:b("float32",ue())}}return xe(8,A)}(),Je=function(){function A(){return {lengths:[],totalLength:0}}function F(j){var U,at=j.lengths.length;for(U=0;U-.001&&O<.001}function j(St,m,C,T,B,G,O,o,d){if(C===0&&G===0&&d===0)return F(St,m,T,B,O,o);var x=A.sqrt(A.pow(T-St,2)+A.pow(B-m,2)+A.pow(G-C,2)),M=A.sqrt(A.pow(O-St,2)+A.pow(o-m,2)+A.pow(d-C,2)),L=A.sqrt(A.pow(O-T,2)+A.pow(o-B,2)+A.pow(d-G,2)),I;return x>M?x>L?I=x-M-L:I=L-M-x:L>M?I=L-M-x:I=M-x-L,I>-1e-4&&I<1e-4}var U=function(){return function(St,m,C,T){var B=ue(),G,O,o,d,x,M=0,L,I=[],H=[],Q=ei.newElement();for(o=C.length,G=0;GO?-1:1,x=!0;x;)if(T[G]<=O&&T[G+1]>O?(o=(O-T[G])/(T[G+1]-T[G]),x=!1):G+=d,G<0||G>=B-1){if(G===B-1)return C[G];x=!1;}return C[G]+(C[G+1]-C[G])*o}function Bt(St,m,C,T,B,G){var O=bt(B,G),o=1-O,d=A.round((o*o*o*St[0]+(O*o*o+o*O*o+o*o*O)*C[0]+(O*O*o+o*O*O+O*o*O)*T[0]+O*O*O*m[0])*1e3)/1e3,x=A.round((o*o*o*St[1]+(O*o*o+o*O*o+o*o*O)*C[1]+(O*O*o+o*O*O+O*o*O)*T[1]+O*O*O*m[1])*1e3)/1e3;return [d,x]}var It=b("float32",8);function Nt(St,m,C,T,B,G,O){B<0?B=0:B>1&&(B=1);var o=bt(B,O);G=G>1?1:G;var d=bt(G,O),x,M=St.length,L=1-o,I=1-d,H=L*L*L,Q=o*L*L*3,Z=o*o*L*3,st=o*o*o,pt=L*L*I,et=o*L*I+L*o*I+L*L*d,X=o*o*I+L*o*d+o*L*d,$=o*o*d,Y=L*I*I,N=o*I*I+L*d*I+L*I*d,rt=o*d*I+L*d*d+o*I*d,nt=o*d*d,K=I*I*I,ft=d*I*I+I*d*I+I*I*d,dt=d*d*I+I*d*d+d*I*d,xt=d*d*d;for(x=0;x=Bt.t-j){bt.h&&(bt=Bt),at=0;break}if(Bt.t-j>A){at=it;break}it=G||A=G?d.points.length-1:0;for(St=d.points[x].point.length,Nt=0;Nt=I&&M=G)U[0]=o[0],U[1]=o[1],U[2]=o[2];else if(A<=O)U[0]=bt.s[0],U[1]=bt.s[1],U[2]=bt.s[2];else {var et=Rr(bt.s),X=Rr(o),$=(A-O)/(G-O);sa(U,ia(et,X,$));}else for(it=0;it=G?m=1:A1e-6?(St=Math.acos(m),C=Math.sin(St),T=Math.sin((1-j)*St)/C,B=Math.sin(j*St)/C):(T=1-j,B=j),U[0]=T*at+B*bt,U[1]=T*it+B*Bt,U[2]=T*vt+B*It,U[3]=T*Mt+B*Nt,U}function sa(A,F){var j=F[0],U=F[1],at=F[2],it=F[3],vt=Math.atan2(2*U*it-2*j*at,1-2*U*U-2*at*at),Mt=Math.asin(2*j*U+2*at*it),bt=Math.atan2(2*j*it-2*U*at,1-2*j*j-2*at*at);A[0]=vt/ot,A[1]=Mt/ot,A[2]=bt/ot;}function Rr(A){var F=A[0]*ot,j=A[1]*ot,U=A[2]*ot,at=Math.cos(F/2),it=Math.cos(j/2),vt=Math.cos(U/2),Mt=Math.sin(F/2),bt=Math.sin(j/2),Bt=Math.sin(U/2),It=at*it*vt-Mt*bt*Bt,Nt=Mt*bt*vt+at*it*Bt,St=Mt*it*vt+at*bt*Bt,m=at*bt*vt-Mt*it*Bt;return [Nt,St,m,It]}function Br(){var A=this.comp.renderedFrame-this.offsetTime,F=this.keyframes[0].t-this.offsetTime,j=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(A===this._caching.lastFrame||this._caching.lastFrame!==qi&&(this._caching.lastFrame>=j&&A>=j||this._caching.lastFrame=A&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var U=this.interpolateValue(A,this._caching);this.pv=U;}return this._caching.lastFrame=A,this.pv}function Ts(A){var F;if(this.propType==="unidimensional")F=A*this.mult,Zi(this.v-F)>1e-5&&(this.v=F,this._mdf=!0);else for(var j=0,U=this.v.length;j1e-5&&(this.v[j]=F,this._mdf=!0),j+=1;}function Ms(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var A,F=this.effectsSequence.length,j=this.kf?this.pv:this.data.k;for(A=0;A=this._maxLength&&this.doubleArrayLength(),j){case"v":it=this.v;break;case"i":it=this.i;break;case"o":it=this.o;break;default:it=[];break}(!it[U]||it[U]&&!at)&&(it[U]=Kt.newElement()),it[U][0]=A,it[U][1]=F;},Re.prototype.setTripleAt=function(A,F,j,U,at,it,vt,Mt){this.setXYAt(A,F,"v",vt,Mt),this.setXYAt(j,U,"o",vt,Mt),this.setXYAt(at,it,"i",vt,Mt);},Re.prototype.reverse=function(){var A=new Re;A.setPathData(this.c,this._length);var F=this.v,j=this.o,U=this.i,at=0;this.c&&(A.setTripleAt(F[0][0],F[0][1],U[0][0],U[0][1],j[0][0],j[0][1],0,!1),at=1);var it=this._length-1,vt=this._length,Mt;for(Mt=at;Mt=et[et.length-1].t-this.offsetTime)x=et[et.length-1].s?et[et.length-1].s[0]:et[et.length-2].e[0],L=!0;else {for(var X=d,$=et.length-1,Y=!0,N,rt,nt;Y&&(N=et[X],rt=et[X+1],!(rt.t-this.offsetTime>G));)X<$-1?X+=1:Y=!1;if(nt=this.keyframesMetadata[X]||{},L=N.h===1,d=X,!L){if(G>=rt.t-this.offsetTime)st=1;else if(Go&&G>o)||(this._caching.lastIndex=d0||N>-1e-6&&N<0?U(N*rt)/rt:N}function Y(){var N=this.props,rt=$(N[0]),nt=$(N[1]),K=$(N[4]),ft=$(N[5]),dt=$(N[12]),xt=$(N[13]);return "matrix("+rt+","+nt+","+K+","+ft+","+dt+","+xt+")"}return function(){this.reset=at,this.rotate=it,this.rotateX=vt,this.rotateY=Mt,this.rotateZ=bt,this.skew=It,this.skewFromAxis=Nt,this.shear=Bt,this.scale=St,this.setTransform=m,this.translate=C,this.transform=T,this.multiply=B,this.applyToPoint=x,this.applyToX=M,this.applyToY=L,this.applyToZ=I,this.applyToPointArray=pt,this.applyToTriplePoints=st,this.applyToPointStringified=et,this.toCSS=X,this.to2dCSS=Y,this.clone=o,this.cloneFromProps=d,this.equals=O,this.inversePoints=Z,this.inversePoint=Q,this.getInverseMatrix=H,this._t=this.transform,this.isIdentity=G,this._identity=!0,this._identityCalculated=!1,this.props=b("float32",16),this.reset();}}();function ms(A){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ms=function(F){return typeof F}:ms=function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},ms(A)}var se={};function gr(A){h(A);}function Oe(){te.searchAnimations();}function Ta(A){Xt(A);}function ra(A){pe(A);}function Ma(A){return te.loadAnimation(A)}function wa(A){if(typeof A=="string")switch(A){case"high":ne(200);break;default:case"medium":ne(50);break;case"low":ne(10);break}else !isNaN(A)&&A>1&&ne(A);}function Da(){return typeof navigator<"u"}function Fa(A,F){A==="expressions"&&Qt(F);}function Ia(A){switch(A){case"propertyFactory":return Yt;case"shapePropertyFactory":return ss;case"matrix":return Ce;default:return null}}se.play=te.play,se.pause=te.pause,se.setLocationHref=gr,se.togglePause=te.togglePause,se.setSpeed=te.setSpeed,se.setDirection=te.setDirection,se.stop=te.stop,se.searchAnimations=Oe,se.registerAnimation=te.registerAnimation,se.loadAnimation=Ma,se.setSubframeRendering=Ta,se.resize=te.resize,se.goToAndStop=te.goToAndStop,se.destroy=te.destroy,se.setQuality=wa,se.inBrowser=Da,se.installPlugin=Fa,se.freeze=te.freeze,se.unfreeze=te.unfreeze,se.setVolume=te.setVolume,se.mute=te.mute,se.unmute=te.unmute,se.getRegisteredAnimations=te.getRegisteredAnimations,se.useWebWorker=n,se.setIDPrefix=ra,se.__getFactory=Ia,se.version="5.12.2";function La(){document.readyState==="complete"&&(clearInterval(Ra),Oe());}function Va(A){for(var F=Or.split("&"),j=0;j"u"?"undefined":ms(t))==="object"&&typeof e<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=se);}catch{}var _i=function(){var A={},F={};A.registerModifier=j,A.getModifier=U;function j(at,it){F[at]||(F[at]=it);}function U(at,it,vt){return new F[at](it,vt)}return A}();function ni(){}ni.prototype.initModifierProperties=function(){},ni.prototype.addShapeToModifier=function(){},ni.prototype.addShape=function(A){if(!this.closed){A.sh.container.addDynamicProperty(A.sh);var F={shape:A.sh,data:A,localShapeCollection:Ue.newShapeCollection()};this.shapes.push(F),this.addShapeToModifier(F),this._isAnimated&&A.setAsAnimated();}},ni.prototype.init=function(A,F){this.shapes=[],this.elem=A,this.initDynamicPropertyContainer(A),this.initModifierProperties(A,F),this.frameId=a,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ni.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},c([Ve],ni);function je(){}c([ni],je),je.prototype.initModifierProperties=function(A,F){this.s=Yt.getProp(A,F.s,0,.01,this),this.e=Yt.getProp(A,F.e,0,.01,this),this.o=Yt.getProp(A,F.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=F.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},je.prototype.addShapeToModifier=function(A){A.pathsData=[];},je.prototype.calculateShapeEdges=function(A,F,j,U,at){var it=[];F<=1?it.push({s:A,e:F}):A>=1?it.push({s:A-1,e:F-1}):(it.push({s:A,e:1}),it.push({s:0,e:F-1}));var vt=[],Mt,bt=it.length,Bt;for(Mt=0;MtU+j)){var It,Nt;Bt.s*at<=U?It=0:It=(Bt.s*at-U)/j,Bt.e*at>=U+j?Nt=1:Nt=(Bt.e*at-U)/j,vt.push([It,Nt]);}return vt.length||vt.push([0,0]),vt},je.prototype.releasePathsData=function(A){var F,j=A.length;for(F=0;F1?F=1+U:this.s.v<0?F=0+U:F=this.s.v+U,this.e.v>1?j=1+U:this.e.v<0?j=0+U:j=this.e.v+U,F>j){var at=F;F=j,j=at;}F=Math.round(F*1e4)*1e-4,j=Math.round(j*1e4)*1e-4,this.sValue=F,this.eValue=j;}else F=this.sValue,j=this.eValue;var it,vt,Mt=this.shapes.length,bt,Bt,It,Nt,St,m=0;if(j===F)for(vt=0;vt=0;vt-=1)if(T=this.shapes[vt],T.shape._mdf){for(B=T.localShapeCollection,B.releaseShapes(),this.m===2&&Mt>1?(d=this.calculateShapeEdges(F,j,T.totalShapeLength,o,m),o+=T.totalShapeLength):d=[[G,O]],Bt=d.length,bt=0;bt=1?C.push({s:T.totalShapeLength*(G-1),e:T.totalShapeLength*(O-1)}):(C.push({s:T.totalShapeLength*G,e:T.totalShapeLength}),C.push({s:0,e:T.totalShapeLength*(O-1)}));var x=this.addShapes(T,C[0]);if(C[0].s!==C[0].e){if(C.length>1){var M=T.shape.paths.shapes[T.shape.paths._length-1];if(M.c){var L=x.pop();this.addPaths(x,B),x=this.addShapes(T,C[1],L);}else this.addPaths(x,B),x=this.addShapes(T,C[1]);}this.addPaths(x,B);}}T.shape.paths=B;}}},je.prototype.addPaths=function(A,F){var j,U=A.length;for(j=0;jF.e){j.c=!1;break}else F.s<=Bt&&F.e>=Bt+It.addedLength?(this.addSegment(at[it].v[Mt-1],at[it].o[Mt-1],at[it].i[Mt],at[it].v[Mt],j,Nt,B),B=!1):(m=mi.getNewSegment(at[it].v[Mt-1],at[it].v[Mt],at[it].o[Mt-1],at[it].i[Mt],(F.s-Bt)/It.addedLength,(F.e-Bt)/It.addedLength,St[Mt-1]),this.addSegmentFromArray(m,j,Nt,B),B=!1,j.c=!1),Bt+=It.addedLength,Nt+=1;if(at[it].c&&St.length){if(It=St[Mt-1],Bt<=F.e){var G=St[Mt-1].addedLength;F.s<=Bt&&F.e>=Bt+G?(this.addSegment(at[it].v[Mt-1],at[it].o[Mt-1],at[it].i[0],at[it].v[0],j,Nt,B),B=!1):(m=mi.getNewSegment(at[it].v[Mt-1],at[it].v[0],at[it].o[Mt-1],at[it].i[0],(F.s-Bt)/G,(F.e-Bt)/G,St[Mt-1]),this.addSegmentFromArray(m,j,Nt,B),B=!1,j.c=!1);}else j.c=!1;Bt+=It.addedLength,Nt+=1;}if(j._length&&(j.setXYAt(j.v[T][0],j.v[T][1],"i",T),j.setXYAt(j.v[j._length-1][0],j.v[j._length-1][1],"o",j._length-1)),Bt>F.e)break;it=this.p.keyframes[this.p.keyframes.length-1].t?(It=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/Bt,0),Nt=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/Bt,0)):(It=this.p.pv,Nt=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/Bt,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){It=[],Nt=[];var St=this.px,m=this.py;St._caching.lastFrame+St.offsetTime<=St.keyframes[0].t?(It[0]=St.getValueAtTime((St.keyframes[0].t+.01)/Bt,0),It[1]=m.getValueAtTime((m.keyframes[0].t+.01)/Bt,0),Nt[0]=St.getValueAtTime(St.keyframes[0].t/Bt,0),Nt[1]=m.getValueAtTime(m.keyframes[0].t/Bt,0)):St._caching.lastFrame+St.offsetTime>=St.keyframes[St.keyframes.length-1].t?(It[0]=St.getValueAtTime(St.keyframes[St.keyframes.length-1].t/Bt,0),It[1]=m.getValueAtTime(m.keyframes[m.keyframes.length-1].t/Bt,0),Nt[0]=St.getValueAtTime((St.keyframes[St.keyframes.length-1].t-.01)/Bt,0),Nt[1]=m.getValueAtTime((m.keyframes[m.keyframes.length-1].t-.01)/Bt,0)):(It=[St.pv,m.pv],Nt[0]=St.getValueAtTime((St._caching.lastFrame+St.offsetTime-.01)/Bt,St.offsetTime),Nt[1]=m.getValueAtTime((m._caching.lastFrame+m.offsetTime-.01)/Bt,m.offsetTime));}else Nt=A,It=Nt;this.v.rotate(-Math.atan2(It[1]-Nt[1],It[0]-Nt[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function U(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function at(){}function it(bt){this._addDynamicProperty(bt),this.elem.addDynamicProperty(bt),this._isDirty=!0;}function vt(bt,Bt,It){if(this.elem=bt,this.frameId=-1,this.propType="transform",this.data=Bt,this.v=new Ce,this.pre=new Ce,this.appliedTransformations=0,this.initDynamicPropertyContainer(It||bt),Bt.p&&Bt.p.s?(this.px=Yt.getProp(bt,Bt.p.x,0,0,this),this.py=Yt.getProp(bt,Bt.p.y,0,0,this),Bt.p.z&&(this.pz=Yt.getProp(bt,Bt.p.z,0,0,this))):this.p=Yt.getProp(bt,Bt.p||{k:[0,0,0]},1,0,this),Bt.rx){if(this.rx=Yt.getProp(bt,Bt.rx,0,ot,this),this.ry=Yt.getProp(bt,Bt.ry,0,ot,this),this.rz=Yt.getProp(bt,Bt.rz,0,ot,this),Bt.or.k[0].ti){var Nt,St=Bt.or.k.length;for(Nt=0;Nt0;)j-=1,this._elements.unshift(F[j]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},oi.prototype.resetElements=function(A){var F,j=A.length;for(F=0;F0?Math.floor(St):Math.ceil(St),T=this.pMatrix.props,B=this.rMatrix.props,G=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var O=0;if(St>0){for(;OC;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),O-=1;m&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-m,!0),O-=m);}U=this.data.m===1?0:this._currentCopies-1,at=this.data.m===1?1:-1,it=this._currentCopies;for(var o,d;it;){if(F=this.elemsData[U].it,j=F[F.length-1].transform.mProps.v.props,d=j.length,F[F.length-1].transform.mProps._mdf=!0,F[F.length-1].transform.op._mdf=!0,F[F.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(U/(this._currentCopies-1)),O!==0){for((U!==0&&at===1||U!==this._currentCopies-1&&at===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(B[0],B[1],B[2],B[3],B[4],B[5],B[6],B[7],B[8],B[9],B[10],B[11],B[12],B[13],B[14],B[15]),this.matrix.transform(G[0],G[1],G[2],G[3],G[4],G[5],G[6],G[7],G[8],G[9],G[10],G[11],G[12],G[13],G[14],G[15]),this.matrix.transform(T[0],T[1],T[2],T[3],T[4],T[5],T[6],T[7],T[8],T[9],T[10],T[11],T[12],T[13],T[14],T[15]),o=0;o0&&U<1?[F]:[]:[F-U,F+U].filter(function(at){return at>0&&at<1})},Se.prototype.split=function(A){if(A<=0)return [Nr(this.points[0]),this];if(A>=1)return [this,Nr(this.points[this.points.length-1])];var F=Ai(this.points[0],this.points[1],A),j=Ai(this.points[1],this.points[2],A),U=Ai(this.points[2],this.points[3],A),at=Ai(F,j,A),it=Ai(j,U,A),vt=Ai(at,it,A);return [new Se(this.points[0],F,at,vt,!0),new Se(vt,it,U,this.points[3],!0)]};function vr(A,F){var j=A.points[0][F],U=A.points[A.points.length-1][F];if(j>U){var at=U;U=j,j=at;}for(var it=na(3*A.a[F],2*A.b[F],A.c[F]),vt=0;vt0&&it[vt]<1){var Mt=A.point(it[vt])[F];MtU&&(U=Mt);}return {min:j,max:U}}Se.prototype.bounds=function(){return {x:vr(this,0),y:vr(this,1)}},Se.prototype.boundingBox=function(){var A=this.bounds();return {left:A.x.min,right:A.x.max,top:A.y.min,bottom:A.y.max,width:A.x.max-A.x.min,height:A.y.max-A.y.min,cx:(A.x.max+A.x.min)/2,cy:(A.y.max+A.y.min)/2}};function $e(A,F,j){var U=A.boundingBox();return {cx:U.cx,cy:U.cy,width:U.width,height:U.height,bez:A,t:(F+j)/2,t1:F,t2:j}}function br(A){var F=A.bez.split(.5);return [$e(F[0],A.t1,A.t),$e(F[1],A.t,A.t2)]}function _r(A,F){return Math.abs(A.cx-F.cx)*2=it||A.width<=U&&A.height<=U&&F.width<=U&&F.height<=U){at.push([A.t,F.t]);return}var vt=br(A),Mt=br(F);gs(vt[0],Mt[0],j+1,U,at,it),gs(vt[0],Mt[1],j+1,U,at,it),gs(vt[1],Mt[0],j+1,U,at,it),gs(vt[1],Mt[1],j+1,U,at,it);}}Se.prototype.intersections=function(A,F,j){F===void 0&&(F=2),j===void 0&&(j=7);var U=[];return gs($e(this,0,1),$e(A,0,1),0,F,U,j),U},Se.shapeSegment=function(A,F){var j=(F+1)%A.length();return new Se(A.v[F],A.o[F],A.i[j],A.v[j],!0)},Se.shapeSegmentInverted=function(A,F){var j=(F+1)%A.length();return new Se(A.v[j],A.i[j],A.o[F],A.v[F],!0)};function rr(A,F){return [A[1]*F[2]-A[2]*F[1],A[2]*F[0]-A[0]*F[2],A[0]*F[1]-A[1]*F[0]]}function as(A,F,j,U){var at=[A[0],A[1],1],it=[F[0],F[1],1],vt=[j[0],j[1],1],Mt=[U[0],U[1],1],bt=rr(rr(at,it),rr(vt,Mt));return _s(bt[2])?null:[bt[0]/bt[2],bt[1]/bt[2]]}function Wi(A,F,j){return [A[0]+Math.cos(F)*j,A[1]-Math.sin(F)*j]}function ws(A,F){return Math.hypot(A[0]-F[0],A[1]-F[1])}function Fi(A,F){return Di(A[0],F[0])&&Di(A[1],F[1])}function ns(){}c([ni],ns),ns.prototype.initModifierProperties=function(A,F){this.getValue=this.processKeys,this.amplitude=Yt.getProp(A,F.s,0,null,this),this.frequency=Yt.getProp(A,F.r,0,null,this),this.pointsType=Yt.getProp(A,F.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function Ds(A,F,j,U,at,it,vt){var Mt=j-Math.PI/2,bt=j+Math.PI/2,Bt=F[0]+Math.cos(j)*U*at,It=F[1]-Math.sin(j)*U*at;A.setTripleAt(Bt,It,Bt+Math.cos(Mt)*it,It-Math.sin(Mt)*it,Bt+Math.cos(bt)*vt,It-Math.sin(bt)*vt,A.length());}function ar(A,F){var j=[F[0]-A[0],F[1]-A[1]],U=-Math.PI*.5,at=[Math.cos(U)*j[0]-Math.sin(U)*j[1],Math.sin(U)*j[0]+Math.cos(U)*j[1]];return at}function oa(A,F){var j=F===0?A.length()-1:F-1,U=(F+1)%A.length(),at=A.v[j],it=A.v[U],vt=ar(at,it);return Math.atan2(0,1)-Math.atan2(vt[1],vt[0])}function Gr(A,F,j,U,at,it,vt){var Mt=oa(F,j),bt=F.v[j%F._length],Bt=F.v[j===0?F._length-1:j-1],It=F.v[(j+1)%F._length],Nt=it===2?Math.sqrt(Math.pow(bt[0]-Bt[0],2)+Math.pow(bt[1]-Bt[1],2)):0,St=it===2?Math.sqrt(Math.pow(bt[0]-It[0],2)+Math.pow(bt[1]-It[1],2)):0;Ds(A,F.v[j%F._length],Mt,vt,U,St/((at+1)*2),Nt/((at+1)*2));}function Ba(A,F,j,U,at,it){for(var vt=0;vt1&&F.length>1&&(at=Fs(A[0],F[F.length-1]),at)?[[A[0].split(at[0])[0]],[F[F.length-1].split(at[1])[1]]]:[j,U]}function ha(A){for(var F,j=1;j1&&(F=xr(A[A.length-1],A[0]),A[A.length-1]=F[0],A[0]=F[1]),A}function Pr(A,F){var j=A.inflectionPoints(),U,at,it,vt;if(j.length===0)return [os(A,F)];if(j.length===1||Di(j[1],1))return it=A.split(j[0]),U=it[0],at=it[1],[os(U,F),os(at,F)];it=A.split(j[0]),U=it[0];var Mt=(j[1]-j[0])/(1-j[0]);return it=it[1].split(Mt),vt=it[0],at=it[1],[os(U,F),os(vt,F),os(at,F)]}function xs(){}c([ni],xs),xs.prototype.initModifierProperties=function(A,F){this.getValue=this.processKeys,this.amount=Yt.getProp(A,F.a,0,null,this),this.miterLimit=Yt.getProp(A,F.ml,0,null,this),this.lineJoin=F.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},xs.prototype.processPath=function(A,F,j,U){var at=Fe.newElement();at.c=A.c;var it=A.length();A.c||(it-=1);var vt,Mt,bt,Bt=[];for(vt=0;vt=0;vt-=1)bt=Se.shapeSegmentInverted(A,vt),Bt.push(Pr(bt,F));Bt=ha(Bt);var It=null,Nt=null;for(vt=0;vt0&&(ft=!1),ft){var Lt=P("style");Lt.setAttribute("f-forigin",N[rt].fOrigin),Lt.setAttribute("f-origin",N[rt].origin),Lt.setAttribute("f-family",N[rt].fFamily),Lt.type="text/css",Lt.innerText="@font-face {font-family: "+N[rt].fFamily+"; font-style: normal; src: url('"+N[rt].fPath+"');}",Y.appendChild(Lt);}}else if(N[rt].fOrigin==="g"||N[rt].origin===1){for(dt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),xt=0;xt=55296&&N<=56319){var rt=$.charCodeAt(1);rt>=56320&&rt<=57343&&(Y=(N-55296)*1024+rt-56320+65536);}return Y}function M($,Y){var N=$.toString(16)+Y.toString(16);return Nt.indexOf(N)!==-1}function L($){return $===bt}function I($){return $===Mt}function H($){var Y=x($);return Y>=Bt&&Y<=It}function Q($){return H($.substr(0,2))&&H($.substr(2,2))}function Z($){return j.indexOf($)!==-1}function st($,Y){var N=x($.substr(Y,2));if(N!==U)return !1;var rt=0;for(Y+=2;rt<5;){if(N=x($.substr(Y,2)),Nvt)return !1;rt+=1,Y+=2;}return x($.substr(Y,2))===at}function pt(){this.isLoaded=!0;}var et=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};et.isModifier=M,et.isZeroWidthJoiner=L,et.isFlagEmoji=Q,et.isRegionalCode=H,et.isCombinedCharacter=Z,et.isRegionalFlag=st,et.isVariationSelector=I,et.BLACK_FLAG_CODE_POINT=U;var X={addChars:G,addFonts:B,getCharData:O,getFontByName:d,measureText:o,checkLoadedFonts:C,setIsLoaded:pt};return et.prototype=X,et}();function Er(A){this.animationData=A;}Er.prototype.getProp=function(A){return this.animationData.slots&&this.animationData.slots[A.sid]?Object.assign(A,this.animationData.slots[A.sid].p):A};function Vs(A){return new Er(A)}function Ki(){}Ki.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(A){this.renderableComponents.indexOf(A)===-1&&this.renderableComponents.push(A);},removeRenderableComponent:function(A){this.renderableComponents.indexOf(A)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(A),1);},prepareRenderableFrame:function(A){this.checkLayerLimits(A);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(A){this.data.ip-this.data.st<=A&&this.data.op-this.data.st>A?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var A,F=this.renderableComponents.length;for(A=0;A.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},ke.prototype.show=function(){},ke.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},ke.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},ke.prototype.resume=function(){this._canPlay=!0;},ke.prototype.setRate=function(A){this.audio.rate(A);},ke.prototype.volume=function(A){this._volumeMultiplier=A,this._previousVolume=A*this._volume,this.audio.volume(this._previousVolume);},ke.prototype.getBaseElement=function(){return null},ke.prototype.destroy=function(){},ke.prototype.sourceRectAtTime=function(){},ke.prototype.initExpressions=function(){};function Te(){}Te.prototype.checkLayers=function(A){var F,j=this.layers.length,U;for(this.completeLayers=!0,F=j-1;F>=0;F-=1)this.elements[F]||(U=this.layers[F],U.ip-U.st<=A-this.layers[F].st&&U.op-U.st>A-this.layers[F].st&&this.buildItem(F)),this.completeLayers=this.elements[F]?this.completeLayers:!1;this.checkPendingElements();},Te.prototype.createItem=function(A){switch(A.ty){case 2:return this.createImage(A);case 0:return this.createComp(A);case 1:return this.createSolid(A);case 3:return this.createNull(A);case 4:return this.createShape(A);case 5:return this.createText(A);case 6:return this.createAudio(A);case 13:return this.createCamera(A);case 15:return this.createFootage(A);default:return this.createNull(A)}},Te.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},Te.prototype.createAudio=function(A){return new ke(A,this.globalData,this)},Te.prototype.createFootage=function(A){return new We(A,this.globalData,this)},Te.prototype.buildAllItems=function(){var A,F=this.layers.length;for(A=0;A0&&(this.maskElement.setAttribute("id",St),this.element.maskedElement.setAttribute(O,"url("+y()+"#"+St+")"),U.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}Oi.prototype.getMaskProperty=function(A){return this.viewData[A].prop},Oi.prototype.renderFrame=function(A){var F=this.element.finalTransform.mat,j,U=this.masksProperties.length;for(j=0;j1&&(U+=" C"+F.o[at-1][0]+","+F.o[at-1][1]+" "+F.i[0][0]+","+F.i[0][1]+" "+F.v[0][0]+","+F.v[0][1]),j.lastPath!==U){var vt="";j.elem&&(F.c&&(vt=A.inv?this.solidPath+U:U),j.elem.setAttribute("d",vt)),j.lastPath=U;}},Oi.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var xi=function(){var A={};A.createFilter=F,A.createAlphaToLuminanceFilter=j;function F(U,at){var it=Wt("filter");return it.setAttribute("id",U),at!==!0&&(it.setAttribute("filterUnits","objectBoundingBox"),it.setAttribute("x","0%"),it.setAttribute("y","0%"),it.setAttribute("width","100%"),it.setAttribute("height","100%")),it}function j(){var U=Wt("feColorMatrix");return U.setAttribute("type","matrix"),U.setAttribute("color-interpolation-filters","sRGB"),U.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),U}return A}(),Qi=function(){var A={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(A.maskType=!1),/firefox/i.test(navigator.userAgent)&&(A.svgLumaHidden=!1),A}(),Ss={},Ar="filter_result_";function Rs(A){var F,j="SourceGraphic",U=A.data.ef?A.data.ef.length:0,at=S(),it=xi.createFilter(at,!0),vt=0;this.filters=[];var Mt;for(F=0;F=0&&(j=this.shapeModifiers[A].processShapes(this._isFirstFrame),!j);A-=1);}},searchProcessedElement:function(A){for(var F=this.processedElements,j=0,U=F.length;j.01)return !1;j+=1;}return !0},hs.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var A=0,F=this.data.k.k.length;A0;)G=St.transformers[H].mProps._mdf||G,I-=1,H-=1;if(G)for(I=x-St.styles[o].lvl,H=St.transformers.length-1;I>0;)L.multiply(St.transformers[H].mProps.v),I-=1,H-=1;}else L=A;if(M=St.sh.paths,T=M._length,G){for(B="",C=0;C=1?pt=.99:pt<=-1&&(pt=-.99);var et=Z*pt,X=Math.cos(st+St.a.v)*et+B[0],$=Math.sin(st+St.a.v)*et+B[1];C.setAttribute("fx",X),C.setAttribute("fy",$),T&&!St.g._collapsable&&(St.of.setAttribute("fx",X),St.of.setAttribute("fy",$));}}}function It(Nt,St,m){var C=St.style,T=St.d;T&&(T._mdf||m)&&T.dashStr&&(C.pElem.setAttribute("stroke-dasharray",T.dashStr),C.pElem.setAttribute("stroke-dashoffset",T.dashoffset[0])),St.c&&(St.c._mdf||m)&&C.pElem.setAttribute("stroke","rgb("+z(St.c.v[0])+","+z(St.c.v[1])+","+z(St.c.v[2])+")"),(St.o._mdf||m)&&C.pElem.setAttribute("stroke-opacity",St.o.v),(St.w._mdf||m)&&(C.pElem.setAttribute("stroke-width",St.w.v),C.msElem&&C.msElem.setAttribute("stroke-width",St.w.v));}return j}();function Ee(A,F,j){this.shapes=[],this.shapesData=A.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(A,F,j),this.prevViewData=[];}c([gi,Be,ys,Es,ki,hi,Li],Ee),Ee.prototype.initSecondaryElement=function(){},Ee.prototype.identityMatrix=new Ce,Ee.prototype.buildExpressionInterface=function(){},Ee.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},Ee.prototype.filterUniqueShapes=function(){var A,F=this.shapes.length,j,U,at=this.stylesList.length,it,vt=[],Mt=!1;for(U=0;U1&&Mt&&this.setShapesAsAnimated(vt);}},Ee.prototype.setShapesAsAnimated=function(A){var F,j=A.length;for(F=0;F=0;bt-=1){if(B=this.searchProcessedElement(A[bt]),B?F[bt]=j[B-1]:A[bt]._render=vt,A[bt].ty==="fl"||A[bt].ty==="st"||A[bt].ty==="gf"||A[bt].ty==="gs"||A[bt].ty==="no")B?F[bt].style.closed=!1:F[bt]=this.createStyleElement(A[bt],at),A[bt]._render&&F[bt].style.pElem.parentNode!==U&&U.appendChild(F[bt].style.pElem),St.push(F[bt].style);else if(A[bt].ty==="gr"){if(!B)F[bt]=this.createGroupElement(A[bt]);else for(Nt=F[bt].it.length,It=0;It1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},ye.prototype.addEffect=function(A){this.effectsSequence.push(A),this.elem.addDynamicProperty(this);},ye.prototype.getValue=function(A){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!A)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var F=this.currentData,j=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var U,at=this.effectsSequence.length,it=A||this.data.d.k[this.keysIndex].s;for(U=0;UF);)j+=1;return this.keysIndex!==j&&(this.keysIndex=j),this.data.d.k[this.keysIndex].s},ye.prototype.buildFinalText=function(A){for(var F=[],j=0,U=A.length,at,it,vt=!1,Mt=!1,bt="";j=55296&&at<=56319?Ci.isRegionalFlag(A,j)?bt=A.substr(j,14):(it=A.charCodeAt(j+1),it>=56320&&it<=57343&&(Ci.isModifier(at,it)?(bt=A.substr(j,2),vt=!0):Ci.isFlagEmoji(A.substr(j,4))?bt=A.substr(j,4):bt=A.substr(j,2))):at>56319?(it=A.charCodeAt(j+1),Ci.isVariationSelector(at)&&(vt=!0)):Ci.isZeroWidthJoiner(at)&&(vt=!0,Mt=!0),vt?(F[F.length-1]+=bt,vt=!1):F.push(bt),j+=bt.length;return F},ye.prototype.completeTextData=function(A){A.__complete=!0;var F=this.elem.globalData.fontManager,j=this.data,U=[],at,it,vt,Mt=0,bt,Bt=j.m.g,It=0,Nt=0,St=0,m=[],C=0,T=0,B,G,O=F.getFontByName(A.f),o,d=0,x=Sr(O);A.fWeight=x.weight,A.fStyle=x.style,A.finalSize=A.s,A.finalText=this.buildFinalText(A.t),it=A.finalText.length,A.finalLineHeight=A.lh;var M=A.tr/1e3*A.finalSize,L;if(A.sz)for(var I=!0,H=A.sz[0],Q=A.sz[1],Z,st;I;){st=this.buildFinalText(A.t),Z=0,C=0,it=st.length,M=A.tr/1e3*A.finalSize;var pt=-1;for(at=0;atH&&st[at]!==" "?(pt===-1?it+=1:at=pt,Z+=A.finalLineHeight||A.finalSize*1.2,st.splice(at,pt===at?1:0,"\r"),pt=-1,C=0):(C+=d,C+=M);Z+=O.ascent*A.finalSize/100,this.canResize&&A.finalSize>this.minimumFontSize&&QT?C:T,C=-2*M,bt="",vt=!0,St+=1):bt=X,F.chars?(o=F.getCharData(X,O.fStyle,F.getFontByName(A.f).fFamily),d=vt?0:o.w*A.finalSize/100):d=F.measureText(bt,A.f,A.finalSize),X===" "?et+=d+M:(C+=d+M+et,et=0),U.push({l:d,an:d,add:It,n:vt,anIndexes:[],val:bt,line:St,animatorJustifyOffset:0}),Bt==2){if(It+=d,bt===""||bt===" "||at===it-1){for((bt===""||bt===" ")&&(It-=d);Nt<=at;)U[Nt].an=It,U[Nt].ind=Mt,U[Nt].extra=d,Nt+=1;Mt+=1,It=0;}}else if(Bt==3){if(It+=d,bt===""||at===it-1){for(bt===""&&(It-=d);Nt<=at;)U[Nt].an=It,U[Nt].ind=Mt,U[Nt].extra=d,Nt+=1;It=0,Mt+=1;}}else U[Mt].ind=Mt,U[Mt].extra=0,Mt+=1;if(A.l=U,T=C>T?C:T,m.push(C),A.sz)A.boxWidth=A.sz[0],A.justifyOffset=0;else switch(A.boxWidth=T,A.j){case 1:A.justifyOffset=-A.boxWidth;break;case 2:A.justifyOffset=-A.boxWidth/2;break;default:A.justifyOffset=0;}A.lineWidths=m;var $=j.a,Y,N;G=$.length;var rt,nt,K=[];for(B=0;B0?vt=this.ne.v/100:Mt=-this.ne.v/100,this.xe.v>0?bt=1-this.xe.v/100:Bt=1+this.xe.v/100;var It=Ut.getBezierEasing(vt,Mt,bt,Bt).get,Nt=0,St=this.finalS,m=this.finalE,C=this.data.sh;if(C===2)m===St?Nt=it>=m?1:0:Nt=A(0,F(.5/(m-St)+(it-St)/(m-St),1)),Nt=It(Nt);else if(C===3)m===St?Nt=it>=m?0:1:Nt=1-A(0,F(.5/(m-St)+(it-St)/(m-St),1)),Nt=It(Nt);else if(C===4)m===St?Nt=0:(Nt=A(0,F(.5/(m-St)+(it-St)/(m-St),1)),Nt<.5?Nt*=2:Nt=1-2*(Nt-.5)),Nt=It(Nt);else if(C===5){if(m===St)Nt=0;else {var T=m-St;it=F(A(0,it+.5-St),m-St);var B=-T/2+it,G=T/2;Nt=Math.sqrt(1-B*B/(G*G));}Nt=It(Nt);}else C===6?(m===St?Nt=0:(it=F(A(0,it+.5-St),m-St),Nt=(1+Math.cos(Math.PI+Math.PI*2*it/(m-St)))/2),Nt=It(Nt)):(it>=j(St)&&(it-St<0?Nt=A(0,F(F(m,1)-(St-it),1)):Nt=A(0,F(m-it,1))),Nt=It(Nt));if(this.sm.v!==100){var O=this.sm.v*.01;O===0&&(O=1e-8);var o=.5-O*.5;Nt1&&(Nt=1));}return Nt*this.a.v},getValue:function(it){this.iterateDynamicProperties(),this._mdf=it||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,it&&this.data.r===2&&(this.e.v=this._currentTextLength);var vt=this.data.r===2?1:100/this.data.totalChars,Mt=this.o.v/vt,bt=this.s.v/vt+Mt,Bt=this.e.v/vt+Mt;if(bt>Bt){var It=bt;bt=Bt,Bt=It;}this.finalS=bt,this.finalE=Bt;}},c([Ve],U);function at(it,vt,Mt){return new U(it,vt)}return {getTextSelectorProp:at}}();function Vi(A,F,j){var U={propType:!1},at=Yt.getProp,it=F.a;this.a={r:it.r?at(A,it.r,0,ot,j):U,rx:it.rx?at(A,it.rx,0,ot,j):U,ry:it.ry?at(A,it.ry,0,ot,j):U,sk:it.sk?at(A,it.sk,0,ot,j):U,sa:it.sa?at(A,it.sa,0,ot,j):U,s:it.s?at(A,it.s,1,.01,j):U,a:it.a?at(A,it.a,1,0,j):U,o:it.o?at(A,it.o,0,.01,j):U,p:it.p?at(A,it.p,1,0,j):U,sw:it.sw?at(A,it.sw,0,0,j):U,sc:it.sc?at(A,it.sc,1,0,j):U,fc:it.fc?at(A,it.fc,1,0,j):U,fh:it.fh?at(A,it.fh,0,0,j):U,fs:it.fs?at(A,it.fs,0,.01,j):U,fb:it.fb?at(A,it.fb,0,.01,j):U,t:it.t?at(A,it.t,0,0,j):U},this.s=$r.getTextSelectorProp(A,F.s,j),this.s.t=F.s.t;}function Xi(A,F,j){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=A,this._renderType=F,this._elem=j,this._animatorsData=v(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(j);}Xi.prototype.searchProperties=function(){var A,F=this._textData.a.length,j,U=Yt.getProp;for(A=0;A=C+me||!x?(H=(C+me-B)/T.partialLength,xt=d.point[0]+(T.point[0]-d.point[0])*H,Lt=d.point[1]+(T.point[1]-d.point[1])*H,it.translate(-j[0]*St[It].an*.005,-(j[1]*et)*.01),G=!1):x&&(B+=T.partialLength,O+=1,O>=x.length&&(O=0,o+=1,M[o]?x=M[o].points:Z.v.c?(O=0,o=0,x=M[o].points):(B-=T.partialLength,x=null)),x&&(d=T,T=x[O],L=T.partialLength));dt=St[It].an/2-St[It].add,it.translate(-dt,0,0);}else dt=St[It].an/2-St[It].add,it.translate(-dt,0,0),it.translate(-j[0]*St[It].an*.005,-j[1]*et*.01,0);for(N=0;NA?this.textSpans[A].span:Wt(Mt?"g":"text"),o<=A){if(bt.setAttribute("stroke-linecap","butt"),bt.setAttribute("stroke-linejoin","round"),bt.setAttribute("stroke-miterlimit","4"),this.textSpans[A].span=bt,Mt){var x=Wt("g");bt.appendChild(x),this.textSpans[A].childSpan=x;}this.textSpans[A].span=bt,this.layerElement.appendChild(bt);}bt.style.display="inherit";}if(Bt.reset(),Nt&&(vt[A].n&&(St=-T,m+=j.yOffset,m+=C?1:0,C=!1),this.applyTextPropertiesToMatrix(j,Bt,vt[A].line,St,m),St+=vt[A].l||0,St+=T),Mt){d=this.globalData.fontManager.getCharData(j.finalText[A],U.fStyle,this.globalData.fontManager.getFontByName(j.f).fFamily);var M;if(d.t===1)M=new Ze(d.data,this.globalData,this);else {var L=zs;d.data&&d.data.shapes&&(L=this.buildShapeData(d.data,j.finalSize)),M=new Ee(L,this.globalData,this);}if(this.textSpans[A].glyph){var I=this.textSpans[A].glyph;this.textSpans[A].childSpan.removeChild(I.layerElement),I.destroy();}this.textSpans[A].glyph=M,M._debug=!0,M.prepareFrame(0),M.renderFrame(),this.textSpans[A].childSpan.appendChild(M.layerElement),d.t===1&&this.textSpans[A].childSpan.setAttribute("transform","scale("+j.finalSize/100+","+j.finalSize/100+")");}else Nt&&bt.setAttribute("transform","translate("+Bt.props[12]+","+Bt.props[13]+")"),bt.textContent=vt[A].val,bt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}Nt&&bt&&bt.setAttribute("d",It);}for(;A=0;F-=1)(this.completeLayers||this.elements[F])&&this.elements[F].prepareFrame(A-this.layers[F].st);if(this.globalData._mdf)for(F=0;F=0;j-=1)(this.completeLayers||this.elements[j])&&(this.elements[j].prepareFrame(this.renderedFrame-this.layers[j].st),this.elements[j]._mdf&&(this._mdf=!0));}},ti.prototype.renderInnerContent=function(){var A,F=this.layers.length;for(A=0;Axc});var _c,xc,xl=ls(()=>{qs();_c=is((exports,module)=>{typeof navigator<"u"&&function(t,e){typeof exports=="object"&&typeof module<"u"?module.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.lottie=e());}(exports,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(t){_useWebWorker=!!t;},getWebWorker=function(){return _useWebWorker},setLocationHref=function(t){locationHref=t;},getLocationHref=function(){return locationHref};function createTag(t){return document.createElement(t)}function extendPrototype(t,e){var i,s=t.length,r;for(i=0;i1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}var rgbToHex=function(){var t=[],e,i;for(e=0;e<256;e+=1)i=e.toString(16),t[e]=i.length===1?"0"+i:i;return function(s,r,a){return s<0&&(s=0),r<0&&(r=0),a<0&&(a=0),"#"+t[s]+t[r]+t[a]}}(),setSubframeEnabled=function(t){subframeEnabled=!!t;},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(t){expressionsPlugin=t;},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(t){expressionsInterfaces=t;},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(t){defaultCurveSegments=t;},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(t){idPrefix$1=t;};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(e){return typeof e}:_typeof$5=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$5(t)}var dataManager=function(){var t=1,e=[],i,s,r={onmessage:function(){},postMessage:function(l){i({data:l});}},a={postMessage:function(l){r.onmessage({data:l});}};function n(l){if(window.Worker&&window.Blob&&getWebWorker()){var E=new Blob(["var _workerSelf = self; self.onmessage = ",l.toString()],{type:"text/javascript"}),b=URL.createObjectURL(E);return new Worker(b)}return i=l,r}function p(){s||(s=n(function(l){function E(){function v(ht,yt){var D,V,S=ht.length,R,tt,J,Gt;for(V=0;V=0;yt-=1)if(ht[yt].ty==="sh")if(ht[yt].ks.k.i)_(ht[yt].ks.k);else for(S=ht[yt].ks.k.length,V=0;VD[0]?!0:D[0]>ht[0]?!1:ht[1]>D[1]?!0:D[1]>ht[1]?!1:ht[2]>D[2]?!0:D[2]>ht[2]?!1:null}var z=function(){var ht=[4,4,14];function yt(V){var S=V.t.d;V.t.d={k:[{s:S,t:0}]};}function D(V){var S,R=V.length;for(S=0;S=0;S-=1)if(V[S].ty==="sh")if(V[S].ks.k.i)V[S].ks.k.c=V[S].closed;else for(J=V[S].ks.k.length,tt=0;tt500)&&(this._imageLoaded(),clearInterval(g)),f+=1;}.bind(this),50);}function a(u){var f=s(u,this.assetsPath,this.path),g=createNS("image");isSafari?this.testImageLoaded(g):g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.setAttributeNS("http://www.w3.org/1999/xlink","href",f),this._elementHelper.append?this._elementHelper.append(g):this._elementHelper.appendChild(g);var _={img:g,assetData:u};return _}function n(u){var f=s(u,this.assetsPath,this.path),g=createTag("img");g.crossOrigin="anonymous",g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.src=f;var _={img:g,assetData:u};return _}function p(u){var f={assetData:u},g=s(u,this.assetsPath,this.path);return dataManager.loadData(g,function(_){f.img=_,this._footageLoaded();}.bind(this),function(){f.img={},this._footageLoaded();}.bind(this)),f}function h(u,f){this.imagesLoadedCb=f;var g,_=u.length;for(g=0;g<_;g+=1)u[g].layers||(!u[g].t||u[g].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(u[g]))):u[g].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(u[g]))));}function y(u){this.path=u||"";}function P(u){this.assetsPath=u||"";}function c(u){for(var f=0,g=this.images.length;fthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e=this.animationData.layers,i,s=e.length,r=t.layers,a,n=r.length;for(a=0;athis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(t){this.triggerRenderFrameError(t);}},AnimationItem.prototype.play=function(t){t&&this.name!==t||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},AnimationItem.prototype.pause=function(t){t&&this.name!==t||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(this.isPaused===!0?this.play():this.pause());},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},AnimationItem.prototype.getMarkerData=function(t){for(var e,i=0;i=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):e<0?this.checkSegments(e%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(i=!0,e=0)):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"));}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart");},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(i=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,i!==-1&&this.goToAndStop(i,!0);},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),_typeof$4(t[0])==="object"){var i,s=t.length;for(i=0;i=0;V-=1)e[V].animation.destroy(D);}function W(D,V,S){var R=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),tt,J=R.length;for(tt=0;tt0?_=W:g=W;while(Math.abs(q)>a&&++ot=r?w(f,mt,g,_):gt===0?mt:v(f,z,z+h,g,_)}},t}(),pooling=function(){function t(e){return e.concat(createSizedArray(e.length))}return {double:t}}(),poolFactory=function(){return function(t,e,i){var s=0,r=t,a=createSizedArray(r),n={newElement:p,release:h};function p(){var y;return s?(s-=1,y=a[s]):y=e(),y}function h(y){s===r&&(a=pooling.double(a),r*=2),i&&i(y),a[s]=y,s+=1;}return n}}(),bezierLengthPool=function(){function t(){return {addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,t)}(),segmentsLengthPool=function(){function t(){return {lengths:[],totalLength:0}}function e(i){var s,r=i.lengths.length;for(s=0;s-.001&&f<.001}function i(l,E,b,v,w,u,f,g,_){if(b===0&&u===0&&_===0)return e(l,E,v,w,f,g);var k=t.sqrt(t.pow(v-l,2)+t.pow(w-E,2)+t.pow(u-b,2)),z=t.sqrt(t.pow(f-l,2)+t.pow(g-E,2)+t.pow(_-b,2)),q=t.sqrt(t.pow(f-v,2)+t.pow(g-w,2)+t.pow(_-u,2)),W;return k>z?k>q?W=k-z-q:W=q-z-k:q>z?W=q-z-k:W=z-k-q,W>-1e-4&&W<1e-4}var s=function(){return function(l,E,b,v){var w=getDefaultCurveSegments(),u,f,g,_,k,z=0,q,W=[],ot=[],mt=bezierLengthPool.newElement();for(g=b.length,u=0;uf?-1:1,k=!0;k;)if(v[u]<=f&&v[u+1]>f?(g=(f-v[u])/(v[u+1]-v[u]),k=!1):u+=_,u<0||u>=w-1){if(u===w-1)return b[u];k=!1;}return b[u]+(b[u+1]-b[u])*g}function y(l,E,b,v,w,u){var f=h(w,u),g=1-f,_=t.round((g*g*g*l[0]+(f*g*g+g*f*g+g*g*f)*b[0]+(f*f*g+g*f*f+f*g*f)*v[0]+f*f*f*E[0])*1e3)/1e3,k=t.round((g*g*g*l[1]+(f*g*g+g*f*g+g*g*f)*b[1]+(f*f*g+g*f*f+f*g*f)*v[1]+f*f*f*E[1])*1e3)/1e3;return [_,k]}var P=createTypedArray("float32",8);function c(l,E,b,v,w,u,f){w<0?w=0:w>1&&(w=1);var g=h(w,f);u=u>1?1:u;var _=h(u,f),k,z=l.length,q=1-g,W=1-_,ot=q*q*q,mt=g*q*q*3,gt=g*g*q*3,ut=g*g*g,Ct=q*q*W,ht=g*q*W+q*g*W+q*q*_,yt=g*g*W+q*g*_+g*q*_,D=g*g*_,V=q*W*W,S=g*W*W+q*_*W+q*W*_,R=g*_*W+q*_*_+g*W*_,tt=g*_*_,J=W*W*W,Gt=_*W*W+W*_*W+W*W*_,Vt=_*_*W+W*_*_+_*W*_,Xt=_*_*_;for(k=0;k=y.t-i){h.h&&(h=y),r=0;break}if(y.t-i>t){r=a;break}a=u||t=u?_.points.length-1:0;for(l=_.points[k].point.length,c=0;c=W&&z=u)s[0]=g[0],s[1]=g[1],s[2]=g[2];else if(t<=f)s[0]=h.s[0],s[1]=h.s[1],s[2]=h.s[2];else {var ht=createQuaternion(h.s),yt=createQuaternion(g),D=(t-f)/(u-f);quaternionToEuler(s,slerp(ht,yt,D));}else for(a=0;a=u?E=1:t1e-6?(l=Math.acos(E),b=Math.sin(l),v=Math.sin((1-i)*l)/b,w=Math.sin(i*l)/b):(v=1-i,w=i),s[0]=v*r+w*h,s[1]=v*a+w*y,s[2]=v*n+w*P,s[3]=v*p+w*c,s}function quaternionToEuler(t,e){var i=e[0],s=e[1],r=e[2],a=e[3],n=Math.atan2(2*s*a-2*i*r,1-2*s*s-2*r*r),p=Math.asin(2*i*s+2*r*a),h=Math.atan2(2*i*a-2*s*r,1-2*i*i-2*r*r);t[0]=n/degToRads,t[1]=p/degToRads,t[2]=h/degToRads;}function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,s=t[2]*degToRads,r=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(s/2),p=Math.sin(e/2),h=Math.sin(i/2),y=Math.sin(s/2),P=r*a*n-p*h*y,c=p*h*n+r*a*y,l=p*a*n+r*h*y,E=r*h*n-p*a*y;return [c,l,E,P]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var s=this.interpolateValue(t,this._caching);this.pv=s;}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if(this.propType==="unidimensional")e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,s=this.v.length;i1e-5&&(this.v[i]=e,this._mdf=!0),i+=1;}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t=this._maxLength&&this.doubleArrayLength(),i){case"v":a=this.v;break;case"i":a=this.i;break;case"o":a=this.o;break;default:a=[];break}(!a[s]||a[s]&&!r)&&(a[s]=pointPool.newElement()),a[s][0]=t,a[s][1]=e;},ShapePath.prototype.setTripleAt=function(t,e,i,s,r,a,n,p){this.setXYAt(t,e,"v",n,p),this.setXYAt(i,s,"o",n,p),this.setXYAt(r,a,"i",n,p);},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,s=this.i,r=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],s[0][0],s[0][1],i[0][0],i[0][1],0,!1),r=1);var a=this._length-1,n=this._length,p;for(p=r;p=ht[ht.length-1].t-this.offsetTime)k=ht[ht.length-1].s?ht[ht.length-1].s[0]:ht[ht.length-2].e[0],q=!0;else {for(var yt=_,D=ht.length-1,V=!0,S,R,tt;V&&(S=ht[yt],R=ht[yt+1],!(R.t-this.offsetTime>u));)yt=R.t-this.offsetTime)ut=1;else if(ug&&u>g)||(this._caching.lastIndex=_0||S>-1e-6&&S<0?s(S*R)/R:S}function V(){var S=this.props,R=D(S[0]),tt=D(S[1]),J=D(S[4]),Gt=D(S[5]),Vt=D(S[12]),Xt=D(S[13]);return "matrix("+R+","+tt+","+J+","+Gt+","+Vt+","+Xt+")"}return function(){this.reset=r,this.rotate=a,this.rotateX=n,this.rotateY=p,this.rotateZ=h,this.skew=P,this.skewFromAxis=c,this.shear=y,this.scale=l,this.setTransform=E,this.translate=b,this.transform=v,this.multiply=w,this.applyToPoint=k,this.applyToX=z,this.applyToY=q,this.applyToZ=W,this.applyToPointArray=Ct,this.applyToTriplePoints=ut,this.applyToPointStringified=ht,this.toCSS=yt,this.to2dCSS=V,this.clone=g,this.cloneFromProps=_,this.equals=f,this.inversePoints=gt,this.inversePoint=mt,this.getInverseMatrix=ot,this._t=this.transform,this.isIdentity=u,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset();}}();function _typeof$3(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$3=function(e){return typeof e}:_typeof$3=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$3(t)}var lottie={};function setLocation(t){setLocationHref(t);}function searchAnimations(){animationManager.searchAnimations();}function setSubframeRendering(t){setSubframeEnabled(t);}function setPrefix(t){setIdPrefix(t);}function loadAnimation(t){return animationManager.loadAnimation(t)}function setQuality(t){if(typeof t=="string")switch(t){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10);break}else !isNaN(t)&&t>1&&setDefaultCurveSegments(t);}function inBrowser(){return typeof navigator<"u"}function installPlugin(t,e){t==="expressions"&&setExpressionsPlugin(e);}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.12.2";function checkReady(){document.readyState==="complete"&&(clearInterval(readyStateCheckInterval),searchAnimations());}function getQueryVariable(t){for(var e=queryString.split("&"),i=0;i"u"?"undefined":_typeof$3(exports))==="object"&&typeof module<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=lottie);}catch(t){}var ShapeModifiers=function(){var t={},e={};t.registerModifier=i,t.getModifier=s;function i(r,a){e[r]||(e[r]=a);}function s(r,a,n){return new e[r](a,n)}return t}();function ShapeModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated();}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},extendPrototype([DynamicPropertyContainer],ShapeModifier);function TrimModifier(){}extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[];},TrimModifier.prototype.calculateShapeEdges=function(t,e,i,s,r){var a=[];e<=1?a.push({s:t,e}):t>=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n=[],p,h=a.length,y;for(p=0;ps+i)){var P,c;y.s*r<=s?P=0:P=(y.s*r-s)/i,y.e*r>=s+i?c=1:c=(y.e*r-s)/i,n.push([P,c]);}return n.length||n.push([0,0]),n},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;e1?e=1+s:this.s.v<0?e=0+s:e=this.s.v+s,this.e.v>1?i=1+s:this.e.v<0?i=0+s:i=this.e.v+s,e>i){var r=e;e=i,i=r;}e=Math.round(e*1e4)*1e-4,i=Math.round(i*1e4)*1e-4,this.sValue=e,this.eValue=i;}else e=this.sValue,i=this.eValue;var a,n,p=this.shapes.length,h,y,P,c,l,E=0;if(i===e)for(n=0;n=0;n-=1)if(v=this.shapes[n],v.shape._mdf){for(w=v.localShapeCollection,w.releaseShapes(),this.m===2&&p>1?(_=this.calculateShapeEdges(e,i,v.totalShapeLength,g,E),g+=v.totalShapeLength):_=[[u,f]],y=_.length,h=0;h=1?b.push({s:v.totalShapeLength*(u-1),e:v.totalShapeLength*(f-1)}):(b.push({s:v.totalShapeLength*u,e:v.totalShapeLength}),b.push({s:0,e:v.totalShapeLength*(f-1)}));var k=this.addShapes(v,b[0]);if(b[0].s!==b[0].e){if(b.length>1){var z=v.shape.paths.shapes[v.shape.paths._length-1];if(z.c){var q=k.pop();this.addPaths(k,w),k=this.addShapes(v,b[1],q);}else this.addPaths(k,w),k=this.addShapes(v,b[1]);}this.addPaths(k,w);}}v.shape.paths=w;}}},TrimModifier.prototype.addPaths=function(t,e){var i,s=t.length;for(i=0;ie.e){i.c=!1;break}else e.s<=y&&e.e>=y+P.addedLength?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[p],r[a].v[p],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[p],r[a].o[p-1],r[a].i[p],(e.s-y)/P.addedLength,(e.e-y)/P.addedLength,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1),y+=P.addedLength,c+=1;if(r[a].c&&l.length){if(P=l[p-1],y<=e.e){var u=l[p-1].addedLength;e.s<=y&&e.e>=y+u?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[0],r[a].v[0],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[0],r[a].o[p-1],r[a].i[0],(e.s-y)/u,(e.e-y)/u,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1);}else i.c=!1;y+=P.addedLength,c+=1;}if(i._length&&(i.setXYAt(i.v[v][0],i.v[v][1],"i",v),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],"o",i._length-1)),y>e.e)break;a=this.p.keyframes[this.p.keyframes.length-1].t?(P=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/y,0),c=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/y,0)):(P=this.p.pv,c=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/y,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){P=[],c=[];var l=this.px,E=this.py;l._caching.lastFrame+l.offsetTime<=l.keyframes[0].t?(P[0]=l.getValueAtTime((l.keyframes[0].t+.01)/y,0),P[1]=E.getValueAtTime((E.keyframes[0].t+.01)/y,0),c[0]=l.getValueAtTime(l.keyframes[0].t/y,0),c[1]=E.getValueAtTime(E.keyframes[0].t/y,0)):l._caching.lastFrame+l.offsetTime>=l.keyframes[l.keyframes.length-1].t?(P[0]=l.getValueAtTime(l.keyframes[l.keyframes.length-1].t/y,0),P[1]=E.getValueAtTime(E.keyframes[E.keyframes.length-1].t/y,0),c[0]=l.getValueAtTime((l.keyframes[l.keyframes.length-1].t-.01)/y,0),c[1]=E.getValueAtTime((E.keyframes[E.keyframes.length-1].t-.01)/y,0)):(P=[l.pv,E.pv],c[0]=l.getValueAtTime((l._caching.lastFrame+l.offsetTime-.01)/y,l.offsetTime),c[1]=E.getValueAtTime((E._caching.lastFrame+E.offsetTime-.01)/y,E.offsetTime));}else c=t,P=c;this.v.rotate(-Math.atan2(P[1]-c[1],P[0]-c[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function s(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function r(){}function a(h){this._addDynamicProperty(h),this.elem.addDynamicProperty(h),this._isDirty=!0;}function n(h,y,P){if(this.elem=h,this.frameId=-1,this.propType="transform",this.data=y,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(P||h),y.p&&y.p.s?(this.px=PropertyFactory.getProp(h,y.p.x,0,0,this),this.py=PropertyFactory.getProp(h,y.p.y,0,0,this),y.p.z&&(this.pz=PropertyFactory.getProp(h,y.p.z,0,0,this))):this.p=PropertyFactory.getProp(h,y.p||{k:[0,0,0]},1,0,this),y.rx){if(this.rx=PropertyFactory.getProp(h,y.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(h,y.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(h,y.rz,0,degToRads,this),y.or.k[0].ti){var c,l=y.or.k.length;for(c=0;c0;)i-=1,this._elements.unshift(e[i]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),v=this.pMatrix.props,w=this.rMatrix.props,u=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var f=0;if(l>0){for(;fb;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),f-=1;E&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-E,!0),f-=E);}s=this.data.m===1?0:this._currentCopies-1,r=this.data.m===1?1:-1,a=this._currentCopies;for(var g,_;a;){if(e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,_=i.length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(s/(this._currentCopies-1)),f!==0){for((s!==0&&r===1||s!==this._currentCopies-1&&r===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15]),this.matrix.transform(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]),this.matrix.transform(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15]),g=0;g<_;g+=1)i[g]=this.matrix.props[g];this.matrix.reset();}else for(this.matrix.reset(),g=0;g<_;g+=1)i[g]=this.matrix.props[g];f+=1,a-=1,s+=r;}}else for(a=this._currentCopies,s=0,r=1;a;)e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,a-=1,s+=r;return n},RepeaterModifier.prototype.addShape=function(){};function RoundCornersModifier(){}extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length;},RoundCornersModifier.prototype.processPath=function(t,e){var i=shapePool.newElement();i.c=t.c;var s,r=t._length,a,n,p,h,y,P,c=0,l,E,b,v,w,u;for(s=0;s0&&s<1?[e]:[]:[e-s,e+s].filter(function(r){return r>0&&r<1})},PolynomialBezier.prototype.split=function(t){if(t<=0)return [singlePoint(this.points[0]),this];if(t>=1)return [this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),i=lerpPoint(this.points[1],this.points[2],t),s=lerpPoint(this.points[2],this.points[3],t),r=lerpPoint(e,i,t),a=lerpPoint(i,s,t),n=lerpPoint(r,a,t);return [new PolynomialBezier(this.points[0],e,r,n,!0),new PolynomialBezier(n,a,s,this.points[3],!0)]};function extrema(t,e){var i=t.points[0][e],s=t.points[t.points.length-1][e];if(i>s){var r=s;s=i,i=r;}for(var a=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n0&&a[n]<1){var p=t.point(a[n])[e];ps&&(s=p);}return {min:i,max:s}}PolynomialBezier.prototype.bounds=function(){return {x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return {left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}};function intersectData(t,e,i){var s=t.boundingBox();return {cx:s.cx,cy:s.cy,width:s.width,height:s.height,bez:t,t:(e+i)/2,t1:e,t2:i}}function splitData(t){var e=t.bez.split(.5);return [intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return Math.abs(t.cx-e.cx)*2=a||t.width<=s&&t.height<=s&&e.width<=s&&e.height<=s){r.push([t.t,e.t]);return}var n=splitData(t),p=splitData(e);intersectsImpl(n[0],p[0],i+1,s,r,a),intersectsImpl(n[0],p[1],i+1,s,r,a),intersectsImpl(n[1],p[0],i+1,s,r,a),intersectsImpl(n[1],p[1],i+1,s,r,a);}}PolynomialBezier.prototype.intersections=function(t,e,i){e===void 0&&(e=2),i===void 0&&(i=7);var s=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,s,i),s},PolynomialBezier.shapeSegment=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[i],t.v[i],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[i],t.i[i],t.o[e],t.v[e],!0)};function crossProduct(t,e){return [t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,i,s){var r=[t[0],t[1],1],a=[e[0],e[1],1],n=[i[0],i[1],1],p=[s[0],s[1],1],h=crossProduct(crossProduct(r,a),crossProduct(n,p));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,i){return [t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function setPoint(t,e,i,s,r,a,n){var p=i-Math.PI/2,h=i+Math.PI/2,y=e[0]+Math.cos(i)*s*r,P=e[1]-Math.sin(i)*s*r;t.setTripleAt(y,P,y+Math.cos(p)*a,P-Math.sin(p)*a,y+Math.cos(h)*n,P-Math.sin(h)*n,t.length());}function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],s=-Math.PI*.5,r=[Math.cos(s)*i[0]-Math.sin(s)*i[1],Math.sin(s)*i[0]+Math.cos(s)*i[1]];return r}function getProjectingAngle(t,e){var i=e===0?t.length()-1:e-1,s=(e+1)%t.length(),r=t.v[i],a=t.v[s],n=getPerpendicularVector(r,a);return Math.atan2(0,1)-Math.atan2(n[1],n[0])}function zigZagCorner(t,e,i,s,r,a,n){var p=getProjectingAngle(e,i),h=e.v[i%e._length],y=e.v[i===0?e._length-1:i-1],P=e.v[(i+1)%e._length],c=a===2?Math.sqrt(Math.pow(h[0]-y[0],2)+Math.pow(h[1]-y[1],2)):0,l=a===2?Math.sqrt(Math.pow(h[0]-P[0],2)+Math.pow(h[1]-P[1],2)):0;setPoint(t,e.v[i%e._length],p,n,s,l/((r+1)*2),c/((r+1)*2));}function zigZagSegment(t,e,i,s,r,a){for(var n=0;n1&&e.length>1&&(r=getIntersection(t[0],e[e.length-1]),r)?[[t[0].split(r[0])[0]],[e[e.length-1].split(r[1])[1]]]:[i,s]}function pruneIntersections(t){for(var e,i=1;i1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var i=t.inflectionPoints(),s,r,a,n;if(i.length===0)return [offsetSegment(t,e)];if(i.length===1||floatEqual(i[1],1))return a=t.split(i[0]),s=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(r,e)];a=t.split(i[0]),s=a[0];var p=(i[1]-i[0])/(1-i[0]);return a=a[1].split(p),n=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(n,e),offsetSegment(r,e)]}function OffsetPathModifier(){}extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},OffsetPathModifier.prototype.processPath=function(t,e,i,s){var r=shapePool.newElement();r.c=t.c;var a=t.length();t.c||(a-=1);var n,p,h,y=[];for(n=0;n=0;n-=1)h=PolynomialBezier.shapeSegmentInverted(t,n),y.push(offsetSegmentSplit(h,e));y=pruneIntersections(y);var P=null,c=null;for(n=0;n0&&(Gt=!1),Gt){var Ht=createTag("style");Ht.setAttribute("f-forigin",S[R].fOrigin),Ht.setAttribute("f-origin",S[R].origin),Ht.setAttribute("f-family",S[R].fFamily),Ht.type="text/css",Ht.innerText="@font-face {font-family: "+S[R].fFamily+"; font-style: normal; src: url('"+S[R].fPath+"');}",V.appendChild(Ht);}}else if(S[R].fOrigin==="g"||S[R].origin===1){for(Vt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),Xt=0;Xt=55296&&S<=56319){var R=D.charCodeAt(1);R>=56320&&R<=57343&&(V=(S-55296)*1024+R-56320+65536);}return V}function z(D,V){var S=D.toString(16)+V.toString(16);return c.indexOf(S)!==-1}function q(D){return D===h}function W(D){return D===p}function ot(D){var V=k(D);return V>=y&&V<=P}function mt(D){return ot(D.substr(0,2))&&ot(D.substr(2,2))}function gt(D){return i.indexOf(D)!==-1}function ut(D,V){var S=k(D.substr(V,2));if(S!==s)return !1;var R=0;for(V+=2;R<5;){if(S=k(D.substr(V,2)),Sn)return !1;R+=1,V+=2;}return k(D.substr(V,2))===r}function Ct(){this.isLoaded=!0;}var ht=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};ht.isModifier=z,ht.isZeroWidthJoiner=q,ht.isFlagEmoji=mt,ht.isRegionalCode=ot,ht.isCombinedCharacter=gt,ht.isRegionalFlag=ut,ht.isVariationSelector=W,ht.BLACK_FLAG_CODE_POINT=s;var yt={addChars:u,addFonts:w,getCharData:f,getFontByName:_,measureText:g,checkLoadedFonts:b,setIsLoaded:Ct};return ht.prototype=yt,ht}();function SlotManager(t){this.animationData=t;}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t};function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(t){this.renderableComponents.indexOf(t)===-1&&this.renderableComponents.push(t);},removeRenderableComponent:function(t){this.renderableComponents.indexOf(t)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1);},prepareRenderableFrame:function(t){this.checkLayerLimits(t);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},AudioElement.prototype.resume=function(){this._canPlay=!0;},AudioElement.prototype.setRate=function(t){this.audio.rate(t);},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume);},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){};function BaseRenderer(){}BaseRenderer.prototype.checkLayers=function(t){var e,i=this.layers.length,s;for(this.completeLayers=!0,e=i-1;e>=0;e-=1)this.elements[e]||(s=this.layers[e],s.ip-s.st<=t-this.layers[e].st&&s.op-s.st>t-this.layers[e].st&&this.buildItem(e)),this.completeLayers=this.elements[e]?this.completeLayers:!1;this.checkPendingElements();},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t);default:return this.createNull(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t0&&(this.maskElement.setAttribute("id",l),this.element.maskedElement.setAttribute(f,"url("+getLocationHref()+"#"+l+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e=this.element.finalTransform.mat,i,s=this.masksProperties.length;for(i=0;i1&&(s+=" C"+e.o[r-1][0]+","+e.o[r-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),i.lastPath!==s){var n="";i.elem&&(e.c&&(n=t.inv?this.solidPath+s:s),i.elem.setAttribute("d",n)),i.lastPath=s;}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var filtersFactory=function(){var t={};t.createFilter=e,t.createAlphaToLuminanceFilter=i;function e(s,r){var a=createNS("filter");return a.setAttribute("id",s),r!==!0&&(a.setAttribute("filterUnits","objectBoundingBox"),a.setAttribute("x","0%"),a.setAttribute("y","0%"),a.setAttribute("width","100%"),a.setAttribute("height","100%")),a}function i(){var s=createNS("feColorMatrix");return s.setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),s}return t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects={},idPrefix="filter_result_";function SVGEffects(t){var e,i="SourceGraphic",s=t.data.ef?t.data.ef.length:0,r=createElementID(),a=filtersFactory.createFilter(r,!0),n=0;this.filters=[];var p;for(e=0;e=0&&(i=this.shapeModifiers[t].processShapes(this._isFirstFrame),!i);t-=1);}},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,s=e.length;i.01)return !1;i+=1;}return !0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t0;)u=l.transformers[ot].mProps._mdf||u,W-=1,ot-=1;if(u)for(W=k-l.styles[g].lvl,ot=l.transformers.length-1;W>0;)q.multiply(l.transformers[ot].mProps.v),W-=1,ot-=1;}else q=t;if(z=l.sh.paths,v=z._length,u){for(w="",b=0;b=1?Ct=.99:Ct<=-1&&(Ct=-.99);var ht=gt*Ct,yt=Math.cos(ut+l.a.v)*ht+w[0],D=Math.sin(ut+l.a.v)*ht+w[1];b.setAttribute("fx",yt),b.setAttribute("fy",D),v&&!l.g._collapsable&&(l.of.setAttribute("fx",yt),l.of.setAttribute("fy",D));}}}function P(c,l,E){var b=l.style,v=l.d;v&&(v._mdf||E)&&v.dashStr&&(b.pElem.setAttribute("stroke-dasharray",v.dashStr),b.pElem.setAttribute("stroke-dashoffset",v.dashoffset[0])),l.c&&(l.c._mdf||E)&&b.pElem.setAttribute("stroke","rgb("+bmFloor(l.c.v[0])+","+bmFloor(l.c.v[1])+","+bmFloor(l.c.v[2])+")"),(l.o._mdf||E)&&b.pElem.setAttribute("stroke-opacity",l.o.v),(l.w._mdf||E)&&(b.pElem.setAttribute("stroke-width",l.w.v),b.msElem&&b.msElem.setAttribute("stroke-width",l.w.v));}return i}();function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,i),this.prevViewData=[];}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e=this.shapes.length,i,s,r=this.stylesList.length,a,n=[],p=!1;for(s=0;s1&&p&&this.setShapesAsAnimated(n);}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e=0;h-=1){if(w=this.searchProcessedElement(t[h]),w?e[h]=i[w-1]:t[h]._render=n,t[h].ty==="fl"||t[h].ty==="st"||t[h].ty==="gf"||t[h].ty==="gs"||t[h].ty==="no")w?e[h].style.closed=!1:e[h]=this.createStyleElement(t[h],r),t[h]._render&&e[h].style.pElem.parentNode!==s&&s.appendChild(e[h].style.pElem),l.push(e[h].style);else if(t[h].ty==="gr"){if(!w)e[h]=this.createGroupElement(t[h]);else for(c=e[h].it.length,P=0;P1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this);},TextProperty.prototype.getValue=function(t){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!t)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,i=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var s,r=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(s=0;se);)i+=1;return this.keysIndex!==i&&(this.keysIndex=i),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e=[],i=0,s=t.length,r,a,n=!1,p=!1,h="";i=55296&&r<=56319?FontManager.isRegionalFlag(t,i)?h=t.substr(i,14):(a=t.charCodeAt(i+1),a>=56320&&a<=57343&&(FontManager.isModifier(r,a)?(h=t.substr(i,2),n=!0):FontManager.isFlagEmoji(t.substr(i,4))?h=t.substr(i,4):h=t.substr(i,2))):r>56319?(a=t.charCodeAt(i+1),FontManager.isVariationSelector(r)&&(n=!0)):FontManager.isZeroWidthJoiner(r)&&(n=!0,p=!0),n?(e[e.length-1]+=h,n=!1):e.push(h),i+=h.length;return e},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e=this.elem.globalData.fontManager,i=this.data,s=[],r,a,n,p=0,h,y=i.m.g,P=0,c=0,l=0,E=[],b=0,v=0,w,u,f=e.getFontByName(t.f),g,_=0,k=getFontProperties(f);t.fWeight=k.weight,t.fStyle=k.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),a=t.finalText.length,t.finalLineHeight=t.lh;var z=t.tr/1e3*t.finalSize,q;if(t.sz)for(var W=!0,ot=t.sz[0],mt=t.sz[1],gt,ut;W;){ut=this.buildFinalText(t.t),gt=0,b=0,a=ut.length,z=t.tr/1e3*t.finalSize;var Ct=-1;for(r=0;rot&&ut[r]!==" "?(Ct===-1?a+=1:r=Ct,gt+=t.finalLineHeight||t.finalSize*1.2,ut.splice(r,Ct===r?1:0,"\r"),Ct=-1,b=0):(b+=_,b+=z);gt+=f.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&mtv?b:v,b=-2*z,h="",n=!0,l+=1):h=yt,e.chars?(g=e.getCharData(yt,f.fStyle,e.getFontByName(t.f).fFamily),_=n?0:g.w*t.finalSize/100):_=e.measureText(h,t.f,t.finalSize),yt===" "?ht+=_+z:(b+=_+z+ht,ht=0),s.push({l:_,an:_,add:P,n,anIndexes:[],val:h,line:l,animatorJustifyOffset:0}),y==2){if(P+=_,h===""||h===" "||r===a-1){for((h===""||h===" ")&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;p+=1,P=0;}}else if(y==3){if(P+=_,h===""||r===a-1){for(h===""&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;P=0,p+=1;}}else s[p].ind=p,s[p].extra=0,p+=1;if(t.l=s,v=b>v?b:v,E.push(b),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0;}t.lineWidths=E;var D=i.a,V,S;u=D.length;var R,tt,J=[];for(w=0;w0?n=this.ne.v/100:p=-this.ne.v/100,this.xe.v>0?h=1-this.xe.v/100:y=1+this.xe.v/100;var P=BezierFactory.getBezierEasing(n,p,h,y).get,c=0,l=this.finalS,E=this.finalE,b=this.data.sh;if(b===2)E===l?c=a>=E?1:0:c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===3)E===l?c=a>=E?0:1:c=1-t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===4)E===l?c=0:(c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c<.5?c*=2:c=1-2*(c-.5)),c=P(c);else if(b===5){if(E===l)c=0;else {var v=E-l;a=e(t(0,a+.5-l),E-l);var w=-v/2+a,u=v/2;c=Math.sqrt(1-w*w/(u*u));}c=P(c);}else b===6?(E===l?c=0:(a=e(t(0,a+.5-l),E-l),c=(1+Math.cos(Math.PI+Math.PI*2*a/(E-l)))/2),c=P(c)):(a>=i(l)&&(a-l<0?c=t(0,e(e(E,1)-(l-a),1)):c=t(0,e(E-a,1))),c=P(c));if(this.sm.v!==100){var f=this.sm.v*.01;f===0&&(f=1e-8);var g=.5-f*.5;c1&&(c=1));}return c*this.a.v},getValue:function(a){this.iterateDynamicProperties(),this._mdf=a||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,a&&this.data.r===2&&(this.e.v=this._currentTextLength);var n=this.data.r===2?1:100/this.data.totalChars,p=this.o.v/n,h=this.s.v/n+p,y=this.e.v/n+p;if(h>y){var P=h;h=y,y=P;}this.finalS=h,this.finalE=y;}},extendPrototype([DynamicPropertyContainer],s);function r(a,n,p){return new s(a,n)}return {getTextSelectorProp:r}}();function TextAnimatorDataProperty(t,e,i){var s={propType:!1},r=PropertyFactory.getProp,a=e.a;this.a={r:a.r?r(t,a.r,0,degToRads,i):s,rx:a.rx?r(t,a.rx,0,degToRads,i):s,ry:a.ry?r(t,a.ry,0,degToRads,i):s,sk:a.sk?r(t,a.sk,0,degToRads,i):s,sa:a.sa?r(t,a.sa,0,degToRads,i):s,s:a.s?r(t,a.s,1,.01,i):s,a:a.a?r(t,a.a,1,0,i):s,o:a.o?r(t,a.o,0,.01,i):s,p:a.p?r(t,a.p,1,0,i):s,sw:a.sw?r(t,a.sw,0,0,i):s,sc:a.sc?r(t,a.sc,1,0,i):s,fc:a.fc?r(t,a.fc,1,0,i):s,fh:a.fh?r(t,a.fh,0,0,i):s,fs:a.fs?r(t,a.fs,0,.01,i):s,fb:a.fb?r(t,a.fb,0,.01,i):s,t:a.t?r(t,a.t,0,0,i):s},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,i),this.s.t=e.s.t;}function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=i,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(i);}TextAnimatorProperty.prototype.searchProperties=function(){var t,e=this._textData.a.length,i,s=PropertyFactory.getProp;for(t=0;t=b+oe||!k?(ot=(b+oe-w)/v.partialLength,Xt=_.point[0]+(v.point[0]-_.point[0])*ot,Ht=_.point[1]+(v.point[1]-_.point[1])*ot,a.translate(-i[0]*l[P].an*.005,-(i[1]*ht)*.01),u=!1):k&&(w+=v.partialLength,f+=1,f>=k.length&&(f=0,g+=1,z[g]?k=z[g].points:gt.v.c?(f=0,g=0,k=z[g].points):(w-=v.partialLength,k=null)),k&&(_=v,v=k[f],q=v.partialLength));Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0);}else Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0),a.translate(-i[0]*l[P].an*.005,-i[1]*ht*.01,0);for(S=0;St?this.textSpans[t].span:createNS(p?"g":"text"),g<=t){if(h.setAttribute("stroke-linecap","butt"),h.setAttribute("stroke-linejoin","round"),h.setAttribute("stroke-miterlimit","4"),this.textSpans[t].span=h,p){var k=createNS("g");h.appendChild(k),this.textSpans[t].childSpan=k;}this.textSpans[t].span=h,this.layerElement.appendChild(h);}h.style.display="inherit";}if(y.reset(),c&&(n[t].n&&(l=-v,E+=i.yOffset,E+=b?1:0,b=!1),this.applyTextPropertiesToMatrix(i,y,n[t].line,l,E),l+=n[t].l||0,l+=v),p){_=this.globalData.fontManager.getCharData(i.finalText[t],s.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily);var z;if(_.t===1)z=new SVGCompElement(_.data,this.globalData,this);else {var q=emptyShapeData;_.data&&_.data.shapes&&(q=this.buildShapeData(_.data,i.finalSize)),z=new SVGShapeElement(q,this.globalData,this);}if(this.textSpans[t].glyph){var W=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(W.layerElement),W.destroy();}this.textSpans[t].glyph=z,z._debug=!0,z.prepareFrame(0),z.renderFrame(),this.textSpans[t].childSpan.appendChild(z.layerElement),_.t===1&&this.textSpans[t].childSpan.setAttribute("transform","scale("+i.finalSize/100+","+i.finalSize/100+")");}else c&&h.setAttribute("transform","translate("+y.props[12]+","+y.props[13]+")"),h.textContent=n[t].val,h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}c&&h&&h.setAttribute("d",P);}for(;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0));}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t=y;)mt/=2,gt/=2,ut>>>=1;return (mt+ut)/gt};return ot.int32=function(){return W.g(4)|0},ot.quick=function(){return W.g(4)/4294967296},ot.double=ot,w(f(W.S),t),(_.pass||k||function(mt,gt,ut,Ct){return Ct&&(Ct.S&&b(Ct,W),mt.state=function(){return b(W,{})}),ut?(e[n]=mt,gt):mt})(ot,q,"global"in _?_.global:this==e,_.state)}e["seed"+n]=l;function E(g){var _,k=g.length,z=this,q=0,W=z.i=z.j=0,ot=z.S=[];for(k||(g=[k++]);qi){var s=i;i=e,e=s;}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if(typeof t=="number"||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var i,s=Math.min(t.length,e.length),r=0;for(i=0;i.5?y/(2-r-a):y/(r+a),r){case e:n=(i-s)/y+(i1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e=t[0],i=t[1],s=t[2],r,a,n;if(i===0)r=s,n=s,a=s;else {var p=s<.5?s*(1+i):s+i-s*i,h=2*s-p;r=hue2rgb(h,p,e+1/3),a=hue2rgb(h,p,e),n=hue2rgb(h,p,e-1/3);}return [r,a,n,t[3]]}function linear(t,e,i,s,r){if((s===void 0||r===void 0)&&(s=e,r=i,e=0,i=1),i=i)return r;var n=i===e?0:(t-e)/(i-e);if(!s.length)return s+(r-s)*n;var p,h=s.length,y=createTypedArray("float32",h);for(p=0;p1){for(r=0;r1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(r)){var p,h=r.length,y=createTypedArray("float32",h);for(p=0;pdata.k[e].t&&tdata.k[e+1].t-t?(s=e+2,r=data.k[e+1].t):(s=e+1,r=data.k[e].t);break}s===-1&&(s=e+1,r=data.k[e].t);}var a={};return a.index=s,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,s;if(!data.k.length||typeof data.k[0]=="number")throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var r=Object.prototype.hasOwnProperty.call(data.k[t],"s")?data.k[t].s:data.k[t-1].e;for(s=r.length,i=0;iw.length-1)&&(E=w.length-1),g=w[w.length-1-E].t,f=u-g);var _,k,z;if(l==="pingpong"){var q=Math.floor((v-g)/f);if(q%2!==0)return this.getValueAtTime((f-(v-g)%f+g)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(g/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(u/this.comp.globalData.frameRate,0),mt=this.getValueAtTime(((v-g)%f+g)/this.comp.globalData.frameRate,0),gt=Math.floor((v-g)/f);if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_=u)return this.pv;var f,g;b?(E?f=Math.abs(this.elem.comp.globalData.frameRate*E):f=Math.max(0,this.elem.data.op-u),g=u+f):((!E||E>w.length-1)&&(E=w.length-1),g=w[E].t,f=g-u);var _,k,z;if(l==="pingpong"){var q=Math.floor((u-v)/f);if(q%2===0)return this.getValueAtTime(((u-v)%f+u)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(u/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(g/this.comp.globalData.frameRate,0),mt=this.getValueAtTime((f-(u-v)%f+u)/this.comp.globalData.frameRate,0),gt=Math.floor((u-v)/f)+1;if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_1?(w-v)/(E-1):1,f=0,g=0,_;this.pv.length?_=createTypedArray("float32",this.pv.length):_=0;for(var k;fu){var z=f,q=b.c&&f===g-1?0:f+1,W=(u-_)/w[f].addedLength;k=bez.getPointInSegment(b.v[z],b.v[q],b.o[z],b.i[q],W,w[f]);break}else _+=w[f].addedLength;f+=1;}return k||(k=b.c?[b.v[0][0],b.v[0][1]]:[b.v[b._length-1][0],b.v[b._length-1][1]]),k},vectorOnPath:function(l,E,b){l==1?l=this.v.c:l==0&&(l=.999);var v=this.pointOnPath(l,E),w=this.pointOnPath(l+.001,E),u=w[0]-v[0],f=w[1]-v[1],g=Math.sqrt(Math.pow(u,2)+Math.pow(f,2));if(g===0)return [0,0];var _=b==="tangent"?[u/g,f/g]:[-f/g,u/g];return _},tangentOnPath:function(l,E){return this.vectorOnPath(l,E,"tangent")},normalOnPath:function(l,E){return this.vectorOnPath(l,E,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([P],h),extendPrototype([P],y),y.prototype.getValueAtTime=p,y.prototype.initiateExpression=ExpressionManager.initiateExpression;var c=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(l,E,b,v,w){var u=c(l,E,b,v,w);return u.propertyIndex=E.ix,u.lock=!1,b===3?expressionHelpers.searchExpressions(l,E.pt,u):b===4&&expressionHelpers.searchExpressions(l,E.ks,u),u.k&&l.addDynamicProperty(u),u};}function initialize$1(){addPropertyDecorator();}function addDecorator(){function t(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}TextProperty.prototype.getExpressionValue=function(e,i){var s=this.calculateExpression(i);if(e.t!==s){var r={};return this.copyData(r,e),r.t=s.toString(),r.__complete=!1,r}return e},TextProperty.prototype.searchProperty=function(){var e=this.searchKeyframes(),i=this.searchExpressions();return this.kf=e||i,this.kf},TextProperty.prototype.searchExpressions=t;}function initialize(){addDecorator();}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function t(e,i){var s=createNS("feMerge");s.setAttribute("result",e);var r,a;for(a=0;a=y?c=b<0?s:r:c=s+E*Math.pow((p-t)/b,1/i),P[l]=c,l+=1,a+=256/(n-1);return P.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,i=this.filterManager.effectElements;this.feFuncRComposed&&(t||i[3].p._mdf||i[4].p._mdf||i[5].p._mdf||i[6].p._mdf||i[7].p._mdf)&&(e=this.getTableValue(i[3].p.v,i[4].p.v,i[5].p.v,i[6].p.v,i[7].p.v),this.feFuncRComposed.setAttribute("tableValues",e),this.feFuncGComposed.setAttribute("tableValues",e),this.feFuncBComposed.setAttribute("tableValues",e)),this.feFuncR&&(t||i[10].p._mdf||i[11].p._mdf||i[12].p._mdf||i[13].p._mdf||i[14].p._mdf)&&(e=this.getTableValue(i[10].p.v,i[11].p.v,i[12].p.v,i[13].p.v,i[14].p.v),this.feFuncR.setAttribute("tableValues",e)),this.feFuncG&&(t||i[17].p._mdf||i[18].p._mdf||i[19].p._mdf||i[20].p._mdf||i[21].p._mdf)&&(e=this.getTableValue(i[17].p.v,i[18].p.v,i[19].p.v,i[20].p.v,i[21].p.v),this.feFuncG.setAttribute("tableValues",e)),this.feFuncB&&(t||i[24].p._mdf||i[25].p._mdf||i[26].p._mdf||i[27].p._mdf||i[28].p._mdf)&&(e=this.getTableValue(i[24].p.v,i[25].p.v,i[26].p.v,i[27].p.v,i[28].p.v),this.feFuncB.setAttribute("tableValues",e)),this.feFuncA&&(t||i[31].p._mdf||i[32].p._mdf||i[33].p._mdf||i[34].p._mdf||i[35].p._mdf)&&(e=this.getTableValue(i[31].p.v,i[32].p.v,i[33].p.v,i[34].p.v,i[35].p.v),this.feFuncA.setAttribute("tableValues",e));}};function SVGDropShadowEffect(t,e,i,s,r){var a=e.container.globalData.renderConfig.filterSize,n=e.data.fs||a;t.setAttribute("x",n.x||a.x),t.setAttribute("y",n.y||a.y),t.setAttribute("width",n.width||a.width),t.setAttribute("height",n.height||a.height),this.filterManager=e;var p=createNS("feGaussianBlur");p.setAttribute("in","SourceAlpha"),p.setAttribute("result",s+"_drop_shadow_1"),p.setAttribute("stdDeviation","0"),this.feGaussianBlur=p,t.appendChild(p);var h=createNS("feOffset");h.setAttribute("dx","25"),h.setAttribute("dy","0"),h.setAttribute("in",s+"_drop_shadow_1"),h.setAttribute("result",s+"_drop_shadow_2"),this.feOffset=h,t.appendChild(h);var y=createNS("feFlood");y.setAttribute("flood-color","#00ff00"),y.setAttribute("flood-opacity","1"),y.setAttribute("result",s+"_drop_shadow_3"),this.feFlood=y,t.appendChild(y);var P=createNS("feComposite");P.setAttribute("in",s+"_drop_shadow_3"),P.setAttribute("in2",s+"_drop_shadow_2"),P.setAttribute("operator","in"),P.setAttribute("result",s+"_drop_shadow_4"),t.appendChild(P);var c=this.createMergeNode(s,[s+"_drop_shadow_4",r]);t.appendChild(c);}extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(e[0]*255),Math.round(e[1]*255),Math.round(e[2]*255)));}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var i=this.filterManager.effectElements[3].p.v,s=(this.filterManager.effectElements[2].p.v-90)*degToRads,r=i*Math.cos(s),a=i*Math.sin(s);this.feOffset.setAttribute("dx",r),this.feOffset.setAttribute("dy",a);}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,i){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=i,i.matteElement=createNS("g"),i.matteElement.appendChild(i.layerElement),i.matteElement.appendChild(i.transformedElement),i.baseElement=i.matteElement;}SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,i=_svgMatteSymbols.length;eSc});var Pc,Sc,Sl=ls(()=>{qs();Pc=is((t,e)=>{typeof navigator<"u"&&function(i,s){typeof t=="object"&&typeof e<"u"?e.exports=s():typeof define=="function"&&define.amd?define(s):(i=typeof globalThis<"u"?globalThis:i||self,i.lottie=s());}(t,function(){var i="http://www.w3.org/2000/svg",s="",r=!1,a=-999999,n=function(o){r=!!o;},p=function(){return r},h=function(o){s=o;},y=function(){return s};function P(o){return document.createElement(o)}function c(o,d){var x,M=o.length,L;for(x=0;x1?x[1]=1:x[1]<=0&&(x[1]=0),R(x[0],x[1],x[2])}function Gt(o,d){var x=tt(o[0]*255,o[1]*255,o[2]*255);return x[2]+=d,x[2]>1?x[2]=1:x[2]<0&&(x[2]=0),R(x[0],x[1],x[2])}function Vt(o,d){var x=tt(o[0]*255,o[1]*255,o[2]*255);return x[0]+=d/360,x[0]>1?x[0]-=1:x[0]<0&&(x[0]+=1),R(x[0],x[1],x[2])}(function(){var o=[],d,x;for(d=0;d<256;d+=1)x=d.toString(16),o[d]=x.length===1?"0"+x:x;return function(M,L,I){return M<0&&(M=0),L<0&&(L=0),I<0&&(I=0),"#"+o[M]+o[L]+o[I]}})();var Xt=function(o){w=!!o;},Ht=function(){return w},Qt=function(o){u=o;},Zt=function(){return u},ne=function(o){W=o;},ue=function(){return W},pe=function(o){f=o;};function Wt(o){return document.createElementNS(i,o)}function fe(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?fe=function(d){return typeof d}:fe=function(d){return d&&typeof Symbol=="function"&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},fe(o)}var jt=function(){var o=1,d=[],x,M,L={onmessage:function(){},postMessage:function(X){x({data:X});}},I={postMessage:function(X){L.onmessage({data:X});}};function H(X){if(window.Worker&&window.Blob&&p()){var $=new Blob(["var _workerSelf = self; self.onmessage = ",X.toString()],{type:"text/javascript"}),Y=URL.createObjectURL($);return new Worker(Y)}return x=X,L}function Q(){M||(M=H(function(X){function $(){function N(Dt,Et){var Pt,kt,ct=Dt.length,wt,qt,zt,re;for(kt=0;kt=0;Et-=1)if(Dt[Et].ty==="sh")if(Dt[Et].ks.k.i)dt(Dt[Et].ks.k);else for(ct=Dt[Et].ks.k.length,kt=0;ktPt[0]?!0:Pt[0]>Dt[0]?!1:Dt[1]>Pt[1]?!0:Pt[1]>Dt[1]?!1:Dt[2]>Pt[2]?!0:Pt[2]>Dt[2]?!1:null}var Lt=function(){var Dt=[4,4,14];function Et(kt){var ct=kt.t.d;kt.t.d={k:[{s:ct,t:0}]};}function Pt(kt){var ct,wt=kt.length;for(ct=0;ct=0;ct-=1)if(kt[ct].ty==="sh")if(kt[ct].ks.k.i)kt[ct].ks.k.c=kt[ct].closed;else for(zt=kt[ct].ks.k.length,qt=0;qt500)&&(this._imageLoaded(),clearInterval(ft)),K+=1;}.bind(this),50);}function I(nt){var K=M(nt,this.assetsPath,this.path),ft=Wt("image");g?this.testImageLoaded(ft):ft.addEventListener("load",this._imageLoaded,!1),ft.addEventListener("error",function(){dt.img=o,this._imageLoaded();}.bind(this),!1),ft.setAttributeNS("http://www.w3.org/1999/xlink","href",K),this._elementHelper.append?this._elementHelper.append(ft):this._elementHelper.appendChild(ft);var dt={img:ft,assetData:nt};return dt}function H(nt){var K=M(nt,this.assetsPath,this.path),ft=P("img");ft.crossOrigin="anonymous",ft.addEventListener("load",this._imageLoaded,!1),ft.addEventListener("error",function(){dt.img=o,this._imageLoaded();}.bind(this),!1),ft.src=K;var dt={img:ft,assetData:nt};return dt}function Q(nt){var K={assetData:nt},ft=M(nt,this.assetsPath,this.path);return jt.loadData(ft,function(dt){K.img=dt,this._footageLoaded();}.bind(this),function(){K.img={},this._footageLoaded();}.bind(this)),K}function Z(nt,K){this.imagesLoadedCb=K;var ft,dt=nt.length;for(ft=0;ftthis.animationData.op&&(this.animationData.op=o.op,this.totalFrames=Math.floor(o.op-this.animationData.ip));var d=this.animationData.layers,x,M=d.length,L=o.layers,I,H=L.length;for(I=0;Ithis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},Jt.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(o){this.triggerRenderFrameError(o);}},Jt.prototype.play=function(o){o&&this.name!==o||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},Jt.prototype.pause=function(o){o&&this.name!==o||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},Jt.prototype.togglePause=function(o){o&&this.name!==o||(this.isPaused===!0?this.play():this.pause());},Jt.prototype.stop=function(o){o&&this.name!==o||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},Jt.prototype.getMarkerData=function(o){for(var d,x=0;x=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(d>this.totalFrames?d%this.totalFrames:0)||(x=!0,d=this.totalFrames-1):d>=this.totalFrames?(this.playCount+=1,this.checkSegments(d%this.totalFrames)||(this.setCurrentRawFrameValue(d%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(d):d<0?this.checkSegments(d%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+d%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(x=!0,d=0)):this.setCurrentRawFrameValue(d),x&&(this.setCurrentRawFrameValue(d),this.pause(),this.trigger("complete"));}},Jt.prototype.adjustSegment=function(o,d){this.playCount=0,o[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=o[0]-o[1],this.timeCompleted=this.totalFrames,this.firstFrame=o[1],this.setCurrentRawFrameValue(this.totalFrames-.001-d)):o[1]>o[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=o[1]-o[0],this.timeCompleted=this.totalFrames,this.firstFrame=o[0],this.setCurrentRawFrameValue(.001+d)),this.trigger("segmentStart");},Jt.prototype.setSegment=function(o,d){var x=-1;this.isPaused&&(this.currentRawFrame+this.firstFramed&&(x=d-o)),this.firstFrame=o,this.totalFrames=d-o,this.timeCompleted=this.totalFrames,x!==-1&&this.goToAndStop(x,!0);},Jt.prototype.playSegments=function(o,d){if(d&&(this.segments.length=0),_e(o[0])==="object"){var x,M=o.length;for(x=0;x=0;kt-=1)d[kt].animation.destroy(Pt);}function Ft(Pt,kt,ct){var wt=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),qt,zt=wt.length;for(qt=0;qt0?dt=Ft:ft=Ft;while(Math.abs(Ot)>I&&++$t=L?rt(K,_t,ft,dt):At===0?_t:N(K,Lt,Lt+Z,ft,dt)}},o}(),oe=function(){function o(d){return d.concat(v(d.length))}return {double:o}}(),xe=function(){return function(o,d,x){var M=0,L=o,I=v(L),H={newElement:Q,release:Z};function Q(){var st;return M?(M-=1,st=I[M]):st=d(),st}function Z(st){M===L&&(I=oe.double(I),L*=2),x&&x(st),I[M]=st,M+=1;}return H}}(),ei=function(){function o(){return {addedLength:0,percents:b("float32",ue()),lengths:b("float32",ue())}}return xe(8,o)}(),Je=function(){function o(){return {lengths:[],totalLength:0}}function d(x){var M,L=x.lengths.length;for(M=0;M-.001&&K<.001}function x(X,$,Y,N,rt,nt,K,ft,dt){if(Y===0&&nt===0&&dt===0)return d(X,$,N,rt,K,ft);var xt=o.sqrt(o.pow(N-X,2)+o.pow(rt-$,2)+o.pow(nt-Y,2)),Lt=o.sqrt(o.pow(K-X,2)+o.pow(ft-$,2)+o.pow(dt-Y,2)),Ot=o.sqrt(o.pow(K-N,2)+o.pow(ft-rt,2)+o.pow(dt-nt,2)),Ft;return xt>Lt?xt>Ot?Ft=xt-Lt-Ot:Ft=Ot-Lt-xt:Ot>Lt?Ft=Ot-Lt-xt:Ft=Lt-xt-Ot,Ft>-1e-4&&Ft<1e-4}var M=function(){return function(X,$,Y,N){var rt=ue(),nt,K,ft,dt,xt,Lt=0,Ot,Ft=[],$t=[],_t=ei.newElement();for(ft=Y.length,nt=0;ntK?-1:1,xt=!0;xt;)if(N[nt]<=K&&N[nt+1]>K?(ft=(K-N[nt])/(N[nt+1]-N[nt]),xt=!1):nt+=dt,nt<0||nt>=rt-1){if(nt===rt-1)return Y[nt];xt=!1;}return Y[nt]+(Y[nt+1]-Y[nt])*ft}function st(X,$,Y,N,rt,nt){var K=Z(rt,nt),ft=1-K,dt=o.round((ft*ft*ft*X[0]+(K*ft*ft+ft*K*ft+ft*ft*K)*Y[0]+(K*K*ft+ft*K*K+K*ft*K)*N[0]+K*K*K*$[0])*1e3)/1e3,xt=o.round((ft*ft*ft*X[1]+(K*ft*ft+ft*K*ft+ft*ft*K)*Y[1]+(K*K*ft+ft*K*K+K*ft*K)*N[1]+K*K*K*$[1])*1e3)/1e3;return [dt,xt]}var pt=b("float32",8);function et(X,$,Y,N,rt,nt,K){rt<0?rt=0:rt>1&&(rt=1);var ft=Z(rt,K);nt=nt>1?1:nt;var dt=Z(nt,K),xt,Lt=X.length,Ot=1-ft,Ft=1-dt,$t=Ot*Ot*Ot,_t=ft*Ot*Ot*3,At=ft*ft*Ot*3,lt=ft*ft*ft,Tt=Ot*Ot*Ft,Dt=ft*Ot*Ft+Ot*ft*Ft+Ot*Ot*dt,Et=ft*ft*Ft+Ot*ft*dt+ft*Ot*dt,Pt=ft*ft*dt,kt=Ot*Ft*Ft,ct=ft*Ft*Ft+Ot*dt*Ft+Ot*Ft*dt,wt=ft*dt*Ft+Ot*dt*dt+ft*Ft*dt,qt=ft*dt*dt,zt=Ft*Ft*Ft,re=dt*Ft*Ft+Ft*dt*Ft+Ft*Ft*dt,ie=dt*dt*Ft+Ft*dt*dt+dt*Ft*dt,de=dt*dt*dt;for(xt=0;xt=st.t-x){Z.h&&(Z=st),L=0;break}if(st.t-x>o){L=I;break}I=nt||o=nt?dt.points.length-1:0;for(X=dt.points[xt].point.length,et=0;et=Ft&&Lt=nt)M[0]=ft[0],M[1]=ft[1],M[2]=ft[2];else if(o<=K)M[0]=Z.s[0],M[1]=Z.s[1],M[2]=Z.s[2];else {var Dt=Rr(Z.s),Et=Rr(ft),Pt=(o-K)/(nt-K);sa(M,ia(Dt,Et,Pt));}else for(I=0;I=nt?$=1:o1e-6?(X=Math.acos($),Y=Math.sin(X),N=Math.sin((1-x)*X)/Y,rt=Math.sin(x*X)/Y):(N=1-x,rt=x),M[0]=N*L+rt*Z,M[1]=N*I+rt*st,M[2]=N*H+rt*pt,M[3]=N*Q+rt*et,M}function sa(o,d){var x=d[0],M=d[1],L=d[2],I=d[3],H=Math.atan2(2*M*I-2*x*L,1-2*M*M-2*L*L),Q=Math.asin(2*x*M+2*L*I),Z=Math.atan2(2*x*I-2*M*L,1-2*x*x-2*L*L);o[0]=H/ot,o[1]=Q/ot,o[2]=Z/ot;}function Rr(o){var d=o[0]*ot,x=o[1]*ot,M=o[2]*ot,L=Math.cos(d/2),I=Math.cos(x/2),H=Math.cos(M/2),Q=Math.sin(d/2),Z=Math.sin(x/2),st=Math.sin(M/2),pt=L*I*H-Q*Z*st,et=Q*Z*H+L*I*st,X=Q*I*H+L*Z*st,$=L*Z*H-Q*I*st;return [et,X,$,pt]}function Br(){var o=this.comp.renderedFrame-this.offsetTime,d=this.keyframes[0].t-this.offsetTime,x=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(o===this._caching.lastFrame||this._caching.lastFrame!==qi&&(this._caching.lastFrame>=x&&o>=x||this._caching.lastFrame=o&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var M=this.interpolateValue(o,this._caching);this.pv=M;}return this._caching.lastFrame=o,this.pv}function Ts(o){var d;if(this.propType==="unidimensional")d=o*this.mult,Zi(this.v-d)>1e-5&&(this.v=d,this._mdf=!0);else for(var x=0,M=this.v.length;x1e-5&&(this.v[x]=d,this._mdf=!0),x+=1;}function Ms(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var o,d=this.effectsSequence.length,x=this.kf?this.pv:this.data.k;for(o=0;o=this._maxLength&&this.doubleArrayLength(),x){case"v":I=this.v;break;case"i":I=this.i;break;case"o":I=this.o;break;default:I=[];break}(!I[M]||I[M]&&!L)&&(I[M]=Kt.newElement()),I[M][0]=o,I[M][1]=d;},Re.prototype.setTripleAt=function(o,d,x,M,L,I,H,Q){this.setXYAt(o,d,"v",H,Q),this.setXYAt(x,M,"o",H,Q),this.setXYAt(L,I,"i",H,Q);},Re.prototype.reverse=function(){var o=new Re;o.setPathData(this.c,this._length);var d=this.v,x=this.o,M=this.i,L=0;this.c&&(o.setTripleAt(d[0][0],d[0][1],M[0][0],M[0][1],x[0][0],x[0][1],0,!1),L=1);var I=this._length-1,H=this._length,Q;for(Q=L;Q=Dt[Dt.length-1].t-this.offsetTime)xt=Dt[Dt.length-1].s?Dt[Dt.length-1].s[0]:Dt[Dt.length-2].e[0],Ot=!0;else {for(var Et=dt,Pt=Dt.length-1,kt=!0,ct,wt,qt;kt&&(ct=Dt[Et],wt=Dt[Et+1],!(wt.t-this.offsetTime>nt));)Et=wt.t-this.offsetTime)lt=1;else if(ntft&&nt>ft)||(this._caching.lastIndex=dt0||ct>-1e-6&&ct<0?M(ct*wt)/wt:ct}function kt(){var ct=this.props,wt=Pt(ct[0]),qt=Pt(ct[1]),zt=Pt(ct[4]),re=Pt(ct[5]),ie=Pt(ct[12]),de=Pt(ct[13]);return "matrix("+wt+","+qt+","+zt+","+re+","+ie+","+de+")"}return function(){this.reset=L,this.rotate=I,this.rotateX=H,this.rotateY=Q,this.rotateZ=Z,this.skew=pt,this.skewFromAxis=et,this.shear=st,this.scale=X,this.setTransform=$,this.translate=Y,this.transform=N,this.multiply=rt,this.applyToPoint=xt,this.applyToX=Lt,this.applyToY=Ot,this.applyToZ=Ft,this.applyToPointArray=Tt,this.applyToTriplePoints=lt,this.applyToPointStringified=Dt,this.toCSS=Et,this.to2dCSS=kt,this.clone=ft,this.cloneFromProps=dt,this.equals=K,this.inversePoints=At,this.inversePoint=_t,this.getInverseMatrix=$t,this._t=this.transform,this.isIdentity=nt,this._identity=!0,this._identityCalculated=!1,this.props=b("float32",16),this.reset();}}();function ms(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ms=function(d){return typeof d}:ms=function(d){return d&&typeof Symbol=="function"&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},ms(o)}var se={};function gr(o){h(o);}function Oe(){te.searchAnimations();}function Ta(o){Xt(o);}function ra(o){pe(o);}function Ma(o){return te.loadAnimation(o)}function wa(o){if(typeof o=="string")switch(o){case"high":ne(200);break;default:case"medium":ne(50);break;case"low":ne(10);break}else !isNaN(o)&&o>1&&ne(o);}function Da(){return typeof navigator<"u"}function Fa(o,d){o==="expressions"&&Qt(d);}function Ia(o){switch(o){case"propertyFactory":return Yt;case"shapePropertyFactory":return ss;case"matrix":return Ce;default:return null}}se.play=te.play,se.pause=te.pause,se.setLocationHref=gr,se.togglePause=te.togglePause,se.setSpeed=te.setSpeed,se.setDirection=te.setDirection,se.stop=te.stop,se.searchAnimations=Oe,se.registerAnimation=te.registerAnimation,se.loadAnimation=Ma,se.setSubframeRendering=Ta,se.resize=te.resize,se.goToAndStop=te.goToAndStop,se.destroy=te.destroy,se.setQuality=wa,se.inBrowser=Da,se.installPlugin=Fa,se.freeze=te.freeze,se.unfreeze=te.unfreeze,se.setVolume=te.setVolume,se.mute=te.mute,se.unmute=te.unmute,se.getRegisteredAnimations=te.getRegisteredAnimations,se.useWebWorker=n,se.setIDPrefix=ra,se.__getFactory=Ia,se.version="5.12.2";function La(){document.readyState==="complete"&&(clearInterval(Ra),Oe());}function Va(o){for(var d=Or.split("&"),x=0;x"u"?"undefined":ms(t))==="object"&&typeof e<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=se);}catch{}var _i=function(){var o={},d={};o.registerModifier=x,o.getModifier=M;function x(L,I){d[L]||(d[L]=I);}function M(L,I,H){return new d[L](I,H)}return o}();function ni(){}ni.prototype.initModifierProperties=function(){},ni.prototype.addShapeToModifier=function(){},ni.prototype.addShape=function(o){if(!this.closed){o.sh.container.addDynamicProperty(o.sh);var d={shape:o.sh,data:o,localShapeCollection:Ue.newShapeCollection()};this.shapes.push(d),this.addShapeToModifier(d),this._isAnimated&&o.setAsAnimated();}},ni.prototype.init=function(o,d){this.shapes=[],this.elem=o,this.initDynamicPropertyContainer(o),this.initModifierProperties(o,d),this.frameId=a,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ni.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},c([Ve],ni);function je(){}c([ni],je),je.prototype.initModifierProperties=function(o,d){this.s=Yt.getProp(o,d.s,0,.01,this),this.e=Yt.getProp(o,d.e,0,.01,this),this.o=Yt.getProp(o,d.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=d.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},je.prototype.addShapeToModifier=function(o){o.pathsData=[];},je.prototype.calculateShapeEdges=function(o,d,x,M,L){var I=[];d<=1?I.push({s:o,e:d}):o>=1?I.push({s:o-1,e:d-1}):(I.push({s:o,e:1}),I.push({s:0,e:d-1}));var H=[],Q,Z=I.length,st;for(Q=0;QM+x)){var pt,et;st.s*L<=M?pt=0:pt=(st.s*L-M)/x,st.e*L>=M+x?et=1:et=(st.e*L-M)/x,H.push([pt,et]);}return H.length||H.push([0,0]),H},je.prototype.releasePathsData=function(o){var d,x=o.length;for(d=0;d1?d=1+M:this.s.v<0?d=0+M:d=this.s.v+M,this.e.v>1?x=1+M:this.e.v<0?x=0+M:x=this.e.v+M,d>x){var L=d;d=x,x=L;}d=Math.round(d*1e4)*1e-4,x=Math.round(x*1e4)*1e-4,this.sValue=d,this.eValue=x;}else d=this.sValue,x=this.eValue;var I,H,Q=this.shapes.length,Z,st,pt,et,X,$=0;if(x===d)for(H=0;H=0;H-=1)if(N=this.shapes[H],N.shape._mdf){for(rt=N.localShapeCollection,rt.releaseShapes(),this.m===2&&Q>1?(dt=this.calculateShapeEdges(d,x,N.totalShapeLength,ft,$),ft+=N.totalShapeLength):dt=[[nt,K]],st=dt.length,Z=0;Z=1?Y.push({s:N.totalShapeLength*(nt-1),e:N.totalShapeLength*(K-1)}):(Y.push({s:N.totalShapeLength*nt,e:N.totalShapeLength}),Y.push({s:0,e:N.totalShapeLength*(K-1)}));var xt=this.addShapes(N,Y[0]);if(Y[0].s!==Y[0].e){if(Y.length>1){var Lt=N.shape.paths.shapes[N.shape.paths._length-1];if(Lt.c){var Ot=xt.pop();this.addPaths(xt,rt),xt=this.addShapes(N,Y[1],Ot);}else this.addPaths(xt,rt),xt=this.addShapes(N,Y[1]);}this.addPaths(xt,rt);}}N.shape.paths=rt;}}},je.prototype.addPaths=function(o,d){var x,M=o.length;for(x=0;xd.e){x.c=!1;break}else d.s<=st&&d.e>=st+pt.addedLength?(this.addSegment(L[I].v[Q-1],L[I].o[Q-1],L[I].i[Q],L[I].v[Q],x,et,rt),rt=!1):($=mi.getNewSegment(L[I].v[Q-1],L[I].v[Q],L[I].o[Q-1],L[I].i[Q],(d.s-st)/pt.addedLength,(d.e-st)/pt.addedLength,X[Q-1]),this.addSegmentFromArray($,x,et,rt),rt=!1,x.c=!1),st+=pt.addedLength,et+=1;if(L[I].c&&X.length){if(pt=X[Q-1],st<=d.e){var nt=X[Q-1].addedLength;d.s<=st&&d.e>=st+nt?(this.addSegment(L[I].v[Q-1],L[I].o[Q-1],L[I].i[0],L[I].v[0],x,et,rt),rt=!1):($=mi.getNewSegment(L[I].v[Q-1],L[I].v[0],L[I].o[Q-1],L[I].i[0],(d.s-st)/nt,(d.e-st)/nt,X[Q-1]),this.addSegmentFromArray($,x,et,rt),rt=!1,x.c=!1);}else x.c=!1;st+=pt.addedLength,et+=1;}if(x._length&&(x.setXYAt(x.v[N][0],x.v[N][1],"i",N),x.setXYAt(x.v[x._length-1][0],x.v[x._length-1][1],"o",x._length-1)),st>d.e)break;I=this.p.keyframes[this.p.keyframes.length-1].t?(pt=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/st,0),et=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/st,0)):(pt=this.p.pv,et=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/st,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){pt=[],et=[];var X=this.px,$=this.py;X._caching.lastFrame+X.offsetTime<=X.keyframes[0].t?(pt[0]=X.getValueAtTime((X.keyframes[0].t+.01)/st,0),pt[1]=$.getValueAtTime(($.keyframes[0].t+.01)/st,0),et[0]=X.getValueAtTime(X.keyframes[0].t/st,0),et[1]=$.getValueAtTime($.keyframes[0].t/st,0)):X._caching.lastFrame+X.offsetTime>=X.keyframes[X.keyframes.length-1].t?(pt[0]=X.getValueAtTime(X.keyframes[X.keyframes.length-1].t/st,0),pt[1]=$.getValueAtTime($.keyframes[$.keyframes.length-1].t/st,0),et[0]=X.getValueAtTime((X.keyframes[X.keyframes.length-1].t-.01)/st,0),et[1]=$.getValueAtTime(($.keyframes[$.keyframes.length-1].t-.01)/st,0)):(pt=[X.pv,$.pv],et[0]=X.getValueAtTime((X._caching.lastFrame+X.offsetTime-.01)/st,X.offsetTime),et[1]=$.getValueAtTime(($._caching.lastFrame+$.offsetTime-.01)/st,$.offsetTime));}else et=o,pt=et;this.v.rotate(-Math.atan2(pt[1]-et[1],pt[0]-et[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function M(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function L(){}function I(Z){this._addDynamicProperty(Z),this.elem.addDynamicProperty(Z),this._isDirty=!0;}function H(Z,st,pt){if(this.elem=Z,this.frameId=-1,this.propType="transform",this.data=st,this.v=new Ce,this.pre=new Ce,this.appliedTransformations=0,this.initDynamicPropertyContainer(pt||Z),st.p&&st.p.s?(this.px=Yt.getProp(Z,st.p.x,0,0,this),this.py=Yt.getProp(Z,st.p.y,0,0,this),st.p.z&&(this.pz=Yt.getProp(Z,st.p.z,0,0,this))):this.p=Yt.getProp(Z,st.p||{k:[0,0,0]},1,0,this),st.rx){if(this.rx=Yt.getProp(Z,st.rx,0,ot,this),this.ry=Yt.getProp(Z,st.ry,0,ot,this),this.rz=Yt.getProp(Z,st.rz,0,ot,this),st.or.k[0].ti){var et,X=st.or.k.length;for(et=0;et0;)x-=1,this._elements.unshift(d[x]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},oi.prototype.resetElements=function(o){var d,x=o.length;for(d=0;d0?Math.floor(X):Math.ceil(X),N=this.pMatrix.props,rt=this.rMatrix.props,nt=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var K=0;if(X>0){for(;KY;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),K-=1;$&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-$,!0),K-=$);}M=this.data.m===1?0:this._currentCopies-1,L=this.data.m===1?1:-1,I=this._currentCopies;for(var ft,dt;I;){if(d=this.elemsData[M].it,x=d[d.length-1].transform.mProps.v.props,dt=x.length,d[d.length-1].transform.mProps._mdf=!0,d[d.length-1].transform.op._mdf=!0,d[d.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(M/(this._currentCopies-1)),K!==0){for((M!==0&&L===1||M!==this._currentCopies-1&&L===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(rt[0],rt[1],rt[2],rt[3],rt[4],rt[5],rt[6],rt[7],rt[8],rt[9],rt[10],rt[11],rt[12],rt[13],rt[14],rt[15]),this.matrix.transform(nt[0],nt[1],nt[2],nt[3],nt[4],nt[5],nt[6],nt[7],nt[8],nt[9],nt[10],nt[11],nt[12],nt[13],nt[14],nt[15]),this.matrix.transform(N[0],N[1],N[2],N[3],N[4],N[5],N[6],N[7],N[8],N[9],N[10],N[11],N[12],N[13],N[14],N[15]),ft=0;ft0&&M<1?[d]:[]:[d-M,d+M].filter(function(L){return L>0&&L<1})},Se.prototype.split=function(o){if(o<=0)return [Nr(this.points[0]),this];if(o>=1)return [this,Nr(this.points[this.points.length-1])];var d=Ai(this.points[0],this.points[1],o),x=Ai(this.points[1],this.points[2],o),M=Ai(this.points[2],this.points[3],o),L=Ai(d,x,o),I=Ai(x,M,o),H=Ai(L,I,o);return [new Se(this.points[0],d,L,H,!0),new Se(H,I,M,this.points[3],!0)]};function vr(o,d){var x=o.points[0][d],M=o.points[o.points.length-1][d];if(x>M){var L=M;M=x,x=L;}for(var I=na(3*o.a[d],2*o.b[d],o.c[d]),H=0;H0&&I[H]<1){var Q=o.point(I[H])[d];QM&&(M=Q);}return {min:x,max:M}}Se.prototype.bounds=function(){return {x:vr(this,0),y:vr(this,1)}},Se.prototype.boundingBox=function(){var o=this.bounds();return {left:o.x.min,right:o.x.max,top:o.y.min,bottom:o.y.max,width:o.x.max-o.x.min,height:o.y.max-o.y.min,cx:(o.x.max+o.x.min)/2,cy:(o.y.max+o.y.min)/2}};function $e(o,d,x){var M=o.boundingBox();return {cx:M.cx,cy:M.cy,width:M.width,height:M.height,bez:o,t:(d+x)/2,t1:d,t2:x}}function br(o){var d=o.bez.split(.5);return [$e(d[0],o.t1,o.t),$e(d[1],o.t,o.t2)]}function _r(o,d){return Math.abs(o.cx-d.cx)*2=I||o.width<=M&&o.height<=M&&d.width<=M&&d.height<=M){L.push([o.t,d.t]);return}var H=br(o),Q=br(d);gs(H[0],Q[0],x+1,M,L,I),gs(H[0],Q[1],x+1,M,L,I),gs(H[1],Q[0],x+1,M,L,I),gs(H[1],Q[1],x+1,M,L,I);}}Se.prototype.intersections=function(o,d,x){d===void 0&&(d=2),x===void 0&&(x=7);var M=[];return gs($e(this,0,1),$e(o,0,1),0,d,M,x),M},Se.shapeSegment=function(o,d){var x=(d+1)%o.length();return new Se(o.v[d],o.o[d],o.i[x],o.v[x],!0)},Se.shapeSegmentInverted=function(o,d){var x=(d+1)%o.length();return new Se(o.v[x],o.i[x],o.o[d],o.v[d],!0)};function rr(o,d){return [o[1]*d[2]-o[2]*d[1],o[2]*d[0]-o[0]*d[2],o[0]*d[1]-o[1]*d[0]]}function as(o,d,x,M){var L=[o[0],o[1],1],I=[d[0],d[1],1],H=[x[0],x[1],1],Q=[M[0],M[1],1],Z=rr(rr(L,I),rr(H,Q));return _s(Z[2])?null:[Z[0]/Z[2],Z[1]/Z[2]]}function Wi(o,d,x){return [o[0]+Math.cos(d)*x,o[1]-Math.sin(d)*x]}function ws(o,d){return Math.hypot(o[0]-d[0],o[1]-d[1])}function Fi(o,d){return Di(o[0],d[0])&&Di(o[1],d[1])}function ns(){}c([ni],ns),ns.prototype.initModifierProperties=function(o,d){this.getValue=this.processKeys,this.amplitude=Yt.getProp(o,d.s,0,null,this),this.frequency=Yt.getProp(o,d.r,0,null,this),this.pointsType=Yt.getProp(o,d.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function Ds(o,d,x,M,L,I,H){var Q=x-Math.PI/2,Z=x+Math.PI/2,st=d[0]+Math.cos(x)*M*L,pt=d[1]-Math.sin(x)*M*L;o.setTripleAt(st,pt,st+Math.cos(Q)*I,pt-Math.sin(Q)*I,st+Math.cos(Z)*H,pt-Math.sin(Z)*H,o.length());}function ar(o,d){var x=[d[0]-o[0],d[1]-o[1]],M=-Math.PI*.5,L=[Math.cos(M)*x[0]-Math.sin(M)*x[1],Math.sin(M)*x[0]+Math.cos(M)*x[1]];return L}function oa(o,d){var x=d===0?o.length()-1:d-1,M=(d+1)%o.length(),L=o.v[x],I=o.v[M],H=ar(L,I);return Math.atan2(0,1)-Math.atan2(H[1],H[0])}function Gr(o,d,x,M,L,I,H){var Q=oa(d,x),Z=d.v[x%d._length],st=d.v[x===0?d._length-1:x-1],pt=d.v[(x+1)%d._length],et=I===2?Math.sqrt(Math.pow(Z[0]-st[0],2)+Math.pow(Z[1]-st[1],2)):0,X=I===2?Math.sqrt(Math.pow(Z[0]-pt[0],2)+Math.pow(Z[1]-pt[1],2)):0;Ds(o,d.v[x%d._length],Q,H,M,X/((L+1)*2),et/((L+1)*2));}function Ba(o,d,x,M,L,I){for(var H=0;H1&&d.length>1&&(L=Fs(o[0],d[d.length-1]),L)?[[o[0].split(L[0])[0]],[d[d.length-1].split(L[1])[1]]]:[x,M]}function ha(o){for(var d,x=1;x1&&(d=xr(o[o.length-1],o[0]),o[o.length-1]=d[0],o[0]=d[1]),o}function Pr(o,d){var x=o.inflectionPoints(),M,L,I,H;if(x.length===0)return [os(o,d)];if(x.length===1||Di(x[1],1))return I=o.split(x[0]),M=I[0],L=I[1],[os(M,d),os(L,d)];I=o.split(x[0]),M=I[0];var Q=(x[1]-x[0])/(1-x[0]);return I=I[1].split(Q),H=I[0],L=I[1],[os(M,d),os(H,d),os(L,d)]}function xs(){}c([ni],xs),xs.prototype.initModifierProperties=function(o,d){this.getValue=this.processKeys,this.amount=Yt.getProp(o,d.a,0,null,this),this.miterLimit=Yt.getProp(o,d.ml,0,null,this),this.lineJoin=d.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},xs.prototype.processPath=function(o,d,x,M){var L=Fe.newElement();L.c=o.c;var I=o.length();o.c||(I-=1);var H,Q,Z,st=[];for(H=0;H=0;H-=1)Z=Se.shapeSegmentInverted(o,H),st.push(Pr(Z,d));st=ha(st);var pt=null,et=null;for(H=0;H0&&(re=!1),re){var he=P("style");he.setAttribute("f-forigin",ct[wt].fOrigin),he.setAttribute("f-origin",ct[wt].origin),he.setAttribute("f-family",ct[wt].fFamily),he.type="text/css",he.innerText="@font-face {font-family: "+ct[wt].fFamily+"; font-style: normal; src: url('"+ct[wt].fPath+"');}",kt.appendChild(he);}}else if(ct[wt].fOrigin==="g"||ct[wt].origin===1){for(ie=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),de=0;de=55296&&ct<=56319){var wt=Pt.charCodeAt(1);wt>=56320&&wt<=57343&&(kt=(ct-55296)*1024+wt-56320+65536);}return kt}function Lt(Pt,kt){var ct=Pt.toString(16)+kt.toString(16);return et.indexOf(ct)!==-1}function Ot(Pt){return Pt===Z}function Ft(Pt){return Pt===Q}function $t(Pt){var kt=xt(Pt);return kt>=st&&kt<=pt}function _t(Pt){return $t(Pt.substr(0,2))&&$t(Pt.substr(2,2))}function At(Pt){return x.indexOf(Pt)!==-1}function lt(Pt,kt){var ct=xt(Pt.substr(kt,2));if(ct!==M)return !1;var wt=0;for(kt+=2;wt<5;){if(ct=xt(Pt.substr(kt,2)),ctH)return !1;wt+=1,kt+=2;}return xt(Pt.substr(kt,2))===L}function Tt(){this.isLoaded=!0;}var Dt=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};Dt.isModifier=Lt,Dt.isZeroWidthJoiner=Ot,Dt.isFlagEmoji=_t,Dt.isRegionalCode=$t,Dt.isCombinedCharacter=At,Dt.isRegionalFlag=lt,Dt.isVariationSelector=Ft,Dt.BLACK_FLAG_CODE_POINT=M;var Et={addChars:nt,addFonts:rt,getCharData:K,getFontByName:dt,measureText:ft,checkLoadedFonts:Y,setIsLoaded:Tt};return Dt.prototype=Et,Dt}();function Er(o){this.animationData=o;}Er.prototype.getProp=function(o){return this.animationData.slots&&this.animationData.slots[o.sid]?Object.assign(o,this.animationData.slots[o.sid].p):o};function Vs(o){return new Er(o)}function Ki(){}Ki.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(o){this.renderableComponents.indexOf(o)===-1&&this.renderableComponents.push(o);},removeRenderableComponent:function(o){this.renderableComponents.indexOf(o)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(o),1);},prepareRenderableFrame:function(o){this.checkLayerLimits(o);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(o){this.data.ip-this.data.st<=o&&this.data.op-this.data.st>o?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var o,d=this.renderableComponents.length;for(o=0;o.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},ke.prototype.show=function(){},ke.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},ke.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},ke.prototype.resume=function(){this._canPlay=!0;},ke.prototype.setRate=function(o){this.audio.rate(o);},ke.prototype.volume=function(o){this._volumeMultiplier=o,this._previousVolume=o*this._volume,this.audio.volume(this._previousVolume);},ke.prototype.getBaseElement=function(){return null},ke.prototype.destroy=function(){},ke.prototype.sourceRectAtTime=function(){},ke.prototype.initExpressions=function(){};function Te(){}Te.prototype.checkLayers=function(o){var d,x=this.layers.length,M;for(this.completeLayers=!0,d=x-1;d>=0;d-=1)this.elements[d]||(M=this.layers[d],M.ip-M.st<=o-this.layers[d].st&&M.op-M.st>o-this.layers[d].st&&this.buildItem(d)),this.completeLayers=this.elements[d]?this.completeLayers:!1;this.checkPendingElements();},Te.prototype.createItem=function(o){switch(o.ty){case 2:return this.createImage(o);case 0:return this.createComp(o);case 1:return this.createSolid(o);case 3:return this.createNull(o);case 4:return this.createShape(o);case 5:return this.createText(o);case 6:return this.createAudio(o);case 13:return this.createCamera(o);case 15:return this.createFootage(o);default:return this.createNull(o)}},Te.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},Te.prototype.createAudio=function(o){return new ke(o,this.globalData,this)},Te.prototype.createFootage=function(o){return new We(o,this.globalData,this)},Te.prototype.buildAllItems=function(){var o,d=this.layers.length;for(o=0;o0&&(this.maskElement.setAttribute("id",X),this.element.maskedElement.setAttribute(K,"url("+y()+"#"+X+")"),M.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}Oi.prototype.getMaskProperty=function(o){return this.viewData[o].prop},Oi.prototype.renderFrame=function(o){var d=this.element.finalTransform.mat,x,M=this.masksProperties.length;for(x=0;x1&&(M+=" C"+d.o[L-1][0]+","+d.o[L-1][1]+" "+d.i[0][0]+","+d.i[0][1]+" "+d.v[0][0]+","+d.v[0][1]),x.lastPath!==M){var H="";x.elem&&(d.c&&(H=o.inv?this.solidPath+M:M),x.elem.setAttribute("d",H)),x.lastPath=M;}},Oi.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var xi=function(){var o={};o.createFilter=d,o.createAlphaToLuminanceFilter=x;function d(M,L){var I=Wt("filter");return I.setAttribute("id",M),L!==!0&&(I.setAttribute("filterUnits","objectBoundingBox"),I.setAttribute("x","0%"),I.setAttribute("y","0%"),I.setAttribute("width","100%"),I.setAttribute("height","100%")),I}function x(){var M=Wt("feColorMatrix");return M.setAttribute("type","matrix"),M.setAttribute("color-interpolation-filters","sRGB"),M.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),M}return o}(),Qi=function(){var o={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(o.maskType=!1),/firefox/i.test(navigator.userAgent)&&(o.svgLumaHidden=!1),o}(),Ss={},Ar="filter_result_";function Rs(o){var d,x="SourceGraphic",M=o.data.ef?o.data.ef.length:0,L=S(),I=xi.createFilter(L,!0),H=0;this.filters=[];var Q;for(d=0;d=0&&(x=this.shapeModifiers[o].processShapes(this._isFirstFrame),!x);o-=1);}},searchProcessedElement:function(o){for(var d=this.processedElements,x=0,M=d.length;x.01)return !1;x+=1;}return !0},hs.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var o=0,d=this.data.k.k.length;o0;)nt=X.transformers[$t].mProps._mdf||nt,Ft-=1,$t-=1;if(nt)for(Ft=xt-X.styles[ft].lvl,$t=X.transformers.length-1;Ft>0;)Ot.multiply(X.transformers[$t].mProps.v),Ft-=1,$t-=1;}else Ot=o;if(Lt=X.sh.paths,N=Lt._length,nt){for(rt="",Y=0;Y=1?Tt=.99:Tt<=-1&&(Tt=-.99);var Dt=At*Tt,Et=Math.cos(lt+X.a.v)*Dt+rt[0],Pt=Math.sin(lt+X.a.v)*Dt+rt[1];Y.setAttribute("fx",Et),Y.setAttribute("fy",Pt),N&&!X.g._collapsable&&(X.of.setAttribute("fx",Et),X.of.setAttribute("fy",Pt));}}}function pt(et,X,$){var Y=X.style,N=X.d;N&&(N._mdf||$)&&N.dashStr&&(Y.pElem.setAttribute("stroke-dasharray",N.dashStr),Y.pElem.setAttribute("stroke-dashoffset",N.dashoffset[0])),X.c&&(X.c._mdf||$)&&Y.pElem.setAttribute("stroke","rgb("+z(X.c.v[0])+","+z(X.c.v[1])+","+z(X.c.v[2])+")"),(X.o._mdf||$)&&Y.pElem.setAttribute("stroke-opacity",X.o.v),(X.w._mdf||$)&&(Y.pElem.setAttribute("stroke-width",X.w.v),Y.msElem&&Y.msElem.setAttribute("stroke-width",X.w.v));}return x}();function Ee(o,d,x){this.shapes=[],this.shapesData=o.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(o,d,x),this.prevViewData=[];}c([gi,Be,ys,Es,ki,hi,Li],Ee),Ee.prototype.initSecondaryElement=function(){},Ee.prototype.identityMatrix=new Ce,Ee.prototype.buildExpressionInterface=function(){},Ee.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},Ee.prototype.filterUniqueShapes=function(){var o,d=this.shapes.length,x,M,L=this.stylesList.length,I,H=[],Q=!1;for(M=0;M1&&Q&&this.setShapesAsAnimated(H);}},Ee.prototype.setShapesAsAnimated=function(o){var d,x=o.length;for(d=0;d=0;Z-=1){if(rt=this.searchProcessedElement(o[Z]),rt?d[Z]=x[rt-1]:o[Z]._render=H,o[Z].ty==="fl"||o[Z].ty==="st"||o[Z].ty==="gf"||o[Z].ty==="gs"||o[Z].ty==="no")rt?d[Z].style.closed=!1:d[Z]=this.createStyleElement(o[Z],L),o[Z]._render&&d[Z].style.pElem.parentNode!==M&&M.appendChild(d[Z].style.pElem),X.push(d[Z].style);else if(o[Z].ty==="gr"){if(!rt)d[Z]=this.createGroupElement(o[Z]);else for(et=d[Z].it.length,pt=0;pt1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},ye.prototype.addEffect=function(o){this.effectsSequence.push(o),this.elem.addDynamicProperty(this);},ye.prototype.getValue=function(o){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!o)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var d=this.currentData,x=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var M,L=this.effectsSequence.length,I=o||this.data.d.k[this.keysIndex].s;for(M=0;Md);)x+=1;return this.keysIndex!==x&&(this.keysIndex=x),this.data.d.k[this.keysIndex].s},ye.prototype.buildFinalText=function(o){for(var d=[],x=0,M=o.length,L,I,H=!1,Q=!1,Z="";x=55296&&L<=56319?Ci.isRegionalFlag(o,x)?Z=o.substr(x,14):(I=o.charCodeAt(x+1),I>=56320&&I<=57343&&(Ci.isModifier(L,I)?(Z=o.substr(x,2),H=!0):Ci.isFlagEmoji(o.substr(x,4))?Z=o.substr(x,4):Z=o.substr(x,2))):L>56319?(I=o.charCodeAt(x+1),Ci.isVariationSelector(L)&&(H=!0)):Ci.isZeroWidthJoiner(L)&&(H=!0,Q=!0),H?(d[d.length-1]+=Z,H=!1):d.push(Z),x+=Z.length;return d},ye.prototype.completeTextData=function(o){o.__complete=!0;var d=this.elem.globalData.fontManager,x=this.data,M=[],L,I,H,Q=0,Z,st=x.m.g,pt=0,et=0,X=0,$=[],Y=0,N=0,rt,nt,K=d.getFontByName(o.f),ft,dt=0,xt=Sr(K);o.fWeight=xt.weight,o.fStyle=xt.style,o.finalSize=o.s,o.finalText=this.buildFinalText(o.t),I=o.finalText.length,o.finalLineHeight=o.lh;var Lt=o.tr/1e3*o.finalSize,Ot;if(o.sz)for(var Ft=!0,$t=o.sz[0],_t=o.sz[1],At,lt;Ft;){lt=this.buildFinalText(o.t),At=0,Y=0,I=lt.length,Lt=o.tr/1e3*o.finalSize;var Tt=-1;for(L=0;L$t&<[L]!==" "?(Tt===-1?I+=1:L=Tt,At+=o.finalLineHeight||o.finalSize*1.2,lt.splice(L,Tt===L?1:0,"\r"),Tt=-1,Y=0):(Y+=dt,Y+=Lt);At+=K.ascent*o.finalSize/100,this.canResize&&o.finalSize>this.minimumFontSize&&_tN?Y:N,Y=-2*Lt,Z="",H=!0,X+=1):Z=Et,d.chars?(ft=d.getCharData(Et,K.fStyle,d.getFontByName(o.f).fFamily),dt=H?0:ft.w*o.finalSize/100):dt=d.measureText(Z,o.f,o.finalSize),Et===" "?Dt+=dt+Lt:(Y+=dt+Lt+Dt,Dt=0),M.push({l:dt,an:dt,add:pt,n:H,anIndexes:[],val:Z,line:X,animatorJustifyOffset:0}),st==2){if(pt+=dt,Z===""||Z===" "||L===I-1){for((Z===""||Z===" ")&&(pt-=dt);et<=L;)M[et].an=pt,M[et].ind=Q,M[et].extra=dt,et+=1;Q+=1,pt=0;}}else if(st==3){if(pt+=dt,Z===""||L===I-1){for(Z===""&&(pt-=dt);et<=L;)M[et].an=pt,M[et].ind=Q,M[et].extra=dt,et+=1;pt=0,Q+=1;}}else M[Q].ind=Q,M[Q].extra=0,Q+=1;if(o.l=M,N=Y>N?Y:N,$.push(Y),o.sz)o.boxWidth=o.sz[0],o.justifyOffset=0;else switch(o.boxWidth=N,o.j){case 1:o.justifyOffset=-o.boxWidth;break;case 2:o.justifyOffset=-o.boxWidth/2;break;default:o.justifyOffset=0;}o.lineWidths=$;var Pt=x.a,kt,ct;nt=Pt.length;var wt,qt,zt=[];for(rt=0;rt0?H=this.ne.v/100:Q=-this.ne.v/100,this.xe.v>0?Z=1-this.xe.v/100:st=1+this.xe.v/100;var pt=Ut.getBezierEasing(H,Q,Z,st).get,et=0,X=this.finalS,$=this.finalE,Y=this.data.sh;if(Y===2)$===X?et=I>=$?1:0:et=o(0,d(.5/($-X)+(I-X)/($-X),1)),et=pt(et);else if(Y===3)$===X?et=I>=$?0:1:et=1-o(0,d(.5/($-X)+(I-X)/($-X),1)),et=pt(et);else if(Y===4)$===X?et=0:(et=o(0,d(.5/($-X)+(I-X)/($-X),1)),et<.5?et*=2:et=1-2*(et-.5)),et=pt(et);else if(Y===5){if($===X)et=0;else {var N=$-X;I=d(o(0,I+.5-X),$-X);var rt=-N/2+I,nt=N/2;et=Math.sqrt(1-rt*rt/(nt*nt));}et=pt(et);}else Y===6?($===X?et=0:(I=d(o(0,I+.5-X),$-X),et=(1+Math.cos(Math.PI+Math.PI*2*I/($-X)))/2),et=pt(et)):(I>=x(X)&&(I-X<0?et=o(0,d(d($,1)-(X-I),1)):et=o(0,d($-I,1))),et=pt(et));if(this.sm.v!==100){var K=this.sm.v*.01;K===0&&(K=1e-8);var ft=.5-K*.5;et1&&(et=1));}return et*this.a.v},getValue:function(I){this.iterateDynamicProperties(),this._mdf=I||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,I&&this.data.r===2&&(this.e.v=this._currentTextLength);var H=this.data.r===2?1:100/this.data.totalChars,Q=this.o.v/H,Z=this.s.v/H+Q,st=this.e.v/H+Q;if(Z>st){var pt=Z;Z=st,st=pt;}this.finalS=Z,this.finalE=st;}},c([Ve],M);function L(I,H,Q){return new M(I,H)}return {getTextSelectorProp:L}}();function Vi(o,d,x){var M={propType:!1},L=Yt.getProp,I=d.a;this.a={r:I.r?L(o,I.r,0,ot,x):M,rx:I.rx?L(o,I.rx,0,ot,x):M,ry:I.ry?L(o,I.ry,0,ot,x):M,sk:I.sk?L(o,I.sk,0,ot,x):M,sa:I.sa?L(o,I.sa,0,ot,x):M,s:I.s?L(o,I.s,1,.01,x):M,a:I.a?L(o,I.a,1,0,x):M,o:I.o?L(o,I.o,0,.01,x):M,p:I.p?L(o,I.p,1,0,x):M,sw:I.sw?L(o,I.sw,0,0,x):M,sc:I.sc?L(o,I.sc,1,0,x):M,fc:I.fc?L(o,I.fc,1,0,x):M,fh:I.fh?L(o,I.fh,0,0,x):M,fs:I.fs?L(o,I.fs,0,.01,x):M,fb:I.fb?L(o,I.fb,0,.01,x):M,t:I.t?L(o,I.t,0,0,x):M},this.s=$r.getTextSelectorProp(o,d.s,x),this.s.t=d.s.t;}function Xi(o,d,x){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=o,this._renderType=d,this._elem=x,this._animatorsData=v(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(x);}Xi.prototype.searchProperties=function(){var o,d=this._textData.a.length,x,M=Yt.getProp;for(o=0;o=Y+Ns||!xt?($t=(Y+Ns-rt)/N.partialLength,de=dt.point[0]+(N.point[0]-dt.point[0])*$t,he=dt.point[1]+(N.point[1]-dt.point[1])*$t,I.translate(-x[0]*X[pt].an*.005,-(x[1]*Dt)*.01),nt=!1):xt&&(rt+=N.partialLength,K+=1,K>=xt.length&&(K=0,ft+=1,Lt[ft]?xt=Lt[ft].points:At.v.c?(K=0,ft=0,xt=Lt[ft].points):(rt-=N.partialLength,xt=null)),xt&&(dt=N,N=xt[K],Ot=N.partialLength));ie=X[pt].an/2-X[pt].add,I.translate(-ie,0,0);}else ie=X[pt].an/2-X[pt].add,I.translate(-ie,0,0),I.translate(-x[0]*X[pt].an*.005,-x[1]*Dt*.01,0);for(ct=0;cto?this.textSpans[o].span:Wt(Q?"g":"text"),ft<=o){if(Z.setAttribute("stroke-linecap","butt"),Z.setAttribute("stroke-linejoin","round"),Z.setAttribute("stroke-miterlimit","4"),this.textSpans[o].span=Z,Q){var xt=Wt("g");Z.appendChild(xt),this.textSpans[o].childSpan=xt;}this.textSpans[o].span=Z,this.layerElement.appendChild(Z);}Z.style.display="inherit";}if(st.reset(),et&&(H[o].n&&(X=-N,$+=x.yOffset,$+=Y?1:0,Y=!1),this.applyTextPropertiesToMatrix(x,st,H[o].line,X,$),X+=H[o].l||0,X+=N),Q){dt=this.globalData.fontManager.getCharData(x.finalText[o],M.fStyle,this.globalData.fontManager.getFontByName(x.f).fFamily);var Lt;if(dt.t===1)Lt=new Ze(dt.data,this.globalData,this);else {var Ot=zs;dt.data&&dt.data.shapes&&(Ot=this.buildShapeData(dt.data,x.finalSize)),Lt=new Ee(Ot,this.globalData,this);}if(this.textSpans[o].glyph){var Ft=this.textSpans[o].glyph;this.textSpans[o].childSpan.removeChild(Ft.layerElement),Ft.destroy();}this.textSpans[o].glyph=Lt,Lt._debug=!0,Lt.prepareFrame(0),Lt.renderFrame(),this.textSpans[o].childSpan.appendChild(Lt.layerElement),dt.t===1&&this.textSpans[o].childSpan.setAttribute("transform","scale("+x.finalSize/100+","+x.finalSize/100+")");}else et&&Z.setAttribute("transform","translate("+st.props[12]+","+st.props[13]+")"),Z.textContent=H[o].val,Z.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}et&&Z&&Z.setAttribute("d",pt);}for(;o=0;d-=1)(this.completeLayers||this.elements[d])&&this.elements[d].prepareFrame(o-this.layers[d].st);if(this.globalData._mdf)for(d=0;d=0;x-=1)(this.completeLayers||this.elements[x])&&(this.elements[x].prepareFrame(this.renderedFrame-this.layers[x].st),this.elements[x]._mdf&&(this._mdf=!0));}},ti.prototype.renderInnerContent=function(){var o,d=this.layers.length;for(o=0;o=0;x-=1)o.finalTransform.multiply(o.transforms[x].transform.mProps.v);o._mdf=L;},processSequences:function(o){var d,x=this.sequenceList.length;for(d=0;d=1){this.buffers=[];var o=this.globalData.canvasContext,d=U.createCanvas(o.canvas.width,o.canvas.height);this.buffers.push(d);var x=U.createCanvas(o.canvas.width,o.canvas.height);this.buffers.push(x),this.data.tt>=3&&!document._isProxy&&U.loadLumaCanvas();}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new it(this),this.searchEffectTransforms();},createContent:function(){},setBlendMode:function(){var o=this.globalData;if(o.blendMode!==this.data.bm){o.blendMode=this.data.bm;var d=Ys(this.data.bm);o.canvasContext.globalCompositeOperation=d;}},createRenderableComponents:function(){this.maskManager=new vt(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(Ii.TRANSFORM_EFFECT);},hideElement:function(){!this.hidden&&(!this.isInRange||this.isTransparent)&&(this.hidden=!0);},showElement:function(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0);},clearCanvas:function(o){o.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy);},prepareLayer:function(){if(this.data.tt>=1){var o=this.buffers[0],d=o.getContext("2d");this.clearCanvas(d),d.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);}},exitLayer:function(){if(this.data.tt>=1){var o=this.buffers[1],d=o.getContext("2d");this.clearCanvas(d),d.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);var x=this.comp.getElementById("tp"in this.data?this.data.tp:this.data.ind-1);if(x.renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var M=U.getLumaCanvas(this.canvasContext.canvas),L=M.getContext("2d");L.drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(M,0,0);}this.canvasContext.globalCompositeOperation=bt[this.data.tt],this.canvasContext.drawImage(o,0,0),this.canvasContext.globalCompositeOperation="destination-over",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation="source-over";}},renderFrame:function(o){if(!(this.hidden||this.data.hd)&&!(this.data.td===1&&!o)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var d=this.data.ty===0;this.prepareLayer(),this.globalData.renderer.save(d),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(d),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1);}},destroy:function(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy();},mHelper:new Ce},Mt.prototype.hide=Mt.prototype.hideElement,Mt.prototype.show=Mt.prototype.showElement;function Bt(o,d,x,M){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var L=4;d.ty==="rc"?L=5:d.ty==="el"?L=6:d.ty==="sr"&&(L=7),this.sh=ss.getShapeProp(o,d,L,o);var I,H=x.length,Q;for(I=0;I=0;I-=1){if(et=this.searchProcessedElement(o[I]),et?d[I]=x[et-1]:o[I]._shouldRender=M,o[I].ty==="fl"||o[I].ty==="st"||o[I].ty==="gf"||o[I].ty==="gs")et?d[I].style.closed=!1:d[I]=this.createStyleElement(o[I],Y),st.push(d[I].style);else if(o[I].ty==="gr"){if(!et)d[I]=this.createGroupElement(o[I]);else for(Z=d[I].it.length,Q=0;Q=0;L-=1)d[L].ty==="tr"?(H=x[L].transform,this.renderShapeTransform(o,H)):d[L].ty==="sh"||d[L].ty==="el"||d[L].ty==="rc"||d[L].ty==="sr"?this.renderPath(d[L],x[L]):d[L].ty==="fl"?this.renderFill(d[L],x[L],H):d[L].ty==="st"?this.renderStroke(d[L],x[L],H):d[L].ty==="gf"||d[L].ty==="gs"?this.renderGradientFill(d[L],x[L],H):d[L].ty==="gr"?this.renderShape(H,d[L].it,x[L].it):d[L].ty;M&&this.drawLayer();},It.prototype.renderStyledShape=function(o,d){if(this._isFirstFrame||d._mdf||o.transforms._mdf){var x=o.trNodes,M=d.paths,L,I,H,Q=M._length;x.length=0;var Z=o.transforms.finalTransform;for(H=0;H=1?pt=.99:pt<=-1&&(pt=-.99);var et=Z*pt,X=Math.cos(st+d.a.v)*et+H[0],$=Math.sin(st+d.a.v)*et+H[1];L=I.createRadialGradient(X,$,0,H[0],H[1],Z);}var Y,N=o.g.p,rt=d.g.c,nt=1;for(Y=0;YI&&Z==="xMidYMid slice"||LL&&Q==="meet"||IL&&Q==="slice")?this.transformCanvas.tx=(x-this.transformCanvas.w*(M/this.transformCanvas.h))/2*this.renderConfig.dpr:st==="xMax"&&(IL&&Q==="slice")?this.transformCanvas.tx=(x-this.transformCanvas.w*(M/this.transformCanvas.h))*this.renderConfig.dpr:this.transformCanvas.tx=0,pt==="YMid"&&(I>L&&Q==="meet"||IL&&Q==="meet"||I=0;o-=1)this.elements[o]&&this.elements[o].destroy&&this.elements[o].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0;},C.prototype.renderFrame=function(o,d){if(!(this.renderedFrame===o&&this.renderConfig.clearCanvas===!0&&!d||this.destroyed||o===-1)){this.renderedFrame=o,this.globalData.frameNum=o-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||d,this.globalData.projectInterface.currentFrame=o;var x,M=this.layers.length;for(this.completeLayers||this.checkLayers(o),x=M-1;x>=0;x-=1)(this.completeLayers||this.elements[x])&&this.elements[x].prepareFrame(o-this.layers[x].st);if(this.globalData._mdf){for(this.renderConfig.clearCanvas===!0?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),x=M-1;x>=0;x-=1)(this.completeLayers||this.elements[x])&&this.elements[x].renderFrame();this.renderConfig.clearCanvas!==!0&&this.restore();}}},C.prototype.buildItem=function(o){var d=this.elements;if(!(d[o]||this.layers[o].ty===99)){var x=this.createItem(this.layers[o],this,this.globalData);d[o]=x,x.initExpressions();}},C.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var o=this.pendingElements.pop();o.checkParenting();}},C.prototype.hide=function(){this.animationItem.container.style.display="none";},C.prototype.show=function(){this.animationItem.container.style.display="block";};function T(){this.opacity=-1,this.transform=b("float32",16),this.fillStyle="",this.strokeStyle="",this.lineWidth="",this.lineCap="",this.lineJoin="",this.miterLimit="",this.id=Math.random();}function B(){this.stack=[],this.cArrPos=0,this.cTr=new Ce;var o,d=15;for(o=0;o=0;d-=1)(this.completeLayers||this.elements[d])&&this.elements[d].renderFrame();},G.prototype.destroy=function(){var o,d=this.layers.length;for(o=d-1;o>=0;o-=1)this.elements[o]&&this.elements[o].destroy();this.layers=null,this.elements=null;},G.prototype.createComp=function(o){return new G(o,this.globalData,this)};function O(o,d){this.animationItem=o,this.renderConfig={clearCanvas:d&&d.clearCanvas!==void 0?d.clearCanvas:!0,context:d&&d.context||null,progressiveLoad:d&&d.progressiveLoad||!1,preserveAspectRatio:d&&d.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:d&&d.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:d&&d.contentVisibility||"visible",className:d&&d.className||"",id:d&&d.id||"",runExpressions:!d||d.runExpressions===void 0||d.runExpressions},this.renderConfig.dpr=d&&d.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=d&&d.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new B,this.elements=[],this.pendingElements=[],this.transformMat=new Ce,this.completeLayers=!1,this.rendererType="canvas",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData));}return c([C],O),O.prototype.createComp=function(o){return new G(o,this.globalData,this)},Ae("canvas",O),_i.registerModifier("tm",je),_i.registerModifier("pb",di),_i.registerModifier("rp",oi),_i.registerModifier("rd",rs),_i.registerModifier("zz",ns),_i.registerModifier("op",xs),se});}),Sc=Pc();});var El={};fr(El,{default:()=>Ac});var Ec,Ac,Al=ls(()=>{qs();Ec=is((exports,module)=>{typeof navigator<"u"&&function(t,e){typeof exports=="object"&&typeof module<"u"?module.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.lottie=e());}(exports,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(t){_useWebWorker=!!t;},getWebWorker=function(){return _useWebWorker},setLocationHref=function(t){locationHref=t;},getLocationHref=function(){return locationHref};function createTag(t){return document.createElement(t)}function extendPrototype(t,e){var i,s=t.length,r;for(i=0;i1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}(function(){var t=[],e,i;for(e=0;e<256;e+=1)i=e.toString(16),t[e]=i.length===1?"0"+i:i;return function(s,r,a){return s<0&&(s=0),r<0&&(r=0),a<0&&(a=0),"#"+t[s]+t[r]+t[a]}})();var setSubframeEnabled=function(t){subframeEnabled=!!t;},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(t){expressionsPlugin=t;},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(t){expressionsInterfaces=t;},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(t){defaultCurveSegments=t;},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(t){idPrefix$1=t;};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(e){return typeof e}:_typeof$5=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$5(t)}var dataManager=function(){var t=1,e=[],i,s,r={onmessage:function(){},postMessage:function(l){i({data:l});}},a={postMessage:function(l){r.onmessage({data:l});}};function n(l){if(window.Worker&&window.Blob&&getWebWorker()){var E=new Blob(["var _workerSelf = self; self.onmessage = ",l.toString()],{type:"text/javascript"}),b=URL.createObjectURL(E);return new Worker(b)}return i=l,r}function p(){s||(s=n(function(l){function E(){function v(ht,yt){var D,V,S=ht.length,R,tt,J,Gt;for(V=0;V=0;yt-=1)if(ht[yt].ty==="sh")if(ht[yt].ks.k.i)_(ht[yt].ks.k);else for(S=ht[yt].ks.k.length,V=0;VD[0]?!0:D[0]>ht[0]?!1:ht[1]>D[1]?!0:D[1]>ht[1]?!1:ht[2]>D[2]?!0:D[2]>ht[2]?!1:null}var z=function(){var ht=[4,4,14];function yt(V){var S=V.t.d;V.t.d={k:[{s:S,t:0}]};}function D(V){var S,R=V.length;for(S=0;S=0;S-=1)if(V[S].ty==="sh")if(V[S].ks.k.i)V[S].ks.k.c=V[S].closed;else for(J=V[S].ks.k.length,tt=0;tt500)&&(this._imageLoaded(),clearInterval(g)),f+=1;}.bind(this),50);}function a(u){var f=s(u,this.assetsPath,this.path),g=createNS("image");isSafari?this.testImageLoaded(g):g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.setAttributeNS("http://www.w3.org/1999/xlink","href",f),this._elementHelper.append?this._elementHelper.append(g):this._elementHelper.appendChild(g);var _={img:g,assetData:u};return _}function n(u){var f=s(u,this.assetsPath,this.path),g=createTag("img");g.crossOrigin="anonymous",g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.src=f;var _={img:g,assetData:u};return _}function p(u){var f={assetData:u},g=s(u,this.assetsPath,this.path);return dataManager.loadData(g,function(_){f.img=_,this._footageLoaded();}.bind(this),function(){f.img={},this._footageLoaded();}.bind(this)),f}function h(u,f){this.imagesLoadedCb=f;var g,_=u.length;for(g=0;g<_;g+=1)u[g].layers||(!u[g].t||u[g].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(u[g]))):u[g].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(u[g]))));}function y(u){this.path=u||"";}function P(u){this.assetsPath=u||"";}function c(u){for(var f=0,g=this.images.length;fthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e=this.animationData.layers,i,s=e.length,r=t.layers,a,n=r.length;for(a=0;athis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(t){this.triggerRenderFrameError(t);}},AnimationItem.prototype.play=function(t){t&&this.name!==t||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},AnimationItem.prototype.pause=function(t){t&&this.name!==t||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(this.isPaused===!0?this.play():this.pause());},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},AnimationItem.prototype.getMarkerData=function(t){for(var e,i=0;i=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):e<0?this.checkSegments(e%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(i=!0,e=0)):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"));}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart");},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(i=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,i!==-1&&this.goToAndStop(i,!0);},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),_typeof$4(t[0])==="object"){var i,s=t.length;for(i=0;i=0;V-=1)e[V].animation.destroy(D);}function W(D,V,S){var R=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),tt,J=R.length;for(tt=0;tt0?_=W:g=W;while(Math.abs(q)>a&&++ot=r?w(f,mt,g,_):gt===0?mt:v(f,z,z+h,g,_)}},t}(),pooling=function(){function t(e){return e.concat(createSizedArray(e.length))}return {double:t}}(),poolFactory=function(){return function(t,e,i){var s=0,r=t,a=createSizedArray(r),n={newElement:p,release:h};function p(){var y;return s?(s-=1,y=a[s]):y=e(),y}function h(y){s===r&&(a=pooling.double(a),r*=2),i&&i(y),a[s]=y,s+=1;}return n}}(),bezierLengthPool=function(){function t(){return {addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,t)}(),segmentsLengthPool=function(){function t(){return {lengths:[],totalLength:0}}function e(i){var s,r=i.lengths.length;for(s=0;s-.001&&f<.001}function i(l,E,b,v,w,u,f,g,_){if(b===0&&u===0&&_===0)return e(l,E,v,w,f,g);var k=t.sqrt(t.pow(v-l,2)+t.pow(w-E,2)+t.pow(u-b,2)),z=t.sqrt(t.pow(f-l,2)+t.pow(g-E,2)+t.pow(_-b,2)),q=t.sqrt(t.pow(f-v,2)+t.pow(g-w,2)+t.pow(_-u,2)),W;return k>z?k>q?W=k-z-q:W=q-z-k:q>z?W=q-z-k:W=z-k-q,W>-1e-4&&W<1e-4}var s=function(){return function(l,E,b,v){var w=getDefaultCurveSegments(),u,f,g,_,k,z=0,q,W=[],ot=[],mt=bezierLengthPool.newElement();for(g=b.length,u=0;uf?-1:1,k=!0;k;)if(v[u]<=f&&v[u+1]>f?(g=(f-v[u])/(v[u+1]-v[u]),k=!1):u+=_,u<0||u>=w-1){if(u===w-1)return b[u];k=!1;}return b[u]+(b[u+1]-b[u])*g}function y(l,E,b,v,w,u){var f=h(w,u),g=1-f,_=t.round((g*g*g*l[0]+(f*g*g+g*f*g+g*g*f)*b[0]+(f*f*g+g*f*f+f*g*f)*v[0]+f*f*f*E[0])*1e3)/1e3,k=t.round((g*g*g*l[1]+(f*g*g+g*f*g+g*g*f)*b[1]+(f*f*g+g*f*f+f*g*f)*v[1]+f*f*f*E[1])*1e3)/1e3;return [_,k]}var P=createTypedArray("float32",8);function c(l,E,b,v,w,u,f){w<0?w=0:w>1&&(w=1);var g=h(w,f);u=u>1?1:u;var _=h(u,f),k,z=l.length,q=1-g,W=1-_,ot=q*q*q,mt=g*q*q*3,gt=g*g*q*3,ut=g*g*g,Ct=q*q*W,ht=g*q*W+q*g*W+q*q*_,yt=g*g*W+q*g*_+g*q*_,D=g*g*_,V=q*W*W,S=g*W*W+q*_*W+q*W*_,R=g*_*W+q*_*_+g*W*_,tt=g*_*_,J=W*W*W,Gt=_*W*W+W*_*W+W*W*_,Vt=_*_*W+W*_*_+_*W*_,Xt=_*_*_;for(k=0;k=y.t-i){h.h&&(h=y),r=0;break}if(y.t-i>t){r=a;break}a=u||t=u?_.points.length-1:0;for(l=_.points[k].point.length,c=0;c=W&&z=u)s[0]=g[0],s[1]=g[1],s[2]=g[2];else if(t<=f)s[0]=h.s[0],s[1]=h.s[1],s[2]=h.s[2];else {var ht=createQuaternion(h.s),yt=createQuaternion(g),D=(t-f)/(u-f);quaternionToEuler(s,slerp(ht,yt,D));}else for(a=0;a=u?E=1:t1e-6?(l=Math.acos(E),b=Math.sin(l),v=Math.sin((1-i)*l)/b,w=Math.sin(i*l)/b):(v=1-i,w=i),s[0]=v*r+w*h,s[1]=v*a+w*y,s[2]=v*n+w*P,s[3]=v*p+w*c,s}function quaternionToEuler(t,e){var i=e[0],s=e[1],r=e[2],a=e[3],n=Math.atan2(2*s*a-2*i*r,1-2*s*s-2*r*r),p=Math.asin(2*i*s+2*r*a),h=Math.atan2(2*i*a-2*s*r,1-2*i*i-2*r*r);t[0]=n/degToRads,t[1]=p/degToRads,t[2]=h/degToRads;}function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,s=t[2]*degToRads,r=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(s/2),p=Math.sin(e/2),h=Math.sin(i/2),y=Math.sin(s/2),P=r*a*n-p*h*y,c=p*h*n+r*a*y,l=p*a*n+r*h*y,E=r*h*n-p*a*y;return [c,l,E,P]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var s=this.interpolateValue(t,this._caching);this.pv=s;}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if(this.propType==="unidimensional")e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,s=this.v.length;i1e-5&&(this.v[i]=e,this._mdf=!0),i+=1;}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t=this._maxLength&&this.doubleArrayLength(),i){case"v":a=this.v;break;case"i":a=this.i;break;case"o":a=this.o;break;default:a=[];break}(!a[s]||a[s]&&!r)&&(a[s]=pointPool.newElement()),a[s][0]=t,a[s][1]=e;},ShapePath.prototype.setTripleAt=function(t,e,i,s,r,a,n,p){this.setXYAt(t,e,"v",n,p),this.setXYAt(i,s,"o",n,p),this.setXYAt(r,a,"i",n,p);},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,s=this.i,r=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],s[0][0],s[0][1],i[0][0],i[0][1],0,!1),r=1);var a=this._length-1,n=this._length,p;for(p=r;p=ht[ht.length-1].t-this.offsetTime)k=ht[ht.length-1].s?ht[ht.length-1].s[0]:ht[ht.length-2].e[0],q=!0;else {for(var yt=_,D=ht.length-1,V=!0,S,R,tt;V&&(S=ht[yt],R=ht[yt+1],!(R.t-this.offsetTime>u));)yt=R.t-this.offsetTime)ut=1;else if(ug&&u>g)||(this._caching.lastIndex=_0||S>-1e-6&&S<0?s(S*R)/R:S}function V(){var S=this.props,R=D(S[0]),tt=D(S[1]),J=D(S[4]),Gt=D(S[5]),Vt=D(S[12]),Xt=D(S[13]);return "matrix("+R+","+tt+","+J+","+Gt+","+Vt+","+Xt+")"}return function(){this.reset=r,this.rotate=a,this.rotateX=n,this.rotateY=p,this.rotateZ=h,this.skew=P,this.skewFromAxis=c,this.shear=y,this.scale=l,this.setTransform=E,this.translate=b,this.transform=v,this.multiply=w,this.applyToPoint=k,this.applyToX=z,this.applyToY=q,this.applyToZ=W,this.applyToPointArray=Ct,this.applyToTriplePoints=ut,this.applyToPointStringified=ht,this.toCSS=yt,this.to2dCSS=V,this.clone=g,this.cloneFromProps=_,this.equals=f,this.inversePoints=gt,this.inversePoint=mt,this.getInverseMatrix=ot,this._t=this.transform,this.isIdentity=u,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset();}}();function _typeof$3(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$3=function(e){return typeof e}:_typeof$3=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$3(t)}var lottie={};function setLocation(t){setLocationHref(t);}function searchAnimations(){animationManager.searchAnimations();}function setSubframeRendering(t){setSubframeEnabled(t);}function setPrefix(t){setIdPrefix(t);}function loadAnimation(t){return animationManager.loadAnimation(t)}function setQuality(t){if(typeof t=="string")switch(t){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10);break}else !isNaN(t)&&t>1&&setDefaultCurveSegments(t);}function inBrowser(){return typeof navigator<"u"}function installPlugin(t,e){t==="expressions"&&setExpressionsPlugin(e);}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.12.2";function checkReady(){document.readyState==="complete"&&(clearInterval(readyStateCheckInterval),searchAnimations());}function getQueryVariable(t){for(var e=queryString.split("&"),i=0;i"u"?"undefined":_typeof$3(exports))==="object"&&typeof module<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=lottie);}catch(t){}var ShapeModifiers=function(){var t={},e={};t.registerModifier=i,t.getModifier=s;function i(r,a){e[r]||(e[r]=a);}function s(r,a,n){return new e[r](a,n)}return t}();function ShapeModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated();}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},extendPrototype([DynamicPropertyContainer],ShapeModifier);function TrimModifier(){}extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[];},TrimModifier.prototype.calculateShapeEdges=function(t,e,i,s,r){var a=[];e<=1?a.push({s:t,e}):t>=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n=[],p,h=a.length,y;for(p=0;ps+i)){var P,c;y.s*r<=s?P=0:P=(y.s*r-s)/i,y.e*r>=s+i?c=1:c=(y.e*r-s)/i,n.push([P,c]);}return n.length||n.push([0,0]),n},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;e1?e=1+s:this.s.v<0?e=0+s:e=this.s.v+s,this.e.v>1?i=1+s:this.e.v<0?i=0+s:i=this.e.v+s,e>i){var r=e;e=i,i=r;}e=Math.round(e*1e4)*1e-4,i=Math.round(i*1e4)*1e-4,this.sValue=e,this.eValue=i;}else e=this.sValue,i=this.eValue;var a,n,p=this.shapes.length,h,y,P,c,l,E=0;if(i===e)for(n=0;n=0;n-=1)if(v=this.shapes[n],v.shape._mdf){for(w=v.localShapeCollection,w.releaseShapes(),this.m===2&&p>1?(_=this.calculateShapeEdges(e,i,v.totalShapeLength,g,E),g+=v.totalShapeLength):_=[[u,f]],y=_.length,h=0;h=1?b.push({s:v.totalShapeLength*(u-1),e:v.totalShapeLength*(f-1)}):(b.push({s:v.totalShapeLength*u,e:v.totalShapeLength}),b.push({s:0,e:v.totalShapeLength*(f-1)}));var k=this.addShapes(v,b[0]);if(b[0].s!==b[0].e){if(b.length>1){var z=v.shape.paths.shapes[v.shape.paths._length-1];if(z.c){var q=k.pop();this.addPaths(k,w),k=this.addShapes(v,b[1],q);}else this.addPaths(k,w),k=this.addShapes(v,b[1]);}this.addPaths(k,w);}}v.shape.paths=w;}}},TrimModifier.prototype.addPaths=function(t,e){var i,s=t.length;for(i=0;ie.e){i.c=!1;break}else e.s<=y&&e.e>=y+P.addedLength?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[p],r[a].v[p],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[p],r[a].o[p-1],r[a].i[p],(e.s-y)/P.addedLength,(e.e-y)/P.addedLength,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1),y+=P.addedLength,c+=1;if(r[a].c&&l.length){if(P=l[p-1],y<=e.e){var u=l[p-1].addedLength;e.s<=y&&e.e>=y+u?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[0],r[a].v[0],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[0],r[a].o[p-1],r[a].i[0],(e.s-y)/u,(e.e-y)/u,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1);}else i.c=!1;y+=P.addedLength,c+=1;}if(i._length&&(i.setXYAt(i.v[v][0],i.v[v][1],"i",v),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],"o",i._length-1)),y>e.e)break;a=this.p.keyframes[this.p.keyframes.length-1].t?(P=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/y,0),c=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/y,0)):(P=this.p.pv,c=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/y,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){P=[],c=[];var l=this.px,E=this.py;l._caching.lastFrame+l.offsetTime<=l.keyframes[0].t?(P[0]=l.getValueAtTime((l.keyframes[0].t+.01)/y,0),P[1]=E.getValueAtTime((E.keyframes[0].t+.01)/y,0),c[0]=l.getValueAtTime(l.keyframes[0].t/y,0),c[1]=E.getValueAtTime(E.keyframes[0].t/y,0)):l._caching.lastFrame+l.offsetTime>=l.keyframes[l.keyframes.length-1].t?(P[0]=l.getValueAtTime(l.keyframes[l.keyframes.length-1].t/y,0),P[1]=E.getValueAtTime(E.keyframes[E.keyframes.length-1].t/y,0),c[0]=l.getValueAtTime((l.keyframes[l.keyframes.length-1].t-.01)/y,0),c[1]=E.getValueAtTime((E.keyframes[E.keyframes.length-1].t-.01)/y,0)):(P=[l.pv,E.pv],c[0]=l.getValueAtTime((l._caching.lastFrame+l.offsetTime-.01)/y,l.offsetTime),c[1]=E.getValueAtTime((E._caching.lastFrame+E.offsetTime-.01)/y,E.offsetTime));}else c=t,P=c;this.v.rotate(-Math.atan2(P[1]-c[1],P[0]-c[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function s(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function r(){}function a(h){this._addDynamicProperty(h),this.elem.addDynamicProperty(h),this._isDirty=!0;}function n(h,y,P){if(this.elem=h,this.frameId=-1,this.propType="transform",this.data=y,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(P||h),y.p&&y.p.s?(this.px=PropertyFactory.getProp(h,y.p.x,0,0,this),this.py=PropertyFactory.getProp(h,y.p.y,0,0,this),y.p.z&&(this.pz=PropertyFactory.getProp(h,y.p.z,0,0,this))):this.p=PropertyFactory.getProp(h,y.p||{k:[0,0,0]},1,0,this),y.rx){if(this.rx=PropertyFactory.getProp(h,y.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(h,y.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(h,y.rz,0,degToRads,this),y.or.k[0].ti){var c,l=y.or.k.length;for(c=0;c0;)i-=1,this._elements.unshift(e[i]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),v=this.pMatrix.props,w=this.rMatrix.props,u=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var f=0;if(l>0){for(;fb;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),f-=1;E&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-E,!0),f-=E);}s=this.data.m===1?0:this._currentCopies-1,r=this.data.m===1?1:-1,a=this._currentCopies;for(var g,_;a;){if(e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,_=i.length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(s/(this._currentCopies-1)),f!==0){for((s!==0&&r===1||s!==this._currentCopies-1&&r===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15]),this.matrix.transform(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]),this.matrix.transform(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15]),g=0;g<_;g+=1)i[g]=this.matrix.props[g];this.matrix.reset();}else for(this.matrix.reset(),g=0;g<_;g+=1)i[g]=this.matrix.props[g];f+=1,a-=1,s+=r;}}else for(a=this._currentCopies,s=0,r=1;a;)e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,a-=1,s+=r;return n},RepeaterModifier.prototype.addShape=function(){};function RoundCornersModifier(){}extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length;},RoundCornersModifier.prototype.processPath=function(t,e){var i=shapePool.newElement();i.c=t.c;var s,r=t._length,a,n,p,h,y,P,c=0,l,E,b,v,w,u;for(s=0;s0&&s<1?[e]:[]:[e-s,e+s].filter(function(r){return r>0&&r<1})},PolynomialBezier.prototype.split=function(t){if(t<=0)return [singlePoint(this.points[0]),this];if(t>=1)return [this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),i=lerpPoint(this.points[1],this.points[2],t),s=lerpPoint(this.points[2],this.points[3],t),r=lerpPoint(e,i,t),a=lerpPoint(i,s,t),n=lerpPoint(r,a,t);return [new PolynomialBezier(this.points[0],e,r,n,!0),new PolynomialBezier(n,a,s,this.points[3],!0)]};function extrema(t,e){var i=t.points[0][e],s=t.points[t.points.length-1][e];if(i>s){var r=s;s=i,i=r;}for(var a=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n0&&a[n]<1){var p=t.point(a[n])[e];ps&&(s=p);}return {min:i,max:s}}PolynomialBezier.prototype.bounds=function(){return {x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return {left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}};function intersectData(t,e,i){var s=t.boundingBox();return {cx:s.cx,cy:s.cy,width:s.width,height:s.height,bez:t,t:(e+i)/2,t1:e,t2:i}}function splitData(t){var e=t.bez.split(.5);return [intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return Math.abs(t.cx-e.cx)*2=a||t.width<=s&&t.height<=s&&e.width<=s&&e.height<=s){r.push([t.t,e.t]);return}var n=splitData(t),p=splitData(e);intersectsImpl(n[0],p[0],i+1,s,r,a),intersectsImpl(n[0],p[1],i+1,s,r,a),intersectsImpl(n[1],p[0],i+1,s,r,a),intersectsImpl(n[1],p[1],i+1,s,r,a);}}PolynomialBezier.prototype.intersections=function(t,e,i){e===void 0&&(e=2),i===void 0&&(i=7);var s=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,s,i),s},PolynomialBezier.shapeSegment=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[i],t.v[i],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[i],t.i[i],t.o[e],t.v[e],!0)};function crossProduct(t,e){return [t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,i,s){var r=[t[0],t[1],1],a=[e[0],e[1],1],n=[i[0],i[1],1],p=[s[0],s[1],1],h=crossProduct(crossProduct(r,a),crossProduct(n,p));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,i){return [t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function setPoint(t,e,i,s,r,a,n){var p=i-Math.PI/2,h=i+Math.PI/2,y=e[0]+Math.cos(i)*s*r,P=e[1]-Math.sin(i)*s*r;t.setTripleAt(y,P,y+Math.cos(p)*a,P-Math.sin(p)*a,y+Math.cos(h)*n,P-Math.sin(h)*n,t.length());}function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],s=-Math.PI*.5,r=[Math.cos(s)*i[0]-Math.sin(s)*i[1],Math.sin(s)*i[0]+Math.cos(s)*i[1]];return r}function getProjectingAngle(t,e){var i=e===0?t.length()-1:e-1,s=(e+1)%t.length(),r=t.v[i],a=t.v[s],n=getPerpendicularVector(r,a);return Math.atan2(0,1)-Math.atan2(n[1],n[0])}function zigZagCorner(t,e,i,s,r,a,n){var p=getProjectingAngle(e,i),h=e.v[i%e._length],y=e.v[i===0?e._length-1:i-1],P=e.v[(i+1)%e._length],c=a===2?Math.sqrt(Math.pow(h[0]-y[0],2)+Math.pow(h[1]-y[1],2)):0,l=a===2?Math.sqrt(Math.pow(h[0]-P[0],2)+Math.pow(h[1]-P[1],2)):0;setPoint(t,e.v[i%e._length],p,n,s,l/((r+1)*2),c/((r+1)*2));}function zigZagSegment(t,e,i,s,r,a){for(var n=0;n1&&e.length>1&&(r=getIntersection(t[0],e[e.length-1]),r)?[[t[0].split(r[0])[0]],[e[e.length-1].split(r[1])[1]]]:[i,s]}function pruneIntersections(t){for(var e,i=1;i1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var i=t.inflectionPoints(),s,r,a,n;if(i.length===0)return [offsetSegment(t,e)];if(i.length===1||floatEqual(i[1],1))return a=t.split(i[0]),s=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(r,e)];a=t.split(i[0]),s=a[0];var p=(i[1]-i[0])/(1-i[0]);return a=a[1].split(p),n=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(n,e),offsetSegment(r,e)]}function OffsetPathModifier(){}extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},OffsetPathModifier.prototype.processPath=function(t,e,i,s){var r=shapePool.newElement();r.c=t.c;var a=t.length();t.c||(a-=1);var n,p,h,y=[];for(n=0;n=0;n-=1)h=PolynomialBezier.shapeSegmentInverted(t,n),y.push(offsetSegmentSplit(h,e));y=pruneIntersections(y);var P=null,c=null;for(n=0;n0&&(Gt=!1),Gt){var Ht=createTag("style");Ht.setAttribute("f-forigin",S[R].fOrigin),Ht.setAttribute("f-origin",S[R].origin),Ht.setAttribute("f-family",S[R].fFamily),Ht.type="text/css",Ht.innerText="@font-face {font-family: "+S[R].fFamily+"; font-style: normal; src: url('"+S[R].fPath+"');}",V.appendChild(Ht);}}else if(S[R].fOrigin==="g"||S[R].origin===1){for(Vt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),Xt=0;Xt=55296&&S<=56319){var R=D.charCodeAt(1);R>=56320&&R<=57343&&(V=(S-55296)*1024+R-56320+65536);}return V}function z(D,V){var S=D.toString(16)+V.toString(16);return c.indexOf(S)!==-1}function q(D){return D===h}function W(D){return D===p}function ot(D){var V=k(D);return V>=y&&V<=P}function mt(D){return ot(D.substr(0,2))&&ot(D.substr(2,2))}function gt(D){return i.indexOf(D)!==-1}function ut(D,V){var S=k(D.substr(V,2));if(S!==s)return !1;var R=0;for(V+=2;R<5;){if(S=k(D.substr(V,2)),Sn)return !1;R+=1,V+=2;}return k(D.substr(V,2))===r}function Ct(){this.isLoaded=!0;}var ht=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};ht.isModifier=z,ht.isZeroWidthJoiner=q,ht.isFlagEmoji=mt,ht.isRegionalCode=ot,ht.isCombinedCharacter=gt,ht.isRegionalFlag=ut,ht.isVariationSelector=W,ht.BLACK_FLAG_CODE_POINT=s;var yt={addChars:u,addFonts:w,getCharData:f,getFontByName:_,measureText:g,checkLoadedFonts:b,setIsLoaded:Ct};return ht.prototype=yt,ht}();function SlotManager(t){this.animationData=t;}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t};function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(t){this.renderableComponents.indexOf(t)===-1&&this.renderableComponents.push(t);},removeRenderableComponent:function(t){this.renderableComponents.indexOf(t)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1);},prepareRenderableFrame:function(t){this.checkLayerLimits(t);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},AudioElement.prototype.resume=function(){this._canPlay=!0;},AudioElement.prototype.setRate=function(t){this.audio.rate(t);},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume);},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){};function BaseRenderer(){}BaseRenderer.prototype.checkLayers=function(t){var e,i=this.layers.length,s;for(this.completeLayers=!0,e=i-1;e>=0;e-=1)this.elements[e]||(s=this.layers[e],s.ip-s.st<=t-this.layers[e].st&&s.op-s.st>t-this.layers[e].st&&this.buildItem(e)),this.completeLayers=this.elements[e]?this.completeLayers:!1;this.checkPendingElements();},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t);default:return this.createNull(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t0&&(this.maskElement.setAttribute("id",l),this.element.maskedElement.setAttribute(f,"url("+getLocationHref()+"#"+l+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e=this.element.finalTransform.mat,i,s=this.masksProperties.length;for(i=0;i1&&(s+=" C"+e.o[r-1][0]+","+e.o[r-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),i.lastPath!==s){var n="";i.elem&&(e.c&&(n=t.inv?this.solidPath+s:s),i.elem.setAttribute("d",n)),i.lastPath=s;}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var filtersFactory=function(){var t={};t.createFilter=e,t.createAlphaToLuminanceFilter=i;function e(s,r){var a=createNS("filter");return a.setAttribute("id",s),r!==!0&&(a.setAttribute("filterUnits","objectBoundingBox"),a.setAttribute("x","0%"),a.setAttribute("y","0%"),a.setAttribute("width","100%"),a.setAttribute("height","100%")),a}function i(){var s=createNS("feColorMatrix");return s.setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),s}return t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects$1={},idPrefix="filter_result_";function SVGEffects(t){var e,i="SourceGraphic",s=t.data.ef?t.data.ef.length:0,r=createElementID(),a=filtersFactory.createFilter(r,!0),n=0;this.filters=[];var p;for(e=0;e=0&&(i=this.shapeModifiers[t].processShapes(this._isFirstFrame),!i);t-=1);}},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,s=e.length;i.01)return !1;i+=1;}return !0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t0;)u=l.transformers[ot].mProps._mdf||u,W-=1,ot-=1;if(u)for(W=k-l.styles[g].lvl,ot=l.transformers.length-1;W>0;)q.multiply(l.transformers[ot].mProps.v),W-=1,ot-=1;}else q=t;if(z=l.sh.paths,v=z._length,u){for(w="",b=0;b=1?Ct=.99:Ct<=-1&&(Ct=-.99);var ht=gt*Ct,yt=Math.cos(ut+l.a.v)*ht+w[0],D=Math.sin(ut+l.a.v)*ht+w[1];b.setAttribute("fx",yt),b.setAttribute("fy",D),v&&!l.g._collapsable&&(l.of.setAttribute("fx",yt),l.of.setAttribute("fy",D));}}}function P(c,l,E){var b=l.style,v=l.d;v&&(v._mdf||E)&&v.dashStr&&(b.pElem.setAttribute("stroke-dasharray",v.dashStr),b.pElem.setAttribute("stroke-dashoffset",v.dashoffset[0])),l.c&&(l.c._mdf||E)&&b.pElem.setAttribute("stroke","rgb("+bmFloor(l.c.v[0])+","+bmFloor(l.c.v[1])+","+bmFloor(l.c.v[2])+")"),(l.o._mdf||E)&&b.pElem.setAttribute("stroke-opacity",l.o.v),(l.w._mdf||E)&&(b.pElem.setAttribute("stroke-width",l.w.v),b.msElem&&b.msElem.setAttribute("stroke-width",l.w.v));}return i}();function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,i),this.prevViewData=[];}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e=this.shapes.length,i,s,r=this.stylesList.length,a,n=[],p=!1;for(s=0;s1&&p&&this.setShapesAsAnimated(n);}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e=0;h-=1){if(w=this.searchProcessedElement(t[h]),w?e[h]=i[w-1]:t[h]._render=n,t[h].ty==="fl"||t[h].ty==="st"||t[h].ty==="gf"||t[h].ty==="gs"||t[h].ty==="no")w?e[h].style.closed=!1:e[h]=this.createStyleElement(t[h],r),t[h]._render&&e[h].style.pElem.parentNode!==s&&s.appendChild(e[h].style.pElem),l.push(e[h].style);else if(t[h].ty==="gr"){if(!w)e[h]=this.createGroupElement(t[h]);else for(c=e[h].it.length,P=0;P1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this);},TextProperty.prototype.getValue=function(t){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!t)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,i=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var s,r=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(s=0;se);)i+=1;return this.keysIndex!==i&&(this.keysIndex=i),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e=[],i=0,s=t.length,r,a,n=!1,p=!1,h="";i=55296&&r<=56319?FontManager.isRegionalFlag(t,i)?h=t.substr(i,14):(a=t.charCodeAt(i+1),a>=56320&&a<=57343&&(FontManager.isModifier(r,a)?(h=t.substr(i,2),n=!0):FontManager.isFlagEmoji(t.substr(i,4))?h=t.substr(i,4):h=t.substr(i,2))):r>56319?(a=t.charCodeAt(i+1),FontManager.isVariationSelector(r)&&(n=!0)):FontManager.isZeroWidthJoiner(r)&&(n=!0,p=!0),n?(e[e.length-1]+=h,n=!1):e.push(h),i+=h.length;return e},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e=this.elem.globalData.fontManager,i=this.data,s=[],r,a,n,p=0,h,y=i.m.g,P=0,c=0,l=0,E=[],b=0,v=0,w,u,f=e.getFontByName(t.f),g,_=0,k=getFontProperties(f);t.fWeight=k.weight,t.fStyle=k.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),a=t.finalText.length,t.finalLineHeight=t.lh;var z=t.tr/1e3*t.finalSize,q;if(t.sz)for(var W=!0,ot=t.sz[0],mt=t.sz[1],gt,ut;W;){ut=this.buildFinalText(t.t),gt=0,b=0,a=ut.length,z=t.tr/1e3*t.finalSize;var Ct=-1;for(r=0;rot&&ut[r]!==" "?(Ct===-1?a+=1:r=Ct,gt+=t.finalLineHeight||t.finalSize*1.2,ut.splice(r,Ct===r?1:0,"\r"),Ct=-1,b=0):(b+=_,b+=z);gt+=f.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&mtv?b:v,b=-2*z,h="",n=!0,l+=1):h=yt,e.chars?(g=e.getCharData(yt,f.fStyle,e.getFontByName(t.f).fFamily),_=n?0:g.w*t.finalSize/100):_=e.measureText(h,t.f,t.finalSize),yt===" "?ht+=_+z:(b+=_+z+ht,ht=0),s.push({l:_,an:_,add:P,n,anIndexes:[],val:h,line:l,animatorJustifyOffset:0}),y==2){if(P+=_,h===""||h===" "||r===a-1){for((h===""||h===" ")&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;p+=1,P=0;}}else if(y==3){if(P+=_,h===""||r===a-1){for(h===""&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;P=0,p+=1;}}else s[p].ind=p,s[p].extra=0,p+=1;if(t.l=s,v=b>v?b:v,E.push(b),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0;}t.lineWidths=E;var D=i.a,V,S;u=D.length;var R,tt,J=[];for(w=0;w0?n=this.ne.v/100:p=-this.ne.v/100,this.xe.v>0?h=1-this.xe.v/100:y=1+this.xe.v/100;var P=BezierFactory.getBezierEasing(n,p,h,y).get,c=0,l=this.finalS,E=this.finalE,b=this.data.sh;if(b===2)E===l?c=a>=E?1:0:c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===3)E===l?c=a>=E?0:1:c=1-t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===4)E===l?c=0:(c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c<.5?c*=2:c=1-2*(c-.5)),c=P(c);else if(b===5){if(E===l)c=0;else {var v=E-l;a=e(t(0,a+.5-l),E-l);var w=-v/2+a,u=v/2;c=Math.sqrt(1-w*w/(u*u));}c=P(c);}else b===6?(E===l?c=0:(a=e(t(0,a+.5-l),E-l),c=(1+Math.cos(Math.PI+Math.PI*2*a/(E-l)))/2),c=P(c)):(a>=i(l)&&(a-l<0?c=t(0,e(e(E,1)-(l-a),1)):c=t(0,e(E-a,1))),c=P(c));if(this.sm.v!==100){var f=this.sm.v*.01;f===0&&(f=1e-8);var g=.5-f*.5;c1&&(c=1));}return c*this.a.v},getValue:function(a){this.iterateDynamicProperties(),this._mdf=a||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,a&&this.data.r===2&&(this.e.v=this._currentTextLength);var n=this.data.r===2?1:100/this.data.totalChars,p=this.o.v/n,h=this.s.v/n+p,y=this.e.v/n+p;if(h>y){var P=h;h=y,y=P;}this.finalS=h,this.finalE=y;}},extendPrototype([DynamicPropertyContainer],s);function r(a,n,p){return new s(a,n)}return {getTextSelectorProp:r}}();function TextAnimatorDataProperty(t,e,i){var s={propType:!1},r=PropertyFactory.getProp,a=e.a;this.a={r:a.r?r(t,a.r,0,degToRads,i):s,rx:a.rx?r(t,a.rx,0,degToRads,i):s,ry:a.ry?r(t,a.ry,0,degToRads,i):s,sk:a.sk?r(t,a.sk,0,degToRads,i):s,sa:a.sa?r(t,a.sa,0,degToRads,i):s,s:a.s?r(t,a.s,1,.01,i):s,a:a.a?r(t,a.a,1,0,i):s,o:a.o?r(t,a.o,0,.01,i):s,p:a.p?r(t,a.p,1,0,i):s,sw:a.sw?r(t,a.sw,0,0,i):s,sc:a.sc?r(t,a.sc,1,0,i):s,fc:a.fc?r(t,a.fc,1,0,i):s,fh:a.fh?r(t,a.fh,0,0,i):s,fs:a.fs?r(t,a.fs,0,.01,i):s,fb:a.fb?r(t,a.fb,0,.01,i):s,t:a.t?r(t,a.t,0,0,i):s},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,i),this.s.t=e.s.t;}function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=i,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(i);}TextAnimatorProperty.prototype.searchProperties=function(){var t,e=this._textData.a.length,i,s=PropertyFactory.getProp;for(t=0;t=b+oe||!k?(ot=(b+oe-w)/v.partialLength,Xt=_.point[0]+(v.point[0]-_.point[0])*ot,Ht=_.point[1]+(v.point[1]-_.point[1])*ot,a.translate(-i[0]*l[P].an*.005,-(i[1]*ht)*.01),u=!1):k&&(w+=v.partialLength,f+=1,f>=k.length&&(f=0,g+=1,z[g]?k=z[g].points:gt.v.c?(f=0,g=0,k=z[g].points):(w-=v.partialLength,k=null)),k&&(_=v,v=k[f],q=v.partialLength));Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0);}else Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0),a.translate(-i[0]*l[P].an*.005,-i[1]*ht*.01,0);for(S=0;St?this.textSpans[t].span:createNS(p?"g":"text"),g<=t){if(h.setAttribute("stroke-linecap","butt"),h.setAttribute("stroke-linejoin","round"),h.setAttribute("stroke-miterlimit","4"),this.textSpans[t].span=h,p){var k=createNS("g");h.appendChild(k),this.textSpans[t].childSpan=k;}this.textSpans[t].span=h,this.layerElement.appendChild(h);}h.style.display="inherit";}if(y.reset(),c&&(n[t].n&&(l=-v,E+=i.yOffset,E+=b?1:0,b=!1),this.applyTextPropertiesToMatrix(i,y,n[t].line,l,E),l+=n[t].l||0,l+=v),p){_=this.globalData.fontManager.getCharData(i.finalText[t],s.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily);var z;if(_.t===1)z=new SVGCompElement(_.data,this.globalData,this);else {var q=emptyShapeData;_.data&&_.data.shapes&&(q=this.buildShapeData(_.data,i.finalSize)),z=new SVGShapeElement(q,this.globalData,this);}if(this.textSpans[t].glyph){var W=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(W.layerElement),W.destroy();}this.textSpans[t].glyph=z,z._debug=!0,z.prepareFrame(0),z.renderFrame(),this.textSpans[t].childSpan.appendChild(z.layerElement),_.t===1&&this.textSpans[t].childSpan.setAttribute("transform","scale("+i.finalSize/100+","+i.finalSize/100+")");}else c&&h.setAttribute("transform","translate("+y.props[12]+","+y.props[13]+")"),h.textContent=n[t].val,h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}c&&h&&h.setAttribute("d",P);}for(;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0));}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t=0;i-=1)t.finalTransform.multiply(t.transforms[i].transform.mProps.v);t._mdf=r;},processSequences:function(t){var e,i=this.sequenceList.length;for(e=0;e=1){this.buffers=[];var t=this.globalData.canvasContext,e=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(e);var i=assetLoader.createCanvas(t.canvas.width,t.canvas.height);this.buffers.push(i),this.data.tt>=3&&!document._isProxy&&assetLoader.loadLumaCanvas();}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new CVEffects(this),this.searchEffectTransforms();},createContent:function(){},setBlendMode:function(){var t=this.globalData;if(t.blendMode!==this.data.bm){t.blendMode=this.data.bm;var e=getBlendMode(this.data.bm);t.canvasContext.globalCompositeOperation=e;}},createRenderableComponents:function(){this.maskManager=new CVMaskElement(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);},hideElement:function(){!this.hidden&&(!this.isInRange||this.isTransparent)&&(this.hidden=!0);},showElement:function(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0);},clearCanvas:function(t){t.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy);},prepareLayer:function(){if(this.data.tt>=1){var t=this.buffers[0],e=t.getContext("2d");this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);}},exitLayer:function(){if(this.data.tt>=1){var t=this.buffers[1],e=t.getContext("2d");this.clearCanvas(e),e.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);var i=this.comp.getElementById("tp"in this.data?this.data.tp:this.data.ind-1);if(i.renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var s=assetLoader.getLumaCanvas(this.canvasContext.canvas),r=s.getContext("2d");r.drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(s,0,0);}this.canvasContext.globalCompositeOperation=operationsMap[this.data.tt],this.canvasContext.drawImage(t,0,0),this.canvasContext.globalCompositeOperation="destination-over",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation="source-over";}},renderFrame:function(t){if(!(this.hidden||this.data.hd)&&!(this.data.td===1&&!t)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var e=this.data.ty===0;this.prepareLayer(),this.globalData.renderer.save(e),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(e),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1);}},destroy:function(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy();},mHelper:new Matrix},CVBaseElement.prototype.hide=CVBaseElement.prototype.hideElement,CVBaseElement.prototype.show=CVBaseElement.prototype.showElement;function CVShapeData(t,e,i,s){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var r=4;e.ty==="rc"?r=5:e.ty==="el"?r=6:e.ty==="sr"&&(r=7),this.sh=ShapePropertyFactory.getShapeProp(t,e,r,t);var a,n=i.length,p;for(a=0;a=0;a-=1){if(c=this.searchProcessedElement(t[a]),c?e[a]=i[c-1]:t[a]._shouldRender=s,t[a].ty==="fl"||t[a].ty==="st"||t[a].ty==="gf"||t[a].ty==="gs")c?e[a].style.closed=!1:e[a]=this.createStyleElement(t[a],b),y.push(e[a].style);else if(t[a].ty==="gr"){if(!c)e[a]=this.createGroupElement(t[a]);else for(h=e[a].it.length,p=0;p=0;r-=1)e[r].ty==="tr"?(n=i[r].transform,this.renderShapeTransform(t,n)):e[r].ty==="sh"||e[r].ty==="el"||e[r].ty==="rc"||e[r].ty==="sr"?this.renderPath(e[r],i[r]):e[r].ty==="fl"?this.renderFill(e[r],i[r],n):e[r].ty==="st"?this.renderStroke(e[r],i[r],n):e[r].ty==="gf"||e[r].ty==="gs"?this.renderGradientFill(e[r],i[r],n):e[r].ty==="gr"?this.renderShape(n,e[r].it,i[r].it):e[r].ty;s&&this.drawLayer();},CVShapeElement.prototype.renderStyledShape=function(t,e){if(this._isFirstFrame||e._mdf||t.transforms._mdf){var i=t.trNodes,s=e.paths,r,a,n,p=s._length;i.length=0;var h=t.transforms.finalTransform;for(n=0;n=1?P=.99:P<=-1&&(P=-.99);var c=h*P,l=Math.cos(y+e.a.v)*c+n[0],E=Math.sin(y+e.a.v)*c+n[1];r=a.createRadialGradient(l,E,0,n[0],n[1],h);}var b,v=t.g.p,w=e.g.c,u=1;for(b=0;ba&&h==="xMidYMid slice"||rr&&p==="meet"||ar&&p==="slice")?this.transformCanvas.tx=(i-this.transformCanvas.w*(s/this.transformCanvas.h))/2*this.renderConfig.dpr:y==="xMax"&&(ar&&p==="slice")?this.transformCanvas.tx=(i-this.transformCanvas.w*(s/this.transformCanvas.h))*this.renderConfig.dpr:this.transformCanvas.tx=0,P==="YMid"&&(a>r&&p==="meet"||ar&&p==="meet"||a=0;t-=1)this.elements[t]&&this.elements[t].destroy&&this.elements[t].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0;},CanvasRendererBase.prototype.renderFrame=function(t,e){if(!(this.renderedFrame===t&&this.renderConfig.clearCanvas===!0&&!e||this.destroyed||t===-1)){this.renderedFrame=t,this.globalData.frameNum=t-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||e,this.globalData.projectInterface.currentFrame=t;var i,s=this.layers.length;for(this.completeLayers||this.checkLayers(t),i=s-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].prepareFrame(t-this.layers[i].st);if(this.globalData._mdf){for(this.renderConfig.clearCanvas===!0?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),i=s-1;i>=0;i-=1)(this.completeLayers||this.elements[i])&&this.elements[i].renderFrame();this.renderConfig.clearCanvas!==!0&&this.restore();}}},CanvasRendererBase.prototype.buildItem=function(t){var e=this.elements;if(!(e[t]||this.layers[t].ty===99)){var i=this.createItem(this.layers[t],this,this.globalData);e[t]=i,i.initExpressions();}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var t=this.pendingElements.pop();t.checkParenting();}},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display="none";},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display="block";};function CanvasContext(){this.opacity=-1,this.transform=createTypedArray("float32",16),this.fillStyle="",this.strokeStyle="",this.lineWidth="",this.lineCap="",this.lineJoin="",this.miterLimit="",this.id=Math.random();}function CVContextData(){this.stack=[],this.cArrPos=0,this.cTr=new Matrix;var t,e=15;for(t=0;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].renderFrame();},CVCompElement.prototype.destroy=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.elements[t]&&this.elements[t].destroy();this.layers=null,this.elements=null;},CVCompElement.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)};function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig={clearCanvas:e&&e.clearCanvas!==void 0?e.clearCanvas:!0,context:e&&e.context||null,progressiveLoad:e&&e.progressiveLoad||!1,preserveAspectRatio:e&&e.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:e&&e.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:e&&e.contentVisibility||"visible",className:e&&e.className||"",id:e&&e.id||"",runExpressions:!e||e.runExpressions===void 0||e.runExpressions},this.renderConfig.dpr=e&&e.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=e&&e.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new CVContextData,this.elements=[],this.pendingElements=[],this.transformMat=new Matrix,this.completeLayers=!1,this.rendererType="canvas",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData));}extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(t){return new CVCompElement(t,this.globalData,this)},registerRenderer("canvas",CanvasRenderer),ShapeModifiers.registerModifier("tm",TrimModifier),ShapeModifiers.registerModifier("pb",PuckerAndBloatModifier),ShapeModifiers.registerModifier("rp",RepeaterModifier),ShapeModifiers.registerModifier("rd",RoundCornersModifier),ShapeModifiers.registerModifier("zz",ZigZagModifier),ShapeModifiers.registerModifier("op",OffsetPathModifier);var CompExpressionInterface=function(){return function(t){function e(i){for(var s=0,r=t.layers.length;s=y;)mt/=2,gt/=2,ut>>>=1;return (mt+ut)/gt};return ot.int32=function(){return W.g(4)|0},ot.quick=function(){return W.g(4)/4294967296},ot.double=ot,w(f(W.S),t),(_.pass||k||function(mt,gt,ut,Ct){return Ct&&(Ct.S&&b(Ct,W),mt.state=function(){return b(W,{})}),ut?(e[n]=mt,gt):mt})(ot,q,"global"in _?_.global:this==e,_.state)}e["seed"+n]=l;function E(g){var _,k=g.length,z=this,q=0,W=z.i=z.j=0,ot=z.S=[];for(k||(g=[k++]);qi){var s=i;i=e,e=s;}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if(typeof t=="number"||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var i,s=Math.min(t.length,e.length),r=0;for(i=0;i.5?y/(2-r-a):y/(r+a),r){case e:n=(i-s)/y+(i1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e=t[0],i=t[1],s=t[2],r,a,n;if(i===0)r=s,n=s,a=s;else {var p=s<.5?s*(1+i):s+i-s*i,h=2*s-p;r=hue2rgb(h,p,e+1/3),a=hue2rgb(h,p,e),n=hue2rgb(h,p,e-1/3);}return [r,a,n,t[3]]}function linear(t,e,i,s,r){if((s===void 0||r===void 0)&&(s=e,r=i,e=0,i=1),i=i)return r;var n=i===e?0:(t-e)/(i-e);if(!s.length)return s+(r-s)*n;var p,h=s.length,y=createTypedArray("float32",h);for(p=0;p1){for(r=0;r1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(r)){var p,h=r.length,y=createTypedArray("float32",h);for(p=0;pdata.k[e].t&&tdata.k[e+1].t-t?(s=e+2,r=data.k[e+1].t):(s=e+1,r=data.k[e].t);break}s===-1&&(s=e+1,r=data.k[e].t);}var a={};return a.index=s,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,s;if(!data.k.length||typeof data.k[0]=="number")throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var r=Object.prototype.hasOwnProperty.call(data.k[t],"s")?data.k[t].s:data.k[t-1].e;for(s=r.length,i=0;iw.length-1)&&(E=w.length-1),g=w[w.length-1-E].t,f=u-g);var _,k,z;if(l==="pingpong"){var q=Math.floor((v-g)/f);if(q%2!==0)return this.getValueAtTime((f-(v-g)%f+g)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(g/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(u/this.comp.globalData.frameRate,0),mt=this.getValueAtTime(((v-g)%f+g)/this.comp.globalData.frameRate,0),gt=Math.floor((v-g)/f);if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_=u)return this.pv;var f,g;b?(E?f=Math.abs(this.elem.comp.globalData.frameRate*E):f=Math.max(0,this.elem.data.op-u),g=u+f):((!E||E>w.length-1)&&(E=w.length-1),g=w[E].t,f=g-u);var _,k,z;if(l==="pingpong"){var q=Math.floor((u-v)/f);if(q%2===0)return this.getValueAtTime(((u-v)%f+u)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(u/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(g/this.comp.globalData.frameRate,0),mt=this.getValueAtTime((f-(u-v)%f+u)/this.comp.globalData.frameRate,0),gt=Math.floor((u-v)/f)+1;if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_1?(w-v)/(E-1):1,f=0,g=0,_;this.pv.length?_=createTypedArray("float32",this.pv.length):_=0;for(var k;fu){var z=f,q=b.c&&f===g-1?0:f+1,W=(u-_)/w[f].addedLength;k=bez.getPointInSegment(b.v[z],b.v[q],b.o[z],b.i[q],W,w[f]);break}else _+=w[f].addedLength;f+=1;}return k||(k=b.c?[b.v[0][0],b.v[0][1]]:[b.v[b._length-1][0],b.v[b._length-1][1]]),k},vectorOnPath:function(l,E,b){l==1?l=this.v.c:l==0&&(l=.999);var v=this.pointOnPath(l,E),w=this.pointOnPath(l+.001,E),u=w[0]-v[0],f=w[1]-v[1],g=Math.sqrt(Math.pow(u,2)+Math.pow(f,2));if(g===0)return [0,0];var _=b==="tangent"?[u/g,f/g]:[-f/g,u/g];return _},tangentOnPath:function(l,E){return this.vectorOnPath(l,E,"tangent")},normalOnPath:function(l,E){return this.vectorOnPath(l,E,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([P],h),extendPrototype([P],y),y.prototype.getValueAtTime=p,y.prototype.initiateExpression=ExpressionManager.initiateExpression;var c=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(l,E,b,v,w){var u=c(l,E,b,v,w);return u.propertyIndex=E.ix,u.lock=!1,b===3?expressionHelpers.searchExpressions(l,E.pt,u):b===4&&expressionHelpers.searchExpressions(l,E.ks,u),u.k&&l.addDynamicProperty(u),u};}function initialize$1(){addPropertyDecorator();}function addDecorator(){function t(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}TextProperty.prototype.getExpressionValue=function(e,i){var s=this.calculateExpression(i);if(e.t!==s){var r={};return this.copyData(r,e),r.t=s.toString(),r.__complete=!1,r}return e},TextProperty.prototype.searchProperty=function(){var e=this.searchKeyframes(),i=this.searchExpressions();return this.kf=e||i,this.kf},TextProperty.prototype.searchExpressions=t;}function initialize(){addDecorator();}function TransformEffect(){}TransformEffect.prototype.init=function(t){this.effectsManager=t,this.type=effectTypes.TRANSFORM_EFFECT,this.matrix=new Matrix,this.opacity=-1,this._mdf=!1,this._opMdf=!1;},TransformEffect.prototype.renderFrame=function(t){if(this._opMdf=!1,this._mdf=!1,t||this.effectsManager._mdf){var e=this.effectsManager.effectElements,i=e[0].p.v,s=e[1].p.v,r=e[2].p.v===1,a=e[3].p.v,n=r?a:e[4].p.v,p=e[5].p.v,h=e[6].p.v,y=e[7].p.v;this.matrix.reset(),this.matrix.translate(-i[0],-i[1],i[2]),this.matrix.scale(n*.01,a*.01,1),this.matrix.rotate(-y*degToRads),this.matrix.skewFromAxis(-p*degToRads,(h+90)*degToRads),this.matrix.translate(s[0],s[1],0),this._mdf=!0,this.opacity!==e[8].p.v&&(this.opacity=e[8].p.v,this._opMdf=!0);}};function CVTransformEffect(t){this.init(t);}return extendPrototype([TransformEffect],CVTransformEffect),setExpressionsPlugin(Expressions),setExpressionInterfaces(getInterface),initialize$1(),initialize(),registerEffect(35,CVTransformEffect),lottie});}),Ac=Ec();});var Cl={};fr(Cl,{default:()=>kc});var Cc,kc,kl=ls(()=>{qs();Cc=is((t,e)=>{typeof navigator<"u"&&function(i,s){typeof t=="object"&&typeof e<"u"?e.exports=s():typeof define=="function"&&define.amd?define(s):(i=typeof globalThis<"u"?globalThis:i||self,i.lottie=s());}(t,function(){var i="http://www.w3.org/2000/svg",s="",r=!1,a=-999999,n=function(m){r=!!m;},p=function(){return r},h=function(m){s=m;},y=function(){return s};function P(m){return document.createElement(m)}function c(m,C){var T,B=m.length,G;for(T=0;T1?T[1]=1:T[1]<=0&&(T[1]=0),J(T[0],T[1],T[2])}function Xt(m,C){var T=Gt(m[0]*255,m[1]*255,m[2]*255);return T[2]+=C,T[2]>1?T[2]=1:T[2]<0&&(T[2]=0),J(T[0],T[1],T[2])}function Ht(m,C){var T=Gt(m[0]*255,m[1]*255,m[2]*255);return T[0]+=C/360,T[0]>1?T[0]-=1:T[0]<0&&(T[0]+=1),J(T[0],T[1],T[2])}(function(){var m=[],C,T;for(C=0;C<256;C+=1)T=C.toString(16),m[C]=T.length===1?"0"+T:T;return function(B,G,O){return B<0&&(B=0),G<0&&(G=0),O<0&&(O=0),"#"+m[B]+m[G]+m[O]}})();var Qt=function(m){w=!!m;},Zt=function(){return w},ne=function(m){u=m;},ue=function(){return u},pe=function(m){ot=m;},Wt=function(){return ot},fe=function(m){f=m;};function jt(m){return document.createElementNS(i,m)}function Rt(m){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Rt=function(C){return typeof C}:Rt=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},Rt(m)}var ve=function(){var m=1,C=[],T,B,G={onmessage:function(){},postMessage:function(H){T({data:H});}},O={postMessage:function(H){G.onmessage({data:H});}};function o(H){if(window.Worker&&window.Blob&&p()){var Q=new Blob(["var _workerSelf = self; self.onmessage = ",H.toString()],{type:"text/javascript"}),Z=URL.createObjectURL(Q);return new Worker(Z)}return T=H,G}function d(){B||(B=o(function(H){function Q(){function st(Ft,$t){var _t,At,lt=Ft.length,Tt,Dt,Et,Pt;for(At=0;At=0;$t-=1)if(Ft[$t].ty==="sh")if(Ft[$t].ks.k.i)Y(Ft[$t].ks.k);else for(lt=Ft[$t].ks.k.length,At=0;At_t[0]?!0:_t[0]>Ft[0]?!1:Ft[1]>_t[1]?!0:_t[1]>Ft[1]?!1:Ft[2]>_t[2]?!0:_t[2]>Ft[2]?!1:null}var rt=function(){var Ft=[4,4,14];function $t(At){var lt=At.t.d;At.t.d={k:[{s:lt,t:0}]};}function _t(At){var lt,Tt=At.length;for(lt=0;lt=0;lt-=1)if(At[lt].ty==="sh")if(At[lt].ks.k.i)At[lt].ks.k.c=At[lt].closed;else for(Et=At[lt].ks.k.length,Dt=0;Dt500)&&(this._imageLoaded(),clearInterval($)),X+=1;}.bind(this),50);}function O(et){var X=B(et,this.assetsPath,this.path),$=jt("image");g?this.testImageLoaded($):$.addEventListener("load",this._imageLoaded,!1),$.addEventListener("error",function(){Y.img=m,this._imageLoaded();}.bind(this),!1),$.setAttributeNS("http://www.w3.org/1999/xlink","href",X),this._elementHelper.append?this._elementHelper.append($):this._elementHelper.appendChild($);var Y={img:$,assetData:et};return Y}function o(et){var X=B(et,this.assetsPath,this.path),$=P("img");$.crossOrigin="anonymous",$.addEventListener("load",this._imageLoaded,!1),$.addEventListener("error",function(){Y.img=m,this._imageLoaded();}.bind(this),!1),$.src=X;var Y={img:$,assetData:et};return Y}function d(et){var X={assetData:et},$=B(et,this.assetsPath,this.path);return ve.loadData($,function(Y){X.img=Y,this._footageLoaded();}.bind(this),function(){X.img={},this._footageLoaded();}.bind(this)),X}function x(et,X){this.imagesLoadedCb=X;var $,Y=et.length;for($=0;$this.animationData.op&&(this.animationData.op=m.op,this.totalFrames=Math.floor(m.op-this.animationData.ip));var C=this.animationData.layers,T,B=C.length,G=m.layers,O,o=G.length;for(O=0;Othis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},Ut.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(m){this.triggerRenderFrameError(m);}},Ut.prototype.play=function(m){m&&this.name!==m||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},Ut.prototype.pause=function(m){m&&this.name!==m||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},Ut.prototype.togglePause=function(m){m&&this.name!==m||(this.isPaused===!0?this.play():this.pause());},Ut.prototype.stop=function(m){m&&this.name!==m||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},Ut.prototype.getMarkerData=function(m){for(var C,T=0;T=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(C>this.totalFrames?C%this.totalFrames:0)||(T=!0,C=this.totalFrames-1):C>=this.totalFrames?(this.playCount+=1,this.checkSegments(C%this.totalFrames)||(this.setCurrentRawFrameValue(C%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(C):C<0?this.checkSegments(C%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+C%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(T=!0,C=0)):this.setCurrentRawFrameValue(C),T&&(this.setCurrentRawFrameValue(C),this.pause(),this.trigger("complete"));}},Ut.prototype.adjustSegment=function(m,C){this.playCount=0,m[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=m[0]-m[1],this.timeCompleted=this.totalFrames,this.firstFrame=m[1],this.setCurrentRawFrameValue(this.totalFrames-.001-C)):m[1]>m[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=m[1]-m[0],this.timeCompleted=this.totalFrames,this.firstFrame=m[0],this.setCurrentRawFrameValue(.001+C)),this.trigger("segmentStart");},Ut.prototype.setSegment=function(m,C){var T=-1;this.isPaused&&(this.currentRawFrame+this.firstFrameC&&(T=C-m)),this.firstFrame=m,this.totalFrames=C-m,this.timeCompleted=this.totalFrames,T!==-1&&this.goToAndStop(T,!0);},Ut.prototype.playSegments=function(m,C){if(C&&(this.segments.length=0),te(m[0])==="object"){var T,B=m.length;for(T=0;T=0;At-=1)C[At].animation.destroy(_t);}function K(_t,At,lt){var Tt=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),Dt,Et=Tt.length;for(Dt=0;Dt0?Y=K:$=K;while(Math.abs(nt)>O&&++ft=G?pt(X,dt,$,Y):xt===0?dt:st(X,rt,rt+x,$,Y)}},m}(),ei=function(){function m(C){return C.concat(v(C.length))}return {double:m}}(),Je=function(){return function(m,C,T){var B=0,G=m,O=v(G),o={newElement:d,release:x};function d(){var M;return B?(B-=1,M=O[B]):M=C(),M}function x(M){B===G&&(O=ei.double(O),G*=2),T&&T(M),O[B]=M,B+=1;}return o}}(),pi=function(){function m(){return {addedLength:0,percents:b("float32",Wt()),lengths:b("float32",Wt())}}return Je(8,m)}(),mi=function(){function m(){return {lengths:[],totalLength:0}}function C(T){var B,G=T.lengths.length;for(B=0;B-.001&&X<.001}function T(H,Q,Z,st,pt,et,X,$,Y){if(Z===0&&et===0&&Y===0)return C(H,Q,st,pt,X,$);var N=m.sqrt(m.pow(st-H,2)+m.pow(pt-Q,2)+m.pow(et-Z,2)),rt=m.sqrt(m.pow(X-H,2)+m.pow($-Q,2)+m.pow(Y-Z,2)),nt=m.sqrt(m.pow(X-st,2)+m.pow($-pt,2)+m.pow(Y-et,2)),K;return N>rt?N>nt?K=N-rt-nt:K=nt-rt-N:nt>rt?K=nt-rt-N:K=rt-N-nt,K>-1e-4&&K<1e-4}var B=function(){return function(H,Q,Z,st){var pt=Wt(),et,X,$,Y,N,rt=0,nt,K=[],ft=[],dt=pi.newElement();for($=Z.length,et=0;etX?-1:1,N=!0;N;)if(st[et]<=X&&st[et+1]>X?($=(X-st[et])/(st[et+1]-st[et]),N=!1):et+=Y,et<0||et>=pt-1){if(et===pt-1)return Z[et];N=!1;}return Z[et]+(Z[et+1]-Z[et])*$}function M(H,Q,Z,st,pt,et){var X=x(pt,et),$=1-X,Y=m.round(($*$*$*H[0]+(X*$*$+$*X*$+$*$*X)*Z[0]+(X*X*$+$*X*X+X*$*X)*st[0]+X*X*X*Q[0])*1e3)/1e3,N=m.round(($*$*$*H[1]+(X*$*$+$*X*$+$*$*X)*Z[1]+(X*X*$+$*X*X+X*$*X)*st[1]+X*X*X*Q[1])*1e3)/1e3;return [Y,N]}var L=b("float32",8);function I(H,Q,Z,st,pt,et,X){pt<0?pt=0:pt>1&&(pt=1);var $=x(pt,X);et=et>1?1:et;var Y=x(et,X),N,rt=H.length,nt=1-$,K=1-Y,ft=nt*nt*nt,dt=$*nt*nt*3,xt=$*$*nt*3,Lt=$*$*$,Ot=nt*nt*K,Ft=$*nt*K+nt*$*K+nt*nt*Y,$t=$*$*K+nt*$*Y+$*nt*Y,_t=$*$*Y,At=nt*K*K,lt=$*K*K+nt*Y*K+nt*K*Y,Tt=$*Y*K+nt*Y*Y+$*K*Y,Dt=$*Y*Y,Et=K*K*K,Pt=Y*K*K+K*Y*K+K*K*Y,kt=Y*Y*K+K*Y*Y+Y*K*Y,ct=Y*Y*Y;for(N=0;N=M.t-T){x.h&&(x=M),G=0;break}if(M.t-T>m){G=O;break}O=et||m=et?Y.points.length-1:0;for(H=Y.points[N].point.length,I=0;I=K&&rt=et)B[0]=$[0],B[1]=$[1],B[2]=$[2];else if(m<=X)B[0]=x.s[0],B[1]=x.s[1],B[2]=x.s[2];else {var Ft=Ts(x.s),$t=Ts($),_t=(m-X)/(et-X);Br(B,Rr(Ft,$t,_t));}else for(O=0;O=et?Q=1:m1e-6?(H=Math.acos(Q),Z=Math.sin(H),st=Math.sin((1-T)*H)/Z,pt=Math.sin(T*H)/Z):(st=1-T,pt=T),B[0]=st*G+pt*x,B[1]=st*O+pt*M,B[2]=st*o+pt*L,B[3]=st*d+pt*I,B}function Br(m,C){var T=C[0],B=C[1],G=C[2],O=C[3],o=Math.atan2(2*B*O-2*T*G,1-2*B*B-2*G*G),d=Math.asin(2*T*B+2*G*O),x=Math.atan2(2*T*O-2*B*G,1-2*T*T-2*G*G);m[0]=o/mt,m[1]=d/mt,m[2]=x/mt;}function Ts(m){var C=m[0]*mt,T=m[1]*mt,B=m[2]*mt,G=Math.cos(C/2),O=Math.cos(T/2),o=Math.cos(B/2),d=Math.sin(C/2),x=Math.sin(T/2),M=Math.sin(B/2),L=G*O*o-d*x*M,I=d*x*o+G*O*M,H=d*O*o+G*x*M,Q=G*x*o-d*O*M;return [I,H,Q,L]}function Ms(){var m=this.comp.renderedFrame-this.offsetTime,C=this.keyframes[0].t-this.offsetTime,T=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(m===this._caching.lastFrame||this._caching.lastFrame!==bs&&(this._caching.lastFrame>=T&&m>=T||this._caching.lastFrame=m&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var B=this.interpolateValue(m,this._caching);this.pv=B;}return this._caching.lastFrame=m,this.pv}function us(m){var C;if(this.propType==="unidimensional")C=m*this.mult,ia(this.v-C)>1e-5&&(this.v=C,this._mdf=!0);else for(var T=0,B=this.v.length;T1e-5&&(this.v[T]=C,this._mdf=!0),T+=1;}function mr(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var m,C=this.effectsSequence.length,T=this.kf?this.pv:this.data.k;for(m=0;m=this._maxLength&&this.doubleArrayLength(),T){case"v":O=this.v;break;case"i":O=this.i;break;case"o":O=this.o;break;default:O=[];break}(!O[B]||O[B]&&!G)&&(O[B]=Fe.newElement()),O[B][0]=m,O[B][1]=C;},$i.prototype.setTripleAt=function(m,C,T,B,G,O,o,d){this.setXYAt(m,C,"v",o,d),this.setXYAt(T,B,"o",o,d),this.setXYAt(G,O,"i",o,d);},$i.prototype.reverse=function(){var m=new $i;m.setPathData(this.c,this._length);var C=this.v,T=this.o,B=this.i,G=0;this.c&&(m.setTripleAt(C[0][0],C[0][1],B[0][0],B[0][1],T[0][0],T[0][1],0,!1),G=1);var O=this._length-1,o=this._length,d;for(d=G;d=Ft[Ft.length-1].t-this.offsetTime)N=Ft[Ft.length-1].s?Ft[Ft.length-1].s[0]:Ft[Ft.length-2].e[0],nt=!0;else {for(var $t=Y,_t=Ft.length-1,At=!0,lt,Tt,Dt;At&&(lt=Ft[$t],Tt=Ft[$t+1],!(Tt.t-this.offsetTime>et));)$t<_t-1?$t+=1:At=!1;if(Dt=this.keyframesMetadata[$t]||{},nt=lt.h===1,Y=$t,!nt){if(et>=Tt.t-this.offsetTime)Lt=1;else if(et$&&et>$)||(this._caching.lastIndex=Y0||lt>-1e-6&<<0?B(lt*Tt)/Tt:lt}function At(){var lt=this.props,Tt=_t(lt[0]),Dt=_t(lt[1]),Et=_t(lt[4]),Pt=_t(lt[5]),kt=_t(lt[12]),ct=_t(lt[13]);return "matrix("+Tt+","+Dt+","+Et+","+Pt+","+kt+","+ct+")"}return function(){this.reset=G,this.rotate=O,this.rotateX=o,this.rotateY=d,this.rotateZ=x,this.skew=L,this.skewFromAxis=I,this.shear=M,this.scale=H,this.setTransform=Q,this.translate=Z,this.transform=st,this.multiply=pt,this.applyToPoint=N,this.applyToX=rt,this.applyToY=nt,this.applyToZ=K,this.applyToPointArray=Ot,this.applyToTriplePoints=Lt,this.applyToPointStringified=Ft,this.toCSS=$t,this.to2dCSS=At,this.clone=$,this.cloneFromProps=Y,this.equals=X,this.inversePoints=xt,this.inversePoint=dt,this.getInverseMatrix=ft,this._t=this.transform,this.isIdentity=et,this._identity=!0,this._identityCalculated=!1,this.props=b("float32",16),this.reset();}}();function gr(m){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gr=function(C){return typeof C}:gr=function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C},gr(m)}var Oe={};function Ta(m){h(m);}function ra(){oe.searchAnimations();}function Ma(m){Qt(m);}function wa(m){fe(m);}function Da(m){return oe.loadAnimation(m)}function Fa(m){if(typeof m=="string")switch(m){case"high":pe(200);break;default:case"medium":pe(50);break;case"low":pe(10);break}else !isNaN(m)&&m>1&&pe(m);}function Ia(){return typeof navigator<"u"}function La(m,C){m==="expressions"&&ne(C);}function Va(m){switch(m){case"propertyFactory":return Kt;case"shapePropertyFactory":return ms;case"matrix":return se;default:return null}}Oe.play=oe.play,Oe.pause=oe.pause,Oe.setLocationHref=Ta,Oe.togglePause=oe.togglePause,Oe.setSpeed=oe.setSpeed,Oe.setDirection=oe.setDirection,Oe.stop=oe.stop,Oe.searchAnimations=ra,Oe.registerAnimation=oe.registerAnimation,Oe.loadAnimation=Da,Oe.setSubframeRendering=Ma,Oe.resize=oe.resize,Oe.goToAndStop=oe.goToAndStop,Oe.destroy=oe.destroy,Oe.setQuality=Fa,Oe.inBrowser=Ia,Oe.installPlugin=La,Oe.freeze=oe.freeze,Oe.unfreeze=oe.unfreeze,Oe.setVolume=oe.setVolume,Oe.mute=oe.mute,Oe.unmute=oe.unmute,Oe.getRegisteredAnimations=oe.getRegisteredAnimations,Oe.useWebWorker=n,Oe.setIDPrefix=wa,Oe.__getFactory=Va,Oe.version="5.12.2";function Or(){document.readyState==="complete"&&(clearInterval(ni),ra());}function zr(m){for(var C=aa.split("&"),T=0;T"u"?"undefined":gr(t))==="object"&&typeof e<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=Oe);}catch{}var je=function(){var m={},C={};m.registerModifier=T,m.getModifier=B;function T(G,O){C[G]||(C[G]=O);}function B(G,O,o){return new C[G](O,o)}return m}();function di(){}di.prototype.initModifierProperties=function(){},di.prototype.addShapeToModifier=function(){},di.prototype.addShape=function(m){if(!this.closed){m.sh.container.addDynamicProperty(m.sh);var C={shape:m.sh,data:m,localShapeCollection:Ce.newShapeCollection()};this.shapes.push(C),this.addShapeToModifier(C),this._isAnimated&&m.setAsAnimated();}},di.prototype.init=function(m,C){this.shapes=[],this.elem=m,this.initDynamicPropertyContainer(m),this.initModifierProperties(m,C),this.frameId=a,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},di.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},c([Re],di);function wi(){}c([di],wi),wi.prototype.initModifierProperties=function(m,C){this.s=Kt.getProp(m,C.s,0,.01,this),this.e=Kt.getProp(m,C.e,0,.01,this),this.o=Kt.getProp(m,C.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=C.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},wi.prototype.addShapeToModifier=function(m){m.pathsData=[];},wi.prototype.calculateShapeEdges=function(m,C,T,B,G){var O=[];C<=1?O.push({s:m,e:C}):m>=1?O.push({s:m-1,e:C-1}):(O.push({s:m,e:1}),O.push({s:0,e:C-1}));var o=[],d,x=O.length,M;for(d=0;dB+T)){var L,I;M.s*G<=B?L=0:L=(M.s*G-B)/T,M.e*G>=B+T?I=1:I=(M.e*G-B)/T,o.push([L,I]);}return o.length||o.push([0,0]),o},wi.prototype.releasePathsData=function(m){var C,T=m.length;for(C=0;C1?C=1+B:this.s.v<0?C=0+B:C=this.s.v+B,this.e.v>1?T=1+B:this.e.v<0?T=0+B:T=this.e.v+B,C>T){var G=C;C=T,T=G;}C=Math.round(C*1e4)*1e-4,T=Math.round(T*1e4)*1e-4,this.sValue=C,this.eValue=T;}else C=this.sValue,T=this.eValue;var O,o,d=this.shapes.length,x,M,L,I,H,Q=0;if(T===C)for(o=0;o=0;o-=1)if(st=this.shapes[o],st.shape._mdf){for(pt=st.localShapeCollection,pt.releaseShapes(),this.m===2&&d>1?(Y=this.calculateShapeEdges(C,T,st.totalShapeLength,$,Q),$+=st.totalShapeLength):Y=[[et,X]],M=Y.length,x=0;x=1?Z.push({s:st.totalShapeLength*(et-1),e:st.totalShapeLength*(X-1)}):(Z.push({s:st.totalShapeLength*et,e:st.totalShapeLength}),Z.push({s:0,e:st.totalShapeLength*(X-1)}));var N=this.addShapes(st,Z[0]);if(Z[0].s!==Z[0].e){if(Z.length>1){var rt=st.shape.paths.shapes[st.shape.paths._length-1];if(rt.c){var nt=N.pop();this.addPaths(N,pt),N=this.addShapes(st,Z[1],nt);}else this.addPaths(N,pt),N=this.addShapes(st,Z[1]);}this.addPaths(N,pt);}}st.shape.paths=pt;}}},wi.prototype.addPaths=function(m,C){var T,B=m.length;for(T=0;TC.e){T.c=!1;break}else C.s<=M&&C.e>=M+L.addedLength?(this.addSegment(G[O].v[d-1],G[O].o[d-1],G[O].i[d],G[O].v[d],T,I,pt),pt=!1):(Q=Zi.getNewSegment(G[O].v[d-1],G[O].v[d],G[O].o[d-1],G[O].i[d],(C.s-M)/L.addedLength,(C.e-M)/L.addedLength,H[d-1]),this.addSegmentFromArray(Q,T,I,pt),pt=!1,T.c=!1),M+=L.addedLength,I+=1;if(G[O].c&&H.length){if(L=H[d-1],M<=C.e){var et=H[d-1].addedLength;C.s<=M&&C.e>=M+et?(this.addSegment(G[O].v[d-1],G[O].o[d-1],G[O].i[0],G[O].v[0],T,I,pt),pt=!1):(Q=Zi.getNewSegment(G[O].v[d-1],G[O].v[0],G[O].o[d-1],G[O].i[0],(C.s-M)/et,(C.e-M)/et,H[d-1]),this.addSegmentFromArray(Q,T,I,pt),pt=!1,T.c=!1);}else T.c=!1;M+=L.addedLength,I+=1;}if(T._length&&(T.setXYAt(T.v[st][0],T.v[st][1],"i",st),T.setXYAt(T.v[T._length-1][0],T.v[T._length-1][1],"o",T._length-1)),M>C.e)break;O=this.p.keyframes[this.p.keyframes.length-1].t?(L=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/M,0),I=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/M,0)):(L=this.p.pv,I=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/M,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){L=[],I=[];var H=this.px,Q=this.py;H._caching.lastFrame+H.offsetTime<=H.keyframes[0].t?(L[0]=H.getValueAtTime((H.keyframes[0].t+.01)/M,0),L[1]=Q.getValueAtTime((Q.keyframes[0].t+.01)/M,0),I[0]=H.getValueAtTime(H.keyframes[0].t/M,0),I[1]=Q.getValueAtTime(Q.keyframes[0].t/M,0)):H._caching.lastFrame+H.offsetTime>=H.keyframes[H.keyframes.length-1].t?(L[0]=H.getValueAtTime(H.keyframes[H.keyframes.length-1].t/M,0),L[1]=Q.getValueAtTime(Q.keyframes[Q.keyframes.length-1].t/M,0),I[0]=H.getValueAtTime((H.keyframes[H.keyframes.length-1].t-.01)/M,0),I[1]=Q.getValueAtTime((Q.keyframes[Q.keyframes.length-1].t-.01)/M,0)):(L=[H.pv,Q.pv],I[0]=H.getValueAtTime((H._caching.lastFrame+H.offsetTime-.01)/M,H.offsetTime),I[1]=Q.getValueAtTime((Q._caching.lastFrame+Q.offsetTime-.01)/M,Q.offsetTime));}else I=m,L=I;this.v.rotate(-Math.atan2(L[1]-I[1],L[0]-I[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function B(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function G(){}function O(x){this._addDynamicProperty(x),this.elem.addDynamicProperty(x),this._isDirty=!0;}function o(x,M,L){if(this.elem=x,this.frameId=-1,this.propType="transform",this.data=M,this.v=new se,this.pre=new se,this.appliedTransformations=0,this.initDynamicPropertyContainer(L||x),M.p&&M.p.s?(this.px=Kt.getProp(x,M.p.x,0,0,this),this.py=Kt.getProp(x,M.p.y,0,0,this),M.p.z&&(this.pz=Kt.getProp(x,M.p.z,0,0,this))):this.p=Kt.getProp(x,M.p||{k:[0,0,0]},1,0,this),M.rx){if(this.rx=Kt.getProp(x,M.rx,0,mt,this),this.ry=Kt.getProp(x,M.ry,0,mt,this),this.rz=Kt.getProp(x,M.rz,0,mt,this),M.or.k[0].ti){var I,H=M.or.k.length;for(I=0;I0;)T-=1,this._elements.unshift(C[T]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},Di.prototype.resetElements=function(m){var C,T=m.length;for(C=0;C0?Math.floor(H):Math.ceil(H),st=this.pMatrix.props,pt=this.rMatrix.props,et=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var X=0;if(H>0){for(;XZ;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),X-=1;Q&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-Q,!0),X-=Q);}B=this.data.m===1?0:this._currentCopies-1,G=this.data.m===1?1:-1,O=this._currentCopies;for(var $,Y;O;){if(C=this.elemsData[B].it,T=C[C.length-1].transform.mProps.v.props,Y=T.length,C[C.length-1].transform.mProps._mdf=!0,C[C.length-1].transform.op._mdf=!0,C[C.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(B/(this._currentCopies-1)),X!==0){for((B!==0&&G===1||B!==this._currentCopies-1&&G===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(pt[0],pt[1],pt[2],pt[3],pt[4],pt[5],pt[6],pt[7],pt[8],pt[9],pt[10],pt[11],pt[12],pt[13],pt[14],pt[15]),this.matrix.transform(et[0],et[1],et[2],et[3],et[4],et[5],et[6],et[7],et[8],et[9],et[10],et[11],et[12],et[13],et[14],et[15]),this.matrix.transform(st[0],st[1],st[2],st[3],st[4],st[5],st[6],st[7],st[8],st[9],st[10],st[11],st[12],st[13],st[14],st[15]),$=0;$0&&B<1?[C]:[]:[C-B,C+B].filter(function(G){return G>0&&G<1})},$e.prototype.split=function(m){if(m<=0)return [vr(this.points[0]),this];if(m>=1)return [this,vr(this.points[this.points.length-1])];var C=ds(this.points[0],this.points[1],m),T=ds(this.points[1],this.points[2],m),B=ds(this.points[2],this.points[3],m),G=ds(C,T,m),O=ds(T,B,m),o=ds(G,O,m);return [new $e(this.points[0],C,G,o,!0),new $e(o,O,B,this.points[3],!0)]};function br(m,C){var T=m.points[0][C],B=m.points[m.points.length-1][C];if(T>B){var G=B;B=T,T=G;}for(var O=Nr(3*m.a[C],2*m.b[C],m.c[C]),o=0;o0&&O[o]<1){var d=m.point(O[o])[C];dB&&(B=d);}return {min:T,max:B}}$e.prototype.bounds=function(){return {x:br(this,0),y:br(this,1)}},$e.prototype.boundingBox=function(){var m=this.bounds();return {left:m.x.min,right:m.x.max,top:m.y.min,bottom:m.y.max,width:m.x.max-m.x.min,height:m.y.max-m.y.min,cx:(m.x.max+m.x.min)/2,cy:(m.y.max+m.y.min)/2}};function _r(m,C,T){var B=m.boundingBox();return {cx:B.cx,cy:B.cy,width:B.width,height:B.height,bez:m,t:(C+T)/2,t1:C,t2:T}}function gs(m){var C=m.bez.split(.5);return [_r(C[0],m.t1,m.t),_r(C[1],m.t,m.t2)]}function rr(m,C){return Math.abs(m.cx-C.cx)*2=O||m.width<=B&&m.height<=B&&C.width<=B&&C.height<=B){G.push([m.t,C.t]);return}var o=gs(m),d=gs(C);as(o[0],d[0],T+1,B,G,O),as(o[0],d[1],T+1,B,G,O),as(o[1],d[0],T+1,B,G,O),as(o[1],d[1],T+1,B,G,O);}}$e.prototype.intersections=function(m,C,T){C===void 0&&(C=2),T===void 0&&(T=7);var B=[];return as(_r(this,0,1),_r(m,0,1),0,C,B,T),B},$e.shapeSegment=function(m,C){var T=(C+1)%m.length();return new $e(m.v[C],m.o[C],m.i[T],m.v[T],!0)},$e.shapeSegmentInverted=function(m,C){var T=(C+1)%m.length();return new $e(m.v[T],m.i[T],m.o[C],m.v[C],!0)};function Wi(m,C){return [m[1]*C[2]-m[2]*C[1],m[2]*C[0]-m[0]*C[2],m[0]*C[1]-m[1]*C[0]]}function ws(m,C,T,B){var G=[m[0],m[1],1],O=[C[0],C[1],1],o=[T[0],T[1],1],d=[B[0],B[1],1],x=Wi(Wi(G,O),Wi(o,d));return Ai(x[2])?null:[x[0]/x[2],x[1]/x[2]]}function Fi(m,C,T){return [m[0]+Math.cos(C)*T,m[1]-Math.sin(C)*T]}function ns(m,C){return Math.hypot(m[0]-C[0],m[1]-C[1])}function Ds(m,C){return Ws(m[0],C[0])&&Ws(m[1],C[1])}function ar(){}c([di],ar),ar.prototype.initModifierProperties=function(m,C){this.getValue=this.processKeys,this.amplitude=Kt.getProp(m,C.s,0,null,this),this.frequency=Kt.getProp(m,C.r,0,null,this),this.pointsType=Kt.getProp(m,C.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function oa(m,C,T,B,G,O,o){var d=T-Math.PI/2,x=T+Math.PI/2,M=C[0]+Math.cos(T)*B*G,L=C[1]-Math.sin(T)*B*G;m.setTripleAt(M,L,M+Math.cos(d)*O,L-Math.sin(d)*O,M+Math.cos(x)*o,L-Math.sin(x)*o,m.length());}function Gr(m,C){var T=[C[0]-m[0],C[1]-m[1]],B=-Math.PI*.5,G=[Math.cos(B)*T[0]-Math.sin(B)*T[1],Math.sin(B)*T[0]+Math.cos(B)*T[1]];return G}function Ba(m,C){var T=C===0?m.length()-1:C-1,B=(C+1)%m.length(),G=m.v[T],O=m.v[B],o=Gr(G,O);return Math.atan2(0,1)-Math.atan2(o[1],o[0])}function Xs(m,C,T,B,G,O,o){var d=Ba(C,T),x=C.v[T%C._length],M=C.v[T===0?C._length-1:T-1],L=C.v[(T+1)%C._length],I=O===2?Math.sqrt(Math.pow(x[0]-M[0],2)+Math.pow(x[1]-M[1],2)):0,H=O===2?Math.sqrt(Math.pow(x[0]-L[0],2)+Math.pow(x[1]-L[1],2)):0;oa(m,C.v[T%C._length],d,o,B,H/((G+1)*2),I/((G+1)*2));}function os(m,C,T,B,G,O){for(var o=0;o1&&C.length>1&&(G=ha(m[0],C[C.length-1]),G)?[[m[0].split(G[0])[0]],[C[C.length-1].split(G[1])[1]]]:[T,B]}function xs(m){for(var C,T=1;T1&&(C=Pr(m[m.length-1],m[0]),m[m.length-1]=C[0],m[0]=C[1]),m}function Sr(m,C){var T=m.inflectionPoints(),B,G,O,o;if(T.length===0)return [Fs(m,C)];if(T.length===1||Ws(T[1],1))return O=m.split(T[0]),B=O[0],G=O[1],[Fs(B,C),Fs(G,C)];O=m.split(T[0]),B=O[0];var d=(T[1]-T[0])/(1-T[0]);return O=O[1].split(d),o=O[0],G=O[1],[Fs(B,C),Fs(o,C),Fs(G,C)]}function Ci(){}c([di],Ci),Ci.prototype.initModifierProperties=function(m,C){this.getValue=this.processKeys,this.amount=Kt.getProp(m,C.a,0,null,this),this.miterLimit=Kt.getProp(m,C.ml,0,null,this),this.lineJoin=C.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},Ci.prototype.processPath=function(m,C,T,B){var G=Ue.newElement();G.c=m.c;var O=m.length();m.c||(O-=1);var o,d,x,M=[];for(o=0;o=0;o-=1)x=$e.shapeSegmentInverted(m,o),M.push(Sr(x,C));M=xs(M);var L=null,I=null;for(o=0;o0&&(Pt=!1),Pt){var wt=P("style");wt.setAttribute("f-forigin",lt[Tt].fOrigin),wt.setAttribute("f-origin",lt[Tt].origin),wt.setAttribute("f-family",lt[Tt].fFamily),wt.type="text/css",wt.innerText="@font-face {font-family: "+lt[Tt].fFamily+"; font-style: normal; src: url('"+lt[Tt].fPath+"');}",At.appendChild(wt);}}else if(lt[Tt].fOrigin==="g"||lt[Tt].origin===1){for(kt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),ct=0;ct=55296&<<=56319){var Tt=_t.charCodeAt(1);Tt>=56320&&Tt<=57343&&(At=(lt-55296)*1024+Tt-56320+65536);}return At}function rt(_t,At){var lt=_t.toString(16)+At.toString(16);return I.indexOf(lt)!==-1}function nt(_t){return _t===x}function K(_t){return _t===d}function ft(_t){var At=N(_t);return At>=M&&At<=L}function dt(_t){return ft(_t.substr(0,2))&&ft(_t.substr(2,2))}function xt(_t){return T.indexOf(_t)!==-1}function Lt(_t,At){var lt=N(_t.substr(At,2));if(lt!==B)return !1;var Tt=0;for(At+=2;Tt<5;){if(lt=N(_t.substr(At,2)),lto)return !1;Tt+=1,At+=2;}return N(_t.substr(At,2))===G}function Ot(){this.isLoaded=!0;}var Ft=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};Ft.isModifier=rt,Ft.isZeroWidthJoiner=nt,Ft.isFlagEmoji=dt,Ft.isRegionalCode=ft,Ft.isCombinedCharacter=xt,Ft.isRegionalFlag=Lt,Ft.isVariationSelector=K,Ft.BLACK_FLAG_CODE_POINT=B;var $t={addChars:et,addFonts:pt,getCharData:X,getFontByName:Y,measureText:$,checkLoadedFonts:Z,setIsLoaded:Ot};return Ft.prototype=$t,Ft}();function Ki(m){this.animationData=m;}Ki.prototype.getProp=function(m){return this.animationData.slots&&this.animationData.slots[m.sid]?Object.assign(m,this.animationData.slots[m.sid].p):m};function Ys(m){return new Ki(m)}function Js(){}Js.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(m){this.renderableComponents.indexOf(m)===-1&&this.renderableComponents.push(m);},removeRenderableComponent:function(m){this.renderableComponents.indexOf(m)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(m),1);},prepareRenderableFrame:function(m){this.checkLayerLimits(m);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(m){this.data.ip-this.data.st<=m&&this.data.op-this.data.st>m?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var m,C=this.renderableComponents.length;for(m=0;m.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},Ii.prototype.show=function(){},Ii.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},Ii.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},Ii.prototype.resume=function(){this._canPlay=!0;},Ii.prototype.setRate=function(m){this.audio.rate(m);},Ii.prototype.volume=function(m){this._volumeMultiplier=m,this._previousVolume=m*this._volume,this.audio.volume(this._previousVolume);},Ii.prototype.getBaseElement=function(){return null},Ii.prototype.destroy=function(){},Ii.prototype.sourceRectAtTime=function(){},Ii.prototype.initExpressions=function(){};function Be(){}Be.prototype.checkLayers=function(m){var C,T=this.layers.length,B;for(this.completeLayers=!0,C=T-1;C>=0;C-=1)this.elements[C]||(B=this.layers[C],B.ip-B.st<=m-this.layers[C].st&&B.op-B.st>m-this.layers[C].st&&this.buildItem(C)),this.completeLayers=this.elements[C]?this.completeLayers:!1;this.checkPendingElements();},Be.prototype.createItem=function(m){switch(m.ty){case 2:return this.createImage(m);case 0:return this.createComp(m);case 1:return this.createSolid(m);case 3:return this.createNull(m);case 4:return this.createShape(m);case 5:return this.createText(m);case 6:return this.createAudio(m);case 13:return this.createCamera(m);case 15:return this.createFootage(m);default:return this.createNull(m)}},Be.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},Be.prototype.createAudio=function(m){return new Ii(m,this.globalData,this)},Be.prototype.createFootage=function(m){return new Te(m,this.globalData,this)},Be.prototype.buildAllItems=function(){var m,C=this.layers.length;for(m=0;m0&&(this.maskElement.setAttribute("id",H),this.element.maskedElement.setAttribute(X,"url("+y()+"#"+H+")"),B.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}Qi.prototype.getMaskProperty=function(m){return this.viewData[m].prop},Qi.prototype.renderFrame=function(m){var C=this.element.finalTransform.mat,T,B=this.masksProperties.length;for(T=0;T1&&(B+=" C"+C.o[G-1][0]+","+C.o[G-1][1]+" "+C.i[0][0]+","+C.i[0][1]+" "+C.v[0][0]+","+C.v[0][1]),T.lastPath!==B){var o="";T.elem&&(C.c&&(o=m.inv?this.solidPath+B:B),T.elem.setAttribute("d",o)),T.lastPath=B;}},Qi.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var Ss=function(){var m={};m.createFilter=C,m.createAlphaToLuminanceFilter=T;function C(B,G){var O=jt("filter");return O.setAttribute("id",B),G!==!0&&(O.setAttribute("filterUnits","objectBoundingBox"),O.setAttribute("x","0%"),O.setAttribute("y","0%"),O.setAttribute("width","100%"),O.setAttribute("height","100%")),O}function T(){var B=jt("feColorMatrix");return B.setAttribute("type","matrix"),B.setAttribute("color-interpolation-filters","sRGB"),B.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),B}return m}(),Ar=function(){var m={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(m.maskType=!1),/firefox/i.test(navigator.userAgent)&&(m.svgLumaHidden=!1),m}(),Rs={},ys="filter_result_";function ki(m){var C,T="SourceGraphic",B=m.data.ef?m.data.ef.length:0,G=tt(),O=Ss.createFilter(G,!0),o=0;this.filters=[];var d;for(C=0;C=0&&(T=this.shapeModifiers[m].processShapes(this._isFirstFrame),!T);m-=1);}},searchProcessedElement:function(m){for(var C=this.processedElements,T=0,B=C.length;T.01)return !1;T+=1;}return !0},Os.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var m=0,C=this.data.k.k.length;m0;)et=H.transformers[ft].mProps._mdf||et,K-=1,ft-=1;if(et)for(K=N-H.styles[$].lvl,ft=H.transformers.length-1;K>0;)nt.multiply(H.transformers[ft].mProps.v),K-=1,ft-=1;}else nt=m;if(rt=H.sh.paths,st=rt._length,et){for(pt="",Z=0;Z=1?Ot=.99:Ot<=-1&&(Ot=-.99);var Ft=xt*Ot,$t=Math.cos(Lt+H.a.v)*Ft+pt[0],_t=Math.sin(Lt+H.a.v)*Ft+pt[1];Z.setAttribute("fx",$t),Z.setAttribute("fy",_t),st&&!H.g._collapsable&&(H.of.setAttribute("fx",$t),H.of.setAttribute("fy",_t));}}}function L(I,H,Q){var Z=H.style,st=H.d;st&&(st._mdf||Q)&&st.dashStr&&(Z.pElem.setAttribute("stroke-dasharray",st.dashStr),Z.pElem.setAttribute("stroke-dashoffset",st.dashoffset[0])),H.c&&(H.c._mdf||Q)&&Z.pElem.setAttribute("stroke","rgb("+z(H.c.v[0])+","+z(H.c.v[1])+","+z(H.c.v[2])+")"),(H.o._mdf||Q)&&Z.pElem.setAttribute("stroke-opacity",H.o.v),(H.w._mdf||Q)&&(Z.pElem.setAttribute("stroke-width",H.w.v),Z.msElem&&Z.msElem.setAttribute("stroke-width",H.w.v));}return T}();function ye(m,C,T){this.shapes=[],this.shapesData=m.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(m,C,T),this.prevViewData=[];}c([We,xi,Li,or,fi,ke,Bs],ye),ye.prototype.initSecondaryElement=function(){},ye.prototype.identityMatrix=new se,ye.prototype.buildExpressionInterface=function(){},ye.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},ye.prototype.filterUniqueShapes=function(){var m,C=this.shapes.length,T,B,G=this.stylesList.length,O,o=[],d=!1;for(B=0;B1&&d&&this.setShapesAsAnimated(o);}},ye.prototype.setShapesAsAnimated=function(m){var C,T=m.length;for(C=0;C=0;x-=1){if(pt=this.searchProcessedElement(m[x]),pt?C[x]=T[pt-1]:m[x]._render=o,m[x].ty==="fl"||m[x].ty==="st"||m[x].ty==="gf"||m[x].ty==="gs"||m[x].ty==="no")pt?C[x].style.closed=!1:C[x]=this.createStyleElement(m[x],G),m[x]._render&&C[x].style.pElem.parentNode!==B&&B.appendChild(C[x].style.pElem),H.push(C[x].style);else if(m[x].ty==="gr"){if(!pt)C[x]=this.createGroupElement(m[x]);else for(I=C[x].it.length,L=0;L1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},Vi.prototype.addEffect=function(m){this.effectsSequence.push(m),this.elem.addDynamicProperty(this);},Vi.prototype.getValue=function(m){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!m)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var C=this.currentData,T=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var B,G=this.effectsSequence.length,O=m||this.data.d.k[this.keysIndex].s;for(B=0;BC);)T+=1;return this.keysIndex!==T&&(this.keysIndex=T),this.data.d.k[this.keysIndex].s},Vi.prototype.buildFinalText=function(m){for(var C=[],T=0,B=m.length,G,O,o=!1,d=!1,x="";T=55296&&G<=56319?Vs.isRegionalFlag(m,T)?x=m.substr(T,14):(O=m.charCodeAt(T+1),O>=56320&&O<=57343&&(Vs.isModifier(G,O)?(x=m.substr(T,2),o=!0):Vs.isFlagEmoji(m.substr(T,4))?x=m.substr(T,4):x=m.substr(T,2))):G>56319?(O=m.charCodeAt(T+1),Vs.isVariationSelector(G)&&(o=!0)):Vs.isZeroWidthJoiner(G)&&(o=!0,d=!0),o?(C[C.length-1]+=x,o=!1):C.push(x),T+=x.length;return C},Vi.prototype.completeTextData=function(m){m.__complete=!0;var C=this.elem.globalData.fontManager,T=this.data,B=[],G,O,o,d=0,x,M=T.m.g,L=0,I=0,H=0,Q=[],Z=0,st=0,pt,et,X=C.getFontByName(m.f),$,Y=0,N=Er(X);m.fWeight=N.weight,m.fStyle=N.style,m.finalSize=m.s,m.finalText=this.buildFinalText(m.t),O=m.finalText.length,m.finalLineHeight=m.lh;var rt=m.tr/1e3*m.finalSize,nt;if(m.sz)for(var K=!0,ft=m.sz[0],dt=m.sz[1],xt,Lt;K;){Lt=this.buildFinalText(m.t),xt=0,Z=0,O=Lt.length,rt=m.tr/1e3*m.finalSize;var Ot=-1;for(G=0;Gft&&Lt[G]!==" "?(Ot===-1?O+=1:G=Ot,xt+=m.finalLineHeight||m.finalSize*1.2,Lt.splice(G,Ot===G?1:0,"\r"),Ot=-1,Z=0):(Z+=Y,Z+=rt);xt+=X.ascent*m.finalSize/100,this.canResize&&m.finalSize>this.minimumFontSize&&dtst?Z:st,Z=-2*rt,x="",o=!0,H+=1):x=$t,C.chars?($=C.getCharData($t,X.fStyle,C.getFontByName(m.f).fFamily),Y=o?0:$.w*m.finalSize/100):Y=C.measureText(x,m.f,m.finalSize),$t===" "?Ft+=Y+rt:(Z+=Y+rt+Ft,Ft=0),B.push({l:Y,an:Y,add:L,n:o,anIndexes:[],val:x,line:H,animatorJustifyOffset:0}),M==2){if(L+=Y,x===""||x===" "||G===O-1){for((x===""||x===" ")&&(L-=Y);I<=G;)B[I].an=L,B[I].ind=d,B[I].extra=Y,I+=1;d+=1,L=0;}}else if(M==3){if(L+=Y,x===""||G===O-1){for(x===""&&(L-=Y);I<=G;)B[I].an=L,B[I].ind=d,B[I].extra=Y,I+=1;L=0,d+=1;}}else B[d].ind=d,B[d].extra=0,d+=1;if(m.l=B,st=Z>st?Z:st,Q.push(Z),m.sz)m.boxWidth=m.sz[0],m.justifyOffset=0;else switch(m.boxWidth=st,m.j){case 1:m.justifyOffset=-m.boxWidth;break;case 2:m.justifyOffset=-m.boxWidth/2;break;default:m.justifyOffset=0;}m.lineWidths=Q;var _t=T.a,At,lt;et=_t.length;var Tt,Dt,Et=[];for(pt=0;pt0?o=this.ne.v/100:d=-this.ne.v/100,this.xe.v>0?x=1-this.xe.v/100:M=1+this.xe.v/100;var L=xe.getBezierEasing(o,d,x,M).get,I=0,H=this.finalS,Q=this.finalE,Z=this.data.sh;if(Z===2)Q===H?I=O>=Q?1:0:I=m(0,C(.5/(Q-H)+(O-H)/(Q-H),1)),I=L(I);else if(Z===3)Q===H?I=O>=Q?0:1:I=1-m(0,C(.5/(Q-H)+(O-H)/(Q-H),1)),I=L(I);else if(Z===4)Q===H?I=0:(I=m(0,C(.5/(Q-H)+(O-H)/(Q-H),1)),I<.5?I*=2:I=1-2*(I-.5)),I=L(I);else if(Z===5){if(Q===H)I=0;else {var st=Q-H;O=C(m(0,O+.5-H),Q-H);var pt=-st/2+O,et=st/2;I=Math.sqrt(1-pt*pt/(et*et));}I=L(I);}else Z===6?(Q===H?I=0:(O=C(m(0,O+.5-H),Q-H),I=(1+Math.cos(Math.PI+Math.PI*2*O/(Q-H)))/2),I=L(I)):(O>=T(H)&&(O-H<0?I=m(0,C(C(Q,1)-(H-O),1)):I=m(0,C(Q-O,1))),I=L(I));if(this.sm.v!==100){var X=this.sm.v*.01;X===0&&(X=1e-8);var $=.5-X*.5;I<$?I=0:(I=(I-$)/X,I>1&&(I=1));}return I*this.a.v},getValue:function(O){this.iterateDynamicProperties(),this._mdf=O||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,O&&this.data.r===2&&(this.e.v=this._currentTextLength);var o=this.data.r===2?1:100/this.data.totalChars,d=this.o.v/o,x=this.s.v/o+d,M=this.e.v/o+d;if(x>M){var L=x;x=M,M=L;}this.finalS=x,this.finalE=M;}},c([Re],B);function G(O,o,d){return new B(O,o)}return {getTextSelectorProp:G}}();function ii(m,C,T){var B={propType:!1},G=Kt.getProp,O=C.a;this.a={r:O.r?G(m,O.r,0,mt,T):B,rx:O.rx?G(m,O.rx,0,mt,T):B,ry:O.ry?G(m,O.ry,0,mt,T):B,sk:O.sk?G(m,O.sk,0,mt,T):B,sa:O.sa?G(m,O.sa,0,mt,T):B,s:O.s?G(m,O.s,1,.01,T):B,a:O.a?G(m,O.a,1,0,T):B,o:O.o?G(m,O.o,0,.01,T):B,p:O.p?G(m,O.p,1,0,T):B,sw:O.sw?G(m,O.sw,0,0,T):B,sc:O.sc?G(m,O.sc,1,0,T):B,fc:O.fc?G(m,O.fc,1,0,T):B,fh:O.fh?G(m,O.fh,0,0,T):B,fs:O.fs?G(m,O.fs,0,.01,T):B,fb:O.fb?G(m,O.fb,0,.01,T):B,t:O.t?G(m,O.t,0,0,T):B},this.s=Xi.getTextSelectorProp(m,C.s,T),this.s.t=C.s.t;}function zs(m,C,T){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=m,this._renderType=C,this._elem=T,this._animatorsData=v(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(T);}zs.prototype.searchProperties=function(){var m,C=this._textData.a.length,T,B=Kt.getProp;for(m=0;m=Z+Ti||!N?(ft=(Z+Ti-pt)/st.partialLength,ct=Y.point[0]+(st.point[0]-Y.point[0])*ft,wt=Y.point[1]+(st.point[1]-Y.point[1])*ft,O.translate(-T[0]*H[L].an*.005,-(T[1]*Ft)*.01),et=!1):N&&(pt+=st.partialLength,X+=1,X>=N.length&&(X=0,$+=1,rt[$]?N=rt[$].points:xt.v.c?(X=0,$=0,N=rt[$].points):(pt-=st.partialLength,N=null)),N&&(Y=st,st=N[X],nt=st.partialLength));kt=H[L].an/2-H[L].add,O.translate(-kt,0,0);}else kt=H[L].an/2-H[L].add,O.translate(-kt,0,0),O.translate(-T[0]*H[L].an*.005,-T[1]*Ft*.01,0);for(lt=0;ltm?this.textSpans[m].span:jt(d?"g":"text"),$<=m){if(x.setAttribute("stroke-linecap","butt"),x.setAttribute("stroke-linejoin","round"),x.setAttribute("stroke-miterlimit","4"),this.textSpans[m].span=x,d){var N=jt("g");x.appendChild(N),this.textSpans[m].childSpan=N;}this.textSpans[m].span=x,this.layerElement.appendChild(x);}x.style.display="inherit";}if(M.reset(),I&&(o[m].n&&(H=-st,Q+=T.yOffset,Q+=Z?1:0,Z=!1),this.applyTextPropertiesToMatrix(T,M,o[m].line,H,Q),H+=o[m].l||0,H+=st),d){Y=this.globalData.fontManager.getCharData(T.finalText[m],B.fStyle,this.globalData.fontManager.getFontByName(T.f).fFamily);var rt;if(Y.t===1)rt=new A(Y.data,this.globalData,this);else {var nt=pr;Y.data&&Y.data.shapes&&(nt=this.buildShapeData(Y.data,T.finalSize)),rt=new ye(nt,this.globalData,this);}if(this.textSpans[m].glyph){var K=this.textSpans[m].glyph;this.textSpans[m].childSpan.removeChild(K.layerElement),K.destroy();}this.textSpans[m].glyph=rt,rt._debug=!0,rt.prepareFrame(0),rt.renderFrame(),this.textSpans[m].childSpan.appendChild(rt.layerElement),Y.t===1&&this.textSpans[m].childSpan.setAttribute("transform","scale("+T.finalSize/100+","+T.finalSize/100+")");}else I&&x.setAttribute("transform","translate("+M.props[12]+","+M.props[13]+")"),x.textContent=o[m].val,x.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}I&&x&&x.setAttribute("d",L);}for(;m=0;C-=1)(this.completeLayers||this.elements[C])&&this.elements[C].prepareFrame(m-this.layers[C].st);if(this.globalData._mdf)for(C=0;C=0;T-=1)(this.completeLayers||this.elements[T])&&(this.elements[T].prepareFrame(this.renderedFrame-this.layers[T].st),this.elements[T]._mdf&&(this._mdf=!0));}},zi.prototype.renderInnerContent=function(){var m,C=this.layers.length;for(m=0;m0&&x<1&&G[H].push(this.calculateF(x,m,C,T,B,H))):(M=o*o-4*d*O,M>=0&&(L=(-o+k(M))/(2*O),L>0&&L<1&&G[H].push(this.calculateF(L,m,C,T,B,H)),I=(-o-k(M))/(2*O),I>0&&I<1&&G[H].push(this.calculateF(I,m,C,T,B,H)))));this.shapeBoundingBox.left=W.apply(null,G[0]),this.shapeBoundingBox.top=W.apply(null,G[1]),this.shapeBoundingBox.right=q.apply(null,G[0]),this.shapeBoundingBox.bottom=q.apply(null,G[1]);},vt.prototype.calculateF=function(m,C,T,B,G,O){return _(1-m,3)*C[O]+3*_(1-m,2)*m*T[O]+3*(1-m)*_(m,2)*B[O]+_(m,3)*G[O]},vt.prototype.calculateBoundingBox=function(m,C){var T,B=m.length;for(T=0;TT&&(T=G);}T*=m.mult;}else T=m.v*m.mult;C.x-=T,C.xMax+=T,C.y-=T,C.yMax+=T;},vt.prototype.currentBoxContains=function(m){return this.currentBBox.x<=m.x&&this.currentBBox.y<=m.y&&this.currentBBox.width+this.currentBBox.x>=m.x+m.width&&this.currentBBox.height+this.currentBBox.y>=m.y+m.height},vt.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var m=this.tempBoundingBox,C=999999;if(m.x=C,m.xMax=-C,m.y=C,m.yMax=-C,this.calculateBoundingBox(this.itemsData,m),m.width=m.xMax=0;C-=1){var B=this.hierarchy[C].finalTransform.mProp;this.mat.translate(-B.p.v[0],-B.p.v[1],B.p.v[2]),this.mat.rotateX(-B.or.v[0]).rotateY(-B.or.v[1]).rotateZ(B.or.v[2]),this.mat.rotateX(-B.rx.v).rotateY(-B.ry.v).rotateZ(B.rz.v),this.mat.scale(1/B.s.v[0],1/B.s.v[1],1/B.s.v[2]),this.mat.translate(B.a.v[0],B.a.v[1],B.a.v[2]);}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var G;this.p?G=[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:G=[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var O=Math.sqrt(Math.pow(G[0],2)+Math.pow(G[1],2)+Math.pow(G[2],2)),o=[G[0]/O,G[1]/O,G[2]/O],d=Math.sqrt(o[2]*o[2]+o[0]*o[0]),x=Math.atan2(o[1],d),M=Math.atan2(o[0],-o[2]);this.mat.rotateY(M).rotateX(-x);}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var L=!this._prevMat.equals(this.mat);if((L||this.pe._mdf)&&this.comp.threeDElements){T=this.comp.threeDElements.length;var I,H,Q;for(C=0;C=m)return this.threeDElements[C].perspectiveElem;C+=1;}return null},It.prototype.createThreeDContainer=function(m,C){var T=P("div"),B,G;ut(T);var O=P("div");if(ut(O),C==="3d"){B=T.style,B.width=this.globalData.compSize.w+"px",B.height=this.globalData.compSize.h+"px";var o="50% 50%";B.webkitTransformOrigin=o,B.mozTransformOrigin=o,B.transformOrigin=o,G=O.style;var d="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";G.transform=d,G.webkitTransform=d;}T.appendChild(O);var x={container:O,perspectiveElem:T,startPos:m,endPos:m,type:C};return this.threeDElements.push(x),x},It.prototype.build3dContainers=function(){var m,C=this.layers.length,T,B="";for(m=0;m=0;m-=1)this.resizerElem.appendChild(this.threeDElements[m].perspectiveElem);},It.prototype.addTo3dContainer=function(m,C){for(var T=0,B=this.threeDElements.length;TT?(G=m/this.globalData.compSize.w,O=m/this.globalData.compSize.w,o=0,d=(C-this.globalData.compSize.h*(m/this.globalData.compSize.w))/2):(G=C/this.globalData.compSize.h,O=C/this.globalData.compSize.h,o=(m-this.globalData.compSize.w*(C/this.globalData.compSize.h))/2,d=0);var x=this.resizerElem.style;x.webkitTransform="matrix3d("+G+",0,0,0,0,"+O+",0,0,0,0,1,0,"+o+","+d+",0,1)",x.transform=x.webkitTransform;},It.prototype.renderFrame=F.prototype.renderFrame,It.prototype.hide=function(){this.resizerElem.style.display="none";},It.prototype.show=function(){this.resizerElem.style.display="block";},It.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else {var m=this.globalData.compSize.w,C=this.globalData.compSize.h,T,B=this.threeDElements.length;for(T=0;TMc});var Tc,Mc,Ml=ls(()=>{qs();Tc=is((exports,module)=>{typeof navigator<"u"&&function(t,e){typeof exports=="object"&&typeof module<"u"?module.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.lottie=e());}(exports,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(t){_useWebWorker=!!t;},getWebWorker=function(){return _useWebWorker},setLocationHref=function(t){locationHref=t;},getLocationHref=function(){return locationHref};function createTag(t){return document.createElement(t)}function extendPrototype(t,e){var i,s=t.length,r;for(i=0;i1?i[1]=1:i[1]<=0&&(i[1]=0),HSVtoRGB(i[0],i[1],i[2])}function addBrightnessToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[2]+=e,i[2]>1?i[2]=1:i[2]<0&&(i[2]=0),HSVtoRGB(i[0],i[1],i[2])}function addHueToRGB(t,e){var i=RGBtoHSV(t[0]*255,t[1]*255,t[2]*255);return i[0]+=e/360,i[0]>1?i[0]-=1:i[0]<0&&(i[0]+=1),HSVtoRGB(i[0],i[1],i[2])}var rgbToHex=function(){var t=[],e,i;for(e=0;e<256;e+=1)i=e.toString(16),t[e]=i.length===1?"0"+i:i;return function(s,r,a){return s<0&&(s=0),r<0&&(r=0),a<0&&(a=0),"#"+t[s]+t[r]+t[a]}}(),setSubframeEnabled=function(t){subframeEnabled=!!t;},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(t){expressionsPlugin=t;},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(t){expressionsInterfaces=t;},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(t){defaultCurveSegments=t;},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(t){idPrefix$1=t;};function createNS(t){return document.createElementNS(svgNS,t)}function _typeof$5(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(e){return typeof e}:_typeof$5=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$5(t)}var dataManager=function(){var t=1,e=[],i,s,r={onmessage:function(){},postMessage:function(l){i({data:l});}},a={postMessage:function(l){r.onmessage({data:l});}};function n(l){if(window.Worker&&window.Blob&&getWebWorker()){var E=new Blob(["var _workerSelf = self; self.onmessage = ",l.toString()],{type:"text/javascript"}),b=URL.createObjectURL(E);return new Worker(b)}return i=l,r}function p(){s||(s=n(function(l){function E(){function v(ht,yt){var D,V,S=ht.length,R,tt,J,Gt;for(V=0;V=0;yt-=1)if(ht[yt].ty==="sh")if(ht[yt].ks.k.i)_(ht[yt].ks.k);else for(S=ht[yt].ks.k.length,V=0;VD[0]?!0:D[0]>ht[0]?!1:ht[1]>D[1]?!0:D[1]>ht[1]?!1:ht[2]>D[2]?!0:D[2]>ht[2]?!1:null}var z=function(){var ht=[4,4,14];function yt(V){var S=V.t.d;V.t.d={k:[{s:S,t:0}]};}function D(V){var S,R=V.length;for(S=0;S=0;S-=1)if(V[S].ty==="sh")if(V[S].ks.k.i)V[S].ks.k.c=V[S].closed;else for(J=V[S].ks.k.length,tt=0;tt500)&&(this._imageLoaded(),clearInterval(g)),f+=1;}.bind(this),50);}function a(u){var f=s(u,this.assetsPath,this.path),g=createNS("image");isSafari?this.testImageLoaded(g):g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.setAttributeNS("http://www.w3.org/1999/xlink","href",f),this._elementHelper.append?this._elementHelper.append(g):this._elementHelper.appendChild(g);var _={img:g,assetData:u};return _}function n(u){var f=s(u,this.assetsPath,this.path),g=createTag("img");g.crossOrigin="anonymous",g.addEventListener("load",this._imageLoaded,!1),g.addEventListener("error",function(){_.img=t,this._imageLoaded();}.bind(this),!1),g.src=f;var _={img:g,assetData:u};return _}function p(u){var f={assetData:u},g=s(u,this.assetsPath,this.path);return dataManager.loadData(g,function(_){f.img=_,this._footageLoaded();}.bind(this),function(){f.img={},this._footageLoaded();}.bind(this)),f}function h(u,f){this.imagesLoadedCb=f;var g,_=u.length;for(g=0;g<_;g+=1)u[g].layers||(!u[g].t||u[g].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(u[g]))):u[g].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(u[g]))));}function y(u){this.path=u||"";}function P(u){this.assetsPath=u||"";}function c(u){for(var f=0,g=this.images.length;fthis.animationData.op&&(this.animationData.op=t.op,this.totalFrames=Math.floor(t.op-this.animationData.ip));var e=this.animationData.layers,i,s=e.length,r=t.layers,a,n=r.length;for(a=0;athis.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame");},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame);}catch(t){this.triggerRenderFrameError(t);}},AnimationItem.prototype.play=function(t){t&&this.name!==t||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")));},AnimationItem.prototype.pause=function(t){t&&this.name!==t||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause());},AnimationItem.prototype.togglePause=function(t){t&&this.name!==t||(this.isPaused===!0?this.play():this.pause());},AnimationItem.prototype.stop=function(t){t&&this.name!==t||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0));},AnimationItem.prototype.getMarkerData=function(t){for(var e,i=0;i=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(e>this.totalFrames?e%this.totalFrames:0)||(i=!0,e=this.totalFrames-1):e>=this.totalFrames?(this.playCount+=1,this.checkSegments(e%this.totalFrames)||(this.setCurrentRawFrameValue(e%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(e):e<0?this.checkSegments(e%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+e%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(i=!0,e=0)):this.setCurrentRawFrameValue(e),i&&(this.setCurrentRawFrameValue(e),this.pause(),this.trigger("complete"));}},AnimationItem.prototype.adjustSegment=function(t,e){this.playCount=0,t[1]0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=t[0]-t[1],this.timeCompleted=this.totalFrames,this.firstFrame=t[1],this.setCurrentRawFrameValue(this.totalFrames-.001-e)):t[1]>t[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=t[1]-t[0],this.timeCompleted=this.totalFrames,this.firstFrame=t[0],this.setCurrentRawFrameValue(.001+e)),this.trigger("segmentStart");},AnimationItem.prototype.setSegment=function(t,e){var i=-1;this.isPaused&&(this.currentRawFrame+this.firstFramee&&(i=e-t)),this.firstFrame=t,this.totalFrames=e-t,this.timeCompleted=this.totalFrames,i!==-1&&this.goToAndStop(i,!0);},AnimationItem.prototype.playSegments=function(t,e){if(e&&(this.segments.length=0),_typeof$4(t[0])==="object"){var i,s=t.length;for(i=0;i=0;V-=1)e[V].animation.destroy(D);}function W(D,V,S){var R=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),tt,J=R.length;for(tt=0;tt0?_=W:g=W;while(Math.abs(q)>a&&++ot=r?w(f,mt,g,_):gt===0?mt:v(f,z,z+h,g,_)}},t}(),pooling=function(){function t(e){return e.concat(createSizedArray(e.length))}return {double:t}}(),poolFactory=function(){return function(t,e,i){var s=0,r=t,a=createSizedArray(r),n={newElement:p,release:h};function p(){var y;return s?(s-=1,y=a[s]):y=e(),y}function h(y){s===r&&(a=pooling.double(a),r*=2),i&&i(y),a[s]=y,s+=1;}return n}}(),bezierLengthPool=function(){function t(){return {addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,t)}(),segmentsLengthPool=function(){function t(){return {lengths:[],totalLength:0}}function e(i){var s,r=i.lengths.length;for(s=0;s-.001&&f<.001}function i(l,E,b,v,w,u,f,g,_){if(b===0&&u===0&&_===0)return e(l,E,v,w,f,g);var k=t.sqrt(t.pow(v-l,2)+t.pow(w-E,2)+t.pow(u-b,2)),z=t.sqrt(t.pow(f-l,2)+t.pow(g-E,2)+t.pow(_-b,2)),q=t.sqrt(t.pow(f-v,2)+t.pow(g-w,2)+t.pow(_-u,2)),W;return k>z?k>q?W=k-z-q:W=q-z-k:q>z?W=q-z-k:W=z-k-q,W>-1e-4&&W<1e-4}var s=function(){return function(l,E,b,v){var w=getDefaultCurveSegments(),u,f,g,_,k,z=0,q,W=[],ot=[],mt=bezierLengthPool.newElement();for(g=b.length,u=0;uf?-1:1,k=!0;k;)if(v[u]<=f&&v[u+1]>f?(g=(f-v[u])/(v[u+1]-v[u]),k=!1):u+=_,u<0||u>=w-1){if(u===w-1)return b[u];k=!1;}return b[u]+(b[u+1]-b[u])*g}function y(l,E,b,v,w,u){var f=h(w,u),g=1-f,_=t.round((g*g*g*l[0]+(f*g*g+g*f*g+g*g*f)*b[0]+(f*f*g+g*f*f+f*g*f)*v[0]+f*f*f*E[0])*1e3)/1e3,k=t.round((g*g*g*l[1]+(f*g*g+g*f*g+g*g*f)*b[1]+(f*f*g+g*f*f+f*g*f)*v[1]+f*f*f*E[1])*1e3)/1e3;return [_,k]}var P=createTypedArray("float32",8);function c(l,E,b,v,w,u,f){w<0?w=0:w>1&&(w=1);var g=h(w,f);u=u>1?1:u;var _=h(u,f),k,z=l.length,q=1-g,W=1-_,ot=q*q*q,mt=g*q*q*3,gt=g*g*q*3,ut=g*g*g,Ct=q*q*W,ht=g*q*W+q*g*W+q*q*_,yt=g*g*W+q*g*_+g*q*_,D=g*g*_,V=q*W*W,S=g*W*W+q*_*W+q*W*_,R=g*_*W+q*_*_+g*W*_,tt=g*_*_,J=W*W*W,Gt=_*W*W+W*_*W+W*W*_,Vt=_*_*W+W*_*_+_*W*_,Xt=_*_*_;for(k=0;k=y.t-i){h.h&&(h=y),r=0;break}if(y.t-i>t){r=a;break}a=u||t=u?_.points.length-1:0;for(l=_.points[k].point.length,c=0;c=W&&z=u)s[0]=g[0],s[1]=g[1],s[2]=g[2];else if(t<=f)s[0]=h.s[0],s[1]=h.s[1],s[2]=h.s[2];else {var ht=createQuaternion(h.s),yt=createQuaternion(g),D=(t-f)/(u-f);quaternionToEuler(s,slerp(ht,yt,D));}else for(a=0;a=u?E=1:t1e-6?(l=Math.acos(E),b=Math.sin(l),v=Math.sin((1-i)*l)/b,w=Math.sin(i*l)/b):(v=1-i,w=i),s[0]=v*r+w*h,s[1]=v*a+w*y,s[2]=v*n+w*P,s[3]=v*p+w*c,s}function quaternionToEuler(t,e){var i=e[0],s=e[1],r=e[2],a=e[3],n=Math.atan2(2*s*a-2*i*r,1-2*s*s-2*r*r),p=Math.asin(2*i*s+2*r*a),h=Math.atan2(2*i*a-2*s*r,1-2*i*i-2*r*r);t[0]=n/degToRads,t[1]=p/degToRads,t[2]=h/degToRads;}function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,s=t[2]*degToRads,r=Math.cos(e/2),a=Math.cos(i/2),n=Math.cos(s/2),p=Math.sin(e/2),h=Math.sin(i/2),y=Math.sin(s/2),P=r*a*n-p*h*y,c=p*h*n+r*a*y,l=p*a*n+r*h*y,E=r*h*n-p*a*y;return [c,l,E,P]}function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offsetTime,e=this.keyframes[0].t-this.offsetTime,i=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(t===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=i&&t>=i||this._caching.lastFrame=t&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var s=this.interpolateValue(t,this._caching);this.pv=s;}return this._caching.lastFrame=t,this.pv}function setVValue(t){var e;if(this.propType==="unidimensional")e=t*this.mult,mathAbs(this.v-e)>1e-5&&(this.v=e,this._mdf=!0);else for(var i=0,s=this.v.length;i1e-5&&(this.v[i]=e,this._mdf=!0),i+=1;}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var t,e=this.effectsSequence.length,i=this.kf?this.pv:this.data.k;for(t=0;t=this._maxLength&&this.doubleArrayLength(),i){case"v":a=this.v;break;case"i":a=this.i;break;case"o":a=this.o;break;default:a=[];break}(!a[s]||a[s]&&!r)&&(a[s]=pointPool.newElement()),a[s][0]=t,a[s][1]=e;},ShapePath.prototype.setTripleAt=function(t,e,i,s,r,a,n,p){this.setXYAt(t,e,"v",n,p),this.setXYAt(i,s,"o",n,p),this.setXYAt(r,a,"i",n,p);},ShapePath.prototype.reverse=function(){var t=new ShapePath;t.setPathData(this.c,this._length);var e=this.v,i=this.o,s=this.i,r=0;this.c&&(t.setTripleAt(e[0][0],e[0][1],s[0][0],s[0][1],i[0][0],i[0][1],0,!1),r=1);var a=this._length-1,n=this._length,p;for(p=r;p=ht[ht.length-1].t-this.offsetTime)k=ht[ht.length-1].s?ht[ht.length-1].s[0]:ht[ht.length-2].e[0],q=!0;else {for(var yt=_,D=ht.length-1,V=!0,S,R,tt;V&&(S=ht[yt],R=ht[yt+1],!(R.t-this.offsetTime>u));)yt=R.t-this.offsetTime)ut=1;else if(ug&&u>g)||(this._caching.lastIndex=_0||S>-1e-6&&S<0?s(S*R)/R:S}function V(){var S=this.props,R=D(S[0]),tt=D(S[1]),J=D(S[4]),Gt=D(S[5]),Vt=D(S[12]),Xt=D(S[13]);return "matrix("+R+","+tt+","+J+","+Gt+","+Vt+","+Xt+")"}return function(){this.reset=r,this.rotate=a,this.rotateX=n,this.rotateY=p,this.rotateZ=h,this.skew=P,this.skewFromAxis=c,this.shear=y,this.scale=l,this.setTransform=E,this.translate=b,this.transform=v,this.multiply=w,this.applyToPoint=k,this.applyToX=z,this.applyToY=q,this.applyToZ=W,this.applyToPointArray=Ct,this.applyToTriplePoints=ut,this.applyToPointStringified=ht,this.toCSS=yt,this.to2dCSS=V,this.clone=g,this.cloneFromProps=_,this.equals=f,this.inversePoints=gt,this.inversePoint=mt,this.getInverseMatrix=ot,this._t=this.transform,this.isIdentity=u,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset();}}();function _typeof$3(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$3=function(e){return typeof e}:_typeof$3=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof$3(t)}var lottie={};function setLocation(t){setLocationHref(t);}function searchAnimations(){animationManager.searchAnimations();}function setSubframeRendering(t){setSubframeEnabled(t);}function setPrefix(t){setIdPrefix(t);}function loadAnimation(t){return animationManager.loadAnimation(t)}function setQuality(t){if(typeof t=="string")switch(t){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10);break}else !isNaN(t)&&t>1&&setDefaultCurveSegments(t);}function inBrowser(){return typeof navigator<"u"}function installPlugin(t,e){t==="expressions"&&setExpressionsPlugin(e);}function getFactory(t){switch(t){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.12.2";function checkReady(){document.readyState==="complete"&&(clearInterval(readyStateCheckInterval),searchAnimations());}function getQueryVariable(t){for(var e=queryString.split("&"),i=0;i"u"?"undefined":_typeof$3(exports))==="object"&&typeof module<"u")&&!(typeof define=="function"&&define.amd)&&(window.bodymovin=lottie);}catch(t){}var ShapeModifiers=function(){var t={},e={};t.registerModifier=i,t.getModifier=s;function i(r,a){e[r]||(e[r]=a);}function s(r,a,n){return new e[r](a,n)}return t}();function ShapeModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(t){if(!this.closed){t.sh.container.addDynamicProperty(t.sh);var e={shape:t.sh,data:t,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(e),this.addShapeToModifier(e),this._isAnimated&&t.setAsAnimated();}},ShapeModifier.prototype.init=function(t,e){this.shapes=[],this.elem=t,this.initDynamicPropertyContainer(t),this.initModifierProperties(t,e),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0);},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties());},extendPrototype([DynamicPropertyContainer],ShapeModifier);function TrimModifier(){}extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(t,e){this.s=PropertyFactory.getProp(t,e.s,0,.01,this),this.e=PropertyFactory.getProp(t,e.e,0,.01,this),this.o=PropertyFactory.getProp(t,e.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=e.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length;},TrimModifier.prototype.addShapeToModifier=function(t){t.pathsData=[];},TrimModifier.prototype.calculateShapeEdges=function(t,e,i,s,r){var a=[];e<=1?a.push({s:t,e}):t>=1?a.push({s:t-1,e:e-1}):(a.push({s:t,e:1}),a.push({s:0,e:e-1}));var n=[],p,h=a.length,y;for(p=0;ps+i)){var P,c;y.s*r<=s?P=0:P=(y.s*r-s)/i,y.e*r>=s+i?c=1:c=(y.e*r-s)/i,n.push([P,c]);}return n.length||n.push([0,0]),n},TrimModifier.prototype.releasePathsData=function(t){var e,i=t.length;for(e=0;e1?e=1+s:this.s.v<0?e=0+s:e=this.s.v+s,this.e.v>1?i=1+s:this.e.v<0?i=0+s:i=this.e.v+s,e>i){var r=e;e=i,i=r;}e=Math.round(e*1e4)*1e-4,i=Math.round(i*1e4)*1e-4,this.sValue=e,this.eValue=i;}else e=this.sValue,i=this.eValue;var a,n,p=this.shapes.length,h,y,P,c,l,E=0;if(i===e)for(n=0;n=0;n-=1)if(v=this.shapes[n],v.shape._mdf){for(w=v.localShapeCollection,w.releaseShapes(),this.m===2&&p>1?(_=this.calculateShapeEdges(e,i,v.totalShapeLength,g,E),g+=v.totalShapeLength):_=[[u,f]],y=_.length,h=0;h=1?b.push({s:v.totalShapeLength*(u-1),e:v.totalShapeLength*(f-1)}):(b.push({s:v.totalShapeLength*u,e:v.totalShapeLength}),b.push({s:0,e:v.totalShapeLength*(f-1)}));var k=this.addShapes(v,b[0]);if(b[0].s!==b[0].e){if(b.length>1){var z=v.shape.paths.shapes[v.shape.paths._length-1];if(z.c){var q=k.pop();this.addPaths(k,w),k=this.addShapes(v,b[1],q);}else this.addPaths(k,w),k=this.addShapes(v,b[1]);}this.addPaths(k,w);}}v.shape.paths=w;}}},TrimModifier.prototype.addPaths=function(t,e){var i,s=t.length;for(i=0;ie.e){i.c=!1;break}else e.s<=y&&e.e>=y+P.addedLength?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[p],r[a].v[p],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[p],r[a].o[p-1],r[a].i[p],(e.s-y)/P.addedLength,(e.e-y)/P.addedLength,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1),y+=P.addedLength,c+=1;if(r[a].c&&l.length){if(P=l[p-1],y<=e.e){var u=l[p-1].addedLength;e.s<=y&&e.e>=y+u?(this.addSegment(r[a].v[p-1],r[a].o[p-1],r[a].i[0],r[a].v[0],i,c,w),w=!1):(E=bez.getNewSegment(r[a].v[p-1],r[a].v[0],r[a].o[p-1],r[a].i[0],(e.s-y)/u,(e.e-y)/u,l[p-1]),this.addSegmentFromArray(E,i,c,w),w=!1,i.c=!1);}else i.c=!1;y+=P.addedLength,c+=1;}if(i._length&&(i.setXYAt(i.v[v][0],i.v[v][1],"i",v),i.setXYAt(i.v[i._length-1][0],i.v[i._length-1][1],"o",i._length-1)),y>e.e)break;a=this.p.keyframes[this.p.keyframes.length-1].t?(P=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/y,0),c=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/y,0)):(P=this.p.pv,c=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/y,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){P=[],c=[];var l=this.px,E=this.py;l._caching.lastFrame+l.offsetTime<=l.keyframes[0].t?(P[0]=l.getValueAtTime((l.keyframes[0].t+.01)/y,0),P[1]=E.getValueAtTime((E.keyframes[0].t+.01)/y,0),c[0]=l.getValueAtTime(l.keyframes[0].t/y,0),c[1]=E.getValueAtTime(E.keyframes[0].t/y,0)):l._caching.lastFrame+l.offsetTime>=l.keyframes[l.keyframes.length-1].t?(P[0]=l.getValueAtTime(l.keyframes[l.keyframes.length-1].t/y,0),P[1]=E.getValueAtTime(E.keyframes[E.keyframes.length-1].t/y,0),c[0]=l.getValueAtTime((l.keyframes[l.keyframes.length-1].t-.01)/y,0),c[1]=E.getValueAtTime((E.keyframes[E.keyframes.length-1].t-.01)/y,0)):(P=[l.pv,E.pv],c[0]=l.getValueAtTime((l._caching.lastFrame+l.offsetTime-.01)/y,l.offsetTime),c[1]=E.getValueAtTime((E._caching.lastFrame+E.offsetTime-.01)/y,E.offsetTime));}else c=t,P=c;this.v.rotate(-Math.atan2(P[1]-c[1],P[0]-c[0]));}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);}this.frameId=this.elem.globalData.frameId;}}function s(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4);}function r(){}function a(h){this._addDynamicProperty(h),this.elem.addDynamicProperty(h),this._isDirty=!0;}function n(h,y,P){if(this.elem=h,this.frameId=-1,this.propType="transform",this.data=y,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(P||h),y.p&&y.p.s?(this.px=PropertyFactory.getProp(h,y.p.x,0,0,this),this.py=PropertyFactory.getProp(h,y.p.y,0,0,this),y.p.z&&(this.pz=PropertyFactory.getProp(h,y.p.z,0,0,this))):this.p=PropertyFactory.getProp(h,y.p||{k:[0,0,0]},1,0,this),y.rx){if(this.rx=PropertyFactory.getProp(h,y.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(h,y.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(h,y.rz,0,degToRads,this),y.or.k[0].ti){var c,l=y.or.k.length;for(c=0;c0;)i-=1,this._elements.unshift(e[i]);this.dynamicProperties.length?this.k=!0:this.getValue(!0);},RepeaterModifier.prototype.resetElements=function(t){var e,i=t.length;for(e=0;e0?Math.floor(l):Math.ceil(l),v=this.pMatrix.props,w=this.rMatrix.props,u=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var f=0;if(l>0){for(;fb;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),f-=1;E&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-E,!0),f-=E);}s=this.data.m===1?0:this._currentCopies-1,r=this.data.m===1?1:-1,a=this._currentCopies;for(var g,_;a;){if(e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,_=i.length,e[e.length-1].transform.mProps._mdf=!0,e[e.length-1].transform.op._mdf=!0,e[e.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(s/(this._currentCopies-1)),f!==0){for((s!==0&&r===1||s!==this._currentCopies-1&&r===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],w[13],w[14],w[15]),this.matrix.transform(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15]),this.matrix.transform(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15]),g=0;g<_;g+=1)i[g]=this.matrix.props[g];this.matrix.reset();}else for(this.matrix.reset(),g=0;g<_;g+=1)i[g]=this.matrix.props[g];f+=1,a-=1,s+=r;}}else for(a=this._currentCopies,s=0,r=1;a;)e=this.elemsData[s].it,i=e[e.length-1].transform.mProps.v.props,e[e.length-1].transform.mProps._mdf=!1,e[e.length-1].transform.op._mdf=!1,a-=1,s+=r;return n},RepeaterModifier.prototype.addShape=function(){};function RoundCornersModifier(){}extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(t,e.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length;},RoundCornersModifier.prototype.processPath=function(t,e){var i=shapePool.newElement();i.c=t.c;var s,r=t._length,a,n,p,h,y,P,c=0,l,E,b,v,w,u;for(s=0;s0&&s<1?[e]:[]:[e-s,e+s].filter(function(r){return r>0&&r<1})},PolynomialBezier.prototype.split=function(t){if(t<=0)return [singlePoint(this.points[0]),this];if(t>=1)return [this,singlePoint(this.points[this.points.length-1])];var e=lerpPoint(this.points[0],this.points[1],t),i=lerpPoint(this.points[1],this.points[2],t),s=lerpPoint(this.points[2],this.points[3],t),r=lerpPoint(e,i,t),a=lerpPoint(i,s,t),n=lerpPoint(r,a,t);return [new PolynomialBezier(this.points[0],e,r,n,!0),new PolynomialBezier(n,a,s,this.points[3],!0)]};function extrema(t,e){var i=t.points[0][e],s=t.points[t.points.length-1][e];if(i>s){var r=s;s=i,i=r;}for(var a=quadRoots(3*t.a[e],2*t.b[e],t.c[e]),n=0;n0&&a[n]<1){var p=t.point(a[n])[e];ps&&(s=p);}return {min:i,max:s}}PolynomialBezier.prototype.bounds=function(){return {x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var t=this.bounds();return {left:t.x.min,right:t.x.max,top:t.y.min,bottom:t.y.max,width:t.x.max-t.x.min,height:t.y.max-t.y.min,cx:(t.x.max+t.x.min)/2,cy:(t.y.max+t.y.min)/2}};function intersectData(t,e,i){var s=t.boundingBox();return {cx:s.cx,cy:s.cy,width:s.width,height:s.height,bez:t,t:(e+i)/2,t1:e,t2:i}}function splitData(t){var e=t.bez.split(.5);return [intersectData(e[0],t.t1,t.t),intersectData(e[1],t.t,t.t2)]}function boxIntersect(t,e){return Math.abs(t.cx-e.cx)*2=a||t.width<=s&&t.height<=s&&e.width<=s&&e.height<=s){r.push([t.t,e.t]);return}var n=splitData(t),p=splitData(e);intersectsImpl(n[0],p[0],i+1,s,r,a),intersectsImpl(n[0],p[1],i+1,s,r,a),intersectsImpl(n[1],p[0],i+1,s,r,a),intersectsImpl(n[1],p[1],i+1,s,r,a);}}PolynomialBezier.prototype.intersections=function(t,e,i){e===void 0&&(e=2),i===void 0&&(i=7);var s=[];return intersectsImpl(intersectData(this,0,1),intersectData(t,0,1),0,e,s,i),s},PolynomialBezier.shapeSegment=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[e],t.o[e],t.i[i],t.v[i],!0)},PolynomialBezier.shapeSegmentInverted=function(t,e){var i=(e+1)%t.length();return new PolynomialBezier(t.v[i],t.i[i],t.o[e],t.v[e],!0)};function crossProduct(t,e){return [t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function lineIntersection(t,e,i,s){var r=[t[0],t[1],1],a=[e[0],e[1],1],n=[i[0],i[1],1],p=[s[0],s[1],1],h=crossProduct(crossProduct(r,a),crossProduct(n,p));return floatZero(h[2])?null:[h[0]/h[2],h[1]/h[2]]}function polarOffset(t,e,i){return [t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e[1])}function ZigZagModifier(){}extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(t,e.s,0,null,this),this.frequency=PropertyFactory.getProp(t,e.r,0,null,this),this.pointsType=PropertyFactory.getProp(t,e.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0;};function setPoint(t,e,i,s,r,a,n){var p=i-Math.PI/2,h=i+Math.PI/2,y=e[0]+Math.cos(i)*s*r,P=e[1]-Math.sin(i)*s*r;t.setTripleAt(y,P,y+Math.cos(p)*a,P-Math.sin(p)*a,y+Math.cos(h)*n,P-Math.sin(h)*n,t.length());}function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],s=-Math.PI*.5,r=[Math.cos(s)*i[0]-Math.sin(s)*i[1],Math.sin(s)*i[0]+Math.cos(s)*i[1]];return r}function getProjectingAngle(t,e){var i=e===0?t.length()-1:e-1,s=(e+1)%t.length(),r=t.v[i],a=t.v[s],n=getPerpendicularVector(r,a);return Math.atan2(0,1)-Math.atan2(n[1],n[0])}function zigZagCorner(t,e,i,s,r,a,n){var p=getProjectingAngle(e,i),h=e.v[i%e._length],y=e.v[i===0?e._length-1:i-1],P=e.v[(i+1)%e._length],c=a===2?Math.sqrt(Math.pow(h[0]-y[0],2)+Math.pow(h[1]-y[1],2)):0,l=a===2?Math.sqrt(Math.pow(h[0]-P[0],2)+Math.pow(h[1]-P[1],2)):0;setPoint(t,e.v[i%e._length],p,n,s,l/((r+1)*2),c/((r+1)*2));}function zigZagSegment(t,e,i,s,r,a){for(var n=0;n1&&e.length>1&&(r=getIntersection(t[0],e[e.length-1]),r)?[[t[0].split(r[0])[0]],[e[e.length-1].split(r[1])[1]]]:[i,s]}function pruneIntersections(t){for(var e,i=1;i1&&(e=pruneSegmentIntersection(t[t.length-1],t[0]),t[t.length-1]=e[0],t[0]=e[1]),t}function offsetSegmentSplit(t,e){var i=t.inflectionPoints(),s,r,a,n;if(i.length===0)return [offsetSegment(t,e)];if(i.length===1||floatEqual(i[1],1))return a=t.split(i[0]),s=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(r,e)];a=t.split(i[0]),s=a[0];var p=(i[1]-i[0])/(1-i[0]);return a=a[1].split(p),n=a[0],r=a[1],[offsetSegment(s,e),offsetSegment(n,e),offsetSegment(r,e)]}function OffsetPathModifier(){}extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(t,e){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(t,e.a,0,null,this),this.miterLimit=PropertyFactory.getProp(t,e.ml,0,null,this),this.lineJoin=e.lj,this._isAnimated=this.amount.effectsSequence.length!==0;},OffsetPathModifier.prototype.processPath=function(t,e,i,s){var r=shapePool.newElement();r.c=t.c;var a=t.length();t.c||(a-=1);var n,p,h,y=[];for(n=0;n=0;n-=1)h=PolynomialBezier.shapeSegmentInverted(t,n),y.push(offsetSegmentSplit(h,e));y=pruneIntersections(y);var P=null,c=null;for(n=0;n0&&(Gt=!1),Gt){var Ht=createTag("style");Ht.setAttribute("f-forigin",S[R].fOrigin),Ht.setAttribute("f-origin",S[R].origin),Ht.setAttribute("f-family",S[R].fFamily),Ht.type="text/css",Ht.innerText="@font-face {font-family: "+S[R].fFamily+"; font-style: normal; src: url('"+S[R].fPath+"');}",V.appendChild(Ht);}}else if(S[R].fOrigin==="g"||S[R].origin===1){for(Vt=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),Xt=0;Xt=55296&&S<=56319){var R=D.charCodeAt(1);R>=56320&&R<=57343&&(V=(S-55296)*1024+R-56320+65536);}return V}function z(D,V){var S=D.toString(16)+V.toString(16);return c.indexOf(S)!==-1}function q(D){return D===h}function W(D){return D===p}function ot(D){var V=k(D);return V>=y&&V<=P}function mt(D){return ot(D.substr(0,2))&&ot(D.substr(2,2))}function gt(D){return i.indexOf(D)!==-1}function ut(D,V){var S=k(D.substr(V,2));if(S!==s)return !1;var R=0;for(V+=2;R<5;){if(S=k(D.substr(V,2)),Sn)return !1;R+=1,V+=2;}return k(D.substr(V,2))===r}function Ct(){this.isLoaded=!0;}var ht=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this);};ht.isModifier=z,ht.isZeroWidthJoiner=q,ht.isFlagEmoji=mt,ht.isRegionalCode=ot,ht.isCombinedCharacter=gt,ht.isRegionalFlag=ut,ht.isVariationSelector=W,ht.BLACK_FLAG_CODE_POINT=s;var yt={addChars:u,addFonts:w,getCharData:f,getFontByName:_,measureText:g,checkLoadedFonts:b,setIsLoaded:Ct};return ht.prototype=yt,ht}();function SlotManager(t){this.animationData=t;}SlotManager.prototype.getProp=function(t){return this.animationData.slots&&this.animationData.slots[t.sid]?Object.assign(t,this.animationData.slots[t.sid].p):t};function slotFactory(t){return new SlotManager(t)}function RenderableElement(){}RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[];},addRenderableComponent:function(t){this.renderableComponents.indexOf(t)===-1&&this.renderableComponents.push(t);},removeRenderableComponent:function(t){this.renderableComponents.indexOf(t)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(t),1);},prepareRenderableFrame:function(t){this.checkLayerLimits(t);},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show());},checkLayerLimits:function(t){this.data.ip-this.data.st<=t&&this.data.op-this.data.st>t?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide());},renderRenderable:function(){var t,e=this.renderableComponents.length;for(t=0;t.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0));},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1;},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1;},AudioElement.prototype.resume=function(){this._canPlay=!0;},AudioElement.prototype.setRate=function(t){this.audio.rate(t);},AudioElement.prototype.volume=function(t){this._volumeMultiplier=t,this._previousVolume=t*this._volume,this.audio.volume(this._previousVolume);},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){};function BaseRenderer(){}BaseRenderer.prototype.checkLayers=function(t){var e,i=this.layers.length,s;for(this.completeLayers=!0,e=i-1;e>=0;e-=1)this.elements[e]||(s=this.layers[e],s.ip-s.st<=t-this.layers[e].st&&s.op-s.st>t-this.layers[e].st&&this.buildItem(e)),this.completeLayers=this.elements[e]?this.completeLayers:!1;this.checkPendingElements();},BaseRenderer.prototype.createItem=function(t){switch(t.ty){case 2:return this.createImage(t);case 0:return this.createComp(t);case 1:return this.createSolid(t);case 3:return this.createNull(t);case 4:return this.createShape(t);case 5:return this.createText(t);case 6:return this.createAudio(t);case 13:return this.createCamera(t);case 15:return this.createFootage(t);default:return this.createNull(t)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(t){return new AudioElement(t,this.globalData,this)},BaseRenderer.prototype.createFootage=function(t){return new FootageElement(t,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var t,e=this.layers.length;for(t=0;t0&&(this.maskElement.setAttribute("id",l),this.element.maskedElement.setAttribute(f,"url("+getLocationHref()+"#"+l+")"),s.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this);}MaskElement.prototype.getMaskProperty=function(t){return this.viewData[t].prop},MaskElement.prototype.renderFrame=function(t){var e=this.element.finalTransform.mat,i,s=this.masksProperties.length;for(i=0;i1&&(s+=" C"+e.o[r-1][0]+","+e.o[r-1][1]+" "+e.i[0][0]+","+e.i[0][1]+" "+e.v[0][0]+","+e.v[0][1]),i.lastPath!==s){var n="";i.elem&&(e.c&&(n=t.inv?this.solidPath+s:s),i.elem.setAttribute("d",n)),i.lastPath=s;}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null;};var filtersFactory=function(){var t={};t.createFilter=e,t.createAlphaToLuminanceFilter=i;function e(s,r){var a=createNS("filter");return a.setAttribute("id",s),r!==!0&&(a.setAttribute("filterUnits","objectBoundingBox"),a.setAttribute("x","0%"),a.setAttribute("y","0%"),a.setAttribute("width","100%"),a.setAttribute("height","100%")),a}function i(){var s=createNS("feColorMatrix");return s.setAttribute("type","matrix"),s.setAttribute("color-interpolation-filters","sRGB"),s.setAttribute("values","0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"),s}return t}(),featureSupport=function(){var t={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return (/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(t.maskType=!1),/firefox/i.test(navigator.userAgent)&&(t.svgLumaHidden=!1),t}(),registeredEffects$1={},idPrefix="filter_result_";function SVGEffects(t){var e,i="SourceGraphic",s=t.data.ef?t.data.ef.length:0,r=createElementID(),a=filtersFactory.createFilter(r,!0),n=0;this.filters=[];var p;for(e=0;e=0&&(i=this.shapeModifiers[t].processShapes(this._isFirstFrame),!i);t-=1);}},searchProcessedElement:function(t){for(var e=this.processedElements,i=0,s=e.length;i.01)return !1;i+=1;}return !0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return !1;if(this.data.k.k[0].s)for(var t=0,e=this.data.k.k.length;t0;)u=l.transformers[ot].mProps._mdf||u,W-=1,ot-=1;if(u)for(W=k-l.styles[g].lvl,ot=l.transformers.length-1;W>0;)q.multiply(l.transformers[ot].mProps.v),W-=1,ot-=1;}else q=t;if(z=l.sh.paths,v=z._length,u){for(w="",b=0;b=1?Ct=.99:Ct<=-1&&(Ct=-.99);var ht=gt*Ct,yt=Math.cos(ut+l.a.v)*ht+w[0],D=Math.sin(ut+l.a.v)*ht+w[1];b.setAttribute("fx",yt),b.setAttribute("fy",D),v&&!l.g._collapsable&&(l.of.setAttribute("fx",yt),l.of.setAttribute("fy",D));}}}function P(c,l,E){var b=l.style,v=l.d;v&&(v._mdf||E)&&v.dashStr&&(b.pElem.setAttribute("stroke-dasharray",v.dashStr),b.pElem.setAttribute("stroke-dashoffset",v.dashoffset[0])),l.c&&(l.c._mdf||E)&&b.pElem.setAttribute("stroke","rgb("+bmFloor(l.c.v[0])+","+bmFloor(l.c.v[1])+","+bmFloor(l.c.v[2])+")"),(l.o._mdf||E)&&b.pElem.setAttribute("stroke-opacity",l.o.v),(l.w._mdf||E)&&(b.pElem.setAttribute("stroke-width",l.w.v),b.msElem&&b.msElem.setAttribute("stroke-width",l.w.v));}return i}();function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(t,e,i),this.prevViewData=[];}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes();},SVGShapeElement.prototype.filterUniqueShapes=function(){var t,e=this.shapes.length,i,s,r=this.stylesList.length,a,n=[],p=!1;for(s=0;s1&&p&&this.setShapesAsAnimated(n);}},SVGShapeElement.prototype.setShapesAsAnimated=function(t){var e,i=t.length;for(e=0;e=0;h-=1){if(w=this.searchProcessedElement(t[h]),w?e[h]=i[w-1]:t[h]._render=n,t[h].ty==="fl"||t[h].ty==="st"||t[h].ty==="gf"||t[h].ty==="gs"||t[h].ty==="no")w?e[h].style.closed=!1:e[h]=this.createStyleElement(t[h],r),t[h]._render&&e[h].style.pElem.parentNode!==s&&s.appendChild(e[h].style.pElem),l.push(e[h].style);else if(t[h].ty==="gr"){if(!w)e[h]=this.createGroupElement(t[h]);else for(c=e[h].it.length,P=0;P1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(t){this.effectsSequence.push(t),this.elem.addDynamicProperty(this);},TextProperty.prototype.getValue=function(t){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!t)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var e=this.currentData,i=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var s,r=this.effectsSequence.length,a=t||this.data.d.k[this.keysIndex].s;for(s=0;se);)i+=1;return this.keysIndex!==i&&(this.keysIndex=i),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(t){for(var e=[],i=0,s=t.length,r,a,n=!1,p=!1,h="";i=55296&&r<=56319?FontManager.isRegionalFlag(t,i)?h=t.substr(i,14):(a=t.charCodeAt(i+1),a>=56320&&a<=57343&&(FontManager.isModifier(r,a)?(h=t.substr(i,2),n=!0):FontManager.isFlagEmoji(t.substr(i,4))?h=t.substr(i,4):h=t.substr(i,2))):r>56319?(a=t.charCodeAt(i+1),FontManager.isVariationSelector(r)&&(n=!0)):FontManager.isZeroWidthJoiner(r)&&(n=!0,p=!0),n?(e[e.length-1]+=h,n=!1):e.push(h),i+=h.length;return e},TextProperty.prototype.completeTextData=function(t){t.__complete=!0;var e=this.elem.globalData.fontManager,i=this.data,s=[],r,a,n,p=0,h,y=i.m.g,P=0,c=0,l=0,E=[],b=0,v=0,w,u,f=e.getFontByName(t.f),g,_=0,k=getFontProperties(f);t.fWeight=k.weight,t.fStyle=k.style,t.finalSize=t.s,t.finalText=this.buildFinalText(t.t),a=t.finalText.length,t.finalLineHeight=t.lh;var z=t.tr/1e3*t.finalSize,q;if(t.sz)for(var W=!0,ot=t.sz[0],mt=t.sz[1],gt,ut;W;){ut=this.buildFinalText(t.t),gt=0,b=0,a=ut.length,z=t.tr/1e3*t.finalSize;var Ct=-1;for(r=0;rot&&ut[r]!==" "?(Ct===-1?a+=1:r=Ct,gt+=t.finalLineHeight||t.finalSize*1.2,ut.splice(r,Ct===r?1:0,"\r"),Ct=-1,b=0):(b+=_,b+=z);gt+=f.ascent*t.finalSize/100,this.canResize&&t.finalSize>this.minimumFontSize&&mtv?b:v,b=-2*z,h="",n=!0,l+=1):h=yt,e.chars?(g=e.getCharData(yt,f.fStyle,e.getFontByName(t.f).fFamily),_=n?0:g.w*t.finalSize/100):_=e.measureText(h,t.f,t.finalSize),yt===" "?ht+=_+z:(b+=_+z+ht,ht=0),s.push({l:_,an:_,add:P,n,anIndexes:[],val:h,line:l,animatorJustifyOffset:0}),y==2){if(P+=_,h===""||h===" "||r===a-1){for((h===""||h===" ")&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;p+=1,P=0;}}else if(y==3){if(P+=_,h===""||r===a-1){for(h===""&&(P-=_);c<=r;)s[c].an=P,s[c].ind=p,s[c].extra=_,c+=1;P=0,p+=1;}}else s[p].ind=p,s[p].extra=0,p+=1;if(t.l=s,v=b>v?b:v,E.push(b),t.sz)t.boxWidth=t.sz[0],t.justifyOffset=0;else switch(t.boxWidth=v,t.j){case 1:t.justifyOffset=-t.boxWidth;break;case 2:t.justifyOffset=-t.boxWidth/2;break;default:t.justifyOffset=0;}t.lineWidths=E;var D=i.a,V,S;u=D.length;var R,tt,J=[];for(w=0;w0?n=this.ne.v/100:p=-this.ne.v/100,this.xe.v>0?h=1-this.xe.v/100:y=1+this.xe.v/100;var P=BezierFactory.getBezierEasing(n,p,h,y).get,c=0,l=this.finalS,E=this.finalE,b=this.data.sh;if(b===2)E===l?c=a>=E?1:0:c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===3)E===l?c=a>=E?0:1:c=1-t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c=P(c);else if(b===4)E===l?c=0:(c=t(0,e(.5/(E-l)+(a-l)/(E-l),1)),c<.5?c*=2:c=1-2*(c-.5)),c=P(c);else if(b===5){if(E===l)c=0;else {var v=E-l;a=e(t(0,a+.5-l),E-l);var w=-v/2+a,u=v/2;c=Math.sqrt(1-w*w/(u*u));}c=P(c);}else b===6?(E===l?c=0:(a=e(t(0,a+.5-l),E-l),c=(1+Math.cos(Math.PI+Math.PI*2*a/(E-l)))/2),c=P(c)):(a>=i(l)&&(a-l<0?c=t(0,e(e(E,1)-(l-a),1)):c=t(0,e(E-a,1))),c=P(c));if(this.sm.v!==100){var f=this.sm.v*.01;f===0&&(f=1e-8);var g=.5-f*.5;c1&&(c=1));}return c*this.a.v},getValue:function(a){this.iterateDynamicProperties(),this._mdf=a||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,a&&this.data.r===2&&(this.e.v=this._currentTextLength);var n=this.data.r===2?1:100/this.data.totalChars,p=this.o.v/n,h=this.s.v/n+p,y=this.e.v/n+p;if(h>y){var P=h;h=y,y=P;}this.finalS=h,this.finalE=y;}},extendPrototype([DynamicPropertyContainer],s);function r(a,n,p){return new s(a,n)}return {getTextSelectorProp:r}}();function TextAnimatorDataProperty(t,e,i){var s={propType:!1},r=PropertyFactory.getProp,a=e.a;this.a={r:a.r?r(t,a.r,0,degToRads,i):s,rx:a.rx?r(t,a.rx,0,degToRads,i):s,ry:a.ry?r(t,a.ry,0,degToRads,i):s,sk:a.sk?r(t,a.sk,0,degToRads,i):s,sa:a.sa?r(t,a.sa,0,degToRads,i):s,s:a.s?r(t,a.s,1,.01,i):s,a:a.a?r(t,a.a,1,0,i):s,o:a.o?r(t,a.o,0,.01,i):s,p:a.p?r(t,a.p,1,0,i):s,sw:a.sw?r(t,a.sw,0,0,i):s,sc:a.sc?r(t,a.sc,1,0,i):s,fc:a.fc?r(t,a.fc,1,0,i):s,fh:a.fh?r(t,a.fh,0,0,i):s,fs:a.fs?r(t,a.fs,0,.01,i):s,fb:a.fb?r(t,a.fb,0,.01,i):s,t:a.t?r(t,a.t,0,0,i):s},this.s=TextSelectorProp.getTextSelectorProp(t,e.s,i),this.s.t=e.s.t;}function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=t,this._renderType=e,this._elem=i,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(i);}TextAnimatorProperty.prototype.searchProperties=function(){var t,e=this._textData.a.length,i,s=PropertyFactory.getProp;for(t=0;t=b+oe||!k?(ot=(b+oe-w)/v.partialLength,Xt=_.point[0]+(v.point[0]-_.point[0])*ot,Ht=_.point[1]+(v.point[1]-_.point[1])*ot,a.translate(-i[0]*l[P].an*.005,-(i[1]*ht)*.01),u=!1):k&&(w+=v.partialLength,f+=1,f>=k.length&&(f=0,g+=1,z[g]?k=z[g].points:gt.v.c?(f=0,g=0,k=z[g].points):(w-=v.partialLength,k=null)),k&&(_=v,v=k[f],q=v.partialLength));Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0);}else Vt=l[P].an/2-l[P].add,a.translate(-Vt,0,0),a.translate(-i[0]*l[P].an*.005,-i[1]*ht*.01,0);for(S=0;St?this.textSpans[t].span:createNS(p?"g":"text"),g<=t){if(h.setAttribute("stroke-linecap","butt"),h.setAttribute("stroke-linejoin","round"),h.setAttribute("stroke-miterlimit","4"),this.textSpans[t].span=h,p){var k=createNS("g");h.appendChild(k),this.textSpans[t].childSpan=k;}this.textSpans[t].span=h,this.layerElement.appendChild(h);}h.style.display="inherit";}if(y.reset(),c&&(n[t].n&&(l=-v,E+=i.yOffset,E+=b?1:0,b=!1),this.applyTextPropertiesToMatrix(i,y,n[t].line,l,E),l+=n[t].l||0,l+=v),p){_=this.globalData.fontManager.getCharData(i.finalText[t],s.fStyle,this.globalData.fontManager.getFontByName(i.f).fFamily);var z;if(_.t===1)z=new SVGCompElement(_.data,this.globalData,this);else {var q=emptyShapeData;_.data&&_.data.shapes&&(q=this.buildShapeData(_.data,i.finalSize)),z=new SVGShapeElement(q,this.globalData,this);}if(this.textSpans[t].glyph){var W=this.textSpans[t].glyph;this.textSpans[t].childSpan.removeChild(W.layerElement),W.destroy();}this.textSpans[t].glyph=z,z._debug=!0,z.prepareFrame(0),z.renderFrame(),this.textSpans[t].childSpan.appendChild(z.layerElement),_.t===1&&this.textSpans[t].childSpan.setAttribute("transform","scale("+i.finalSize/100+","+i.finalSize/100+")");}else c&&h.setAttribute("transform","translate("+y.props[12]+","+y.props[13]+")"),h.textContent=n[t].val,h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve");}c&&h&&h.setAttribute("d",P);}for(;t=0;e-=1)(this.completeLayers||this.elements[e])&&this.elements[e].prepareFrame(t-this.layers[e].st);if(this.globalData._mdf)for(e=0;e=0;i-=1)(this.completeLayers||this.elements[i])&&(this.elements[i].prepareFrame(this.renderedFrame-this.layers[i].st),this.elements[i]._mdf&&(this._mdf=!0));}},ICompElement.prototype.renderInnerContent=function(){var t,e=this.layers.length;for(t=0;t0&&h<1&&r[l].push(this.calculateF(h,t,e,i,s,l))):(y=n*n-4*p*a,y>=0&&(P=(-n+bmSqrt(y))/(2*a),P>0&&P<1&&r[l].push(this.calculateF(P,t,e,i,s,l)),c=(-n-bmSqrt(y))/(2*a),c>0&&c<1&&r[l].push(this.calculateF(c,t,e,i,s,l)))));this.shapeBoundingBox.left=bmMin.apply(null,r[0]),this.shapeBoundingBox.top=bmMin.apply(null,r[1]),this.shapeBoundingBox.right=bmMax.apply(null,r[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,r[1]);},HShapeElement.prototype.calculateF=function(t,e,i,s,r,a){return bmPow(1-t,3)*e[a]+3*bmPow(1-t,2)*t*i[a]+3*(1-t)*bmPow(t,2)*s[a]+bmPow(t,3)*r[a]},HShapeElement.prototype.calculateBoundingBox=function(t,e){var i,s=t.length;for(i=0;ii&&(i=r);}i*=t.mult;}else i=t.v*t.mult;e.x-=i,e.xMax+=i,e.y-=i,e.yMax+=i;},HShapeElement.prototype.currentBoxContains=function(t){return this.currentBBox.x<=t.x&&this.currentBBox.y<=t.y&&this.currentBBox.width+this.currentBBox.x>=t.x+t.width&&this.currentBBox.height+this.currentBBox.y>=t.y+t.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var t=this.tempBoundingBox,e=999999;if(t.x=e,t.xMax=-e,t.y=e,t.yMax=-e,this.calculateBoundingBox(this.itemsData,t),t.width=t.xMax=0;e-=1){var s=this.hierarchy[e].finalTransform.mProp;this.mat.translate(-s.p.v[0],-s.p.v[1],s.p.v[2]),this.mat.rotateX(-s.or.v[0]).rotateY(-s.or.v[1]).rotateZ(s.or.v[2]),this.mat.rotateX(-s.rx.v).rotateY(-s.ry.v).rotateZ(s.rz.v),this.mat.scale(1/s.s.v[0],1/s.s.v[1],1/s.s.v[2]),this.mat.translate(s.a.v[0],s.a.v[1],s.a.v[2]);}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var r;this.p?r=[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:r=[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var a=Math.sqrt(Math.pow(r[0],2)+Math.pow(r[1],2)+Math.pow(r[2],2)),n=[r[0]/a,r[1]/a,r[2]/a],p=Math.sqrt(n[2]*n[2]+n[0]*n[0]),h=Math.atan2(n[1],p),y=Math.atan2(n[0],-n[2]);this.mat.rotateY(y).rotateX(-h);}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var P=!this._prevMat.equals(this.mat);if((P||this.pe._mdf)&&this.comp.threeDElements){i=this.comp.threeDElements.length;var c,l,E;for(e=0;e=t)return this.threeDElements[e].perspectiveElem;e+=1;}return null},HybridRendererBase.prototype.createThreeDContainer=function(t,e){var i=createTag("div"),s,r;styleDiv(i);var a=createTag("div");if(styleDiv(a),e==="3d"){s=i.style,s.width=this.globalData.compSize.w+"px",s.height=this.globalData.compSize.h+"px";var n="50% 50%";s.webkitTransformOrigin=n,s.mozTransformOrigin=n,s.transformOrigin=n,r=a.style;var p="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";r.transform=p,r.webkitTransform=p;}i.appendChild(a);var h={container:a,perspectiveElem:i,startPos:t,endPos:t,type:e};return this.threeDElements.push(h),h},HybridRendererBase.prototype.build3dContainers=function(){var t,e=this.layers.length,i,s="";for(t=0;t=0;t-=1)this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem);},HybridRendererBase.prototype.addTo3dContainer=function(t,e){for(var i=0,s=this.threeDElements.length;ii?(r=t/this.globalData.compSize.w,a=t/this.globalData.compSize.w,n=0,p=(e-this.globalData.compSize.h*(t/this.globalData.compSize.w))/2):(r=e/this.globalData.compSize.h,a=e/this.globalData.compSize.h,n=(t-this.globalData.compSize.w*(e/this.globalData.compSize.h))/2,p=0);var h=this.resizerElem.style;h.webkitTransform="matrix3d("+r+",0,0,0,0,"+a+",0,0,0,0,1,0,"+n+","+p+",0,1)",h.transform=h.webkitTransform;},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display="none";},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display="block";},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else {var t=this.globalData.compSize.w,e=this.globalData.compSize.h,i,s=this.threeDElements.length;for(i=0;i=y;)mt/=2,gt/=2,ut>>>=1;return (mt+ut)/gt};return ot.int32=function(){return W.g(4)|0},ot.quick=function(){return W.g(4)/4294967296},ot.double=ot,w(f(W.S),t),(_.pass||k||function(mt,gt,ut,Ct){return Ct&&(Ct.S&&b(Ct,W),mt.state=function(){return b(W,{})}),ut?(e[n]=mt,gt):mt})(ot,q,"global"in _?_.global:this==e,_.state)}e["seed"+n]=l;function E(g){var _,k=g.length,z=this,q=0,W=z.i=z.j=0,ot=z.S=[];for(k||(g=[k++]);qi){var s=i;i=e,e=s;}return Math.min(Math.max(t,e),i)}function radiansToDegrees(t){return t/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(t){return t*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(t,e){if(typeof t=="number"||t instanceof Number)return e=e||0,Math.abs(t-e);e||(e=helperLengthArray);var i,s=Math.min(t.length,e.length),r=0;for(i=0;i.5?y/(2-r-a):y/(r+a),r){case e:n=(i-s)/y+(i1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function hslToRgb(t){var e=t[0],i=t[1],s=t[2],r,a,n;if(i===0)r=s,n=s,a=s;else {var p=s<.5?s*(1+i):s+i-s*i,h=2*s-p;r=hue2rgb(h,p,e+1/3),a=hue2rgb(h,p,e),n=hue2rgb(h,p,e-1/3);}return [r,a,n,t[3]]}function linear(t,e,i,s,r){if((s===void 0||r===void 0)&&(s=e,r=i,e=0,i=1),i=i)return r;var n=i===e?0:(t-e)/(i-e);if(!s.length)return s+(r-s)*n;var p,h=s.length,y=createTypedArray("float32",h);for(p=0;p1){for(r=0;r1?e=1:e<0&&(e=0);var n=t(e);if($bm_isInstanceOfArray(r)){var p,h=r.length,y=createTypedArray("float32",h);for(p=0;pdata.k[e].t&&tdata.k[e+1].t-t?(s=e+2,r=data.k[e+1].t):(s=e+1,r=data.k[e].t);break}s===-1&&(s=e+1,r=data.k[e].t);}var a={};return a.index=s,a.time=r/elem.comp.globalData.frameRate,a}function key(t){var e,i,s;if(!data.k.length||typeof data.k[0]=="number")throw new Error("The property has no keyframe at index "+t);t-=1,e={time:data.k[t].t/elem.comp.globalData.frameRate,value:[]};var r=Object.prototype.hasOwnProperty.call(data.k[t],"s")?data.k[t].s:data.k[t-1].e;for(s=r.length,i=0;iw.length-1)&&(E=w.length-1),g=w[w.length-1-E].t,f=u-g);var _,k,z;if(l==="pingpong"){var q=Math.floor((v-g)/f);if(q%2!==0)return this.getValueAtTime((f-(v-g)%f+g)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(g/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(u/this.comp.globalData.frameRate,0),mt=this.getValueAtTime(((v-g)%f+g)/this.comp.globalData.frameRate,0),gt=Math.floor((v-g)/f);if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_=u)return this.pv;var f,g;b?(E?f=Math.abs(this.elem.comp.globalData.frameRate*E):f=Math.max(0,this.elem.data.op-u),g=u+f):((!E||E>w.length-1)&&(E=w.length-1),g=w[E].t,f=g-u);var _,k,z;if(l==="pingpong"){var q=Math.floor((u-v)/f);if(q%2===0)return this.getValueAtTime(((u-v)%f+u)/this.comp.globalData.frameRate,0)}else if(l==="offset"){var W=this.getValueAtTime(u/this.comp.globalData.frameRate,0),ot=this.getValueAtTime(g/this.comp.globalData.frameRate,0),mt=this.getValueAtTime((f-(u-v)%f+u)/this.comp.globalData.frameRate,0),gt=Math.floor((u-v)/f)+1;if(this.pv.length){for(z=new Array(W.length),k=z.length,_=0;_1?(w-v)/(E-1):1,f=0,g=0,_;this.pv.length?_=createTypedArray("float32",this.pv.length):_=0;for(var k;fu){var z=f,q=b.c&&f===g-1?0:f+1,W=(u-_)/w[f].addedLength;k=bez.getPointInSegment(b.v[z],b.v[q],b.o[z],b.i[q],W,w[f]);break}else _+=w[f].addedLength;f+=1;}return k||(k=b.c?[b.v[0][0],b.v[0][1]]:[b.v[b._length-1][0],b.v[b._length-1][1]]),k},vectorOnPath:function(l,E,b){l==1?l=this.v.c:l==0&&(l=.999);var v=this.pointOnPath(l,E),w=this.pointOnPath(l+.001,E),u=w[0]-v[0],f=w[1]-v[1],g=Math.sqrt(Math.pow(u,2)+Math.pow(f,2));if(g===0)return [0,0];var _=b==="tangent"?[u/g,f/g]:[-f/g,u/g];return _},tangentOnPath:function(l,E){return this.vectorOnPath(l,E,"tangent")},normalOnPath:function(l,E){return this.vectorOnPath(l,E,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([P],h),extendPrototype([P],y),y.prototype.getValueAtTime=p,y.prototype.initiateExpression=ExpressionManager.initiateExpression;var c=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(l,E,b,v,w){var u=c(l,E,b,v,w);return u.propertyIndex=E.ix,u.lock=!1,b===3?expressionHelpers.searchExpressions(l,E.pt,u):b===4&&expressionHelpers.searchExpressions(l,E.ks,u),u.k&&l.addDynamicProperty(u),u};}function initialize$1(){addPropertyDecorator();}function addDecorator(){function t(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}TextProperty.prototype.getExpressionValue=function(e,i){var s=this.calculateExpression(i);if(e.t!==s){var r={};return this.copyData(r,e),r.t=s.toString(),r.__complete=!1,r}return e},TextProperty.prototype.searchProperty=function(){var e=this.searchKeyframes(),i=this.searchExpressions();return this.kf=e||i,this.kf},TextProperty.prototype.searchExpressions=t;}function initialize(){addDecorator();}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function t(e,i){var s=createNS("feMerge");s.setAttribute("result",e);var r,a;for(a=0;a=y?c=b<0?s:r:c=s+E*Math.pow((p-t)/b,1/i),P[l]=c,l+=1,a+=256/(n-1);return P.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){var e,i=this.filterManager.effectElements;this.feFuncRComposed&&(t||i[3].p._mdf||i[4].p._mdf||i[5].p._mdf||i[6].p._mdf||i[7].p._mdf)&&(e=this.getTableValue(i[3].p.v,i[4].p.v,i[5].p.v,i[6].p.v,i[7].p.v),this.feFuncRComposed.setAttribute("tableValues",e),this.feFuncGComposed.setAttribute("tableValues",e),this.feFuncBComposed.setAttribute("tableValues",e)),this.feFuncR&&(t||i[10].p._mdf||i[11].p._mdf||i[12].p._mdf||i[13].p._mdf||i[14].p._mdf)&&(e=this.getTableValue(i[10].p.v,i[11].p.v,i[12].p.v,i[13].p.v,i[14].p.v),this.feFuncR.setAttribute("tableValues",e)),this.feFuncG&&(t||i[17].p._mdf||i[18].p._mdf||i[19].p._mdf||i[20].p._mdf||i[21].p._mdf)&&(e=this.getTableValue(i[17].p.v,i[18].p.v,i[19].p.v,i[20].p.v,i[21].p.v),this.feFuncG.setAttribute("tableValues",e)),this.feFuncB&&(t||i[24].p._mdf||i[25].p._mdf||i[26].p._mdf||i[27].p._mdf||i[28].p._mdf)&&(e=this.getTableValue(i[24].p.v,i[25].p.v,i[26].p.v,i[27].p.v,i[28].p.v),this.feFuncB.setAttribute("tableValues",e)),this.feFuncA&&(t||i[31].p._mdf||i[32].p._mdf||i[33].p._mdf||i[34].p._mdf||i[35].p._mdf)&&(e=this.getTableValue(i[31].p.v,i[32].p.v,i[33].p.v,i[34].p.v,i[35].p.v),this.feFuncA.setAttribute("tableValues",e));}};function SVGDropShadowEffect(t,e,i,s,r){var a=e.container.globalData.renderConfig.filterSize,n=e.data.fs||a;t.setAttribute("x",n.x||a.x),t.setAttribute("y",n.y||a.y),t.setAttribute("width",n.width||a.width),t.setAttribute("height",n.height||a.height),this.filterManager=e;var p=createNS("feGaussianBlur");p.setAttribute("in","SourceAlpha"),p.setAttribute("result",s+"_drop_shadow_1"),p.setAttribute("stdDeviation","0"),this.feGaussianBlur=p,t.appendChild(p);var h=createNS("feOffset");h.setAttribute("dx","25"),h.setAttribute("dy","0"),h.setAttribute("in",s+"_drop_shadow_1"),h.setAttribute("result",s+"_drop_shadow_2"),this.feOffset=h,t.appendChild(h);var y=createNS("feFlood");y.setAttribute("flood-color","#00ff00"),y.setAttribute("flood-opacity","1"),y.setAttribute("result",s+"_drop_shadow_3"),this.feFlood=y,t.appendChild(y);var P=createNS("feComposite");P.setAttribute("in",s+"_drop_shadow_3"),P.setAttribute("in2",s+"_drop_shadow_2"),P.setAttribute("operator","in"),P.setAttribute("result",s+"_drop_shadow_4"),t.appendChild(P);var c=this.createMergeNode(s,[s+"_drop_shadow_4",r]);t.appendChild(c);}extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(t){if(t||this.filterManager._mdf){if((t||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),t||this.filterManager.effectElements[0].p._mdf){var e=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(e[0]*255),Math.round(e[1]*255),Math.round(e[2]*255)));}if((t||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),t||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var i=this.filterManager.effectElements[3].p.v,s=(this.filterManager.effectElements[2].p.v-90)*degToRads,r=i*Math.cos(s),a=i*Math.sin(s);this.feOffset.setAttribute("dx",r),this.feOffset.setAttribute("dy",a);}}};var _svgMatteSymbols=[];function SVGMatte3Effect(t,e,i){this.initialized=!1,this.filterManager=e,this.filterElem=t,this.elem=i,i.matteElement=createNS("g"),i.matteElement.appendChild(i.layerElement),i.matteElement.appendChild(i.transformedElement),i.baseElement=i.matteElement;}SVGMatte3Effect.prototype.findSymbol=function(t){for(var e=0,i=_svgMatteSymbols.length;e{An();qn();Tn();ca();wc={name:"@dotlottie/common",version:"0.7.11",type:"module",description:"",author:"Afsal , Sam Osborne ",license:"MIT",engines:{node:">18.0.0"},module:"dist/index.js",main:"dist/index.js",types:"dist/index.d.ts",files:["dist"],keywords:[],scripts:{build:"tsup",dev:"tsup --watch",lint:"eslint .","type-check":"tsc --noEmit"},dependencies:{"@dotlottie/dotlottie-js":"^0.7.0","@preact/signals-core":"^1.2.3",howler:"^2.2.3","lottie-web":"^5.12.2",xstate:"^4.38.1"},devDependencies:{"@lottiefiles/lottie-types":"^1.2.0","@types/howler":"^2.2.8",tsup:"^7.2.0",typescript:"^4.7.4"},publishConfig:{access:"public"}},sr=(t=>(t.Complete="complete",t.DataFail="data_fail",t.DataReady="data_ready",t.Error="error",t.Frame="frame",t.Freeze="freeze",t.LoopComplete="loopComplete",t.Pause="pause",t.Play="play",t.Ready="ready",t.Stop="stop",t.VisibilityChange="visibilityChange",t))(sr||{}),Ir=(t=>(t.Completed="completed",t.Error="error",t.Fetching="fetching",t.Frozen="frozen",t.Initial="initial",t.Loading="loading",t.Paused="paused",t.Playing="playing",t.Ready="ready",t.Stopped="stopped",t))(Ir||{}),exports.PlayMode=(t=>(t.Bounce="bounce",t.Normal="normal",t))(exports.PlayMode||{}),cs={autoplay:!1,direction:1,hover:!1,intermission:0,loop:!1,playMode:"normal",speed:1,defaultTheme:""},Wn={activeStateId:"",autoplay:!1,currentState:"initial",frame:0,seeker:0,direction:1,hover:!1,loop:!1,playMode:"normal",speed:1,background:"transparent",intermission:0,currentAnimationId:void 0,visibilityPercentage:0},Xn=class{_lottie;_src;_animationConfig;_prevUserPlaybackOptions={};_userPlaybackOptions;_hover=!1;_loop=!1;_counter=0;_intermission=0;_counterInterval=null;_container=null;_name;_mode="normal";_background="transparent";_animation;_defaultTheme;_activeAnimationId;_currentAnimationId;_testId;_listeners=new Map;_currentState="initial";_stateBeforeFreeze="initial";state=new Bh(Wn);_light=!1;_worker=!1;_dotLottieLoader=new Dh;_activeStateId;_inInteractiveMode=!1;_scrollTicking=!1;_scrollCallback=void 0;_onShowIntersectionObserver=void 0;_visibilityPercentage=0;_audios=[];_stateMachineManager;constructor(t,e,i){typeof t=="string"?this._src=t:this._src=Ua(t),i!=null&&i.testId&&(this._testId=i.testId),this._defaultTheme=(i==null?void 0:i.defaultTheme)||"",this._userPlaybackOptions=this._validatePlaybackOptions(i||{}),typeof(i==null?void 0:i.activeAnimationId)=="string"&&(this._activeAnimationId=i.activeAnimationId),this._container=e||null,typeof(i==null?void 0:i.background)=="string"&&this.setBackground(i.background),typeof(i==null?void 0:i.activeStateId)<"u"&&(this._activeStateId=i.activeStateId);let{rendererSettings:s,...r}=i||{};this._animationConfig={loop:!1,autoplay:!1,renderer:"svg",rendererSettings:{clearCanvas:!0,progressiveLoad:!0,hideOnTransparent:!0,filterSize:{width:"200%",height:"200%",x:"-50%",y:"-50%"},...s},...r},i!=null&&i.light&&(this._light=i.light),i!=null&&i.worker&&(this._worker=i.worker),this._listenToHover(),this._listenToVisibilityChange();}_listenToHover(){var t,e,i,s;let r=()=>{this._hover&&this.currentState!=="playing"&&this.play();},a=()=>{this._hover&&this.currentState==="playing"&&this.stop();};(t=this._container)==null||t.removeEventListener("mouseenter",r),(e=this._container)==null||e.removeEventListener("mouseleave",a),(i=this._container)==null||i.addEventListener("mouseleave",a),(s=this._container)==null||s.addEventListener("mouseenter",r);}_onVisibilityChange(){!this._lottie||typeof document>"u"||(document.hidden&&this.currentState==="playing"?this.freeze():this.currentState==="frozen"&&this.unfreeze());}_listenToVisibilityChange(){typeof document<"u"&&typeof document.hidden<"u"&&document.addEventListener("visibilitychange",()=>this._onVisibilityChange());}_getOption(t){var e;if(typeof this._userPlaybackOptions[t]<"u")return this._userPlaybackOptions[t];let i=(e=this._dotLottieLoader.manifest)==null?void 0:e.animations.find(s=>s.id===this._currentAnimationId);return i&&typeof i[t]<"u"?i[t]:cs[t]}_getPlaybackOptions(){let t={};for(let e in cs)typeof cs[e]<"u"&&(t[e]=this._getOption(e));return t}_setPlayerState(t){var e,i,s;let r=t(this._getPlaybackOptions());try{fo._parse(r);}catch{li(`Invalid PlaybackOptions, ${JSON.stringify(r,null,2)}`);return}typeof r.defaultTheme<"u"&&(this._defaultTheme=r.defaultTheme),typeof r.playMode<"u"&&(this._mode=r.playMode),typeof r.intermission<"u"&&(this._intermission=r.intermission),typeof r.hover<"u"&&(this._hover=r.hover),typeof r.loop<"u"&&(this.clearCountTimer(),this._loop=r.loop,this._counter=0,(e=this._lottie)==null||e.setLoop(typeof r.loop=="number"?!0:r.loop)),typeof r.speed<"u"&&((i=this._lottie)==null||i.setSpeed(r.speed)),typeof r.autoplay<"u"&&this._lottie&&(this._lottie.autoplay=r.autoplay),typeof r.direction<"u"&&((s=this._lottie)==null||s.setDirection(r.direction));}_getOptionsFromAnimation(t){let{id:e,...i}=t;return {...cs,...i}}_updateTestData(){!this._testId||!this._lottie||(window.dotLottiePlayer||(window.dotLottiePlayer={[this._testId]:{}}),window.dotLottiePlayer[this._testId]={direction:this._lottie.playDirection,currentState:this._currentState,loop:this.loop,mode:this._mode,speed:this._lottie.playSpeed});}setContainer(t){t!==this._container&&(this._container=t,this.setBackground(this._background),this._listenToHover());}get currentState(){return this._currentState}clearCountTimer(){this._counterInterval&&clearInterval(this._counterInterval);}setCurrentState(t){this._currentState=t,this._notify(),this._updateTestData();}static isPathJSON(t){var e;return ((e=t.split(".").pop())==null?void 0:e.toLowerCase())==="json"}get src(){return this._src}updateSrc(t){this._src!==t&&(typeof t=="string"?this._src=t:this._src=Ua(t),this._activeAnimationId=void 0,this._currentAnimationId=void 0,this.load());}get intermission(){return this._intermission}get hover(){return this._hover}setHover(t){typeof t=="boolean"&&(this._hover=t,this._userPlaybackOptions.hover=t,this._notify());}setIntermission(t){this._intermission=t,this._userPlaybackOptions.intermission=t,this._notify();}get mode(){return this._mode}get animations(){return this._dotLottieLoader.animationsMap}get themes(){return this._dotLottieLoader.themeMap}setMode(t){typeof t=="string"&&(this._mode=t,this._userPlaybackOptions.playMode=t,this._setPlayerState(()=>({playMode:t})),this._notify(),this._updateTestData());}get container(){if(this._container)return this._container}goToAndPlay(t,e,i){if(!this._lottie||["loading"].includes(this._currentState)){li("goToAndPlay() Can't use whilst loading.");return}this._lottie.goToAndPlay(t,e,i),this.setCurrentState("playing");}goToAndStop(t,e,i){if(!this._lottie||["loading"].includes(this._currentState)){li("goToAndStop() Can't use whilst loading.");return}this._lottie.goToAndStop(t,e,i),this.setCurrentState("stopped");}seek(t){if(!this._lottie||["loading"].includes(this._currentState)){li("seek() Can't use whilst loading.");return}let e=t;typeof e=="number"&&(e=Math.round(e));let i=/^(\d+)(%?)$/u.exec(e.toString());if(!i)return;let s=i[2]==="%"?this.totalFrames*Number(i[1])/100:i[1];s!==void 0&&(this._lottie.goToAndPlay(s,!0),this.currentState==="playing"?this.play():this.currentState==="frozen"?this.freeze():this.pause());}_areNumbersInRange(t,e){return t>=0&&t<=1&&e>=0&&e<=1}_updatePosition(t,e,i){let[s,r]=t!=null?t:[0,this.totalFrames-1],[a,n]=e!=null?e:[0,1];if(!this._areNumbersInRange(a,n)){er("threshold values must be between 0 and 1");return}if(this.container){let{height:p,top:h}=this.container.getBoundingClientRect(),y=window.innerHeight-h,P=window.innerHeight+p,c=y/P,l=s+Math.round((c-a)/(n-a)*(r-s));i&&i(c),this.goToAndStop(l,!0),(l>=r||c>=n)&&this._handleAnimationComplete();}this._scrollTicking=!1;}_requestTick(t,e,i){this._scrollTicking||(requestAnimationFrame(()=>this._updatePosition(t,e,i)),this._scrollTicking=!0);}playOnScroll(t){this.stop(),this._scrollCallback&&this.stopPlayOnScroll(),this._scrollCallback=()=>this._requestTick(t==null?void 0:t.segments,t==null?void 0:t.threshold,t==null?void 0:t.positionCallback),window.addEventListener("scroll",this._scrollCallback);}stopPlayOnScroll(){this._scrollCallback&&(window.removeEventListener("scroll",this._scrollCallback),this._scrollCallback=void 0);}stopPlayOnShow(){this._onShowIntersectionObserver&&(this._onShowIntersectionObserver.disconnect(),this._onShowIntersectionObserver=void 0);}addIntersectionObserver(t){if(!this.container)throw Ie("Can't play on show, player container element not available.");let e={root:null,rootMargin:"0px",threshold:t!=null&&t.threshold?t.threshold:[0,1]},i=s=>{s.forEach(r=>{var a,n;this._visibilityPercentage=r.intersectionRatio*100,r.isIntersecting?(t!=null&&t.callbackOnIntersect&&t.callbackOnIntersect(this._visibilityPercentage),(a=this._container)==null||a.dispatchEvent(new Event("visibilityChange"))):t!=null&&t.callbackOnIntersect&&(t.callbackOnIntersect(0),(n=this._container)==null||n.dispatchEvent(new Event("visibilityChange")));});};this._onShowIntersectionObserver=new IntersectionObserver(i,e),this._onShowIntersectionObserver.observe(this.container);}playOnShow(t){var e;if(this.stop(),!this.container)throw Ie("Can't play on show, player container element not available.");this._onShowIntersectionObserver&&this.stopPlayOnShow(),this.addIntersectionObserver({threshold:(e=t==null?void 0:t.threshold)!=null?e:[],callbackOnIntersect:i=>{i===0?this.pause():this.play();}});}_validatePlaybackOptions(t){if(!t)return {};let e={};for(let[i,s]of Object.entries(t))switch(i){case"autoplay":typeof s=="boolean"&&(e.autoplay=s);break;case"direction":typeof s=="number"&&[1,-1].includes(s)&&(e.direction=s);break;case"loop":(typeof s=="boolean"||typeof s=="number")&&(e.loop=s);break;case"playMode":typeof s=="string"&&["normal","bounce"].includes(s)&&(e.playMode=s);break;case"speed":typeof s=="number"&&(e.speed=s);break;case"themeColor":typeof s=="string"&&(e.themeColor=s);break;case"hover":typeof s=="boolean"&&(e.hover=s);break;case"intermission":typeof s=="number"&&(e.intermission=s);break;case"defaultTheme":typeof s=="string"&&(e.defaultTheme=s);break}return this._requireValidPlaybackOptions(e),e}_requireAnimationsInTheManifest(){var t;if(!((t=this._dotLottieLoader.manifest)!=null&&t.animations.length))throw Ie("No animations found in manifest.")}_requireAnimationsToBeLoaded(){if(this._dotLottieLoader.animationsMap.size===0)throw Ie("No animations have been loaded.")}async play(t,e){var i,s;if(["initial","loading"].includes(this._currentState)){li("Player unable to play whilst loading.");return}if(this._requireAnimationsInTheManifest(),this._requireAnimationsToBeLoaded(),this._lottie&&!t){this._lottie.playDirection===-1&&this._lottie.currentFrame===0?this._lottie.goToAndPlay(this._lottie.totalFrames,!0):this._lottie.play(),this.setCurrentState("playing");return}if(typeof t=="number"){let r=(i=this._dotLottieLoader.manifest)==null?void 0:i.animations[t];if(!r)throw Ie("animation not found.");typeof e=="function"?await this.render({id:r.id,...e(this._getPlaybackOptions(),this._getOptionsFromAnimation(r))}):await this.render({id:r.id});}if(typeof t=="string"){let r=(s=this._dotLottieLoader.manifest)==null?void 0:s.animations.find(a=>a.id===t);if(!r)throw Ie("animation not found.");typeof e=="function"?await this.render({id:r.id,...e(this._getPlaybackOptions(),this._getOptionsFromAnimation(r))}):await this.render({id:r.id});}}playSegments(t,e){if(!this._lottie||["loading"].includes(this._currentState)){li("playSegments() Can't use whilst loading.");return}this._lottie.playSegments(t,e),this.setCurrentState("playing");}resetSegments(t){if(!this._lottie||["loading"].includes(this._currentState)){li("resetSegments() Can't use whilst loading.");return}this._lottie.resetSegments(t);}togglePlay(){this.currentState==="playing"?this.pause():this.play();}_getAnimationByIdOrIndex(t){var e,i;if(this._requireAnimationsInTheManifest(),this._requireAnimationsToBeLoaded(),typeof t=="number"){let s=(e=this._dotLottieLoader.manifest)==null?void 0:e.animations[t];if(!s)throw Ie("animation not found.");return s}if(typeof t=="string"){let s=(i=this._dotLottieLoader.manifest)==null?void 0:i.animations.find(r=>r.id===t);if(!s)throw Ie("animation not found.");return s}throw Ie("first param must be a number or string")}get activeAnimationId(){return this._getActiveAnimationId()}get currentAnimationId(){return this._currentAnimationId}get activeStateId(){return this._activeStateId}async _startInteractivity(t){if(!this._inInteractiveMode){er("Can't start interactivity. Not in interactive mode. Call enterInteractiveMode(stateId: string) to start.");return}if(this._dotLottieLoader.stateMachinesMap.size===0&&await this._dotLottieLoader.getStateMachines(),this._dotLottieLoader.stateMachinesMap.size===0)throw Ie("No interactivity states are available.");if(t==="undefined")throw Ie("stateId is not specified.");this._stateMachineManager||(this._stateMachineManager=await ul(Array.from(this._dotLottieLoader.stateMachinesMap.values()),this)),this._stateMachineManager.start(t);}enterInteractiveMode(t){var e;if(t)this._inInteractiveMode||(this._prevUserPlaybackOptions={...this._userPlaybackOptions}),this._inInteractiveMode&&((e=this._stateMachineManager)==null||e.stop()),this._activeStateId=t,this._inInteractiveMode=!0,this._startInteractivity(t);else throw Ie("stateId must be a non-empty string.")}exitInteractiveMode(){var t;this._inInteractiveMode&&(this._inInteractiveMode=!1,this._activeStateId="",(t=this._stateMachineManager)==null||t.stop(),this._userPlaybackOptions={},this._userPlaybackOptions={...this._prevUserPlaybackOptions},this._prevUserPlaybackOptions={},this.reset());}reset(){var t;let e=this._getActiveAnimationId(),i=(t=this._dotLottieLoader.manifest)==null?void 0:t.animations.find(s=>s.id===e);if(this._inInteractiveMode&&this.exitInteractiveMode(),!i)throw Ie("animation not found.");this.play(e);}previous(t){if(!this._dotLottieLoader.manifest||!this._dotLottieLoader.manifest.animations.length)throw Ie("manifest not found.");if(this._inInteractiveMode){li("previous() is not supported in interactive mode.");return}let e=this._dotLottieLoader.manifest.animations.findIndex(s=>s.id===this._currentAnimationId);if(e===-1)throw Ie("animation not found.");let i=this._dotLottieLoader.manifest.animations[(e-1+this._dotLottieLoader.manifest.animations.length)%this._dotLottieLoader.manifest.animations.length];if(!i||!i.id)throw Ie("animation not found.");typeof t=="function"?this.render({id:i.id,...t(this._getPlaybackOptions(),this._getOptionsFromAnimation(i))}):this.render({id:i.id});}next(t){if(!this._dotLottieLoader.manifest||!this._dotLottieLoader.manifest.animations.length)throw Ie("manifest not found.");if(this._inInteractiveMode){li("next() is not supported in interactive mode.");return}let e=this._dotLottieLoader.manifest.animations.findIndex(s=>s.id===this._currentAnimationId);if(e===-1)throw Ie("animation not found.");let i=this._dotLottieLoader.manifest.animations[(e+1)%this._dotLottieLoader.manifest.animations.length];if(!i||!i.id)throw Ie("animation not found.");typeof t=="function"?this.render({id:i.id,...t(this._getPlaybackOptions(),this._getOptionsFromAnimation(i))}):this.render({id:i.id});}getManifest(){return this._dotLottieLoader.manifest}resize(){if(!this._lottie||["loading"].includes(this._currentState)){li("resize() Can't use whilst loading.");return}this._lottie.resize();}stop(){if(!this._lottie||["loading"].includes(this._currentState)){li("stop() Can't use whilst loading.");return}this.clearCountTimer(),this._counter=0,this._setPlayerState(()=>({direction:this._getOption("direction")})),this._lottie.stop(),this.setCurrentState("stopped");}pause(){if(!this._lottie||["loading"].includes(this._currentState)){li("pause() Can't use whilst loading.");return}this.clearCountTimer(),this._lottie.pause(),this.setCurrentState("paused");}freeze(){if(!this._lottie||["loading"].includes(this._currentState)){li("freeze() Can't use whilst loading.");return}this.currentState!=="frozen"&&(this._stateBeforeFreeze=this.currentState),this._lottie.pause(),this.setCurrentState("frozen");}unfreeze(){if(!this._lottie||["loading"].includes(this._currentState)){li("unfreeze() Can't use whilst loading.");return}this._stateBeforeFreeze==="playing"?this.play():this.pause();}destroy(){var t,e;(t=this._container)!=null&&t.__lottie&&(this._container.__lottie.destroy(),this._container.__lottie=null),this._audios.length&&(this._audios.forEach(i=>{i.unload();}),this._audios=[]),this.clearCountTimer(),typeof document<"u"&&document.removeEventListener("visibilitychange",()=>this._onVisibilityChange()),this._counter=0,(e=this._lottie)==null||e.destroy(),this._lottie=void 0;}getAnimationInstance(){return this._lottie}static getLottieWebVersion(){return `${wc.dependencies["lottie-web"]}`}addEventListener(t,e){var i,s,r;this._listeners.has(t)||this._listeners.set(t,new Set),(i=this._listeners.get(t))==null||i.add(e);try{t==="complete"?(s=this._container)==null||s.addEventListener(t,e):(r=this._lottie)==null||r.addEventListener(t,e);}catch(a){er(`addEventListener ${a}`);}}getState(){var t,e,i,s,r,a,n;return {autoplay:(e=(t=this._lottie)==null?void 0:t.autoplay)!=null?e:!1,currentState:this._currentState,frame:this._frame,visibilityPercentage:this._visibilityPercentage,seeker:this._seeker,direction:(s=(i=this._lottie)==null?void 0:i.playDirection)!=null?s:1,hover:this._hover,loop:this._loop||!1,playMode:this._mode,speed:(a=(r=this._lottie)==null?void 0:r.playSpeed)!=null?a:1,background:this._background,intermission:this._intermission,defaultTheme:this._defaultTheme,currentAnimationId:this._currentAnimationId,activeStateId:(n=this._activeStateId)!=null?n:""}}_notify(){this.state.setState(this.getState());}get totalFrames(){var t;return ((t=this._lottie)==null?void 0:t.totalFrames)||0}get direction(){return this._lottie?this._lottie.playDirection:1}setDirection(t){this._requireValidDirection(t),this._setPlayerState(()=>({direction:t})),this._userPlaybackOptions.direction=t;}get speed(){var t;return ((t=this._lottie)==null?void 0:t.playSpeed)||1}setSpeed(t){this._requireValidSpeed(t),this._setPlayerState(()=>({speed:t})),this._userPlaybackOptions.speed=t;}get autoplay(){var t,e;return (e=(t=this._lottie)==null?void 0:t.autoplay)!=null?e:!1}setAutoplay(t){if(this._requireValidAutoplay(t),!this._lottie||["loading"].includes(this._currentState)){li("setAutoplay() Can't use whilst loading.");return}this._setPlayerState(()=>({autoplay:t})),this._userPlaybackOptions.autoplay=t;}toggleAutoplay(){if(!this._lottie||["loading"].includes(this._currentState)){li("toggleAutoplay() Can't use whilst loading.");return}this.setAutoplay(!this._lottie.autoplay);}get defaultTheme(){return this._defaultTheme}setDefaultTheme(t){this._setPlayerState(()=>({defaultTheme:t})),this._userPlaybackOptions.defaultTheme=t,this._animation&&this.render();}get loop(){return this._loop}setLoop(t){this._requireValidLoop(t),this._setPlayerState(()=>({loop:t})),this._userPlaybackOptions.loop=t;}toggleLoop(){if(!this._lottie||["loading"].includes(this._currentState)){li("toggleLoop() Can't use whilst loading.");return}this.setLoop(!this._loop);}get background(){return this._background}setBackground(t){this._requireValidBackground(t),this._background=t,this._container&&(this._container.style.backgroundColor=t);}get _frame(){return this._lottie?this.currentState==="completed"?this.direction===-1?0:this._lottie.totalFrames:this._lottie.currentFrame:0}get _seeker(){return this._lottie?this._frame/this._lottie.totalFrames*100:0}async revertToManifestValues(t){var e;let i;!Array.isArray(t)||t.length===0?i=["autoplay","defaultTheme","direction","hover","intermission","loop","playMode","speed","activeAnimationId"]:i=t;let s=!1;if(i.includes("activeAnimationId")){let r=(e=this._dotLottieLoader.manifest)==null?void 0:e.activeAnimationId,a=this._getAnimationByIdOrIndex(r||0);this._activeAnimationId=r,await this._setCurrentAnimation(a.id),s=!0;}i.forEach(r=>{switch(r){case"autoplay":delete this._userPlaybackOptions.autoplay,this.setAutoplay(this._getOption("autoplay"));break;case"defaultTheme":delete this._userPlaybackOptions.defaultTheme,this.setDefaultTheme(this._getOption("defaultTheme"));break;case"direction":delete this._userPlaybackOptions.direction,this.setDirection(this._getOption("direction"));break;case"hover":delete this._userPlaybackOptions.hover,this.setHover(this._getOption("hover"));break;case"intermission":delete this._userPlaybackOptions.intermission,this.setIntermission(this._getOption("intermission"));break;case"loop":delete this._userPlaybackOptions.loop,this.setLoop(this._getOption("loop"));break;case"playMode":delete this._userPlaybackOptions.playMode,this.setMode(this._getOption("playMode")),this.setDirection(this._getOption("direction"));break;case"speed":delete this._userPlaybackOptions.speed,this.setSpeed(this._getOption("speed"));break}}),s&&this.render();}removeEventListener(t,e){var i,s,r;try{t==="complete"?(i=this._container)==null||i.removeEventListener(t,e):(s=this._lottie)==null||s.removeEventListener(t,e),(r=this._listeners.get(t))==null||r.delete(e);}catch(a){er("removeEventListener",a);}}_handleAnimationComplete(){var t;typeof this._loop=="number"&&this.stop();let e=this.direction===-1?0:this.totalFrames-1;this.goToAndStop(e,!0),this._counter=0,this.clearCountTimer(),this.setCurrentState("completed"),(t=this._container)==null||t.dispatchEvent(new Event("complete"));}addEventListeners(){var t;if(!this._lottie||["loading"].includes(this._currentState)){li("addEventListeners() Can't use whilst loading.");return}this._lottie.addEventListener("enterFrame",()=>{var e;if(!this._lottie){li("enterFrame event : Lottie is undefined.");return}Math.floor(this._lottie.currentFrame)===0&&this.direction===-1&&((e=this._container)==null||e.dispatchEvent(new Event("complete")),this.loop||this.setCurrentState("completed")),this._notify();}),this._lottie.addEventListener("loopComplete",()=>{var e;if(!this._lottie){li("loopComplete event : Lottie is undefined.");return}(e=this._container)==null||e.dispatchEvent(new Event("loopComplete")),this.intermission>0&&this.pause();let i=this._lottie.playDirection;if(typeof this._loop=="number"&&this._loop>0&&(this._counter+=this._mode==="bounce"?.5:1,this._counter>=this._loop)){this._handleAnimationComplete();return}this._mode==="bounce"&&typeof i=="number"&&(i=Number(i)*-1);let s=i===-1?this._lottie.totalFrames-1:0;this.intermission?(this.goToAndPlay(s,!0),this.pause(),this._counterInterval=window.setTimeout(()=>{this._lottie&&(this._setPlayerState(()=>({direction:i})),this.goToAndPlay(s,!0));},this._intermission)):(this._setPlayerState(()=>({direction:i})),this.goToAndPlay(i===-1?this.totalFrames-1:0,!0));}),this._lottie.addEventListener("complete",()=>{if(this._lottie&&this._loop===!1&&this._mode==="bounce"){if(this._counter+=.5,this._counter>=1){this._handleAnimationComplete();return}this._counterInterval=window.setTimeout(()=>{if(!this._lottie)return;let e=this._lottie.playDirection;this._mode==="bounce"&&typeof e=="number"&&(e=Number(e)*-1);let i=e===-1?this.totalFrames-1:0;this._setPlayerState(()=>({direction:e})),this.goToAndPlay(i,!0);},this._intermission);}else this._handleAnimationComplete();});for(let[e,i]of this._listeners)if(e==="complete")for(let s of i)(t=this._container)==null||t.addEventListener(e,s);else for(let s of i)this._lottie.addEventListener(e,s);}async _setCurrentAnimation(t){this._currentState="loading";let e=await this._dotLottieLoader.getAnimation(t);this._currentAnimationId=t,this._animation=e,this._currentState="ready";}async _getAudioFactory(){if(this._animation&&yo(this._animation)){let{DotLottieAudio:t}=await Promise.resolve().then(()=>(dl(),ml));return e=>{let i=new t({src:[e]});return this._audios.push(i),i}}return null}async render(t){var e,i,s,r,a,n,p,h,y,P,c,l,E,b,v,w,u,f;if(t!=null&&t.id)await this._setCurrentAnimation(t.id);else if(!this._animation)throw Ie("no animation selected");let g=(e=cs.loop)!=null?e:!1,_=(i=cs.autoplay)!=null?i:!1,k=(s=cs.playMode)!=null?s:"normal",z=(r=cs.intermission)!=null?r:0,q=(a=cs.hover)!=null?a:!1,W=(n=cs.direction)!=null?n:1,ot=(p=cs.speed)!=null?p:1,mt=(h=cs.defaultTheme)!=null?h:"";g=(y=t==null?void 0:t.loop)!=null?y:this._getOption("loop"),_=(P=t==null?void 0:t.autoplay)!=null?P:this._getOption("autoplay"),k=(c=t==null?void 0:t.playMode)!=null?c:this._getOption("playMode"),z=(l=t==null?void 0:t.intermission)!=null?l:this._getOption("intermission"),q=(E=t==null?void 0:t.hover)!=null?E:this._getOption("hover"),W=(b=t==null?void 0:t.direction)!=null?b:this._getOption("direction"),ot=(v=t==null?void 0:t.speed)!=null?v:this._getOption("speed"),mt=(w=t==null?void 0:t.defaultTheme)!=null?w:this._getOption("defaultTheme");let gt={...this._animationConfig,autoplay:q?!1:_,loop:typeof g=="number"?!0:g,renderer:this._worker?"svg":(u=this._animationConfig.renderer)!=null?u:"svg"},[ut,Ct,ht]=await Promise.all([this._dotLottieLoader.getTheme(mt),this._getLottiePlayerInstance(),this._getAudioFactory()]);if(ut&&this._animation?(this._animation=Ua(this._animation),this._animation.slots=ut):this._animation=await this._dotLottieLoader.getAnimation((f=this._currentAnimationId)!=null?f:""),this._activeStateId&&!this._inInteractiveMode){this.enterInteractiveMode(this._activeStateId);return}this.destroy(),this._setPlayerState(()=>({defaultTheme:mt,playMode:k,intermission:z,hover:q,loop:g})),ht?this._lottie=Ct.loadAnimation({...gt,container:this._container,animationData:this._animation,audioFactory:ht}):this._lottie=Ct.loadAnimation({...gt,container:this._container,animationData:this._animation}),typeof this._lottie.resetSegments>"u"&&(this._lottie.resetSegments=()=>{var yt;(yt=this._lottie)==null||yt.playSegments([0,this._lottie.totalFrames],!0);}),this.addEventListeners(),this._container&&(this._container.__lottie=this._lottie),this._setPlayerState(()=>({direction:W,speed:ot})),_&&!q&&(g===!1&&W===-1?this.play():this.setCurrentState("playing")),this._updateTestData();}async _getLottiePlayerInstance(){var t;let e=(t=this._animationConfig.renderer)!=null?t:"svg",i;if(this._worker)return e!=="svg"&&li("Worker is only supported with svg renderer. Change or remove renderer prop to get rid of this warning."),i=await Promise.resolve().then(()=>(yl(),gl)),i.default;switch(e){case"svg":{this._light?i=await Promise.resolve().then(()=>(bl(),vl)):i=await Promise.resolve().then(()=>(xl(),_l));break}case"canvas":{this._light?i=await Promise.resolve().then(()=>(Sl(),Pl)):i=await Promise.resolve().then(()=>(Al(),El));break}case"html":{this._light?i=await Promise.resolve().then(()=>(kl(),Cl)):i=await Promise.resolve().then(()=>(Ml(),Tl));break}default:throw new Error(`Invalid renderer: ${e}`)}return i.default}_getActiveAnimationId(){var t,e,i,s;let r=this._dotLottieLoader.manifest;return (s=(i=(t=this._activeAnimationId)!=null?t:r==null?void 0:r.activeAnimationId)!=null?i:(e=r==null?void 0:r.animations[0])==null?void 0:e.id)!=null?s:void 0}async load(t){if(this._currentState==="loading"){li("Loading in progress..");return}try{if(this.setCurrentState("loading"),typeof this._src=="string")if(vo(this._src)){let i=JSON.parse(this._src);this._dotLottieLoader.loadFromLottieJSON(i);}else {let i=new URL(this._src,window.location.href);await this._dotLottieLoader.loadFromUrl(i.toString());}else if(typeof this._src=="object"&&Jr(this._src))this._dotLottieLoader.loadFromLottieJSON(this._src);else throw Ie("Invalid src provided");if(!this._dotLottieLoader.manifest)throw Ie("No manifest found");let e=this._getActiveAnimationId();if(!e)throw Ie("No active animation found");await this._setCurrentAnimation(e),await this.render(t);}catch(e){this.setCurrentState("error"),e instanceof Error&&er(`Error loading animation: ${e.message}`);}}setErrorState(t){this.setCurrentState("error"),er(t);}_requireValidDirection(t){if(t!==-1&&t!==1)throw Ie("Direction can only be -1 (backwards) or 1 (forwards)")}_requireValidIntermission(t){if(t<0||!Number.isInteger(t))throw Ie("intermission must be a positive number")}_requireValidLoop(t){if(typeof t=="number"&&(!Number.isInteger(t)||t<0))throw Ie("loop must be a positive number or boolean")}_requireValidSpeed(t){if(typeof t!="number")throw Ie("speed must be a number")}_requireValidBackground(t){if(typeof t!="string")throw Ie("background must be a string")}_requireValidAutoplay(t){if(typeof t!="boolean")throw Ie("autoplay must be a boolean")}_requireValidPlaybackOptions(t){t.direction&&this._requireValidDirection(t.direction),t.intermission&&this._requireValidIntermission(t.intermission),t.loop&&this._requireValidLoop(t.loop),t.speed&&this._requireValidSpeed(t.speed);}};});Bo();An();qn();Tn();ca();qs();var Yn=window,Jn=Yn.ShadowRoot&&(Yn.ShadyCSS===void 0||Yn.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Oo=Symbol(),wl=new WeakMap,ln=class{constructor(e,i,s){if(this._$cssResult$=!0,s!==Oo)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=i;}get styleSheet(){let e=this.o,i=this.t;if(Jn&&e===void 0){let s=i!==void 0&&i.length===1;s&&(e=wl.get(i)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),s&&wl.set(i,e));}return e}toString(){return this.cssText}},Dl=t=>new ln(typeof t=="string"?t:t+"",void 0,Oo),zo=(t,...e)=>{let i=t.length===1?t[0]:e.reduce((s,r,a)=>s+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(r)+t[a+1],t[0]);return new ln(i,t,Oo)},No=(t,e)=>{Jn?t.adoptedStyleSheets=e.map(i=>i instanceof CSSStyleSheet?i:i.styleSheet):e.forEach(i=>{let s=document.createElement("style"),r=Yn.litNonce;r!==void 0&&s.setAttribute("nonce",r),s.textContent=i.cssText,t.appendChild(s);});},Un=Jn?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let i="";for(let s of e.cssRules)i+=s.cssText;return Dl(i)})(t):t;var Go,Zn=window,Fl=Zn.trustedTypes,Dc=Fl?Fl.emptyScript:"",Il=Zn.reactiveElementPolyfillSupport,Ho={toAttribute(t,e){switch(e){case Boolean:t=t?Dc:null;break;case Object:case Array:t=t==null?t:JSON.stringify(t);}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=t!==null;break;case Number:i=t===null?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t);}catch{i=null;}}return i}},Ll=(t,e)=>e!==t&&(e==e||t==t),jo={attribute:!0,type:String,converter:Ho,reflect:!1,hasChanged:Ll},qo="finalized",ur=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu();}static addInitializer(e){var i;this.finalize(),((i=this.h)!==null&&i!==void 0?i:this.h=[]).push(e);}static get observedAttributes(){this.finalize();let e=[];return this.elementProperties.forEach((i,s)=>{let r=this._$Ep(s,i);r!==void 0&&(this._$Ev.set(r,s),e.push(r));}),e}static createProperty(e,i=jo){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(e,i),!i.noAccessor&&!this.prototype.hasOwnProperty(e)){let s=typeof e=="symbol"?Symbol():"__"+e,r=this.getPropertyDescriptor(e,s,i);r!==void 0&&Object.defineProperty(this.prototype,e,r);}}static getPropertyDescriptor(e,i,s){return {get(){return this[i]},set(r){let a=this[e];this[i]=r,this.requestUpdate(e,a,s);},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||jo}static finalize(){if(this.hasOwnProperty(qo))return !1;this[qo]=!0;let e=Object.getPrototypeOf(this);if(e.finalize(),e.h!==void 0&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let i=this.properties,s=[...Object.getOwnPropertyNames(i),...Object.getOwnPropertySymbols(i)];for(let r of s)this.createProperty(r,i[r]);}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){let i=[];if(Array.isArray(e)){let s=new Set(e.flat(1/0).reverse());for(let r of s)i.unshift(Un(r));}else e!==void 0&&i.push(Un(e));return i}static _$Ep(e,i){let s=i.attribute;return s===!1?void 0:typeof s=="string"?s:typeof e=="string"?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise(i=>this.enableUpdating=i),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(e=this.constructor.h)===null||e===void 0||e.forEach(i=>i(this));}addController(e){var i,s;((i=this._$ES)!==null&&i!==void 0?i:this._$ES=[]).push(e),this.renderRoot!==void 0&&this.isConnected&&((s=e.hostConnected)===null||s===void 0||s.call(e));}removeController(e){var i;(i=this._$ES)===null||i===void 0||i.splice(this._$ES.indexOf(e)>>>0,1);}_$Eg(){this.constructor.elementProperties.forEach((e,i)=>{this.hasOwnProperty(i)&&(this._$Ei.set(i,this[i]),delete this[i]);});}createRenderRoot(){var e;let i=(e=this.shadowRoot)!==null&&e!==void 0?e:this.attachShadow(this.constructor.shadowRootOptions);return No(i,this.constructor.elementStyles),i}connectedCallback(){var e;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$ES)===null||e===void 0||e.forEach(i=>{var s;return (s=i.hostConnected)===null||s===void 0?void 0:s.call(i)});}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$ES)===null||e===void 0||e.forEach(i=>{var s;return (s=i.hostDisconnected)===null||s===void 0?void 0:s.call(i)});}attributeChangedCallback(e,i,s){this._$AK(e,s);}_$EO(e,i,s=jo){var r;let a=this.constructor._$Ep(e,s);if(a!==void 0&&s.reflect===!0){let n=(((r=s.converter)===null||r===void 0?void 0:r.toAttribute)!==void 0?s.converter:Ho).toAttribute(i,s.type);this._$El=e,n==null?this.removeAttribute(a):this.setAttribute(a,n),this._$El=null;}}_$AK(e,i){var s;let r=this.constructor,a=r._$Ev.get(e);if(a!==void 0&&this._$El!==a){let n=r.getPropertyOptions(a),p=typeof n.converter=="function"?{fromAttribute:n.converter}:((s=n.converter)===null||s===void 0?void 0:s.fromAttribute)!==void 0?n.converter:Ho;this._$El=a,this[a]=p.fromAttribute(i,n.type),this._$El=null;}}requestUpdate(e,i,s){let r=!0;e!==void 0&&(((s=s||this.constructor.getPropertyOptions(e)).hasChanged||Ll)(this[e],i)?(this._$AL.has(e)||this._$AL.set(e,i),s.reflect===!0&&this._$El!==e&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(e,s))):r=!1),!this.isUpdatePending&&r&&(this._$E_=this._$Ej());}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_;}catch(i){Promise.reject(i);}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((r,a)=>this[a]=r),this._$Ei=void 0);let i=!1,s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),(e=this._$ES)===null||e===void 0||e.forEach(r=>{var a;return (a=r.hostUpdate)===null||a===void 0?void 0:a.call(r)}),this.update(s)):this._$Ek();}catch(r){throw i=!1,this._$Ek(),r}i&&this._$AE(s);}willUpdate(e){}_$AE(e){var i;(i=this._$ES)===null||i===void 0||i.forEach(s=>{var r;return (r=s.hostUpdated)===null||r===void 0?void 0:r.call(s)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e);}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return !0}update(e){this._$EC!==void 0&&(this._$EC.forEach((i,s)=>this._$EO(s,this[s],i)),this._$EC=void 0),this._$Ek();}updated(e){}firstUpdated(e){}};ur[qo]=!0,ur.elementProperties=new Map,ur.elementStyles=[],ur.shadowRootOptions={mode:"open"},Il==null||Il({ReactiveElement:ur}),((Go=Zn.reactiveElementVersions)!==null&&Go!==void 0?Go:Zn.reactiveElementVersions=[]).push("1.6.3");var $o,Kn=window,Sa=Kn.trustedTypes,Vl=Sa?Sa.createPolicy("lit-html",{createHTML:t=>t}):void 0,Xo="$lit$",Lr=`lit$${(Math.random()+"").slice(9)}$`,jl="?"+Lr,Fc=`<${jl}>`,Qr=document,fn=()=>Qr.createComment(""),cn=t=>t===null||typeof t!="object"&&typeof t!="function",Hl=Array.isArray,Ic=t=>Hl(t)||typeof(t==null?void 0:t[Symbol.iterator])=="function",Wo=`[ +\f\r]`,pn=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Rl=/-->/g,Bl=/>/g,Zr=RegExp(`>|${Wo}(?:([^\\s"'>=/]+)(${Wo}*=${Wo}*(?:[^ +\f\r"'\`<>=]|("|')|))|$)`,"g"),Ol=/'/g,zl=/"/g,ql=/^(?:script|style|textarea|title)$/i,$l=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),Ne=$l(1),ta=Symbol.for("lit-noChange"),Hi=Symbol.for("lit-nothing"),Nl=new WeakMap,Kr=Qr.createTreeWalker(Qr,129,null,!1);function Wl(t,e){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return Vl!==void 0?Vl.createHTML(e):e}var Lc=(t,e)=>{let i=t.length-1,s=[],r,a=e===2?"":"",n=pn;for(let p=0;p"?(n=r!=null?r:pn,c=-1):P[1]===void 0?c=-2:(c=n.lastIndex-P[2].length,y=P[1],n=P[3]===void 0?Zr:P[3]==='"'?zl:Ol):n===zl||n===Ol?n=Zr:n===Rl||n===Bl?n=pn:(n=Zr,r=void 0);let E=n===Zr&&t[p+1].startsWith("/>")?" ":"";a+=n===pn?h+Fc:c>=0?(s.push(y),h.slice(0,c)+Xo+h.slice(c)+Lr+E):h+Lr+(c===-2?(s.push(void 0),p):E);}return [Wl(t,a+(t[i]||"")+(e===2?"":"")),s]},un=class t{constructor({strings:e,_$litType$:i},s){let r;this.parts=[];let a=0,n=0,p=e.length-1,h=this.parts,[y,P]=Lc(e,i);if(this.el=t.createElement(y,s),Kr.currentNode=this.el.content,i===2){let c=this.el.content,l=c.firstChild;l.remove(),c.append(...l.childNodes);}for(;(r=Kr.nextNode())!==null&&h.length0){r.textContent=Sa?Sa.emptyScript:"";for(let E=0;E2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=Hi;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,i=this,s,r){let a=this.strings,n=!1;if(a===void 0)e=Ea(this,e,i,0),n=!cn(e)||e!==this._$AH&&e!==ta,n&&(this._$AH=e);else {let p=e,h,y;for(e=a[0],h=0;h{var s,r;let a=(s=i==null?void 0:i.renderBefore)!==null&&s!==void 0?s:e,n=a._$litPart$;if(n===void 0){let p=(r=i==null?void 0:i.renderBefore)!==null&&r!==void 0?r:null;a._$litPart$=n=new mn(e.insertBefore(fn(),p),p,void 0,i!=null?i:{});}return n._$AI(t),n};var Qo,th;var Vr=class extends ur{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){var e,i;let s=super.createRenderRoot();return (e=(i=this.renderOptions).renderBefore)!==null&&e!==void 0||(i.renderBefore=s.firstChild),s}update(e){let i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Xl(i,this.renderRoot,this.renderOptions);}connectedCallback(){var e;super.connectedCallback(),(e=this._$Do)===null||e===void 0||e.setConnected(!0);}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._$Do)===null||e===void 0||e.setConnected(!1);}render(){return ta}};Vr.finalized=!0,Vr._$litElement$=!0,(Qo=globalThis.litElementHydrateSupport)===null||Qo===void 0||Qo.call(globalThis,{LitElement:Vr});var Yl=globalThis.litElementPolyfillSupport;Yl==null||Yl({LitElement:Vr});((th=globalThis.litElementVersions)!==null&&th!==void 0?th:globalThis.litElementVersions=[]).push("3.3.3");var Rc=(t,e)=>e.kind==="method"&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t);}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){typeof e.initializer=="function"&&(this[e.key]=e.initializer.call(this));},finisher(i){i.createProperty(e.key,t);}},Bc=(t,e,i)=>{e.constructor.createProperty(i,t);};function Bi(t){return (e,i)=>i!==void 0?Bc(t,e,i):Rc(t,e)}function Jl(t){return Bi({...t,state:!0})}var ea=({finisher:t,descriptor:e})=>(i,s)=>{var r;if(s===void 0){let a=(r=i.originalKey)!==null&&r!==void 0?r:i.key,n=e!=null?{kind:"method",placement:"prototype",key:a,descriptor:e(i.key)}:{...i,key:a};return t!=null&&(n.finisher=function(p){t(p,a);}),n}{let a=i.constructor;e!==void 0&&Object.defineProperty(i,s,e(s)),t==null||t(a,s);}};function Ul(t,e){return ea({descriptor:i=>{let s={get(){var r,a;return (a=(r=this.renderRoot)===null||r===void 0?void 0:r.querySelector(t))!==null&&a!==void 0?a:null},enumerable:!0,configurable:!0};if(e){let r=typeof i=="symbol"?Symbol():"__"+i;s.get=function(){var a,n;return this[r]===void 0&&(this[r]=(n=(a=this.renderRoot)===null||a===void 0?void 0:a.querySelector(t))!==null&&n!==void 0?n:null),this[r]};}return s}})}var eh;((eh=window.HTMLSlotElement)===null||eh===void 0?void 0:eh.prototype.assignedElements)!=null?(t,e)=>t.assignedElements(e):(t,e)=>t.assignedNodes(e).filter(i=>i.nodeType===Node.ELEMENT_NODE);var Zl={name:"@dotlottie/player-component",version:"2.7.12",description:"dotLottie animation player web component.",repository:"https://github.com/dotlottie/player-component.git",homepage:"https://dotlottie.io/players",bugs:"https://github.com/dotlottie/player-component/issues",author:"Jawish Hameed ",license:"MIT",main:"dist/dotlottie-player.js",module:"dist/dotlottie-player.mjs",types:"dist/dotlottie-player.d.ts",files:["dist"],keywords:["dotlottie","animation","web component","component","lit-element","player"],scripts:{build:"tsup","cypress:open":"cypress open --component",dev:"tsup --watch",lint:"eslint .","lint:fix":"eslint --fix",test:"cypress run --component","type-check":"tsc --noEmit"},dependencies:{"@dotlottie/common":"workspace:*",lit:"^2.7.5"},devDependencies:{"@vitejs/plugin-legacy":"^4.1.0","axe-core":"^4.7.2",cypress:"^12.11.0","cypress-axe":"^1.4.0","cypress-ct-lit":"^0.3.2","lottie-web":"^5.12.2",terser:"^5.19.0",tsup:"^7.2.0",typescript:"^4.7.4",vite:"^4.3.9"},publishConfig:{access:"public"},browserslist:["> 3%"]};var Kl=zo` + @font-face { + font-family: 'Karla'; + font-weight: regular; + src: url('./fonts/Karla-regular.woff') format('woff'); + } + + :host { + --lottie-player-toolbar-height: 35px; + --lottie-player-toolbar-background-color: transparent; + --lottie-player-toolbar-hover-background-color: #f3f6f8; + --lottie-player-toolbar-icon-color: #20272c; + --lottie-player-toolbar-icon-hover-color: #f3f6f8; + --lottie-player-toolbar-icon-active-color: #00ddb3; + --lottie-player-seeker-track-color: #00ddb3; + --lottie-player-seeker-accent-color: #00c1a2; + --lottie-player-seeker-thumb-color: #00c1a2; + --lottie-player-options-separator: #d9e0e6; + + display: block; + width: 100%; + height: 100%; + + font-family: 'Karla', sans-serif; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + :host * { + box-sizing: border-box; + } + + .active { + color: var(--lottie-player-toolbar-icon-active-color) !important; + } + + .main { + position: relative; + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + } + + .animation { + position: relative; + width: 100%; + height: 100%; + display: flex; + } + .animation.controls { + height: calc(100% - var(--lottie-player-toolbar-height)); + } + + .toolbar { + display: flex; + align-items: center; + justify-items: center; + background-color: var(--lottie-player-toolbar-background-color); + margin: 0 8px; + height: var(--lottie-player-toolbar-height); + } + + .btn-spacing-left { + margin-right: 4px; + margin-left: 8px; + } + + .btn-spacing-center { + margin-right: 4px; + margin-left: 4px; + } + + .btn-spacing-right { + margin-right: 8px; + margin-left: 4px; + } + + .toolbar button { + color: #20272c; + cursor: pointer; + fill: var(--lottie-player-toolbar-icon-color); + display: flex; + background: none; + border: 0px; + border-radius: 4px; + padding: 4px; + outline: none; + width: 24px; + height: 24px; + align-items: center; + } + + .toolbar button:hover { + background-color: var(--lottie-player-toolbar-icon-hover-color); + border-style: solid; + border-radius: 2px; + } + + .toolbar button.active { + fill: var(--lottie-player-toolbar-icon-active-color); + } + + .toolbar button.active:hover { + fill: var(--lottie-player-toolbar-icon-hover-color); + border-radius: 4px; + } + + .toolbar button:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + + .toolbar button svg { + width: 16px; + height: 16px; + } + + .toolbar button.disabled svg { + display: none; + } + + .popover { + position: absolute; + bottom: 40px; + left: calc(100% - 239px); + width: 224px; + min-height: 84px; + max-height: 300px; + background-color: #ffffff; + box-shadow: 0px 8px 48px 0px rgba(243, 246, 248, 0.15), 0px 8px 16px 0px rgba(61, 72, 83, 0.16), + 0px 0px 1px 0px rgba(61, 72, 83, 0.36); + border-radius: 8px; + padding: 8px; + z-index: 100; + overflow-y: scroll; + scrollbar-width: none; + } + .popover:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + + .popover::-webkit-scrollbar { + width: 0px; + } + + .popover-button { + background: none; + border: none; + font-family: inherit; + width: 100%; + flex-direction: row; + cursor: pointer; + height: 32px; + color: #20272c; + justify-content: space-between; + display: flex; + padding: 4px 8px; + align-items: flex-start; + gap: 8px; + align-self: stretch; + border-radius: 4px; + } + + .popover-button:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + + .popover-button:hover { + background-color: var(--lottie-player-toolbar-hover-background-color); + } + + .popover-button-text { + display: flex; + color: #20272c; + flex-direction: column; + align-self: stretch; + justify-content: center; + font-family: inherit; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 150%; + letter-spacing: -0.28px; + } + + .reset-btn { + font-size: 12px; + cursor: pointer; + font-family: inherit; + background: none; + border: none; + font-weight: 400; + line-height: 18px; + letter-spacing: 0em; + text-align: left; + color: #63727e; + padding: 0; + width: 31px; + height: 18px; + } + .reset-btn:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + .reset-btn:hover { + color: #20272c; + } + + .option-title-button { + display: flex; + flex-direction: row; + width: 100%; + height: 32px; + align-items: center; + gap: 4px; + align-self: stretch; + cursor: pointer; + color: var(--lottie-player-toolbar-icon-color); + border: none; + background: none; + padding: 4px; + font-family: inherit; + font-size: 16px; + font-weight: 700; + line-height: 150%; + letter-spacing: -0.32px; + } + .option-title-button.themes { + width: auto; + padding: 0; + } + .option-title-button:hover { + background-color: var(--lottie-player-toolbar-icon-hover-color); + } + + .option-title-themes-row { + display: flex; + align-items: center; + gap: 8px; + flex: 1 0 0; + } + .option-title-themes-row:hover { + background-color: var(--lottie-player-toolbar-icon-hover-color); + } + + .option-title-button:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + + .option-title-text { + font-size: 16px; + font-style: normal; + font-weight: 700; + line-height: 150%; + letter-spacing: -0.32px; + } + + .option-title-separator { + margin: 8px -8px; + border-bottom: 1px solid var(--lottie-player-options-separator); + } + + .option-title-chevron { + display: flex; + padding: 4px; + border-radius: 8px; + justify-content: center; + align-items: center; + gap: 8px; + } + + .option-row { + display: flex; + flex-direction: column; + } + .option-row > ul { + padding: 0; + margin: 0; + } + + .option-button { + width: 100%; + background: none; + border: none; + font-family: inherit; + display: flex; + padding: 4px 8px; + color: #20272c; + overflow: hidden; + align-items: center; + gap: 8px; + align-self: stretch; + cursor: pointer; + height: 32px; + font-family: inherit; + font-size: 14px; + border-radius: 4px; + } + .option-button:hover { + background-color: var(--lottie-player-toolbar-hover-background-color); + } + .option-button:focus-visible { + outline: 2px solid var(--lottie-player-toolbar-icon-active-color); + border-radius: 4px; + box-sizing: border-box; + } + + .option-tick { + display: flex; + width: 24px; + height: 24px; + align-items: flex-start; + gap: 8px; + } + + .seeker { + height: 4px; + width: 95%; + outline: none; + -webkit-appearance: none; + -moz-apperance: none; + border-radius: 9999px; + cursor: pointer; + background-image: linear-gradient( + to right, + rgb(0, 221, 179) calc(var(--seeker) * 1%), + rgb(217, 224, 230) calc(var(--seeker) * 1%) + ); + } + .seeker.to-left { + background-image: linear-gradient( + to right, + rgb(217, 224, 230) calc(var(--seeker) * 1%), + rgb(0, 221, 179) calc(var(--seeker) * 1%) + ); + } + .seeker::-webkit-slider-runnable-track:focus-visible { + color: #f07167; + accent-color: #00ddb3; + } + + .seeker::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + } + .seeker::-webkit-slider-thumb { + -webkit-appearance: none; + height: 16px; + width: 16px; + border-radius: 50%; + background: var(--lottie-player-seeker-thumb-color); + cursor: pointer; + margin-top: -5px; + } + .seeker:focus-visible::-webkit-slider-thumb { + background: var(--lottie-player-seeker-thumb-color); + outline: 2px solid var(--lottie-player-seeker-track-color); + border: 1.5px solid #ffffff; + } + .seeker::-webkit-slider-thumb:hover { + background: #019d91; + } + .seeker::-moz-range-thumb { + appearance: none; + height: 16px; + width: 16px; + border-radius: 50%; + background: var(--lottie-player-seeker-thumb-color); + cursor: pointer; + margin-top: -5px; + border-color: transparent; + } + .seeker:focus-visible::-moz-range-thumb { + background: var(--lottie-player-seeker-thumb-color); + outline: 2px solid var(--lottie-player-seeker-track-color); + border: 1.5px solid #ffffff; + } + + .error { + display: flex; + justify-content: center; + margin: auto; + height: 100%; + align-items: center; + } +`;var Ql="dotlottie-player";var Mi=class extends Vr{defaultTheme="";container;playMode=exports.PlayMode.Normal;autoplay=!1;background="transparent";controls=!1;direction=1;hover=!1;loop;renderer="svg";speed=1;src;intermission=0;activeAnimationId=null;light=!1;worker=!1;activeStateId;_seeker=0;_dotLottieCommonPlayer;_io;_loop;_renderer="svg";_unsubscribeListeners;_hasMultipleAnimations=!1;_hasMultipleThemes=!1;_hasMultipleStates=!1;_popoverIsOpen=!1;_animationsTabIsOpen=!1;_statesTabIsOpen=!1;_styleTabIsOpen=!1;_themesForCurrentAnimation=[];_statesForCurrentAnimation=[];_parseLoop(e){let i=parseInt(e,10);return Number.isInteger(i)&&i>0?(this._loop=i,i):typeof e=="string"&&["true","false"].includes(e)?(this._loop=e==="true",this._loop):(li("loop must be a positive integer or a boolean"),!1)}_handleSeekChange(e){let i=e.currentTarget;try{let s=parseInt(i.value,10);if(!this._dotLottieCommonPlayer)return;let r=s/100*this._dotLottieCommonPlayer.totalFrames;this.seek(r);}catch{throw Ie("Error while seeking animation")}}_initListeners(){let e=this._dotLottieCommonPlayer;if(e===void 0){li("player not initialized - cannot add event listeners","dotlottie-player-component");return}this._unsubscribeListeners=e.state.subscribe((i,s)=>{this._seeker=i.seeker,this.requestUpdate(),s.currentState!==i.currentState&&this.dispatchEvent(new CustomEvent(i.currentState)),this.dispatchEvent(new CustomEvent(sr.Frame,{detail:{frame:i.frame,seeker:i.seeker}})),this.dispatchEvent(new CustomEvent(sr.VisibilityChange,{detail:{visibilityPercentage:i.visibilityPercentage}}));}),e.addEventListener("complete",()=>{this.dispatchEvent(new CustomEvent(sr.Complete));}),e.addEventListener("loopComplete",()=>{this.dispatchEvent(new CustomEvent(sr.LoopComplete));}),e.addEventListener("DOMLoaded",()=>{let i=this.getManifest();i&&i.themes&&(this._themesForCurrentAnimation=i.themes.filter(s=>s.animations.includes(this.getCurrentAnimationId()||""))),i&&i.states&&(this._hasMultipleStates=i.states.length>0,this._statesForCurrentAnimation=[],i.states.forEach(s=>{this._statesForCurrentAnimation.push(s);})),this.dispatchEvent(new CustomEvent(sr.Ready));}),e.addEventListener("data_ready",()=>{this.dispatchEvent(new CustomEvent(sr.DataReady));}),e.addEventListener("data_failed",()=>{this.dispatchEvent(new CustomEvent(sr.DataFail));}),window&&window.addEventListener("click",i=>this._clickOutListener(i));}async load(e,i,s){if(!this.shadowRoot)return;this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.destroy(),this._dotLottieCommonPlayer=new Xn(e,this.container,{rendererSettings:i!=null?i:{scaleMode:"noScale",clearCanvas:!0,progressiveLoad:!0,hideOnTransparent:!0},hover:this.hasAttribute("hover")?this.hover:void 0,renderer:this.hasAttribute("renderer")?this._renderer:void 0,loop:this.hasAttribute("loop")?this._loop:void 0,direction:this.hasAttribute("direction")?this.direction===1?1:-1:void 0,speed:this.hasAttribute("speed")?this.speed:void 0,intermission:this.hasAttribute("intermission")?Number(this.intermission):void 0,playMode:this.hasAttribute("playMode")?this.playMode:void 0,autoplay:this.hasAttribute("autoplay")?this.autoplay:void 0,activeAnimationId:this.hasAttribute("activeAnimationId")?this.activeAnimationId:void 0,defaultTheme:this.hasAttribute("defaultTheme")?this.defaultTheme:void 0,light:this.light,worker:this.worker,activeStateId:this.hasAttribute("activeStateId")?this.activeStateId:void 0}),await this._dotLottieCommonPlayer.load(s);let r=this.getManifest();this._hasMultipleAnimations=this.animationCount()>1,r&&(r.themes&&(this._themesForCurrentAnimation=r.themes.filter(a=>a.animations.includes(this.getCurrentAnimationId()||"")),this._hasMultipleThemes=r.themes.length>0),r.states&&(this._hasMultipleStates=r.states.length>0,this._statesForCurrentAnimation=[],r.states.forEach(a=>{this._statesForCurrentAnimation.push(a);}))),this._initListeners();}getCurrentAnimationId(){var e;return (e=this._dotLottieCommonPlayer)==null?void 0:e.currentAnimationId}animationCount(){var e;return this._dotLottieCommonPlayer&&((e=this._dotLottieCommonPlayer.getManifest())==null?void 0:e.animations.length)||0}animations(){if(!this._dotLottieCommonPlayer)return [];let e=this._dotLottieCommonPlayer.getManifest();return (e==null?void 0:e.animations.map(i=>i.id))||[]}currentAnimation(){return !this._dotLottieCommonPlayer||!this._dotLottieCommonPlayer.currentAnimationId?"":this._dotLottieCommonPlayer.currentAnimationId}getState(){return this._dotLottieCommonPlayer?this._dotLottieCommonPlayer.getState():Wn}getManifest(){var e;return (e=this._dotLottieCommonPlayer)==null?void 0:e.getManifest()}getLottie(){var e;return (e=this._dotLottieCommonPlayer)==null?void 0:e.getAnimationInstance()}getVersions(){return {lottieWebVersion:Xn.getLottieWebVersion(),dotLottiePlayerVersion:`${Zl.version}`}}previous(e){var i;(i=this._dotLottieCommonPlayer)==null||i.previous(e);}next(e){var i;(i=this._dotLottieCommonPlayer)==null||i.next(e);}reset(){var e;(e=this._dotLottieCommonPlayer)==null||e.reset();}play(e,i){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.play(e,i);}pause(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.pause();}stop(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.stop();}playOnShow(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.playOnShow(e);}stopPlayOnShow(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.stopPlayOnShow();}playOnScroll(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.playOnScroll(e);}stopPlayOnScroll(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.stopPlayOnScroll();}seek(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.seek(e);}snapshot(e=!0){if(!this.shadowRoot)return "";let i=this.shadowRoot.querySelector(".animation svg"),s=new XMLSerializer().serializeToString(i);if(e){let r=document.createElement("a");r.href=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(s)}`,r.download=`download_${this._seeker}.svg`,document.body.appendChild(r),r.click(),document.body.removeChild(r);}return s}setTheme(e){var i;(i=this._dotLottieCommonPlayer)==null||i.setDefaultTheme(e);}themes(){var i;if(!this._dotLottieCommonPlayer)return [];let e=this._dotLottieCommonPlayer.getManifest();return ((i=e==null?void 0:e.themes)==null?void 0:i.map(s=>s.id))||[]}getDefaultTheme(){return this._dotLottieCommonPlayer?this._dotLottieCommonPlayer.defaultTheme:""}getActiveStateMachine(){return this._dotLottieCommonPlayer?this._dotLottieCommonPlayer.activeStateId:""}_freeze(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.freeze();}setSpeed(e=1){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.setSpeed(e);}setDirection(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.setDirection(e);}setLooping(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.setLoop(e);}isLooping(){return this._dotLottieCommonPlayer?this._dotLottieCommonPlayer.loop:!1}togglePlay(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.togglePlay();}toggleLooping(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.toggleLoop();}setPlayMode(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.setMode(e);}enterInteractiveMode(e){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.enterInteractiveMode(e);}exitInteractiveMode(){this._dotLottieCommonPlayer&&this._dotLottieCommonPlayer.exitInteractiveMode();}revertToManifestValues(e){var i;(i=this._dotLottieCommonPlayer)==null||i.revertToManifestValues(e);}static get styles(){return Kl}async firstUpdated(){var e;this.container=(e=this.shadowRoot)==null?void 0:e.querySelector("#animation"),"IntersectionObserver"in window&&(this._io=new IntersectionObserver(i=>{var s,r;i[0]!==void 0&&i[0].isIntersecting?((s=this._dotLottieCommonPlayer)==null?void 0:s.currentState)===Ir.Frozen&&this.play():((r=this._dotLottieCommonPlayer)==null?void 0:r.currentState)===Ir.Playing&&this._freeze();}),this._io.observe(this.container)),this.loop?this._parseLoop(this.loop):this.hasAttribute("loop")&&this._parseLoop("true"),this.renderer==="svg"?this._renderer="svg":this.renderer==="canvas"?this._renderer="canvas":this.renderer==="html"&&(this._renderer="html"),this.src&&await this.load(this.src);}disconnectedCallback(){var e,i;this._io&&(this._io.disconnect(),this._io=void 0),(e=this._dotLottieCommonPlayer)==null||e.destroy(),(i=this._unsubscribeListeners)==null||i.call(this),window&&window.removeEventListener("click",s=>this._clickOutListener(s));}_clickOutListener(e){!e.composedPath().some(s=>s instanceof HTMLElement?s.classList.contains("popover")||s.id==="lottie-animation-options":!1)&&this._popoverIsOpen&&(this._popoverIsOpen=!1,this.requestUpdate());}renderControls(){var s,r,a,n,p;let e=((s=this._dotLottieCommonPlayer)==null?void 0:s.currentState)===Ir.Playing,i=((r=this._dotLottieCommonPlayer)==null?void 0:r.currentState)===Ir.Paused;return Ne` +
+ ${this._hasMultipleAnimations?Ne` + + `:Ne``} + + ${this._hasMultipleAnimations?Ne` + + `:Ne``} + this._handleSeekChange(h)} + @mousedown=${()=>{this._freeze();}} + @mouseup=${()=>{var h;(h=this._dotLottieCommonPlayer)==null||h.unfreeze();}} + aria-valuemin="1" + aria-valuemax="100" + role="slider" + aria-valuenow=${this._seeker} + aria-label="lottie-seek-input" + style=${`--seeker: ${this._seeker}`} + /> + + ${this._hasMultipleAnimations||this._hasMultipleThemes||this._hasMultipleStates?Ne` + + `:Ne``} +
+ ${this._popoverIsOpen?Ne` +
+ ${!this._animationsTabIsOpen&&!this._styleTabIsOpen&&!this._statesTabIsOpen?Ne` + + `:Ne``} + ${this._hasMultipleThemes&&!this._styleTabIsOpen&&!this._animationsTabIsOpen&&!this._statesTabIsOpen?Ne` `:""} + ${this._hasMultipleStates&&!this._styleTabIsOpen&&!this._animationsTabIsOpen&&!this._statesTabIsOpen?Ne` `:""} + ${this._animationsTabIsOpen?Ne` +
+
+
    + ${this.animations().map(h=>Ne` +
  • + +
  • + `)} +
+
`:Ne``} + ${this._styleTabIsOpen?Ne`
+ + `} + +
+
+
+
    + ${this._themesForCurrentAnimation.map(h=>Ne` +
  • + +
  • + `)} +
+
`:Ne``} + ${this._statesTabIsOpen?Ne`
+ + +
+
+
+
    + ${this._statesForCurrentAnimation.map(h=>Ne` +
  • + +
  • + `)} +
+
`:Ne``} +
+ `:Ne``} + `}render(){var s;let e=this.controls?"main controls":"main",i=this.controls?"animation controls":"animation";return Ne` + + `}};Ri([Bi({type:String})],Mi.prototype,"defaultTheme",2),Ri([Ul("#animation")],Mi.prototype,"container",2),Ri([Bi()],Mi.prototype,"playMode",2),Ri([Bi({type:Boolean})],Mi.prototype,"autoplay",2),Ri([Bi({type:String})],Mi.prototype,"background",2),Ri([Bi({type:Boolean})],Mi.prototype,"controls",2),Ri([Bi({type:Number})],Mi.prototype,"direction",2),Ri([Bi({type:Boolean})],Mi.prototype,"hover",2),Ri([Bi({type:String})],Mi.prototype,"loop",2),Ri([Bi({type:String})],Mi.prototype,"renderer",2),Ri([Bi({type:Number})],Mi.prototype,"speed",2),Ri([Bi({type:String})],Mi.prototype,"src",2),Ri([Bi()],Mi.prototype,"intermission",2),Ri([Bi({type:String})],Mi.prototype,"activeAnimationId",2),Ri([Bi({type:Boolean})],Mi.prototype,"light",2),Ri([Bi({type:Boolean})],Mi.prototype,"worker",2),Ri([Bi({type:String})],Mi.prototype,"activeStateId",2),Ri([Jl()],Mi.prototype,"_seeker",2);customElements.get(Ql)||customElements.define(Ql,Mi);/*! Bundled license information: + + xstate/es/_virtual/_tslib.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) + */ + /*! Bundled license information: + + howler/dist/howler.js: + (*! + * howler.js v2.2.3 + * howlerjs.com + * + * (c) 2013-2020, James Simpson of GoldFire Studios + * goldfirestudios.com + * + * MIT License + *) + (*! + * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported. + * + * howler.js v2.2.3 + * howlerjs.com + * + * (c) 2013-2020, James Simpson of GoldFire Studios + * goldfirestudios.com + * + * MIT License + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_worker.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_light.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_svg.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_light_canvas.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_canvas.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_light_html.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + lottie-web/build/player/lottie_html.js: + (*! + Transformation Matrix v2.0 + (c) Epistemex 2014-2015 + www.epistemex.com + By Ken Fyrstenberg + Contributions by leeoniya. + License: MIT, header required. + *) + */ + /*! Bundled license information: + + @lit/reactive-element/css-tag.js: + (** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/reactive-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + lit-html/lit-html.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + lit-element/lit-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + lit-html/is-server.js: + (** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/custom-element.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/property.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/state.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/base.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/event-options.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/query.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/query-all.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/query-async.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/query-assigned-elements.js: + (** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + + @lit/reactive-element/decorators/query-assigned-nodes.js: + (** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + *) + */ + + exports.DotLottiePlayer = Mi; + +})); +//# sourceMappingURL=out.js.map +//# sourceMappingURL=dotlottie-player.js.map \ No newline at end of file diff --git a/static/js/lib/lodash.min.js b/static/js/lib/lodash.min.js new file mode 100644 index 0000000..13ec307 --- /dev/null +++ b/static/js/lib/lodash.min.js @@ -0,0 +1,137 @@ +/** + * @license + * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + */ +;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u"']/g,G=RegExp(V.source),H=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,Q=/<%=([\s\S]+?)%>/g,X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nn=/^\w*$/,tn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rn=/[\\^$.*+?()[\]{}|]/g,en=RegExp(rn.source),un=/^\s+|\s+$/g,on=/^\s+/,fn=/\s+$/,cn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,an=/\{\n\/\* \[wrapped with (.+)\] \*/,ln=/,? & /,sn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,hn=/\\(\\)?/g,pn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,_n=/\w*$/,vn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,dn=/^\[object .+?Constructor\]$/,yn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\d*)$/,xn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,jn=/($^)/,wn=/['\n\r\u2028\u2029\\]/g,mn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*",An="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+mn,En="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]?|[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",kn=RegExp("['\u2019]","g"),Sn=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g"),On=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+En+mn,"g"),In=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+",An].join("|"),"g"),Rn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Bn={}; +Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=true,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object DataView]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=false; +var Ln={};Ln["[object Arguments]"]=Ln["[object Array]"]=Ln["[object ArrayBuffer]"]=Ln["[object DataView]"]=Ln["[object Boolean]"]=Ln["[object Date]"]=Ln["[object Float32Array]"]=Ln["[object Float64Array]"]=Ln["[object Int8Array]"]=Ln["[object Int16Array]"]=Ln["[object Int32Array]"]=Ln["[object Map]"]=Ln["[object Number]"]=Ln["[object Object]"]=Ln["[object RegExp]"]=Ln["[object Set]"]=Ln["[object String]"]=Ln["[object Symbol]"]=Ln["[object Uint8Array]"]=Ln["[object Uint8ClampedArray]"]=Ln["[object Uint16Array]"]=Ln["[object Uint32Array]"]=true, +Ln["[object Error]"]=Ln["[object Function]"]=Ln["[object WeakMap]"]=false;var Un={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Cn=parseFloat,Dn=parseInt,Mn=typeof global=="object"&&global&&global.Object===Object&&global,Tn=typeof self=="object"&&self&&self.Object===Object&&self,$n=Mn||Tn||Function("return this")(),Fn=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nn=Fn&&typeof module=="object"&&module&&!module.nodeType&&module,Pn=Nn&&Nn.exports===Fn,Zn=Pn&&Mn.process,qn=function(){ +try{var n=Nn&&Nn.f&&Nn.f("util").types;return n?n:Zn&&Zn.binding&&Zn.binding("util")}catch(n){}}(),Vn=qn&&qn.isArrayBuffer,Kn=qn&&qn.isDate,Gn=qn&&qn.isMap,Hn=qn&&qn.isRegExp,Jn=qn&&qn.isSet,Yn=qn&&qn.isTypedArray,Qn=b("length"),Xn=x({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I", +"\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C", +"\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i", +"\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r", +"\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij", +"\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),nt=x({"&":"&","<":"<",">":">",'"':""","'":"'"}),tt=x({"&":"&","<":"<",">":">",""":'"',"'":"'"}),rt=function x(mn){function An(n){if(yu(n)&&!ff(n)&&!(n instanceof Un)){if(n instanceof On)return n;if(oi.call(n,"__wrapped__"))return Fe(n)}return new On(n)}function En(){}function On(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=T}function Un(n){this.__wrapped__=n, +this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function _t(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==T)return f;if(!du(n))return n;if(u=ff(n)){if(f=me(n),!c)return Ur(n,f)}else{var s=vo(n),h="[object Function]"==s||"[object GeneratorFunction]"==s;if(af(n))return Ir(n,c);if("[object Object]"==s||"[object Arguments]"==s||h&&!i){if(f=a||h?{}:Ae(n),!c)return a?Mr(n,lt(f,n)):Dr(n,at(f,n))}else{if(!Ln[s])return i?n:{};f=Ee(n,s,c)}}if(o||(o=new Zn), +i=o.get(n))return i;o.set(n,f),pf(n)?n.forEach(function(r){f.add(_t(r,t,e,r,n,o))}):sf(n)&&n.forEach(function(r,u){f.set(u,_t(r,t,e,u,n,o))});var a=l?a?ve:_e:a?Bu:Wu,p=u?T:a(n);return r(p||n,function(r,u){p&&(u=r,r=n[u]),ot(f,u,_t(r,t,e,u,n,o))}),f}function vt(n){var t=Wu(n);return function(r){return gt(r,n,t)}}function gt(n,t,r){var e=r.length;if(null==n)return!e;for(n=Qu(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===T&&!(u in n)||!i(o))return false}return true}function dt(n,t,r){if(typeof n!="function")throw new ti("Expected a function"); +return bo(function(){n.apply(T,r)},t)}function yt(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,k(r))),e?(i=f,a=false):200<=t.length&&(i=O,a=false,t=new Nn(t));n:for(;++ut}function Rt(n,t){return null!=n&&oi.call(n,t)}function zt(n,t){return null!=n&&t in Qu(n)}function Wt(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=Ku(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,k(t))),s=Ci(p.length,s), +l[a]=!r&&(t||120<=u&&120<=p.length)?new Nn(a&&p):T}var p=n[0],_=-1,v=l[0];n:for(;++_r.length?t:kt(t,hr(r,0,-1)),r=null==t?t:t[Me(Ve(r))],null==r?T:n(r,t,e)}function Ut(n){return yu(n)&&"[object Arguments]"==Ot(n)}function Ct(n){ +return yu(n)&&"[object ArrayBuffer]"==Ot(n)}function Dt(n){return yu(n)&&"[object Date]"==Ot(n)}function Mt(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!yu(n)&&!yu(t))t=n!==n&&t!==t;else n:{var i=ff(n),o=ff(t),f=i?"[object Array]":vo(n),c=o?"[object Array]":vo(t),f="[object Arguments]"==f?"[object Object]":f,c="[object Arguments]"==c?"[object Object]":c,a="[object Object]"==f,o="[object Object]"==c;if((c=f==c)&&af(n)){if(!af(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Zn),t=i||_f(n)?se(n,t,r,e,Mt,u):he(n,t,f,r,e,Mt,u);else{ +if(!(1&r)&&(i=a&&oi.call(n,"__wrapped__"),f=o&&oi.call(t,"__wrapped__"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Zn),t=Mt(n,t,r,e,u);break n}if(c)t:if(u||(u=new Zn),i=1&r,f=_e(n),o=f.length,c=_e(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:oi.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++at?r:0,Se(t,r)?n[t]:T}function Xt(n,t,r){var e=-1;return t=c(t.length?t:[$u],k(ye())),n=Gt(n,function(n){return{ +a:c(t,function(t){return t(n)}),b:++e,c:n}}),w(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e=f?c:c*("desc"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function nr(n,t){return tr(n,t,function(t,r){return zu(n,r)})}function tr(n,t,r){for(var e=-1,u=t.length,i={};++et||9007199254740991t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Ku(u);++e=u){for(;e>>1,o=n[i];null!==o&&!wu(o)&&(r?o<=t:ot.length?n:kt(n,hr(t,0,-1)),null==n||delete n[Me(Ve(t))]}function jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++ie)return e?br(n[0]):[];for(var u=-1,i=Ku(e);++u=e?n:hr(n,t,r)}function Ir(n,t){if(t)return n.slice();var r=n.length,r=gi?gi(r):new n.constructor(r);return n.copy(r),r}function Rr(n){var t=new n.constructor(n.byteLength);return new vi(t).set(new vi(n)), +t}function zr(n,t){return new n.constructor(t?Rr(n.buffer):n.buffer,n.byteOffset,n.length)}function Wr(n,t){if(n!==t){var r=n!==T,e=null===n,u=n===n,i=wu(n),o=t!==T,f=null===t,c=t===t,a=wu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&nu?T:i,u=1),t=Qu(t);++eo&&f[0]!==a&&f[o-1]!==a?[]:L(f,a), +o-=c.length,or?r?or(t,n):t:(r=or(t,Oi(n/D(t))),Rn.test(t)?Or(M(r),0,n).join(""):r.slice(0,n))}function te(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=Ku(l+c),h=this&&this!==$n&&this instanceof i?f:t;++at||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Br(e,r,h[4]):r,i[4]=e?L(i[3],"__lodash_placeholder__"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Lr(e,r,h[6]):r,i[6]=e?L(i[5],"__lodash_placeholder__"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Ci(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0], +t=i[1],r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===T?c?0:n.length:Ui(i[9]-a,0),!f&&24&t&&(t&=-25),Ue((h?co:yo)(t&&1!=t?8==t||16==t?Kr(n,t,f):32!=t&&33!=t||u.length?Jr.apply(T,i):te(n,t,r,e):Pr(n,t,r),i),n,t)}function ce(n,t,r,e){return n===T||lu(n,ei[r])&&!oi.call(e,r)?t:n}function ae(n,t,r,e,u,i){return du(n)&&du(t)&&(i.set(t,n),Yt(n,t,T,ae,i),i.delete(t)),n}function le(n){return xu(n)?T:n}function se(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t; +var c=-1,a=true,l=2&r?new Nn:T;for(i.set(n,t),i.set(t,n);++cr&&(r=Ui(e+r,0)),_(n,ye(t,3),r)):-1}function Pe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==T&&(u=Eu(r),u=0>r?Ui(e+u,0):Ci(u,e-1)), +_(n,ye(t,3),u,true)}function Ze(n){return(null==n?0:n.length)?wt(n,1):[]}function qe(n){return n&&n.length?n[0]:T}function Ve(n){var t=null==n?0:n.length;return t?n[t-1]:T}function Ke(n,t){return n&&n.length&&t&&t.length?er(n,t):n}function Ge(n){return null==n?n:$i.call(n)}function He(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){if(hu(n))return t=Ui(n.length,t),true}),A(t,function(t){return c(n,b(t))})}function Je(t,r){if(!t||!t.length)return[];var e=He(t);return null==r?e:c(e,function(t){ +return n(r,T,t)})}function Ye(n){return n=An(n),n.__chain__=true,n}function Qe(n,t){return t(n)}function Xe(){return this}function nu(n,t){return(ff(n)?r:uo)(n,ye(t,3))}function tu(n,t){return(ff(n)?e:io)(n,ye(t,3))}function ru(n,t){return(ff(n)?c:Gt)(n,ye(t,3))}function eu(n,t,r){return t=r?T:t,t=n&&null==t?n.length:t,fe(n,128,T,T,T,T,t)}function uu(n,t){var r;if(typeof t!="function")throw new ti("Expected a function");return n=Eu(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=T), +r}}function iu(n,t,r){return t=r?T:t,n=fe(n,8,T,T,T,T,T,t),n.placeholder=iu.placeholder,n}function ou(n,t,r){return t=r?T:t,n=fe(n,16,T,T,T,T,T,t),n.placeholder=ou.placeholder,n}function fu(n,t,r){function e(t){var r=c,e=a;return c=a=T,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===T||r>=t||0>r||g&&n>=l}function i(){var n=Go();if(u(n))return o(n);var r,e=bo;r=n-_,n=t-(n-p),r=g?Ci(n,l-r):n,h=e(i,r)}function o(n){return h=T,d&&c?e(n):(c=a=T,s)}function f(){var n=Go(),r=u(n);if(c=arguments, +a=this,p=n,r){if(h===T)return _=n=p,h=bo(i,t),v?e(n):s;if(g)return lo(h),h=bo(i,t),e(p)}return h===T&&(h=bo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!="function")throw new ti("Expected a function");return t=Su(t)||0,du(r)&&(v=!!r.leading,l=(g="maxWait"in r)?Ui(Su(r.maxWait)||0,t):l,d="trailing"in r?!!r.trailing:d),f.cancel=function(){h!==T&&lo(h),_=0,c=p=a=h=T},f.flush=function(){return h===T?s:o(Go())},f}function cu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache; +return i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e)||i,e)}if(typeof n!="function"||null!=t&&typeof t!="function")throw new ti("Expected a function");return r.cache=new(cu.Cache||Fn),r}function au(n){if(typeof n!="function")throw new ti("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function lu(n,t){return n===t||n!==n&&t!==t; +}function su(n){return null!=n&&gu(n.length)&&!_u(n)}function hu(n){return yu(n)&&su(n)}function pu(n){if(!yu(n))return false;var t=Ot(n);return"[object Error]"==t||"[object DOMException]"==t||typeof n.message=="string"&&typeof n.name=="string"&&!xu(n)}function _u(n){return!!du(n)&&(n=Ot(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function vu(n){return typeof n=="number"&&n==Eu(n)}function gu(n){return typeof n=="number"&&-1=n; +}function du(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function yu(n){return null!=n&&typeof n=="object"}function bu(n){return typeof n=="number"||yu(n)&&"[object Number]"==Ot(n)}function xu(n){return!(!yu(n)||"[object Object]"!=Ot(n))&&(n=di(n),null===n||(n=oi.call(n,"constructor")&&n.constructor,typeof n=="function"&&n instanceof n&&ii.call(n)==li))}function ju(n){return typeof n=="string"||!ff(n)&&yu(n)&&"[object String]"==Ot(n)}function wu(n){return typeof n=="symbol"||yu(n)&&"[object Symbol]"==Ot(n); +}function mu(n){if(!n)return[];if(su(n))return ju(n)?M(n):Ur(n);if(wi&&n[wi]){n=n[wi]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=vo(n),("[object Map]"==t?W:"[object Set]"==t?U:Uu)(n)}function Au(n){return n?(n=Su(n),n===$||n===-$?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Eu(n){n=Au(n);var t=n%1;return n===n?t?n-t:n:0}function ku(n){return n?pt(Eu(n),0,4294967295):0}function Su(n){if(typeof n=="number")return n;if(wu(n))return F;if(du(n)&&(n=typeof n.valueOf=="function"?n.valueOf():n, +n=du(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(un,"");var t=gn.test(n);return t||yn.test(n)?Dn(n.slice(2),t?2:8):vn.test(n)?F:+n}function Ou(n){return Cr(n,Bu(n))}function Iu(n){return null==n?"":yr(n)}function Ru(n,t,r){return n=null==n?T:kt(n,t),n===T?r:n}function zu(n,t){return null!=n&&we(n,t,zt)}function Wu(n){return su(n)?qn(n):Vt(n)}function Bu(n){if(su(n))n=qn(n,true);else if(du(n)){var t,r=ze(n),e=[];for(t in n)("constructor"!=t||!r&&oi.call(n,t))&&e.push(t);n=e}else{if(t=[], +null!=n)for(r in Qu(n))t.push(r);n=t}return n}function Lu(n,t){if(null==n)return{};var r=c(ve(n),function(n){return[n]});return t=ye(t),tr(n,r,function(n,r){return t(n,r[0])})}function Uu(n){return null==n?[]:S(n,Wu(n))}function Cu(n){return $f(Iu(n).toLowerCase())}function Du(n){return(n=Iu(n))&&n.replace(xn,Xn).replace(Sn,"")}function Mu(n,t,r){return n=Iu(n),t=r?T:t,t===T?zn.test(n)?n.match(In)||[]:n.match(sn)||[]:n.match(t)||[]}function Tu(n){return function(){return n}}function $u(n){return n; +}function Fu(n){return qt(typeof n=="function"?n:_t(n,1))}function Nu(n,t,e){var u=Wu(t),i=Et(t,u);null!=e||du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Et(t,Wu(t)));var o=!(du(e)&&"chain"in e&&!e.chain),f=_u(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Ur(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function Pu(){} +function Zu(n){return Ie(n)?b(Me(n)):rr(n)}function qu(){return[]}function Vu(){return false}mn=null==mn?$n:rt.defaults($n.Object(),mn,rt.pick($n,Wn));var Ku=mn.Array,Gu=mn.Date,Hu=mn.Error,Ju=mn.Function,Yu=mn.Math,Qu=mn.Object,Xu=mn.RegExp,ni=mn.String,ti=mn.TypeError,ri=Ku.prototype,ei=Qu.prototype,ui=mn["__core-js_shared__"],ii=Ju.prototype.toString,oi=ei.hasOwnProperty,fi=0,ci=function(){var n=/[^.]+$/.exec(ui&&ui.keys&&ui.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),ai=ei.toString,li=ii.call(Qu),si=$n._,hi=Xu("^"+ii.call(oi).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pi=Pn?mn.Buffer:T,_i=mn.Symbol,vi=mn.Uint8Array,gi=pi?pi.g:T,di=B(Qu.getPrototypeOf,Qu),yi=Qu.create,bi=ei.propertyIsEnumerable,xi=ri.splice,ji=_i?_i.isConcatSpreadable:T,wi=_i?_i.iterator:T,mi=_i?_i.toStringTag:T,Ai=function(){ +try{var n=je(Qu,"defineProperty");return n({},"",{}),n}catch(n){}}(),Ei=mn.clearTimeout!==$n.clearTimeout&&mn.clearTimeout,ki=Gu&&Gu.now!==$n.Date.now&&Gu.now,Si=mn.setTimeout!==$n.setTimeout&&mn.setTimeout,Oi=Yu.ceil,Ii=Yu.floor,Ri=Qu.getOwnPropertySymbols,zi=pi?pi.isBuffer:T,Wi=mn.isFinite,Bi=ri.join,Li=B(Qu.keys,Qu),Ui=Yu.max,Ci=Yu.min,Di=Gu.now,Mi=mn.parseInt,Ti=Yu.random,$i=ri.reverse,Fi=je(mn,"DataView"),Ni=je(mn,"Map"),Pi=je(mn,"Promise"),Zi=je(mn,"Set"),qi=je(mn,"WeakMap"),Vi=je(Qu,"create"),Ki=qi&&new qi,Gi={},Hi=Te(Fi),Ji=Te(Ni),Yi=Te(Pi),Qi=Te(Zi),Xi=Te(qi),no=_i?_i.prototype:T,to=no?no.valueOf:T,ro=no?no.toString:T,eo=function(){ +function n(){}return function(t){return du(t)?yi?yi(t):(n.prototype=t,t=new n,n.prototype=T,t):{}}}();An.templateSettings={escape:J,evaluate:Y,interpolate:Q,variable:"",imports:{_:An}},An.prototype=En.prototype,An.prototype.constructor=An,On.prototype=eo(En.prototype),On.prototype.constructor=On,Un.prototype=eo(En.prototype),Un.prototype.constructor=Un,Mn.prototype.clear=function(){this.__data__=Vi?Vi(null):{},this.size=0},Mn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n], +this.size-=n?1:0,n},Mn.prototype.get=function(n){var t=this.__data__;return Vi?(n=t[n],"__lodash_hash_undefined__"===n?T:n):oi.call(t,n)?t[n]:T},Mn.prototype.has=function(n){var t=this.__data__;return Vi?t[n]!==T:oi.call(t,n)},Mn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Vi&&t===T?"__lodash_hash_undefined__":t,this},Tn.prototype.clear=function(){this.__data__=[],this.size=0},Tn.prototype.delete=function(n){var t=this.__data__;return n=ft(t,n),!(0>n)&&(n==t.length-1?t.pop():xi.call(t,n,1), +--this.size,true)},Tn.prototype.get=function(n){var t=this.__data__;return n=ft(t,n),0>n?T:t[n][1]},Tn.prototype.has=function(n){return-1e?(++this.size,r.push([n,t])):r[e][1]=t,this},Fn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(Ni||Tn),string:new Mn}},Fn.prototype.delete=function(n){return n=be(this,n).delete(n),this.size-=n?1:0,n},Fn.prototype.get=function(n){return be(this,n).get(n); +},Fn.prototype.has=function(n){return be(this,n).has(n)},Fn.prototype.set=function(n,t){var r=be(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Nn.prototype.add=Nn.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Nn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Zn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Zn.prototype.get=function(n){ +return this.__data__.get(n)},Zn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Tn){var e=r.__data__;if(!Ni||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Fn(e)}return r.set(n,t),this.size=r.size,this};var uo=Fr(mt),io=Fr(At,true),oo=Nr(),fo=Nr(true),co=Ki?function(n,t){return Ki.set(n,t),n}:$u,ao=Ai?function(n,t){return Ai(n,"toString",{configurable:true,enumerable:false,value:Tu(t),writable:true})}:$u,lo=Ei||function(n){ +return $n.clearTimeout(n)},so=Zi&&1/U(new Zi([,-0]))[1]==$?function(n){return new Zi(n)}:Pu,ho=Ki?function(n){return Ki.get(n)}:Pu,po=Ri?function(n){return null==n?[]:(n=Qu(n),i(Ri(n),function(t){return bi.call(n,t)}))}:qu,_o=Ri?function(n){for(var t=[];n;)a(t,po(n)),n=di(n);return t}:qu,vo=Ot;(Fi&&"[object DataView]"!=vo(new Fi(new ArrayBuffer(1)))||Ni&&"[object Map]"!=vo(new Ni)||Pi&&"[object Promise]"!=vo(Pi.resolve())||Zi&&"[object Set]"!=vo(new Zi)||qi&&"[object WeakMap]"!=vo(new qi))&&(vo=function(n){ +var t=Ot(n);if(n=(n="[object Object]"==t?n.constructor:T)?Te(n):"")switch(n){case Hi:return"[object DataView]";case Ji:return"[object Map]";case Yi:return"[object Promise]";case Qi:return"[object Set]";case Xi:return"[object WeakMap]"}return t});var go=ui?_u:Vu,yo=Ce(co),bo=Si||function(n,t){return $n.setTimeout(n,t)},xo=Ce(ao),jo=function(n){n=cu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(tn,function(n,r,e,u){ +t.push(e?u.replace(hn,"$1"):r||n)}),t}),wo=fr(function(n,t){return hu(n)?yt(n,wt(t,1,hu,true)):[]}),mo=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),ye(r,2)):[]}),Ao=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),T,r):[]}),Eo=fr(function(n){var t=c(n,Er);return t.length&&t[0]===n[0]?Wt(t):[]}),ko=fr(function(n){var t=Ve(n),r=c(n,Er);return t===Ve(r)?t=T:r.pop(),r.length&&r[0]===n[0]?Wt(r,ye(t,2)):[]}),So=fr(function(n){var t=Ve(n),r=c(n,Er);return(t=typeof t=="function"?t:T)&&r.pop(), +r.length&&r[0]===n[0]?Wt(r,T,t):[]}),Oo=fr(Ke),Io=pe(function(n,t){var r=null==n?0:n.length,e=ht(n,t);return ur(n,c(t,function(n){return Se(n,r)?+n:n}).sort(Wr)),e}),Ro=fr(function(n){return br(wt(n,1,hu,true))}),zo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),br(wt(n,1,hu,true),ye(t,2))}),Wo=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return br(wt(n,1,hu,true),T,t)}),Bo=fr(function(n,t){return hu(n)?yt(n,t):[]}),Lo=fr(function(n){return mr(i(n,hu))}),Uo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T), +mr(i(n,hu),ye(t,2))}),Co=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return mr(i(n,hu),T,t)}),Do=fr(He),Mo=fr(function(n){var t=n.length,t=1=t}),of=Ut(function(){return arguments}())?Ut:function(n){return yu(n)&&oi.call(n,"callee")&&!bi.call(n,"callee")},ff=Ku.isArray,cf=Vn?k(Vn):Ct,af=zi||Vu,lf=Kn?k(Kn):Dt,sf=Gn?k(Gn):Tt,hf=Hn?k(Hn):Nt,pf=Jn?k(Jn):Pt,_f=Yn?k(Yn):Zt,vf=ee(Kt),gf=ee(function(n,t){return n<=t}),df=$r(function(n,t){ +if(ze(t)||su(t))Cr(t,Wu(t),n);else for(var r in t)oi.call(t,r)&&ot(n,r,t[r])}),yf=$r(function(n,t){Cr(t,Bu(t),n)}),bf=$r(function(n,t,r,e){Cr(t,Bu(t),n,e)}),xf=$r(function(n,t,r,e){Cr(t,Wu(t),n,e)}),jf=pe(ht),wf=fr(function(n,t){n=Qu(n);var r=-1,e=t.length,u=2--n)return t.apply(this,arguments)}},An.ary=eu,An.assign=df,An.assignIn=yf,An.assignInWith=bf,An.assignWith=xf,An.at=jf,An.before=uu,An.bind=Ho,An.bindAll=Nf,An.bindKey=Jo,An.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return ff(n)?n:[n]},An.chain=Ye,An.chunk=function(n,t,r){if(t=(r?Oe(n,t,r):t===T)?1:Ui(Eu(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Ku(Oi(r/t));et?0:t,e)):[]},An.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0,0>t?0:t)):[]},An.dropRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true,true):[]; +},An.dropWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true):[]},An.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!="number"&&Oe(n,t,r)&&(r=0,e=u),u=n.length,r=Eu(r),0>r&&(r=-r>u?0:u+r),e=e===T||e>u?u:Eu(e),0>e&&(e+=u),e=r>e?0:ku(e);r>>0,r?(n=Iu(n))&&(typeof t=="string"||null!=t&&!hf(t))&&(t=yr(t),!t&&Rn.test(n))?Or(M(n),0,r):n.split(t,r):[]},An.spread=function(t,r){if(typeof t!="function")throw new ti("Expected a function");return r=null==r?0:Ui(Eu(r),0), +fr(function(e){var u=e[r];return e=Or(e,0,r),u&&a(e,u),n(t,this,e)})},An.tail=function(n){var t=null==n?0:n.length;return t?hr(n,1,t):[]},An.take=function(n,t,r){return n&&n.length?(t=r||t===T?1:Eu(t),hr(n,0,0>t?0:t)):[]},An.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0>t?0:t,e)):[]},An.takeRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),false,true):[]},An.takeWhile=function(n,t){return n&&n.length?jr(n,ye(t,3)):[]},An.tap=function(n,t){return t(n), +n},An.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ti("Expected a function");return du(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),fu(n,t,{leading:e,maxWait:t,trailing:u})},An.thru=Qe,An.toArray=mu,An.toPairs=zf,An.toPairsIn=Wf,An.toPath=function(n){return ff(n)?c(n,Me):wu(n)?[n]:Ur(jo(Iu(n)))},An.toPlainObject=Ou,An.transform=function(n,t,e){var u=ff(n),i=u||af(n)||_f(n);if(t=ye(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:du(n)&&_u(o)?eo(di(n)):{}; +}return(i?r:mt)(n,function(n,r,u){return t(e,n,r,u)}),e},An.unary=function(n){return eu(n,1)},An.union=Ro,An.unionBy=zo,An.unionWith=Wo,An.uniq=function(n){return n&&n.length?br(n):[]},An.uniqBy=function(n,t){return n&&n.length?br(n,ye(t,2)):[]},An.uniqWith=function(n,t){return t=typeof t=="function"?t:T,n&&n.length?br(n,T,t):[]},An.unset=function(n,t){return null==n||xr(n,t)},An.unzip=He,An.unzipWith=Je,An.update=function(n,t,r){return null==n?n:lr(n,t,kr(r)(kt(n,t)),void 0)},An.updateWith=function(n,t,r,e){ +return e=typeof e=="function"?e:T,null!=n&&(n=lr(n,t,kr(r)(kt(n,t)),e)),n},An.values=Uu,An.valuesIn=function(n){return null==n?[]:S(n,Bu(n))},An.without=Bo,An.words=Mu,An.wrap=function(n,t){return nf(kr(t),n)},An.xor=Lo,An.xorBy=Uo,An.xorWith=Co,An.zip=Do,An.zipObject=function(n,t){return Ar(n||[],t||[],ot)},An.zipObjectDeep=function(n,t){return Ar(n||[],t||[],lr)},An.zipWith=Mo,An.entries=zf,An.entriesIn=Wf,An.extend=yf,An.extendWith=bf,Nu(An,An),An.add=Qf,An.attempt=Ff,An.camelCase=Bf,An.capitalize=Cu, +An.ceil=Xf,An.clamp=function(n,t,r){return r===T&&(r=t,t=T),r!==T&&(r=Su(r),r=r===r?r:0),t!==T&&(t=Su(t),t=t===t?t:0),pt(Su(n),t,r)},An.clone=function(n){return _t(n,4)},An.cloneDeep=function(n){return _t(n,5)},An.cloneDeepWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,5,t)},An.cloneWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,4,t)},An.conformsTo=function(n,t){return null==t||gt(n,t,Wu(t))},An.deburr=Du,An.defaultTo=function(n,t){return null==n||n!==n?t:n},An.divide=nc,An.endsWith=function(n,t,r){ +n=Iu(n),t=yr(t);var e=n.length,e=r=r===T?e:pt(Eu(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},An.eq=lu,An.escape=function(n){return(n=Iu(n))&&H.test(n)?n.replace(K,nt):n},An.escapeRegExp=function(n){return(n=Iu(n))&&en.test(n)?n.replace(rn,"\\$&"):n},An.every=function(n,t,r){var e=ff(n)?u:bt;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.find=Fo,An.findIndex=Ne,An.findKey=function(n,t){return p(n,ye(t,3),mt)},An.findLast=No,An.findLastIndex=Pe,An.findLastKey=function(n,t){return p(n,ye(t,3),At); +},An.floor=tc,An.forEach=nu,An.forEachRight=tu,An.forIn=function(n,t){return null==n?n:oo(n,ye(t,3),Bu)},An.forInRight=function(n,t){return null==n?n:fo(n,ye(t,3),Bu)},An.forOwn=function(n,t){return n&&mt(n,ye(t,3))},An.forOwnRight=function(n,t){return n&&At(n,ye(t,3))},An.get=Ru,An.gt=ef,An.gte=uf,An.has=function(n,t){return null!=n&&we(n,t,Rt)},An.hasIn=zu,An.head=qe,An.identity=$u,An.includes=function(n,t,r,e){return n=su(n)?n:Uu(n),r=r&&!e?Eu(r):0,e=n.length,0>r&&(r=Ui(e+r,0)),ju(n)?r<=e&&-1r&&(r=Ui(e+r,0)),v(n,t,r)):-1},An.inRange=function(n,t,r){return t=Au(t),r===T?(r=t,t=0):r=Au(r),n=Su(n),n>=Ci(t,r)&&n=n},An.isSet=pf,An.isString=ju,An.isSymbol=wu,An.isTypedArray=_f,An.isUndefined=function(n){return n===T},An.isWeakMap=function(n){return yu(n)&&"[object WeakMap]"==vo(n)},An.isWeakSet=function(n){return yu(n)&&"[object WeakSet]"==Ot(n)},An.join=function(n,t){return null==n?"":Bi.call(n,t)},An.kebabCase=Lf,An.last=Ve,An.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==T&&(u=Eu(r),u=0>u?Ui(e+u,0):Ci(u,e-1)), +t===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=_(n,d,u,true);return n},An.lowerCase=Uf,An.lowerFirst=Cf,An.lt=vf,An.lte=gf,An.max=function(n){return n&&n.length?xt(n,$u,It):T},An.maxBy=function(n,t){return n&&n.length?xt(n,ye(t,2),It):T},An.mean=function(n){return y(n,$u)},An.meanBy=function(n,t){return y(n,ye(t,2))},An.min=function(n){return n&&n.length?xt(n,$u,Kt):T},An.minBy=function(n,t){return n&&n.length?xt(n,ye(t,2),Kt):T},An.stubArray=qu,An.stubFalse=Vu,An.stubObject=function(){return{}},An.stubString=function(){ +return""},An.stubTrue=function(){return true},An.multiply=rc,An.nth=function(n,t){return n&&n.length?Qt(n,Eu(t)):T},An.noConflict=function(){return $n._===this&&($n._=si),this},An.noop=Pu,An.now=Go,An.pad=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return!t||e>=t?n:(t=(t-e)/2,ne(Ii(t),r)+n+ne(Oi(t),r))},An.padEnd=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&et){var e=n;n=t,t=e}return r||n%1||t%1?(r=Ti(),Ci(n+r*(t-n+Cn("1e-"+((r+"").length-1))),t)):ir(n,t)},An.reduce=function(n,t,r){var e=ff(n)?l:j,u=3>arguments.length;return e(n,ye(t,4),r,u,uo)},An.reduceRight=function(n,t,r){var e=ff(n)?s:j,u=3>arguments.length; +return e(n,ye(t,4),r,u,io)},An.repeat=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),or(Iu(n),t)},An.replace=function(){var n=arguments,t=Iu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},An.result=function(n,t,r){t=Sr(t,n);var e=-1,u=t.length;for(u||(u=1,n=T);++en||9007199254740991=i)return n;if(i=r-D(e),1>i)return e;if(r=o?Or(o,0,i).join(""):n.slice(0,i),u===T)return r+e;if(o&&(i+=r.length-i),hf(u)){if(n.slice(i).search(u)){ +var f=r;for(u.global||(u=Xu(u.source,Iu(_n.exec(u))+"g")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===T?i:c)}}else n.indexOf(yr(u),i)!=i&&(u=r.lastIndexOf(u),-1e.__dir__?"Right":"")}),e},Un.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){ +var r=t+1,e=1==r||3==r;Un.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ye(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){var r="take"+(t?"Right":"");Un.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Un.prototype[n]=function(){return this.__filtered__?new Un(this):this[r](1)}}),Un.prototype.compact=function(){return this.filter($u)},Un.prototype.find=function(n){ +return this.filter(n).head()},Un.prototype.findLast=function(n){return this.reverse().find(n)},Un.prototype.invokeMap=fr(function(n,t){return typeof n=="function"?new Un(this):this.map(function(r){return Lt(r,n,t)})}),Un.prototype.reject=function(n){return this.filter(au(ye(n)))},Un.prototype.slice=function(n,t){n=Eu(n);var r=this;return r.__filtered__&&(0t)?new Un(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==T&&(t=Eu(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Un.prototype.takeRightWhile=function(n){ +return this.reverse().takeWhile(n).reverse()},Un.prototype.toArray=function(){return this.take(4294967295)},mt(Un.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=An[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(An.prototype[t]=function(){function t(n){return n=u.apply(An,a([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Un,l=f[0],s=c||ff(o);s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,l=i&&!h,c=c&&!p; +return!i&&s?(o=c?o:new Un(this),o=n.apply(o,f),o.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(o,h)):l&&c?n.apply(this,f):(o=this.thru(t),l?e?o.value()[0]:o.value():o)})}),r("pop push shift sort splice unshift".split(" "),function(n){var t=ri[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);An.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(ff(u)?u:[],n)}return this[r](function(r){return t.apply(ff(r)?r:[],n)}); +}}),mt(Un.prototype,function(n,t){var r=An[t];if(r){var e=r.name+"";oi.call(Gi,e)||(Gi[e]=[]),Gi[e].push({name:t,func:r})}}),Gi[Jr(T,2).name]=[{name:"wrapper",func:T}],Un.prototype.clone=function(){var n=new Un(this.__wrapped__);return n.__actions__=Ur(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ur(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ur(this.__views__),n},Un.prototype.reverse=function(){if(this.__filtered__){var n=new Un(this); +n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Un.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=ff(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c=this.__values__.length;return{done:n,value:n?T:this.__values__[this.__index__++]}},An.prototype.plant=function(n){ +for(var t,r=this;r instanceof En;){var e=Fe(r);e.__index__=0,e.__values__=T,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},An.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Un?(this.__actions__.length&&(n=new Un(this)),n=n.reverse(),n.__actions__.push({func:Qe,args:[Ge],thisArg:T}),new On(n,this.__chain__)):this.thru(Ge)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return wr(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head, +wi&&(An.prototype[wi]=Xe),An}();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($n._=rt, define(function(){return rt})):Nn?((Nn.exports=rt)._=rt,Fn._=rt):$n._=rt}).call(this); \ No newline at end of file diff --git a/static/js/lib/luxon.min.js b/static/js/lib/luxon.min.js new file mode 100644 index 0000000..2a8d834 --- /dev/null +++ b/static/js/lib/luxon.min.js @@ -0,0 +1 @@ +var luxon=function(e){"use strict";function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[t++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(t=e[Symbol.iterator]()).next.bind(t)}var l=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t}(u(Error)),f=function(e){function t(t){return e.call(this,"Invalid DateTime: "+t.toMessage())||this}return r(t,e),t}(l),d=function(e){function t(t){return e.call(this,"Invalid Interval: "+t.toMessage())||this}return r(t,e),t}(l),h=function(e){function t(t){return e.call(this,"Invalid Duration: "+t.toMessage())||this}return r(t,e),t}(l),m=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t}(l),y=function(e){function t(t){return e.call(this,"Invalid unit "+t)||this}return r(t,e),t}(l),v=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t}(l),g=function(e){function t(){return e.call(this,"Zone is an abstract class")||this}return r(t,e),t}(l),p="numeric",w="short",k="long",b={year:p,month:p,day:p},S={year:p,month:w,day:p},O={year:p,month:w,day:p,weekday:w},T={year:p,month:k,day:p},M={year:p,month:k,day:p,weekday:k},N={hour:p,minute:p},E={hour:p,minute:p,second:p},D={hour:p,minute:p,second:p,timeZoneName:w},I={hour:p,minute:p,second:p,timeZoneName:k},V={hour:p,minute:p,hour12:!1},L={hour:p,minute:p,second:p,hour12:!1},x={hour:p,minute:p,second:p,hour12:!1,timeZoneName:w},F={hour:p,minute:p,second:p,hour12:!1,timeZoneName:k},C={year:p,month:p,day:p,hour:p,minute:p},Z={year:p,month:p,day:p,hour:p,minute:p,second:p},j={year:p,month:w,day:p,hour:p,minute:p},A={year:p,month:w,day:p,hour:p,minute:p,second:p},z={year:p,month:w,day:p,weekday:w,hour:p,minute:p},_={year:p,month:k,day:p,hour:p,minute:p,timeZoneName:w},q={year:p,month:k,day:p,hour:p,minute:p,second:p,timeZoneName:w},H={year:p,month:k,day:p,weekday:k,hour:p,minute:p,timeZoneName:k},U={year:p,month:k,day:p,weekday:k,hour:p,minute:p,second:p,timeZoneName:k};function R(e){return void 0===e}function P(e){return"number"==typeof e}function W(e){return"number"==typeof e&&e%1==0}function J(){try{return"undefined"!=typeof Intl&&Intl.DateTimeFormat}catch(e){return!1}}function Y(){return!R(Intl.DateTimeFormat.prototype.formatToParts)}function G(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function $(e,t,n){if(0!==e.length)return e.reduce(function(e,r){var i=[t(r),r];return e&&n(e[0],i[0])===e[0]?e:i},null)[1]}function B(e,t){return t.reduce(function(t,n){return t[n]=e[n],t},{})}function Q(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function K(e,t,n){return W(e)&&e>=t&&e<=n}function X(e,t){void 0===t&&(t=2);var n=e<0?"-":"",r=n?-1*e:e;return""+n+(r.toString().length=0&&(t=new Date(t)).setUTCFullYear(t.getUTCFullYear()-1900),+t}function ue(e){var t=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7,n=e-1,r=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7;return 4===t||3===r?53:52}function se(e){return e>99?e:e>60?1900+e:2e3+e}function ce(e,t,n,r){void 0===r&&(r=null);var i=new Date(e),o={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(o.timeZone=r);var a=Object.assign({timeZoneName:t},o),u=J();if(u&&Y()){var s=new Intl.DateTimeFormat(n,a).formatToParts(i).find(function(e){return"timezonename"===e.type.toLowerCase()});return s?s.value:null}if(u){var c=new Intl.DateTimeFormat(n,o).format(i);return new Intl.DateTimeFormat(n,a).format(i).substring(c.length).replace(/^[, \u200e]+/,"")}return null}function le(e,t){var n=parseInt(e,10);Number.isNaN(n)&&(n=0);var r=parseInt(t,10)||0;return 60*n+(n<0||Object.is(n,-0)?-r:r)}function fe(e){var t=Number(e);if("boolean"==typeof e||""===e||Number.isNaN(t))throw new v("Invalid unit value "+e);return t}function de(e,t,n){var r={};for(var i in e)if(Q(e,i)){if(n.indexOf(i)>=0)continue;var o=e[i];if(void 0===o||null===o)continue;r[t(i)]=fe(o)}return r}function he(e,t){var n=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),i=e>=0?"+":"-";switch(t){case"short":return""+i+X(n,2)+":"+X(r,2);case"narrow":return""+i+n+(r>0?":"+r:"");case"techie":return""+i+X(n,2)+X(r,2);default:throw new RangeError("Value format "+t+" is out of range for property format")}}function me(e){return B(e,["hour","minute","second","millisecond"])}var ye=/[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/;function ve(e){return JSON.stringify(e,Object.keys(e).sort())}var ge=["January","February","March","April","May","June","July","August","September","October","November","December"],pe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],we=["J","F","M","A","M","J","J","A","S","O","N","D"];function ke(e){switch(e){case"narrow":return we;case"short":return pe;case"long":return ge;case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var be=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],Se=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],Oe=["M","T","W","T","F","S","S"];function Te(e){switch(e){case"narrow":return Oe;case"short":return Se;case"long":return be;case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var Me=["AM","PM"],Ne=["Before Christ","Anno Domini"],Ee=["BC","AD"],De=["B","A"];function Ie(e){switch(e){case"narrow":return De;case"short":return Ee;case"long":return Ne;default:return null}}function Ve(e,t){for(var n,r="",i=c(e);!(n=i()).done;){var o=n.value;o.literal?r+=o.val:r+=t(o.val)}return r}var Le={D:b,DD:S,DDD:T,DDDD:M,t:N,tt:E,ttt:D,tttt:I,T:V,TT:L,TTT:x,TTTT:F,f:C,ff:j,fff:_,ffff:H,F:Z,FF:A,FFF:q,FFFF:U},xe=function(){function e(e,t){this.opts=t,this.loc=e,this.systemLoc=null}e.create=function(t,n){return void 0===n&&(n={}),new e(t,n)},e.parseFormat=function(e){for(var t=null,n="",r=!1,i=[],o=0;o0&&i.push({literal:r,val:n}),t=null,n="",r=!r):r?n+=a:a===t?n+=a:(n.length>0&&i.push({literal:!1,val:n}),n=a,t=a)}return n.length>0&&i.push({literal:r,val:n}),i},e.macroTokenToFormatOpts=function(e){return Le[e]};var t=e.prototype;return t.formatWithSystemDefault=function(e,t){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,Object.assign({},this.opts,t)).format()},t.formatDateTime=function(e,t){return void 0===t&&(t={}),this.loc.dtFormatter(e,Object.assign({},this.opts,t)).format()},t.formatDateTimeParts=function(e,t){return void 0===t&&(t={}),this.loc.dtFormatter(e,Object.assign({},this.opts,t)).formatToParts()},t.resolvedOptions=function(e,t){return void 0===t&&(t={}),this.loc.dtFormatter(e,Object.assign({},this.opts,t)).resolvedOptions()},t.num=function(e,t){if(void 0===t&&(t=0),this.opts.forceSimple)return X(e,t);var n=Object.assign({},this.opts);return t>0&&(n.padTo=t),this.loc.numberFormatter(n).format(e)},t.formatDateTimeFromString=function(t,n){var r=this,i="en"===this.loc.listingMode(),o=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar&&Y(),a=function(e,n){return r.loc.extract(t,e,n)},u=function(e){return t.isOffsetFixed&&0===t.offset&&e.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,e.format):""},s=function(){return i?function(e){return Me[e.hour<12?0:1]}(t):a({hour:"numeric",hour12:!0},"dayperiod")},c=function(e,n){return i?function(e,t){return ke(t)[e.month-1]}(t,e):a(n?{month:e}:{month:e,day:"numeric"},"month")},l=function(e,n){return i?function(e,t){return Te(t)[e.weekday-1]}(t,e):a(n?{weekday:e}:{weekday:e,month:"long",day:"numeric"},"weekday")},f=function(e){return i?function(e,t){return Ie(t)[e.year<0?0:1]}(t,e):a({era:e},"era")};return Ve(e.parseFormat(n),function(n){switch(n){case"S":return r.num(t.millisecond);case"u":case"SSS":return r.num(t.millisecond,3);case"s":return r.num(t.second);case"ss":return r.num(t.second,2);case"m":return r.num(t.minute);case"mm":return r.num(t.minute,2);case"h":return r.num(t.hour%12==0?12:t.hour%12);case"hh":return r.num(t.hour%12==0?12:t.hour%12,2);case"H":return r.num(t.hour);case"HH":return r.num(t.hour,2);case"Z":return u({format:"narrow",allowZ:r.opts.allowZ});case"ZZ":return u({format:"short",allowZ:r.opts.allowZ});case"ZZZ":return u({format:"techie",allowZ:r.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:r.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:r.loc.locale});case"z":return t.zoneName;case"a":return s();case"d":return o?a({day:"numeric"},"day"):r.num(t.day);case"dd":return o?a({day:"2-digit"},"day"):r.num(t.day,2);case"c":return r.num(t.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return r.num(t.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return o?a({month:"numeric",day:"numeric"},"month"):r.num(t.month);case"LL":return o?a({month:"2-digit",day:"numeric"},"month"):r.num(t.month,2);case"LLL":return c("short",!0);case"LLLL":return c("long",!0);case"LLLLL":return c("narrow",!0);case"M":return o?a({month:"numeric"},"month"):r.num(t.month);case"MM":return o?a({month:"2-digit"},"month"):r.num(t.month,2);case"MMM":return c("short",!1);case"MMMM":return c("long",!1);case"MMMMM":return c("narrow",!1);case"y":return o?a({year:"numeric"},"year"):r.num(t.year);case"yy":return o?a({year:"2-digit"},"year"):r.num(t.year.toString().slice(-2),2);case"yyyy":return o?a({year:"numeric"},"year"):r.num(t.year,4);case"yyyyyy":return o?a({year:"numeric"},"year"):r.num(t.year,6);case"G":return f("short");case"GG":return f("long");case"GGGGG":return f("narrow");case"kk":return r.num(t.weekYear.toString().slice(-2),2);case"kkkk":return r.num(t.weekYear,4);case"W":return r.num(t.weekNumber);case"WW":return r.num(t.weekNumber,2);case"o":return r.num(t.ordinal);case"ooo":return r.num(t.ordinal,3);case"q":return r.num(t.quarter);case"qq":return r.num(t.quarter,2);case"X":return r.num(Math.floor(t.ts/1e3));case"x":return r.num(t.ts);default:return function(n){var i=e.macroTokenToFormatOpts(n);return i?r.formatWithSystemDefault(t,i):n}(n)}})},t.formatDurationFromString=function(t,n){var r,i=this,o=function(e){switch(e[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"M":return"month";case"y":return"year";default:return null}},a=e.parseFormat(n),u=a.reduce(function(e,t){var n=t.literal,r=t.val;return n?e:e.concat(r)},[]),s=t.shiftTo.apply(t,u.map(o).filter(function(e){return e}));return Ve(a,(r=s,function(e){var t=o(e);return t?i.num(r.get(t),e.length):e}))},e}(),Fe=function(){function e(e,t){this.reason=e,this.explanation=t}return e.prototype.toMessage=function(){return this.explanation?this.reason+": "+this.explanation:this.reason},e}(),Ce=function(){function e(){}var t=e.prototype;return t.offsetName=function(e,t){throw new g},t.formatOffset=function(e,t){throw new g},t.offset=function(e){throw new g},t.equals=function(e){throw new g},n(e,[{key:"type",get:function(){throw new g}},{key:"name",get:function(){throw new g}},{key:"universal",get:function(){throw new g}},{key:"isValid",get:function(){throw new g}}]),e}(),Ze=null,je=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var i=t.prototype;return i.offsetName=function(e,t){return ce(e,t.format,t.locale)},i.formatOffset=function(e,t){return he(this.offset(e),t)},i.offset=function(e){return-new Date(e).getTimezoneOffset()},i.equals=function(e){return"local"===e.type},n(t,[{key:"type",get:function(){return"local"}},{key:"name",get:function(){return J()?(new Intl.DateTimeFormat).resolvedOptions().timeZone:"local"}},{key:"universal",get:function(){return!1}},{key:"isValid",get:function(){return!0}}],[{key:"instance",get:function(){return null===Ze&&(Ze=new t),Ze}}]),t}(Ce),Ae=RegExp("^"+ye.source+"$"),ze={};var _e={year:0,month:1,day:2,hour:3,minute:4,second:5};var qe={},He=function(e){function t(n){var r;return(r=e.call(this)||this).zoneName=n,r.valid=t.isValidZone(n),r}r(t,e),t.create=function(e){return qe[e]||(qe[e]=new t(e)),qe[e]},t.resetCache=function(){qe={},ze={}},t.isValidSpecifier=function(e){return!(!e||!e.match(Ae))},t.isValidZone=function(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}},t.parseGMTOffset=function(e){if(e){var t=e.match(/^Etc\/GMT([+-]\d{1,2})$/i);if(t)return-60*parseInt(t[1])}return null};var i=t.prototype;return i.offsetName=function(e,t){return ce(e,t.format,t.locale,this.name)},i.formatOffset=function(e,t){return he(this.offset(e),t)},i.offset=function(e){var t,n=new Date(e),r=(t=this.name,ze[t]||(ze[t]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),ze[t]),i=r.formatToParts?function(e,t){for(var n=e.formatToParts(t),r=[],i=0;i=0?d:1e3+d))/6e4},i.equals=function(e){return"iana"===e.type&&e.name===this.name},n(t,[{key:"type",get:function(){return"iana"}},{key:"name",get:function(){return this.zoneName}},{key:"universal",get:function(){return!1}},{key:"isValid",get:function(){return this.valid}}]),t}(Ce),Ue=null,Re=function(e){function t(t){var n;return(n=e.call(this)||this).fixed=t,n}r(t,e),t.instance=function(e){return 0===e?t.utcInstance:new t(e)},t.parseSpecifier=function(e){if(e){var n=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(n)return new t(le(n[1],n[2]))}return null},n(t,null,[{key:"utcInstance",get:function(){return null===Ue&&(Ue=new t(0)),Ue}}]);var i=t.prototype;return i.offsetName=function(){return this.name},i.formatOffset=function(e,t){return he(this.fixed,t)},i.offset=function(){return this.fixed},i.equals=function(e){return"fixed"===e.type&&e.fixed===this.fixed},n(t,[{key:"type",get:function(){return"fixed"}},{key:"name",get:function(){return 0===this.fixed?"UTC":"UTC"+he(this.fixed,"narrow")}},{key:"universal",get:function(){return!0}},{key:"isValid",get:function(){return!0}}]),t}(Ce),Pe=function(e){function t(t){var n;return(n=e.call(this)||this).zoneName=t,n}r(t,e);var i=t.prototype;return i.offsetName=function(){return null},i.formatOffset=function(){return""},i.offset=function(){return NaN},i.equals=function(){return!1},n(t,[{key:"type",get:function(){return"invalid"}},{key:"name",get:function(){return this.zoneName}},{key:"universal",get:function(){return!1}},{key:"isValid",get:function(){return!1}}]),t}(Ce);function We(e,t){var n;if(R(e)||null===e)return t;if(e instanceof Ce)return e;if("string"==typeof e){var r=e.toLowerCase();return"local"===r?t:"utc"===r||"gmt"===r?Re.utcInstance:null!=(n=He.parseGMTOffset(e))?Re.instance(n):He.isValidSpecifier(r)?He.create(e):Re.parseSpecifier(r)||new Pe(e)}return P(e)?Re.instance(e):"object"==typeof e&&e.offset&&"number"==typeof e.offset?e:new Pe(e)}var Je=function(){return Date.now()},Ye=null,Ge=null,$e=null,Be=null,Qe=!1,Ke=function(){function e(){}return e.resetCaches=function(){ct.resetCache(),He.resetCache()},n(e,null,[{key:"now",get:function(){return Je},set:function(e){Je=e}},{key:"defaultZoneName",get:function(){return e.defaultZone.name},set:function(e){Ye=e?We(e):null}},{key:"defaultZone",get:function(){return Ye||je.instance}},{key:"defaultLocale",get:function(){return Ge},set:function(e){Ge=e}},{key:"defaultNumberingSystem",get:function(){return $e},set:function(e){$e=e}},{key:"defaultOutputCalendar",get:function(){return Be},set:function(e){Be=e}},{key:"throwOnInvalid",get:function(){return Qe},set:function(e){Qe=e}}]),e}(),Xe={};function et(e,t){void 0===t&&(t={});var n=JSON.stringify([e,t]),r=Xe[n];return r||(r=new Intl.DateTimeFormat(e,t),Xe[n]=r),r}var tt={};var nt={};function rt(e,t){void 0===t&&(t={});var n=t,r=(n.base,function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(n,["base"])),i=JSON.stringify([e,r]),o=nt[i];return o||(o=new Intl.RelativeTimeFormat(e,t),nt[i]=o),o}var it=null;function ot(e,t,n,r,i){var o=e.listingMode(n);return"error"===o?null:"en"===o?r(t):i(t)}var at=function(){function e(e,t,n){if(this.padTo=n.padTo||0,this.floor=n.floor||!1,!t&&J()){var r={useGrouping:!1};n.padTo>0&&(r.minimumIntegerDigits=n.padTo),this.inf=function(e,t){void 0===t&&(t={});var n=JSON.stringify([e,t]),r=tt[n];return r||(r=new Intl.NumberFormat(e,t),tt[n]=r),r}(e,r)}}return e.prototype.format=function(e){if(this.inf){var t=this.floor?Math.floor(e):e;return this.inf.format(t)}return X(this.floor?Math.floor(e):ne(e,3),this.padTo)},e}(),ut=function(){function e(e,t,n){var r;if(this.opts=n,this.hasIntl=J(),e.zone.universal&&this.hasIntl){var i=e.offset/60*-1;i>=-14&&i<=12&&i%1==0?(r=i>=0?"Etc/GMT+"+i:"Etc/GMT"+i,this.dt=e):(r="UTC",n.timeZoneName?this.dt=e:this.dt=0===e.offset?e:sr.fromMillis(e.ts+60*e.offset*1e3))}else"local"===e.zone.type?this.dt=e:(this.dt=e,r=e.zone.name);if(this.hasIntl){var o=Object.assign({},this.opts);r&&(o.timeZone=r),this.dtf=et(t,o)}}var t=e.prototype;return t.format=function(){if(this.hasIntl)return this.dtf.format(this.dt.toJSDate());var e=function(e){switch(ve(B(e,["weekday","era","year","month","day","hour","minute","second","timeZoneName","hour12"]))){case ve(b):return"M/d/yyyy";case ve(S):return"LLL d, yyyy";case ve(O):return"EEE, LLL d, yyyy";case ve(T):return"LLLL d, yyyy";case ve(M):return"EEEE, LLLL d, yyyy";case ve(N):return"h:mm a";case ve(E):return"h:mm:ss a";case ve(D):case ve(I):return"h:mm a";case ve(V):return"HH:mm";case ve(L):return"HH:mm:ss";case ve(x):case ve(F):return"HH:mm";case ve(C):return"M/d/yyyy, h:mm a";case ve(j):return"LLL d, yyyy, h:mm a";case ve(_):return"LLLL d, yyyy, h:mm a";case ve(H):return"EEEE, LLLL d, yyyy, h:mm a";case ve(Z):return"M/d/yyyy, h:mm:ss a";case ve(A):return"LLL d, yyyy, h:mm:ss a";case ve(z):return"EEE, d LLL yyyy, h:mm a";case ve(q):return"LLLL d, yyyy, h:mm:ss a";case ve(U):return"EEEE, LLLL d, yyyy, h:mm:ss a";default:return"EEEE, LLLL d, yyyy, h:mm a"}}(this.opts),t=ct.create("en-US");return xe.create(t).formatDateTimeFromString(this.dt,e)},t.formatToParts=function(){return this.hasIntl&&Y()?this.dtf.formatToParts(this.dt.toJSDate()):[]},t.resolvedOptions=function(){return this.hasIntl?this.dtf.resolvedOptions():{locale:"en-US",numberingSystem:"latn",outputCalendar:"gregory"}},e}(),st=function(){function e(e,t,n){this.opts=Object.assign({style:"long"},n),!t&&G()&&(this.rtf=rt(e,n))}var t=e.prototype;return t.format=function(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,n,r){void 0===n&&(n="always"),void 0===r&&(r=!1);var i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},o=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===n&&o){var a="days"===e;switch(t){case 1:return a?"tomorrow":"next "+i[e][0];case-1:return a?"yesterday":"last "+i[e][0];case 0:return a?"today":"this "+i[e][0]}}var u=Object.is(t,-0)||t<0,s=Math.abs(t),c=1===s,l=i[e],f=r?c?l[1]:l[2]||l[1]:c?i[e][0]:e;return u?s+" "+f+" ago":"in "+s+" "+f}(t,e,this.opts.numeric,"long"!==this.opts.style)},t.formatToParts=function(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]},e}(),ct=function(){function e(e,t,n,r){var i=function(e){var t=e.indexOf("-u-");if(-1===t)return[e];var n,r=e.substring(0,t);try{n=et(e).resolvedOptions()}catch(e){n=et(r).resolvedOptions()}var i=n;return[r,i.numberingSystem,i.calendar]}(e),o=i[0],a=i[1],u=i[2];this.locale=o,this.numberingSystem=t||a||null,this.outputCalendar=n||u||null,this.intl=function(e,t,n){return J()?n||t?(e+="-u",n&&(e+="-ca-"+n),t&&(e+="-nu-"+t),e):e:[]}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}e.fromOpts=function(t){return e.create(t.locale,t.numberingSystem,t.outputCalendar,t.defaultToEN)},e.create=function(t,n,r,i){void 0===i&&(i=!1);var o=t||Ke.defaultLocale;return new e(o||(i?"en-US":function(){if(it)return it;if(J()){var e=(new Intl.DateTimeFormat).resolvedOptions().locale;return it=e&&"und"!==e?e:"en-US"}return it="en-US"}()),n||Ke.defaultNumberingSystem,r||Ke.defaultOutputCalendar,o)},e.resetCache=function(){it=null,Xe={},tt={},nt={}},e.fromObject=function(t){var n=void 0===t?{}:t,r=n.locale,i=n.numberingSystem,o=n.outputCalendar;return e.create(r,i,o)};var t=e.prototype;return t.listingMode=function(e){void 0===e&&(e=!0);var t=J()&&Y(),n=this.isEnglish(),r=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return t||n&&r||e?!t||n&&r?"en":"intl":"error"},t.clone=function(t){return t&&0!==Object.getOwnPropertyNames(t).length?e.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,t.defaultToEN||!1):this},t.redefaultToEN=function(e){return void 0===e&&(e={}),this.clone(Object.assign({},e,{defaultToEN:!0}))},t.redefaultToSystem=function(e){return void 0===e&&(e={}),this.clone(Object.assign({},e,{defaultToEN:!1}))},t.months=function(e,t,n){var r=this;return void 0===t&&(t=!1),void 0===n&&(n=!0),ot(this,e,n,ke,function(){var n=t?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";return r.monthsCache[i][e]||(r.monthsCache[i][e]=function(e){for(var t=[],n=1;n<=12;n++){var r=sr.utc(2016,n,1);t.push(e(r))}return t}(function(e){return r.extract(e,n,"month")})),r.monthsCache[i][e]})},t.weekdays=function(e,t,n){var r=this;return void 0===t&&(t=!1),void 0===n&&(n=!0),ot(this,e,n,Te,function(){var n=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=t?"format":"standalone";return r.weekdaysCache[i][e]||(r.weekdaysCache[i][e]=function(e){for(var t=[],n=1;n<=7;n++){var r=sr.utc(2016,11,13+n);t.push(e(r))}return t}(function(e){return r.extract(e,n,"weekday")})),r.weekdaysCache[i][e]})},t.meridiems=function(e){var t=this;return void 0===e&&(e=!0),ot(this,void 0,e,function(){return Me},function(){if(!t.meridiemCache){var e={hour:"numeric",hour12:!0};t.meridiemCache=[sr.utc(2016,11,13,9),sr.utc(2016,11,13,19)].map(function(n){return t.extract(n,e,"dayperiod")})}return t.meridiemCache})},t.eras=function(e,t){var n=this;return void 0===t&&(t=!0),ot(this,e,t,Ie,function(){var t={era:e};return n.eraCache[e]||(n.eraCache[e]=[sr.utc(-40,1,1),sr.utc(2017,1,1)].map(function(e){return n.extract(e,t,"era")})),n.eraCache[e]})},t.extract=function(e,t,n){var r=this.dtFormatter(e,t).formatToParts().find(function(e){return e.type.toLowerCase()===n});return r?r.value:null},t.numberFormatter=function(e){return void 0===e&&(e={}),new at(this.intl,e.forceSimple||this.fastNumbers,e)},t.dtFormatter=function(e,t){return void 0===t&&(t={}),new ut(e,this.intl,t)},t.relFormatter=function(e){return void 0===e&&(e={}),new st(this.intl,this.isEnglish(),e)},t.isEnglish=function(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||J()&&new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")},t.equals=function(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar},n(e,[{key:"fastNumbers",get:function(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||J()&&"latn"===new Intl.DateTimeFormat(e.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}}]),e}();function lt(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),r=1;r3?be.indexOf(e)+1:Se.indexOf(e)+1),u}var xt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Ft(e){var t,n=e[1],r=e[2],i=e[3],o=e[4],a=e[5],u=e[6],s=e[7],c=e[8],l=e[9],f=e[10],d=e[11],h=Lt(n,o,i,r,a,u,s);return t=c?Vt[c]:l?0:le(f,d),[h,new Re(t)]}var Ct=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Zt=/^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,jt=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function At(e){var t=e[1],n=e[2],r=e[3];return[Lt(t,e[4],r,n,e[5],e[6],e[7]),Re.utcInstance]}function zt(e){var t=e[1],n=e[2],r=e[3],i=e[4],o=e[5],a=e[6];return[Lt(t,e[7],n,r,i,o,a),Re.utcInstance]}var _t=lt(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,gt),qt=lt(/(\d{4})-?W(\d\d)(?:-?(\d))?/,gt),Ht=lt(/(\d{4})-?(\d{3})/,gt),Ut=lt(vt),Rt=ft(Ot,Tt,Mt),Pt=ft(pt,Tt,Mt),Wt=ft(wt,Tt),Jt=ft(Tt,Mt);var Yt=ft(Tt);var Gt=lt(/(\d{4})-(\d\d)-(\d\d)/,bt),$t=lt(kt),Bt=ft(Ot,Tt,Mt,Nt),Qt=ft(Tt,Mt,Nt);var Kt={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},Xt=Object.assign({years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6}},Kt),en=Object.assign({years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:30.436875/7,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3}},Kt),tn=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],nn=tn.slice(0).reverse();function rn(e,t,n){void 0===n&&(n=!1);var r={values:n?t.values:Object.assign({},e.values,t.values||{}),loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy};return new an(r)}function on(e,t,n,r,i){var o,a=e[i][n],u=t[n]/a,s=!(Math.sign(u)===Math.sign(r[i]))&&0!==r[i]&&Math.abs(u)<=1?(o=u)<0?Math.floor(o):Math.ceil(o):Math.trunc(u);r[i]+=s,t[n]-=s*a}var an=function(){function e(e){var t="longterm"===e.conversionAccuracy||!1;this.values=e.values,this.loc=e.loc||ct.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=t?en:Xt,this.isLuxonDuration=!0}e.fromMillis=function(t,n){return e.fromObject(Object.assign({milliseconds:t},n))},e.fromObject=function(t){if(null==t||"object"!=typeof t)throw new v("Duration.fromObject: argument expected to be an object, got "+(null===t?"null":typeof t));return new e({values:de(t,e.normalizeUnit,["locale","numberingSystem","conversionAccuracy","zone"]),loc:ct.fromObject(t),conversionAccuracy:t.conversionAccuracy})},e.fromISO=function(t,n){var r=dt(t,[Dt,It])[0];if(r){var i=Object.assign(r,n);return e.fromObject(i)}return e.invalid("unparsable",'the input "'+t+"\" can't be parsed as ISO 8601")},e.fromISOTime=function(t,n){var r=dt(t,[Et,Yt])[0];if(r){var i=Object.assign(r,n);return e.fromObject(i)}return e.invalid("unparsable",'the input "'+t+"\" can't be parsed as ISO 8601")},e.invalid=function(t,n){if(void 0===n&&(n=null),!t)throw new v("need to specify a reason the Duration is invalid");var r=t instanceof Fe?t:new Fe(t,n);if(Ke.throwOnInvalid)throw new h(r);return new e({invalid:r})},e.normalizeUnit=function(e){var t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new y(e);return t},e.isDuration=function(e){return e&&e.isLuxonDuration||!1};var t=e.prototype;return t.toFormat=function(e,t){void 0===t&&(t={});var n=Object.assign({},t,{floor:!1!==t.round&&!1!==t.floor});return this.isValid?xe.create(this.loc,n).formatDurationFromString(this,e):"Invalid Duration"},t.toObject=function(e){if(void 0===e&&(e={}),!this.isValid)return{};var t=Object.assign({},this.values);return e.includeConfig&&(t.conversionAccuracy=this.conversionAccuracy,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t},t.toISO=function(){if(!this.isValid)return null;var e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=ne(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e},t.toISOTime=function(e){if(void 0===e&&(e={}),!this.isValid)return null;var t=this.toMillis();if(t<0||t>=864e5)return null;e=Object.assign({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},e);var n=this.shiftTo("hours","minutes","seconds","milliseconds"),r="basic"===e.format?"hhmm":"hh:mm";e.suppressSeconds&&0===n.seconds&&0===n.milliseconds||(r+="basic"===e.format?"ss":":ss",e.suppressMilliseconds&&0===n.milliseconds||(r+=".SSS"));var i=n.toFormat(r);return e.includePrefix&&(i="T"+i),i},t.toJSON=function(){return this.toISO()},t.toString=function(){return this.toISO()},t.toMillis=function(){return this.as("milliseconds")},t.valueOf=function(){return this.toMillis()},t.plus=function(e){if(!this.isValid)return this;for(var t,n=un(e),r={},i=c(tn);!(t=i()).done;){var o=t.value;(Q(n.values,o)||Q(this.values,o))&&(r[o]=n.get(o)+this.get(o))}return rn(this,{values:r},!0)},t.minus=function(e){if(!this.isValid)return this;var t=un(e);return this.plus(t.negate())},t.mapUnits=function(e){if(!this.isValid)return this;for(var t={},n=0,r=Object.keys(this.values);n=0){i=f;var d=0;for(var h in u)d+=this.matrix[h][f]*u[h],u[h]=0;P(s[f])&&(d+=s[f]);var m=Math.trunc(d);for(var y in a[f]=m,u[f]=d-m,s)tn.indexOf(y)>tn.indexOf(f)&&on(this.matrix,s,y,a,f)}else P(s[f])&&(u[f]=s[f])}for(var v in u)0!==u[v]&&(a[i]+=v===i?u[v]:u[v]/this.matrix[i][v]);return rn(this,{values:a},!0).normalize()},t.negate=function(){if(!this.isValid)return this;for(var e={},t=0,n=Object.keys(this.values);te},t.isBefore=function(e){return!!this.isValid&&this.e<=e},t.contains=function(e){return!!this.isValid&&(this.s<=e&&this.e>e)},t.set=function(t){var n=void 0===t?{}:t,r=n.start,i=n.end;return this.isValid?e.fromDateTimes(r||this.s,i||this.e):this},t.splitAt=function(){var t=this;if(!this.isValid)return[];for(var n=arguments.length,r=new Array(n),i=0;i+this.e?this.e:c;a.push(e.fromDateTimes(u,l)),u=l,s+=1}return a},t.splitBy=function(t){var n=un(t);if(!this.isValid||!n.isValid||0===n.as("milliseconds"))return[];for(var r,i,o=this.s,a=[];o+this.e?this.e:r,a.push(e.fromDateTimes(o,i)),o=i;return a},t.divideEqually=function(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]},t.overlaps=function(e){return this.e>e.s&&this.s=e.e)},t.equals=function(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))},t.intersection=function(t){if(!this.isValid)return this;var n=this.s>t.s?this.s:t.s,r=this.er?null:e.fromDateTimes(n,r)},t.union=function(t){if(!this.isValid)return this;var n=this.st.e?this.e:t.e;return e.fromDateTimes(n,r)},e.merge=function(e){var t=e.sort(function(e,t){return e.s-t.s}).reduce(function(e,t){var n=e[0],r=e[1];return r?r.overlaps(t)||r.abutsStart(t)?[n,r.union(t)]:[n.concat([r]),t]:[n,t]},[[],null]),n=t[0],r=t[1];return r&&n.push(r),n},e.xor=function(t){for(var n,r,i=null,o=0,a=[],u=t.map(function(e){return[{time:e.s,type:"s"},{time:e.e,type:"e"}]}),s=c((n=Array.prototype).concat.apply(n,u).sort(function(e,t){return e.time-t.time}));!(r=s()).done;){var l=r.value;1===(o+="s"===l.type?1:-1)?i=l.time:(i&&+i!=+l.time&&a.push(e.fromDateTimes(i,l.time)),i=null)}return e.merge(a)},t.difference=function(){for(var t=this,n=arguments.length,r=new Array(n),i=0;i=0){var f;r=c;var d,h=l(e,t);(i=e.plus(((f={})[c]=h,f)))>t?(e=e.plus(((d={})[c]=h-1,d)),h-=1):e=i,o[c]=h}}return[e,o,i,r]}(e,t,n),o=i[0],a=i[1],u=i[2],s=i[3],c=t-o,l=n.filter(function(e){return["hours","minutes","seconds","milliseconds"].indexOf(e)>=0});if(0===l.length){var f;if(u0?(d=an.fromMillis(c,r)).shiftTo.apply(d,l).plus(h):h}var mn={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},yn={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},vn=mn.hanidec.replace(/[\[|\]]/g,"").split("");function gn(e,t){var n=e.numberingSystem;return void 0===t&&(t=""),new RegExp(""+mn[n||"latn"]+t)}var pn="missing Intl.DateTimeFormat.formatToParts support";function wn(e,t){return void 0===t&&(t=function(e){return e}),{regex:e,deser:function(e){var n=e[0];return t(function(e){var t=parseInt(e,10);if(isNaN(t)){t="";for(var n=0;n=a&&r<=u&&(t+=r-a)}}return parseInt(t,10)}return t}(n))}}}var kn="( |"+String.fromCharCode(160)+")",bn=new RegExp(kn,"g");function Sn(e){return e.replace(/\./g,"\\.?").replace(bn,kn)}function On(e){return e.replace(/\./g,"").replace(bn," ").toLowerCase()}function Tn(e,t){return null===e?null:{regex:RegExp(e.map(Sn).join("|")),deser:function(n){var r=n[0];return e.findIndex(function(e){return On(r)===On(e)})+t}}}function Mn(e,t){return{regex:e,deser:function(e){return le(e[1],e[2])},groups:t}}function Nn(e){return{regex:e,deser:function(e){return e[0]}}}var En={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};var Dn=null;function In(e,t){if(e.literal)return e;var n=xe.macroTokenToFormatOpts(e.val);if(!n)return e;var r=xe.create(t,n).formatDateTimeParts((Dn||(Dn=sr.fromMillis(1555555555555)),Dn)).map(function(e){return function(e,t,n){var r=e.type,i=e.value;if("literal"===r)return{literal:!0,val:i};var o=n[r],a=En[r];return"object"==typeof a&&(a=a[o]),a?{literal:!1,val:a}:void 0}(e,0,n)});return r.includes(void 0)?e:r}function Vn(e,t,n){var r=function(e,t){var n;return(n=Array.prototype).concat.apply(n,e.map(function(e){return In(e,t)}))}(xe.parseFormat(n),e),i=r.map(function(t){return n=t,i=gn(r=e),o=gn(r,"{2}"),a=gn(r,"{3}"),u=gn(r,"{4}"),s=gn(r,"{6}"),c=gn(r,"{1,2}"),l=gn(r,"{1,3}"),f=gn(r,"{1,6}"),d=gn(r,"{1,9}"),h=gn(r,"{2,4}"),m=gn(r,"{4,6}"),y=function(e){return{regex:RegExp((t=e.val,t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:function(e){return e[0]},literal:!0};var t},(v=function(e){if(n.literal)return y(e);switch(e.val){case"G":return Tn(r.eras("short",!1),0);case"GG":return Tn(r.eras("long",!1),0);case"y":return wn(f);case"yy":return wn(h,se);case"yyyy":return wn(u);case"yyyyy":return wn(m);case"yyyyyy":return wn(s);case"M":return wn(c);case"MM":return wn(o);case"MMM":return Tn(r.months("short",!0,!1),1);case"MMMM":return Tn(r.months("long",!0,!1),1);case"L":return wn(c);case"LL":return wn(o);case"LLL":return Tn(r.months("short",!1,!1),1);case"LLLL":return Tn(r.months("long",!1,!1),1);case"d":return wn(c);case"dd":return wn(o);case"o":return wn(l);case"ooo":return wn(a);case"HH":return wn(o);case"H":return wn(c);case"hh":return wn(o);case"h":return wn(c);case"mm":return wn(o);case"m":case"q":return wn(c);case"qq":return wn(o);case"s":return wn(c);case"ss":return wn(o);case"S":return wn(l);case"SSS":return wn(a);case"u":return Nn(d);case"a":return Tn(r.meridiems(),0);case"kkkk":return wn(u);case"kk":return wn(h,se);case"W":return wn(c);case"WW":return wn(o);case"E":case"c":return wn(i);case"EEE":return Tn(r.weekdays("short",!1,!1),1);case"EEEE":return Tn(r.weekdays("long",!1,!1),1);case"ccc":return Tn(r.weekdays("short",!0,!1),1);case"cccc":return Tn(r.weekdays("long",!0,!1),1);case"Z":case"ZZ":return Mn(new RegExp("([+-]"+c.source+")(?::("+o.source+"))?"),2);case"ZZZ":return Mn(new RegExp("([+-]"+c.source+")("+o.source+")?"),2);case"z":return Nn(/[a-z_+-/]{1,256}?/i);default:return y(e)}}(n)||{invalidReason:pn}).token=n,v;var n,r,i,o,a,u,s,c,l,f,d,h,m,y,v}),o=i.find(function(e){return e.invalidReason});if(o)return{input:t,tokens:r,invalidReason:o.invalidReason};var a=function(e){return["^"+e.map(function(e){return e.regex}).reduce(function(e,t){return e+"("+t.source+")"},"")+"$",e]}(i),u=a[0],s=a[1],c=RegExp(u,"i"),l=function(e,t,n){var r=e.match(t);if(r){var i={},o=1;for(var a in n)if(Q(n,a)){var u=n[a],s=u.groups?u.groups+1:1;!u.literal&&u.token&&(i[u.token.val[0]]=u.deser(r.slice(o,o+s))),o+=s}return[r,i]}return[r,{}]}(t,c,s),f=l[0],d=l[1],h=d?function(e){var t;return t=R(e.Z)?R(e.z)?null:He.create(e.z):new Re(e.Z),R(e.q)||(e.M=3*(e.q-1)+1),R(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),R(e.u)||(e.S=te(e.u)),[Object.keys(e).reduce(function(t,n){var r=function(e){switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}}(n);return r&&(t[r]=e[n]),t},{}),t]}(d):[null,null],y=h[0],v=h[1];if(Q(d,"a")&&Q(d,"H"))throw new m("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:r,regex:c,rawMatches:f,matches:d,result:y,zone:v}}var Ln=[0,31,59,90,120,151,181,212,243,273,304,334],xn=[0,31,60,91,121,152,182,213,244,274,305,335];function Fn(e,t){return new Fe("unit out of range","you specified "+t+" (of type "+typeof t+") as a "+e+", which is invalid")}function Cn(e,t,n){var r=new Date(Date.UTC(e,t-1,n)).getUTCDay();return 0===r?7:r}function Zn(e,t,n){return n+(re(e)?xn:Ln)[t-1]}function jn(e,t){var n=re(e)?xn:Ln,r=n.findIndex(function(e){return eue(n)?(t=n+1,u=1):t=n,Object.assign({weekYear:t,weekNumber:u,weekday:a},me(e))}function zn(e){var t,n=e.weekYear,r=e.weekNumber,i=e.weekday,o=Cn(n,1,4),a=ie(n),u=7*r+i-o-3;u<1?u+=ie(t=n-1):u>a?(t=n+1,u-=ie(n)):t=n;var s=jn(t,u),c=s.month,l=s.day;return Object.assign({year:t,month:c,day:l},me(e))}function _n(e){var t=e.year,n=Zn(t,e.month,e.day);return Object.assign({year:t,ordinal:n},me(e))}function qn(e){var t=e.year,n=jn(t,e.ordinal),r=n.month,i=n.day;return Object.assign({year:t,month:r,day:i},me(e))}function Hn(e){var t=W(e.year),n=K(e.month,1,12),r=K(e.day,1,oe(e.year,e.month));return t?n?!r&&Fn("day",e.day):Fn("month",e.month):Fn("year",e.year)}function Un(e){var t=e.hour,n=e.minute,r=e.second,i=e.millisecond,o=K(t,0,23)||24===t&&0===n&&0===r&&0===i,a=K(n,0,59),u=K(r,0,59),s=K(i,0,999);return o?a?u?!s&&Fn("millisecond",i):Fn("second",r):Fn("minute",n):Fn("hour",t)}function Rn(e){return new Fe("unsupported zone",'the zone "'+e.name+'" is not supported')}function Pn(e){return null===e.weekData&&(e.weekData=An(e.c)),e.weekData}function Wn(e,t){var n={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new sr(Object.assign({},n,t,{old:n}))}function Jn(e,t,n){var r=e-60*t*1e3,i=n.offset(r);if(t===i)return[r,t];r-=60*(i-t)*1e3;var o=n.offset(r);return i===o?[r,i]:[e-60*Math.min(i,o)*1e3,Math.max(i,o)]}function Yn(e,t){var n=new Date(e+=60*t*1e3);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Gn(e,t,n){return Jn(ae(e),t,n)}function $n(e,t){var n=e.o,r=e.c.year+Math.trunc(t.years),i=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),o=Object.assign({},e.c,{year:r,month:i,day:Math.min(e.c.day,oe(r,i))+Math.trunc(t.days)+7*Math.trunc(t.weeks)}),a=an.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),u=Jn(ae(o),n,e.zone),s=u[0],c=u[1];return 0!==a&&(s+=a,c=e.zone.offset(s)),{ts:s,o:c}}function Bn(e,t,n,r,i){var o=n.setZone,a=n.zone;if(e&&0!==Object.keys(e).length){var u=t||a,s=sr.fromObject(Object.assign(e,n,{zone:u,setZone:void 0}));return o?s:s.setZone(a)}return sr.invalid(new Fe("unparsable",'the input "'+i+"\" can't be parsed as "+r))}function Qn(e,t,n){return void 0===n&&(n=!0),e.isValid?xe.create(ct.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(e,t):null}function Kn(e,t){var n=t.suppressSeconds,r=void 0!==n&&n,i=t.suppressMilliseconds,o=void 0!==i&&i,a=t.includeOffset,u=t.includePrefix,s=void 0!==u&&u,c=t.includeZone,l=void 0!==c&&c,f=t.spaceZone,d=void 0!==f&&f,h=t.format,m=void 0===h?"extended":h,y="basic"===m?"HHmm":"HH:mm";r&&0===e.second&&0===e.millisecond||(y+="basic"===m?"ss":":ss",o&&0===e.millisecond||(y+=".SSS")),(l||a)&&d&&(y+=" "),l?y+="z":a&&(y+="basic"===m?"ZZZ":"ZZ");var v=Qn(e,y);return s&&(v="T"+v),v}var Xn={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},er={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},tr={ordinal:1,hour:0,minute:0,second:0,millisecond:0},nr=["year","month","day","hour","minute","second","millisecond"],rr=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ir=["year","ordinal","hour","minute","second","millisecond"];function or(e){var t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new y(e);return t}function ar(e,t){for(var n,r=c(nr);!(n=r()).done;){var i=n.value;R(e[i])&&(e[i]=Xn[i])}var o=Hn(e)||Un(e);if(o)return sr.invalid(o);var a=Ke.now(),u=Gn(e,t.offset(a),t),s=u[0],l=u[1];return new sr({ts:s,zone:t,o:l})}function ur(e,t,n){var r=!!R(n.round)||n.round,i=function(e,i){return e=ne(e,r||n.calendary?0:2,!0),t.loc.clone(n).relFormatter(n).format(e,i)},o=function(r){return n.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r)};if(n.unit)return i(o(n.unit),n.unit);for(var a,u=c(n.units);!(a=u()).done;){var s=a.value,l=o(s);if(Math.abs(l)>=1)return i(l,s)}return i(0,n.units[n.units.length-1])}var sr=function(){function e(e){var t=e.zone||Ke.defaultZone,n=e.invalid||(Number.isNaN(e.ts)?new Fe("invalid input"):null)||(t.isValid?null:Rn(t));this.ts=R(e.ts)?Ke.now():e.ts;var r=null,i=null;if(!n)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t)){var o=[e.old.c,e.old.o];r=o[0],i=o[1]}else{var a=t.offset(this.ts);r=Yn(this.ts,a),r=(n=Number.isNaN(r.year)?new Fe("invalid input"):null)?null:r,i=n?null:a}this._zone=t,this.loc=e.loc||ct.create(),this.invalid=n,this.weekData=null,this.c=r,this.o=i,this.isLuxonDateTime=!0}e.now=function(){return new e({})},e.local=function(t,n,r,i,o,a,u){return R(t)?new e({}):ar({year:t,month:n,day:r,hour:i,minute:o,second:a,millisecond:u},Ke.defaultZone)},e.utc=function(t,n,r,i,o,a,u){return R(t)?new e({ts:Ke.now(),zone:Re.utcInstance}):ar({year:t,month:n,day:r,hour:i,minute:o,second:a,millisecond:u},Re.utcInstance)},e.fromJSDate=function(t,n){void 0===n&&(n={});var r,i=(r=t,"[object Date]"===Object.prototype.toString.call(r)?t.valueOf():NaN);if(Number.isNaN(i))return e.invalid("invalid input");var o=We(n.zone,Ke.defaultZone);return o.isValid?new e({ts:i,zone:o,loc:ct.fromObject(n)}):e.invalid(Rn(o))},e.fromMillis=function(t,n){if(void 0===n&&(n={}),P(t))return t<-864e13||t>864e13?e.invalid("Timestamp out of range"):new e({ts:t,zone:We(n.zone,Ke.defaultZone),loc:ct.fromObject(n)});throw new v("fromMillis requires a numerical input, but received a "+typeof t+" with value "+t)},e.fromSeconds=function(t,n){if(void 0===n&&(n={}),P(t))return new e({ts:1e3*t,zone:We(n.zone,Ke.defaultZone),loc:ct.fromObject(n)});throw new v("fromSeconds requires a numerical input")},e.fromObject=function(t){var n=We(t.zone,Ke.defaultZone);if(!n.isValid)return e.invalid(Rn(n));var r=Ke.now(),i=n.offset(r),o=de(t,or,["zone","locale","outputCalendar","numberingSystem"]),a=!R(o.ordinal),u=!R(o.year),s=!R(o.month)||!R(o.day),l=u||s,f=o.weekYear||o.weekNumber,d=ct.fromObject(t);if((l||a)&&f)throw new m("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(s&&a)throw new m("Can't mix ordinal dates with month/day");var h,y,v=f||o.weekday&&!l,g=Yn(r,i);v?(h=rr,y=er,g=An(g)):a?(h=ir,y=tr,g=_n(g)):(h=nr,y=Xn);for(var p,w=!1,k=c(h);!(p=k()).done;){var b=p.value;R(o[b])?o[b]=w?y[b]:g[b]:w=!0}var S=(v?function(e){var t=W(e.weekYear),n=K(e.weekNumber,1,ue(e.weekYear)),r=K(e.weekday,1,7);return t?n?!r&&Fn("weekday",e.weekday):Fn("week",e.week):Fn("weekYear",e.weekYear)}(o):a?function(e){var t=W(e.year),n=K(e.ordinal,1,ie(e.year));return t?!n&&Fn("ordinal",e.ordinal):Fn("year",e.year)}(o):Hn(o))||Un(o);if(S)return e.invalid(S);var O=Gn(v?zn(o):a?qn(o):o,i,n),T=new e({ts:O[0],zone:n,o:O[1],loc:d});return o.weekday&&l&&t.weekday!==T.weekday?e.invalid("mismatched weekday","you can't specify both a weekday of "+o.weekday+" and a date of "+T.toISO()):T},e.fromISO=function(e,t){void 0===t&&(t={});var n=dt(e,[_t,Rt],[qt,Pt],[Ht,Wt],[Ut,Jt]);return Bn(n[0],n[1],t,"ISO 8601",e)},e.fromRFC2822=function(e,t){void 0===t&&(t={});var n=dt(function(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[xt,Ft]);return Bn(n[0],n[1],t,"RFC 2822",e)},e.fromHTTP=function(e,t){void 0===t&&(t={});var n=dt(e,[Ct,At],[Zt,At],[jt,zt]);return Bn(n[0],n[1],t,"HTTP",t)},e.fromFormat=function(t,n,r){if(void 0===r&&(r={}),R(t)||R(n))throw new v("fromFormat requires an input string and a format");var i=r,o=i.locale,a=void 0===o?null:o,u=i.numberingSystem,s=void 0===u?null:u,c=function(e,t,n){var r=Vn(e,t,n);return[r.result,r.zone,r.invalidReason]}(ct.fromOpts({locale:a,numberingSystem:s,defaultToEN:!0}),t,n),l=c[0],f=c[1],d=c[2];return d?e.invalid(d):Bn(l,f,r,"format "+n,t)},e.fromString=function(t,n,r){return void 0===r&&(r={}),e.fromFormat(t,n,r)},e.fromSQL=function(e,t){void 0===t&&(t={});var n=dt(e,[Gt,Bt],[$t,Qt]);return Bn(n[0],n[1],t,"SQL",e)},e.invalid=function(t,n){if(void 0===n&&(n=null),!t)throw new v("need to specify a reason the DateTime is invalid");var r=t instanceof Fe?t:new Fe(t,n);if(Ke.throwOnInvalid)throw new f(r);return new e({invalid:r})},e.isDateTime=function(e){return e&&e.isLuxonDateTime||!1};var t=e.prototype;return t.get=function(e){return this[e]},t.resolvedLocaleOpts=function(e){void 0===e&&(e={});var t=xe.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t.locale,numberingSystem:t.numberingSystem,outputCalendar:t.calendar}},t.toUTC=function(e,t){return void 0===e&&(e=0),void 0===t&&(t={}),this.setZone(Re.instance(e),t)},t.toLocal=function(){return this.setZone(Ke.defaultZone)},t.setZone=function(t,n){var r=void 0===n?{}:n,i=r.keepLocalTime,o=void 0!==i&&i,a=r.keepCalendarTime,u=void 0!==a&&a;if((t=We(t,Ke.defaultZone)).equals(this.zone))return this;if(t.isValid){var s=this.ts;if(o||u){var c=t.offset(this.ts);s=Gn(this.toObject(),c,t)[0]}return Wn(this,{ts:s,zone:t})}return e.invalid(Rn(t))},t.reconfigure=function(e){var t=void 0===e?{}:e,n=t.locale,r=t.numberingSystem,i=t.outputCalendar;return Wn(this,{loc:this.loc.clone({locale:n,numberingSystem:r,outputCalendar:i})})},t.setLocale=function(e){return this.reconfigure({locale:e})},t.set=function(e){if(!this.isValid)return this;var t,n=de(e,or,[]);!R(n.weekYear)||!R(n.weekNumber)||!R(n.weekday)?t=zn(Object.assign(An(this.c),n)):R(n.ordinal)?(t=Object.assign(this.toObject(),n),R(n.day)&&(t.day=Math.min(oe(t.year,t.month),t.day))):t=qn(Object.assign(_n(this.c),n));var r=Gn(t,this.o,this.zone);return Wn(this,{ts:r[0],o:r[1]})},t.plus=function(e){return this.isValid?Wn(this,$n(this,un(e))):this},t.minus=function(e){return this.isValid?Wn(this,$n(this,un(e).negate())):this},t.startOf=function(e){if(!this.isValid)return this;var t={},n=an.normalizeUnit(e);switch(n){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0}if("weeks"===n&&(t.weekday=1),"quarters"===n){var r=Math.ceil(this.month/3);t.month=3*(r-1)+1}return this.set(t)},t.endOf=function(e){var t;return this.isValid?this.plus((t={},t[e]=1,t)).startOf(e).minus(1):this},t.toFormat=function(e,t){return void 0===t&&(t={}),this.isValid?xe.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):"Invalid DateTime"},t.toLocaleString=function(e){return void 0===e&&(e=b),this.isValid?xe.create(this.loc.clone(e),e).formatDateTime(this):"Invalid DateTime"},t.toLocaleParts=function(e){return void 0===e&&(e={}),this.isValid?xe.create(this.loc.clone(e),e).formatDateTimeParts(this):[]},t.toISO=function(e){return void 0===e&&(e={}),this.isValid?this.toISODate(e)+"T"+this.toISOTime(e):null},t.toISODate=function(e){var t=(void 0===e?{}:e).format,n="basic"===(void 0===t?"extended":t)?"yyyyMMdd":"yyyy-MM-dd";return this.year>9999&&(n="+"+n),Qn(this,n)},t.toISOWeekDate=function(){return Qn(this,"kkkk-'W'WW-c")},t.toISOTime=function(e){var t=void 0===e?{}:e,n=t.suppressMilliseconds,r=void 0!==n&&n,i=t.suppressSeconds,o=void 0!==i&&i,a=t.includeOffset,u=void 0===a||a,s=t.includePrefix,c=void 0!==s&&s,l=t.format;return Kn(this,{suppressSeconds:o,suppressMilliseconds:r,includeOffset:u,includePrefix:c,format:void 0===l?"extended":l})},t.toRFC2822=function(){return Qn(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)},t.toHTTP=function(){return Qn(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")},t.toSQLDate=function(){return Qn(this,"yyyy-MM-dd")},t.toSQLTime=function(e){var t=void 0===e?{}:e,n=t.includeOffset,r=void 0===n||n,i=t.includeZone;return Kn(this,{includeOffset:r,includeZone:void 0!==i&&i,spaceZone:!0})},t.toSQL=function(e){return void 0===e&&(e={}),this.isValid?this.toSQLDate()+" "+this.toSQLTime(e):null},t.toString=function(){return this.isValid?this.toISO():"Invalid DateTime"},t.valueOf=function(){return this.toMillis()},t.toMillis=function(){return this.isValid?this.ts:NaN},t.toSeconds=function(){return this.isValid?this.ts/1e3:NaN},t.toJSON=function(){return this.toISO()},t.toBSON=function(){return this.toJSDate()},t.toObject=function(e){if(void 0===e&&(e={}),!this.isValid)return{};var t=Object.assign({},this.c);return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t},t.toJSDate=function(){return new Date(this.isValid?this.ts:NaN)},t.diff=function(e,t,n){if(void 0===t&&(t="milliseconds"),void 0===n&&(n={}),!this.isValid||!e.isValid)return an.invalid(this.invalid||e.invalid,"created by diffing an invalid DateTime");var r,i=Object.assign({locale:this.locale,numberingSystem:this.numberingSystem},n),o=(r=t,Array.isArray(r)?r:[r]).map(an.normalizeUnit),a=e.valueOf()>this.valueOf(),u=hn(a?this:e,a?e:this,o,i);return a?u.negate():u},t.diffNow=function(t,n){return void 0===t&&(t="milliseconds"),void 0===n&&(n={}),this.diff(e.now(),t,n)},t.until=function(e){return this.isValid?ln.fromDateTimes(this,e):this},t.hasSame=function(e,t){if(!this.isValid)return!1;var n=e.valueOf(),r=this.setZone(e.zone,{keepLocalTime:!0});return r.startOf(t)<=n&&n<=r.endOf(t)},t.equals=function(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)},t.toRelative=function(t){if(void 0===t&&(t={}),!this.isValid)return null;var n=t.base||e.fromObject({zone:this.zone}),r=t.padding?thisthis.set({month:1}).offset||this.offset>this.set({month:5}).offset)}},{key:"isInLeapYear",get:function(){return re(this.year)}},{key:"daysInMonth",get:function(){return oe(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?ie(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?ue(this.weekYear):NaN}}],[{key:"DATE_SHORT",get:function(){return b}},{key:"DATE_MED",get:function(){return S}},{key:"DATE_MED_WITH_WEEKDAY",get:function(){return O}},{key:"DATE_FULL",get:function(){return T}},{key:"DATE_HUGE",get:function(){return M}},{key:"TIME_SIMPLE",get:function(){return N}},{key:"TIME_WITH_SECONDS",get:function(){return E}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return D}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return I}},{key:"TIME_24_SIMPLE",get:function(){return V}},{key:"TIME_24_WITH_SECONDS",get:function(){return L}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return x}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return F}},{key:"DATETIME_SHORT",get:function(){return C}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return Z}},{key:"DATETIME_MED",get:function(){return j}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return A}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return z}},{key:"DATETIME_FULL",get:function(){return _}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return q}},{key:"DATETIME_HUGE",get:function(){return H}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return U}}]),e}();function cr(e){if(sr.isDateTime(e))return e;if(e&&e.valueOf&&P(e.valueOf()))return sr.fromJSDate(e);if(e&&"object"==typeof e)return sr.fromObject(e);throw new v("Unknown datetime argument: "+e+", of type "+typeof e)}return e.DateTime=sr,e.Duration=an,e.FixedOffsetZone=Re,e.IANAZone=He,e.Info=fn,e.Interval=ln,e.InvalidZone=Pe,e.LocalZone=je,e.Settings=Ke,e.VERSION="1.26.0",e.Zone=Ce,e}({}); \ No newline at end of file diff --git a/static/js/lib/vanilla-picker.csp.min.js b/static/js/lib/vanilla-picker.csp.min.js new file mode 100644 index 0000000..575afa1 --- /dev/null +++ b/static/js/lib/vanilla-picker.csp.min.js @@ -0,0 +1,8 @@ +/*! + * vanilla-picker v2.12.1 + * https://vanilla-picker.js.org + * + * Copyright 2017-2021 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate) + * Released under the ISC license. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Picker=e()}(this,function(){"use strict";function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var t=function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t};function i(t,e){for(var n=0;ne&&(i=!0)):(g(t),i=!0):i=!0,i&&this.hide()&&(this.settings.parent.style.pointerEvents="",n!==l&&this.settings.parent.focus(),this.onClose&&this.onClose(this.colour))}},{key:"movePopup",value:function(t,e){this.closeHandler(),this.setOptions(t),e&&this.openHandler()}},{key:"setColor",value:function(t,e){this._setColor(t,{silent:e})}},{key:"_setColor",value:function(t,e){if(t="string"==typeof t?t.trim():t){e=e||{};var n=void 0;try{n=new s(t)}catch(t){if(e.failSilently)return;throw t}this.settings.alpha||((t=n.hsla)[3]=1,n.hsla=t),this.colour=this.color=n,this._setHSLA(null,null,null,null,e)}}},{key:"setColour",value:function(t,e){this.setColor(t,e)}},{key:"show",value:function(){if(!this.settings.parent)return!1;if(this.domElement){var t=this._toggleDOM(!0);return this._setPosition(),t}var e=this.settings.template||'
',n=(t=e,(e=document.createElement("div")).innerHTML=t,e.firstElementChild);return this.domElement=n,this._domH=p(".picker_hue",n),this._domSL=p(".picker_sl",n),this._domA=p(".picker_alpha",n),this._domEdit=p(".picker_editor input",n),this._domSample=p(".picker_sample",n),this._domOkay=p(".picker_done button",n),this._domCancel=p(".picker_cancel button",n),n.classList.add("layout_"+this.settings.layout),this.settings.alpha||n.classList.add("no_alpha"),this.settings.editor||n.classList.add("no_editor"),this.settings.cancelButton||n.classList.add("no_cancel"),this._ifPopup(function(){return n.classList.add("popup")}),this._setPosition(),this.colour?this._updateUI():this._setColor(this.settings.defaultColor),this._bindEvents(),!0}},{key:"hide",value:function(){return this._toggleDOM(!1)}},{key:"destroy",value:function(){this._events.destroy(),this.domElement&&this.settings.parent.removeChild(this.domElement)}},{key:"_bindEvents",value:function(){var n=this,i=this,r=this.domElement,s=this._events;function o(t,e,n){s.add(t,e,n)}o(r,"click",function(t){return t.preventDefault()}),a(s,this._domH,function(t,e){return i._setHSLA(t)}),a(s,this._domSL,function(t,e){return i._setHSLA(null,t,1-e)}),this.settings.alpha&&a(s,this._domA,function(t,e){return i._setHSLA(null,null,null,1-e)});var t=this._domEdit;o(t,"input",function(t){i._setColor(this.value,{fromEditor:!0,failSilently:!0})}),o(t,"focus",function(t){this.selectionStart===this.selectionEnd&&this.select()}),this._ifPopup(function(){function t(t){return n.closeHandler(t)}o(window,l,t),o(window,h,t),v(s,r,["Esc","Escape"],t);function e(t){n.__containedEvent=t.timeStamp}o(r,l,e),o(r,h,e),o(n._domCancel,"click",t)});t=function(t){n._ifPopup(function(){return n.closeHandler(t)}),n.onDone&&n.onDone(n.colour)};o(this._domOkay,"click",t),v(s,r,["Enter"],t)}},{key:"_setPosition",value:function(){var n=this.settings.parent,i=this.domElement;n!==i.parentNode&&n.appendChild(i),this._ifPopup(function(t){"static"===getComputedStyle(n).position&&(n.style.position="relative");var e=!0===t?"popup_right":"popup_"+t;["popup_top","popup_bottom","popup_left","popup_right"].forEach(function(t){t===e?i.classList.add(t):i.classList.remove(t)}),i.classList.add(e)})}},{key:"_setHSLA",value:function(t,e,n,i,r){r=r||{};var s=this.colour,o=s.hsla;[t,e,n,i].forEach(function(t,e){!t&&0!==t||(o[e]=t)}),s.hsla=o,this._updateUI(r),this.onChange&&!r.silent&&this.onChange(s)}},{key:"_updateUI",value:function(t){if(this.domElement){t=t||{};var e=this.colour,n=e.hsla,i="hsl("+360*n[0]+", 100%, 50%)",r=e.hslString,s=e.hslaString,o=this._domH,a=this._domSL,c=this._domA,l=p(".picker_selector",o),o=p(".picker_selector",a),c=p(".picker_selector",c);d(0,l,n[0]),this._domSL.style.backgroundColor=this._domH.style.color=i,d(0,o,n[1]),f(0,o,1-n[2]),a.style.color=r,f(0,c,1-n[3]);n=r,r=n.replace("hsl","hsla").replace(")",", 0)");if(this._domA.style.background="linear-gradient("+[n,r]+")"+", linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em",!t.fromEditor){var t=this.settings.editorFormat,h=this.settings.alpha,u=void 0;switch(t){case"rgb":u=e.printRGB(h);break;case"hsl":u=e.printHSL(h);break;default:u=e.printHex(h)}this._domEdit.value=u}this._domSample.style.color=s}function d(t,e,n){e.style.left=100*n+"%"}function f(t,e,n){e.style.top=100*n+"%"}}},{key:"_ifPopup",value:function(t,e){this.settings.parent&&this.settings.popup?t&&t(this.settings.popup):e&&e()}},{key:"_toggleDOM",value:function(t){var e=this.domElement;if(!e)return!1;var n=t?"":"none",t=e.style.display!==n;return t&&(e.style.display=n),t}}]),b}); \ No newline at end of file diff --git a/static/js/ograf_functions.js b/static/js/ograf_functions.js new file mode 100644 index 0000000..8e3a41e --- /dev/null +++ b/static/js/ograf_functions.js @@ -0,0 +1,81 @@ +let graphicInstances = {}; + +window.loadTheGraphic = async (manifestPath, renderTarget, rundownData) => { + // Dispose previous instance if exists + const existingInstance = graphicInstances[renderTarget]; + if (existingInstance) { + // console.log('OF ::: Disposing "' + manifestPath + '" from >> ' + renderTarget) + existingInstance.dispose(); + } + + // Helper: extractDefaultsFromJSON + const extractDefaultsFromJSON = async (fields) => { + const result = {}; + if (Array.isArray(fields)) { + for (const field of fields) { + if (Object.keys(field).length === 0) continue + const [key, value] = Object.entries(field)[0]; + result[key] = value; + } + } + return result; + }; + + // Helper: loadGraphicModule + const graphicIdVersion = `${rundownData.ografProps.id}-v${rundownData.ografProps.version}`; + let elementName = customElements.get(graphicIdVersion); + if (!elementName) { + let ografRef = "/templates" + rundownData.ografProps.graphicPath; + // console.log(`OF ::: loadGraphicModule > loading ${ografRef}`) + const module = await import(ografRef); + const Graphic = module.Graphic || module.default; + if (!Graphic || typeof Graphic !== 'function') { + throw new Error('Module expected to expose a class named "Graphic"'); + } + customElements.define(graphicIdVersion, Graphic); + elementName = graphicIdVersion; + } else { + elementName = graphicIdVersion; + } + + // Create and initialize the graphic instance + // console.log(`OF ::: loadTheGraphic "${manifestPath}" to >> ${renderTarget}`) + const graphicInstance = document.createElement(elementName); + graphicInstance.setAttribute('class', 'ografRenderTarget'); + document.getElementById(renderTarget).appendChild(graphicInstance); + const data = await extractDefaultsFromJSON(rundownData.fields); + await graphicInstance.load({ + renderType: 'realtime', + data: data, + rundownData: rundownData + }); + + graphicInstances[renderTarget] = graphicInstance; + // Wait for the iframe inside the graphic instance to load before continuing + const iframe = graphicInstances[renderTarget].querySelector('iframe'); + if (iframe) { + await new Promise((resolve) => { + let timeout = setTimeout(resolve, 1000); + if (iframe.complete || iframe.readyState === 'complete') { + clearTimeout(timeout); + resolve(); + } else { + iframe.addEventListener('load', () => { + clearTimeout(timeout); + resolve(); + }, { once: true }); + } + }); + } + // console.log('OF:: updateAction', renderTarget) + await graphicInstances[renderTarget].updateAction({ data }); + + // console.log('OF:: playAction', renderTarget) + await graphicInstances[renderTarget].playAction({ data }); + // Play/update actions + // setTimeout(() => { + // console.log(`OF ::: loadGraphic > playAction on renderTarget "${renderTarget}"...`) + // graphicInstances[renderTarget].updateAction({ data }); + // graphicInstances[renderTarget].playAction({ data }); + // }, 50); +}; diff --git a/static/js/socket.io.js b/static/js/socket.io.js new file mode 100644 index 0000000..2dee50a --- /dev/null +++ b/static/js/socket.io.js @@ -0,0 +1,6042 @@ +/*! + * Socket.IO v4.0.0 + * (c) 2014-2021 Guillermo Rauch + * Released under the MIT License. + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["io"] = factory(); + else + root["io"] = factory(); +})(self, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./build/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./build/index.js": +/*!************************!*\ + !*** ./build/index.js ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Socket = exports.io = exports.Manager = exports.protocol = void 0; + +var url_1 = __webpack_require__(/*! ./url */ "./build/url.js"); + +var manager_1 = __webpack_require__(/*! ./manager */ "./build/manager.js"); + +var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js"); + +Object.defineProperty(exports, "Socket", { + enumerable: true, + get: function get() { + return socket_1.Socket; + } +}); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client"); +/** + * Module exports. + */ + + +module.exports = exports = lookup; +/** + * Managers cache. + */ + +var cache = exports.managers = {}; + +function lookup(uri, opts) { + if (_typeof(uri) === "object") { + opts = uri; + uri = undefined; + } + + opts = opts || {}; + var parsed = url_1.url(uri, opts.path); + var source = parsed.source; + var id = parsed.id; + var path = parsed.path; + var sameNamespace = cache[id] && path in cache[id]["nsps"]; + var newConnection = opts.forceNew || opts["force new connection"] || false === opts.multiplex || sameNamespace; + var io; + + if (newConnection) { + debug("ignoring socket cache for %s", source); + io = new manager_1.Manager(source, opts); + } else { + if (!cache[id]) { + debug("new io instance for %s", source); + cache[id] = new manager_1.Manager(source, opts); + } + + io = cache[id]; + } + + if (parsed.query && !opts.query) { + opts.query = parsed.queryKey; + } + + return io.socket(parsed.path, opts); +} + +exports.io = lookup; +/** + * Protocol version. + * + * @public + */ + +var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +Object.defineProperty(exports, "protocol", { + enumerable: true, + get: function get() { + return socket_io_parser_1.protocol; + } +}); +/** + * `connect`. + * + * @param {String} uri + * @public + */ + +exports.connect = lookup; +/** + * Expose constructors for standalone build. + * + * @public + */ + +var manager_2 = __webpack_require__(/*! ./manager */ "./build/manager.js"); + +Object.defineProperty(exports, "Manager", { + enumerable: true, + get: function get() { + return manager_2.Manager; + } +}); + +/***/ }), + +/***/ "./build/manager.js": +/*!**************************!*\ + !*** ./build/manager.js ***! + \**************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Manager = void 0; + +var eio = __webpack_require__(/*! engine.io-client */ "./node_modules/engine.io-client/lib/index.js"); + +var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js"); + +var parser = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +var on_1 = __webpack_require__(/*! ./on */ "./build/on.js"); + +var Backoff = __webpack_require__(/*! backo2 */ "./node_modules/backo2/index.js"); + +var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:manager"); + +var Manager = /*#__PURE__*/function (_typed_events_1$Stric) { + _inherits(Manager, _typed_events_1$Stric); + + var _super = _createSuper(Manager); + + function Manager(uri, opts) { + var _this; + + _classCallCheck(this, Manager); + + _this = _super.call(this); + _this.nsps = {}; + _this.subs = []; + + if (uri && "object" === _typeof(uri)) { + opts = uri; + uri = undefined; + } + + opts = opts || {}; + opts.path = opts.path || "/socket.io"; + _this.opts = opts; + + _this.reconnection(opts.reconnection !== false); + + _this.reconnectionAttempts(opts.reconnectionAttempts || Infinity); + + _this.reconnectionDelay(opts.reconnectionDelay || 1000); + + _this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000); + + _this.randomizationFactor(opts.randomizationFactor || 0.5); + + _this.backoff = new Backoff({ + min: _this.reconnectionDelay(), + max: _this.reconnectionDelayMax(), + jitter: _this.randomizationFactor() + }); + + _this.timeout(null == opts.timeout ? 20000 : opts.timeout); + + _this._readyState = "closed"; + _this.uri = uri; + + var _parser = opts.parser || parser; + + _this.encoder = new _parser.Encoder(); + _this.decoder = new _parser.Decoder(); + _this._autoConnect = opts.autoConnect !== false; + if (_this._autoConnect) _this.open(); + return _this; + } + + _createClass(Manager, [{ + key: "reconnection", + value: function reconnection(v) { + if (!arguments.length) return this._reconnection; + this._reconnection = !!v; + return this; + } + }, { + key: "reconnectionAttempts", + value: function reconnectionAttempts(v) { + if (v === undefined) return this._reconnectionAttempts; + this._reconnectionAttempts = v; + return this; + } + }, { + key: "reconnectionDelay", + value: function reconnectionDelay(v) { + var _a; + + if (v === undefined) return this._reconnectionDelay; + this._reconnectionDelay = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v); + return this; + } + }, { + key: "randomizationFactor", + value: function randomizationFactor(v) { + var _a; + + if (v === undefined) return this._randomizationFactor; + this._randomizationFactor = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v); + return this; + } + }, { + key: "reconnectionDelayMax", + value: function reconnectionDelayMax(v) { + var _a; + + if (v === undefined) return this._reconnectionDelayMax; + this._reconnectionDelayMax = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v); + return this; + } + }, { + key: "timeout", + value: function timeout(v) { + if (!arguments.length) return this._timeout; + this._timeout = v; + return this; + } + /** + * Starts trying to reconnect if reconnection is enabled and we have not + * started reconnecting yet + * + * @private + */ + + }, { + key: "maybeReconnectOnOpen", + value: function maybeReconnectOnOpen() { + // Only try to reconnect if it's the first time we're connecting + if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) { + // keeps reconnection from firing twice for the same reconnection loop + this.reconnect(); + } + } + /** + * Sets the current transport `socket`. + * + * @param {Function} fn - optional, callback + * @return self + * @public + */ + + }, { + key: "open", + value: function open(fn) { + var _this2 = this; + + debug("readyState %s", this._readyState); + if (~this._readyState.indexOf("open")) return this; + debug("opening %s", this.uri); + this.engine = eio(this.uri, this.opts); + var socket = this.engine; + var self = this; + this._readyState = "opening"; + this.skipReconnect = false; // emit `open` + + var openSubDestroy = on_1.on(socket, "open", function () { + self.onopen(); + fn && fn(); + }); // emit `error` + + var errorSub = on_1.on(socket, "error", function (err) { + debug("error"); + self.cleanup(); + self._readyState = "closed"; + + _this2.emitReserved("error", err); + + if (fn) { + fn(err); + } else { + // Only do this if there is no fn to handle the error + self.maybeReconnectOnOpen(); + } + }); + + if (false !== this._timeout) { + var timeout = this._timeout; + debug("connect attempt will timeout after %d", timeout); + + if (timeout === 0) { + openSubDestroy(); // prevents a race condition with the 'open' event + } // set timer + + + var timer = setTimeout(function () { + debug("connect attempt timed out after %d", timeout); + openSubDestroy(); + socket.close(); + socket.emit("error", new Error("timeout")); + }, timeout); + + if (this.opts.autoUnref) { + timer.unref(); + } + + this.subs.push(function subDestroy() { + clearTimeout(timer); + }); + } + + this.subs.push(openSubDestroy); + this.subs.push(errorSub); + return this; + } + /** + * Alias for open() + * + * @return self + * @public + */ + + }, { + key: "connect", + value: function connect(fn) { + return this.open(fn); + } + /** + * Called upon transport open. + * + * @private + */ + + }, { + key: "onopen", + value: function onopen() { + debug("open"); // clear old subs + + this.cleanup(); // mark as open + + this._readyState = "open"; + this.emitReserved("open"); // add new subs + + var socket = this.engine; + this.subs.push(on_1.on(socket, "ping", this.onping.bind(this)), on_1.on(socket, "data", this.ondata.bind(this)), on_1.on(socket, "error", this.onerror.bind(this)), on_1.on(socket, "close", this.onclose.bind(this)), on_1.on(this.decoder, "decoded", this.ondecoded.bind(this))); + } + /** + * Called upon a ping. + * + * @private + */ + + }, { + key: "onping", + value: function onping() { + this.emitReserved("ping"); + } + /** + * Called with data. + * + * @private + */ + + }, { + key: "ondata", + value: function ondata(data) { + this.decoder.add(data); + } + /** + * Called when parser fully decodes a packet. + * + * @private + */ + + }, { + key: "ondecoded", + value: function ondecoded(packet) { + this.emitReserved("packet", packet); + } + /** + * Called upon socket error. + * + * @private + */ + + }, { + key: "onerror", + value: function onerror(err) { + debug("error", err); + this.emitReserved("error", err); + } + /** + * Creates a new socket for the given `nsp`. + * + * @return {Socket} + * @public + */ + + }, { + key: "socket", + value: function socket(nsp, opts) { + var socket = this.nsps[nsp]; + + if (!socket) { + socket = new socket_1.Socket(this, nsp, opts); + this.nsps[nsp] = socket; + } + + return socket; + } + /** + * Called upon a socket close. + * + * @param socket + * @private + */ + + }, { + key: "_destroy", + value: function _destroy(socket) { + var nsps = Object.keys(this.nsps); + + for (var _i = 0, _nsps = nsps; _i < _nsps.length; _i++) { + var nsp = _nsps[_i]; + var _socket = this.nsps[nsp]; + + if (_socket.active) { + debug("socket %s is still active, skipping close", nsp); + return; + } + } + + this._close(); + } + /** + * Writes a packet. + * + * @param packet + * @private + */ + + }, { + key: "_packet", + value: function _packet(packet) { + debug("writing packet %j", packet); + var encodedPackets = this.encoder.encode(packet); + + for (var i = 0; i < encodedPackets.length; i++) { + this.engine.write(encodedPackets[i], packet.options); + } + } + /** + * Clean up transport subscriptions and packet buffer. + * + * @private + */ + + }, { + key: "cleanup", + value: function cleanup() { + debug("cleanup"); + this.subs.forEach(function (subDestroy) { + return subDestroy(); + }); + this.subs.length = 0; + this.decoder.destroy(); + } + /** + * Close the current socket. + * + * @private + */ + + }, { + key: "_close", + value: function _close() { + debug("disconnect"); + this.skipReconnect = true; + this._reconnecting = false; + + if ("opening" === this._readyState) { + // `onclose` will not fire because + // an open event never happened + this.cleanup(); + } + + this.backoff.reset(); + this._readyState = "closed"; + if (this.engine) this.engine.close(); + } + /** + * Alias for close() + * + * @private + */ + + }, { + key: "disconnect", + value: function disconnect() { + return this._close(); + } + /** + * Called upon engine close. + * + * @private + */ + + }, { + key: "onclose", + value: function onclose(reason) { + debug("onclose"); + this.cleanup(); + this.backoff.reset(); + this._readyState = "closed"; + this.emitReserved("close", reason); + + if (this._reconnection && !this.skipReconnect) { + this.reconnect(); + } + } + /** + * Attempt a reconnection. + * + * @private + */ + + }, { + key: "reconnect", + value: function reconnect() { + var _this3 = this; + + if (this._reconnecting || this.skipReconnect) return this; + var self = this; + + if (this.backoff.attempts >= this._reconnectionAttempts) { + debug("reconnect failed"); + this.backoff.reset(); + this.emitReserved("reconnect_failed"); + this._reconnecting = false; + } else { + var delay = this.backoff.duration(); + debug("will wait %dms before reconnect attempt", delay); + this._reconnecting = true; + var timer = setTimeout(function () { + if (self.skipReconnect) return; + debug("attempting reconnect"); + + _this3.emitReserved("reconnect_attempt", self.backoff.attempts); // check again for the case socket closed in above events + + + if (self.skipReconnect) return; + self.open(function (err) { + if (err) { + debug("reconnect attempt error"); + self._reconnecting = false; + self.reconnect(); + + _this3.emitReserved("reconnect_error", err); + } else { + debug("reconnect success"); + self.onreconnect(); + } + }); + }, delay); + + if (this.opts.autoUnref) { + timer.unref(); + } + + this.subs.push(function subDestroy() { + clearTimeout(timer); + }); + } + } + /** + * Called upon successful reconnect. + * + * @private + */ + + }, { + key: "onreconnect", + value: function onreconnect() { + var attempt = this.backoff.attempts; + this._reconnecting = false; + this.backoff.reset(); + this.emitReserved("reconnect", attempt); + } + }]); + + return Manager; +}(typed_events_1.StrictEventEmitter); + +exports.Manager = Manager; + +/***/ }), + +/***/ "./build/on.js": +/*!*********************!*\ + !*** ./build/on.js ***! + \*********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.on = void 0; + +function on(obj, ev, fn) { + obj.on(ev, fn); + return function subDestroy() { + obj.off(ev, fn); + }; +} + +exports.on = on; + +/***/ }), + +/***/ "./build/socket.js": +/*!*************************!*\ + !*** ./build/socket.js ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Socket = void 0; + +var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js"); + +var on_1 = __webpack_require__(/*! ./on */ "./build/on.js"); + +var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:socket"); +/** + * Internal events. + * These events can't be emitted by the user. + */ + + +var RESERVED_EVENTS = Object.freeze({ + connect: 1, + connect_error: 1, + disconnect: 1, + disconnecting: 1, + // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener + newListener: 1, + removeListener: 1 +}); + +var Socket = /*#__PURE__*/function (_typed_events_1$Stric) { + _inherits(Socket, _typed_events_1$Stric); + + var _super = _createSuper(Socket); + + /** + * `Socket` constructor. + * + * @public + */ + function Socket(io, nsp, opts) { + var _this; + + _classCallCheck(this, Socket); + + _this = _super.call(this); + _this.receiveBuffer = []; + _this.sendBuffer = []; + _this.ids = 0; + _this.acks = {}; + _this.flags = {}; + _this.io = io; + _this.nsp = nsp; + _this.ids = 0; + _this.acks = {}; + _this.receiveBuffer = []; + _this.sendBuffer = []; + _this.connected = false; + _this.disconnected = true; + _this.flags = {}; + + if (opts && opts.auth) { + _this.auth = opts.auth; + } + + if (_this.io._autoConnect) _this.open(); + return _this; + } + /** + * Subscribe to open, close and packet events + * + * @private + */ + + + _createClass(Socket, [{ + key: "subEvents", + value: function subEvents() { + if (this.subs) return; + var io = this.io; + this.subs = [on_1.on(io, "open", this.onopen.bind(this)), on_1.on(io, "packet", this.onpacket.bind(this)), on_1.on(io, "error", this.onerror.bind(this)), on_1.on(io, "close", this.onclose.bind(this))]; + } + /** + * Whether the Socket will try to reconnect when its Manager connects or reconnects + */ + + }, { + key: "connect", + + /** + * "Opens" the socket. + * + * @public + */ + value: function connect() { + if (this.connected) return this; + this.subEvents(); + if (!this.io["_reconnecting"]) this.io.open(); // ensure open + + if ("open" === this.io._readyState) this.onopen(); + return this; + } + /** + * Alias for connect() + */ + + }, { + key: "open", + value: function open() { + return this.connect(); + } + /** + * Sends a `message` event. + * + * @return self + * @public + */ + + }, { + key: "send", + value: function send() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.unshift("message"); + this.emit.apply(this, args); + return this; + } + /** + * Override `emit`. + * If the event is in `events`, it's emitted normally. + * + * @return self + * @public + */ + + }, { + key: "emit", + value: function emit(ev) { + if (RESERVED_EVENTS.hasOwnProperty(ev)) { + throw new Error('"' + ev + '" is a reserved event name'); + } + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + args.unshift(ev); + var packet = { + type: socket_io_parser_1.PacketType.EVENT, + data: args + }; + packet.options = {}; + packet.options.compress = this.flags.compress !== false; // event ack callback + + if ("function" === typeof args[args.length - 1]) { + debug("emitting packet with ack id %d", this.ids); + this.acks[this.ids] = args.pop(); + packet.id = this.ids++; + } + + var isTransportWritable = this.io.engine && this.io.engine.transport && this.io.engine.transport.writable; + var discardPacket = this.flags["volatile"] && (!isTransportWritable || !this.connected); + + if (discardPacket) { + debug("discard packet as the transport is not currently writable"); + } else if (this.connected) { + this.packet(packet); + } else { + this.sendBuffer.push(packet); + } + + this.flags = {}; + return this; + } + /** + * Sends a packet. + * + * @param packet + * @private + */ + + }, { + key: "packet", + value: function packet(_packet) { + _packet.nsp = this.nsp; + + this.io._packet(_packet); + } + /** + * Called upon engine `open`. + * + * @private + */ + + }, { + key: "onopen", + value: function onopen() { + var _this2 = this; + + debug("transport is open - connecting"); + + if (typeof this.auth == "function") { + this.auth(function (data) { + _this2.packet({ + type: socket_io_parser_1.PacketType.CONNECT, + data: data + }); + }); + } else { + this.packet({ + type: socket_io_parser_1.PacketType.CONNECT, + data: this.auth + }); + } + } + /** + * Called upon engine or manager `error`. + * + * @param err + * @private + */ + + }, { + key: "onerror", + value: function onerror(err) { + if (!this.connected) { + this.emitReserved("connect_error", err); + } + } + /** + * Called upon engine `close`. + * + * @param reason + * @private + */ + + }, { + key: "onclose", + value: function onclose(reason) { + debug("close (%s)", reason); + this.connected = false; + this.disconnected = true; + delete this.id; + this.emitReserved("disconnect", reason); + } + /** + * Called with socket packet. + * + * @param packet + * @private + */ + + }, { + key: "onpacket", + value: function onpacket(packet) { + var sameNamespace = packet.nsp === this.nsp; + if (!sameNamespace) return; + + switch (packet.type) { + case socket_io_parser_1.PacketType.CONNECT: + if (packet.data && packet.data.sid) { + var id = packet.data.sid; + this.onconnect(id); + } else { + this.emitReserved("connect_error", new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)")); + } + + break; + + case socket_io_parser_1.PacketType.EVENT: + this.onevent(packet); + break; + + case socket_io_parser_1.PacketType.BINARY_EVENT: + this.onevent(packet); + break; + + case socket_io_parser_1.PacketType.ACK: + this.onack(packet); + break; + + case socket_io_parser_1.PacketType.BINARY_ACK: + this.onack(packet); + break; + + case socket_io_parser_1.PacketType.DISCONNECT: + this.ondisconnect(); + break; + + case socket_io_parser_1.PacketType.CONNECT_ERROR: + var err = new Error(packet.data.message); // @ts-ignore + + err.data = packet.data.data; + this.emitReserved("connect_error", err); + break; + } + } + /** + * Called upon a server event. + * + * @param packet + * @private + */ + + }, { + key: "onevent", + value: function onevent(packet) { + var args = packet.data || []; + debug("emitting event %j", args); + + if (null != packet.id) { + debug("attaching ack callback to event"); + args.push(this.ack(packet.id)); + } + + if (this.connected) { + this.emitEvent(args); + } else { + this.receiveBuffer.push(Object.freeze(args)); + } + } + }, { + key: "emitEvent", + value: function emitEvent(args) { + if (this._anyListeners && this._anyListeners.length) { + var listeners = this._anyListeners.slice(); + + var _iterator = _createForOfIteratorHelper(listeners), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var listener = _step.value; + listener.apply(this, args); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + _get(_getPrototypeOf(Socket.prototype), "emit", this).apply(this, args); + } + /** + * Produces an ack callback to emit with an event. + * + * @private + */ + + }, { + key: "ack", + value: function ack(id) { + var self = this; + var sent = false; + return function () { + // prevent double callbacks + if (sent) return; + sent = true; + + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + debug("sending ack %j", args); + self.packet({ + type: socket_io_parser_1.PacketType.ACK, + id: id, + data: args + }); + }; + } + /** + * Called upon a server acknowlegement. + * + * @param packet + * @private + */ + + }, { + key: "onack", + value: function onack(packet) { + var ack = this.acks[packet.id]; + + if ("function" === typeof ack) { + debug("calling ack %s with %j", packet.id, packet.data); + ack.apply(this, packet.data); + delete this.acks[packet.id]; + } else { + debug("bad ack %s", packet.id); + } + } + /** + * Called upon server connect. + * + * @private + */ + + }, { + key: "onconnect", + value: function onconnect(id) { + debug("socket connected with id %s", id); + this.id = id; + this.connected = true; + this.disconnected = false; + this.emitReserved("connect"); + this.emitBuffered(); + } + /** + * Emit buffered events (received and emitted). + * + * @private + */ + + }, { + key: "emitBuffered", + value: function emitBuffered() { + var _this3 = this; + + this.receiveBuffer.forEach(function (args) { + return _this3.emitEvent(args); + }); + this.receiveBuffer = []; + this.sendBuffer.forEach(function (packet) { + return _this3.packet(packet); + }); + this.sendBuffer = []; + } + /** + * Called upon server disconnect. + * + * @private + */ + + }, { + key: "ondisconnect", + value: function ondisconnect() { + debug("server disconnect (%s)", this.nsp); + this.destroy(); + this.onclose("io server disconnect"); + } + /** + * Called upon forced client/server side disconnections, + * this method ensures the manager stops tracking us and + * that reconnections don't get triggered for this. + * + * @private + */ + + }, { + key: "destroy", + value: function destroy() { + if (this.subs) { + // clean subscriptions to avoid reconnections + this.subs.forEach(function (subDestroy) { + return subDestroy(); + }); + this.subs = undefined; + } + + this.io["_destroy"](this); + } + /** + * Disconnects the socket manually. + * + * @return self + * @public + */ + + }, { + key: "disconnect", + value: function disconnect() { + if (this.connected) { + debug("performing disconnect (%s)", this.nsp); + this.packet({ + type: socket_io_parser_1.PacketType.DISCONNECT + }); + } // remove socket from pool + + + this.destroy(); + + if (this.connected) { + // fire events + this.onclose("io client disconnect"); + } + + return this; + } + /** + * Alias for disconnect() + * + * @return self + * @public + */ + + }, { + key: "close", + value: function close() { + return this.disconnect(); + } + /** + * Sets the compress flag. + * + * @param compress - if `true`, compresses the sending data + * @return self + * @public + */ + + }, { + key: "compress", + value: function compress(_compress) { + this.flags.compress = _compress; + return this; + } + /** + * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not + * ready to send messages. + * + * @returns self + * @public + */ + + }, { + key: "onAny", + + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. + * + * @param listener + * @public + */ + value: function onAny(listener) { + this._anyListeners = this._anyListeners || []; + + this._anyListeners.push(listener); + + return this; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. The listener is added to the beginning of the listeners array. + * + * @param listener + * @public + */ + + }, { + key: "prependAny", + value: function prependAny(listener) { + this._anyListeners = this._anyListeners || []; + + this._anyListeners.unshift(listener); + + return this; + } + /** + * Removes the listener that will be fired when any event is emitted. + * + * @param listener + * @public + */ + + }, { + key: "offAny", + value: function offAny(listener) { + if (!this._anyListeners) { + return this; + } + + if (listener) { + var listeners = this._anyListeners; + + for (var i = 0; i < listeners.length; i++) { + if (listener === listeners[i]) { + listeners.splice(i, 1); + return this; + } + } + } else { + this._anyListeners = []; + } + + return this; + } + /** + * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, + * e.g. to remove listeners. + * + * @public + */ + + }, { + key: "listenersAny", + value: function listenersAny() { + return this._anyListeners || []; + } + }, { + key: "active", + get: function get() { + return !!this.subs; + } + }, { + key: "volatile", + get: function get() { + this.flags["volatile"] = true; + return this; + } + }]); + + return Socket; +}(typed_events_1.StrictEventEmitter); + +exports.Socket = Socket; + +/***/ }), + +/***/ "./build/typed-events.js": +/*!*******************************!*\ + !*** ./build/typed-events.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.StrictEventEmitter = void 0; + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); +/** + * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type + * parameters for mappings of event names to event data types, and strictly + * types method calls to the `EventEmitter` according to these event maps. + * + * @typeParam ListenEvents - `EventsMap` of user-defined events that can be + * listened to with `on` or `once` + * @typeParam EmitEvents - `EventsMap` of user-defined events that can be + * emitted with `emit` + * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be + * emitted by socket.io with `emitReserved`, and can be listened to with + * `listen`. + */ + + +var StrictEventEmitter = /*#__PURE__*/function (_Emitter) { + _inherits(StrictEventEmitter, _Emitter); + + var _super = _createSuper(StrictEventEmitter); + + function StrictEventEmitter() { + _classCallCheck(this, StrictEventEmitter); + + return _super.apply(this, arguments); + } + + _createClass(StrictEventEmitter, [{ + key: "on", + + /** + * Adds the `listener` function as an event listener for `ev`. + * + * @param ev Name of the event + * @param listener Callback function + */ + value: function on(ev, listener) { + _get(_getPrototypeOf(StrictEventEmitter.prototype), "on", this).call(this, ev, listener); + + return this; + } + /** + * Adds a one-time `listener` function as an event listener for `ev`. + * + * @param ev Name of the event + * @param listener Callback function + */ + + }, { + key: "once", + value: function once(ev, listener) { + _get(_getPrototypeOf(StrictEventEmitter.prototype), "once", this).call(this, ev, listener); + + return this; + } + /** + * Emits an event. + * + * @param ev Name of the event + * @param args Values to send to listeners of this event + */ + + }, { + key: "emit", + value: function emit(ev) { + var _get2; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + (_get2 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get2, [this, ev].concat(args)); + + return this; + } + /** + * Emits a reserved event. + * + * This method is `protected`, so that only a class extending + * `StrictEventEmitter` can emit its own reserved events. + * + * @param ev Reserved event name + * @param args Arguments to emit along with the event + */ + + }, { + key: "emitReserved", + value: function emitReserved(ev) { + var _get3; + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + (_get3 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get3, [this, ev].concat(args)); + + return this; + } + /** + * Returns the listeners listening to an event. + * + * @param event Event name + * @returns Array of listeners subscribed to `event` + */ + + }, { + key: "listeners", + value: function listeners(event) { + return _get(_getPrototypeOf(StrictEventEmitter.prototype), "listeners", this).call(this, event); + } + }]); + + return StrictEventEmitter; +}(Emitter); + +exports.StrictEventEmitter = StrictEventEmitter; + +/***/ }), + +/***/ "./build/url.js": +/*!**********************!*\ + !*** ./build/url.js ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.url = void 0; + +var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:url"); +/** + * URL parser. + * + * @param uri - url + * @param path - the request path of the connection + * @param loc - An object meant to mimic window.location. + * Defaults to window.location. + * @public + */ + + +function url(uri) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; + var loc = arguments.length > 2 ? arguments[2] : undefined; + var obj = uri; // default to window.location + + loc = loc || typeof location !== "undefined" && location; + if (null == uri) uri = loc.protocol + "//" + loc.host; // relative path support + + if (typeof uri === "string") { + if ("/" === uri.charAt(0)) { + if ("/" === uri.charAt(1)) { + uri = loc.protocol + uri; + } else { + uri = loc.host + uri; + } + } + + if (!/^(https?|wss?):\/\//.test(uri)) { + debug("protocol-less url %s", uri); + + if ("undefined" !== typeof loc) { + uri = loc.protocol + "//" + uri; + } else { + uri = "https://" + uri; + } + } // parse + + + debug("parse %s", uri); + obj = parseuri(uri); + } // make sure we treat `localhost:80` and `localhost` equally + + + if (!obj.port) { + if (/^(http|ws)$/.test(obj.protocol)) { + obj.port = "80"; + } else if (/^(http|ws)s$/.test(obj.protocol)) { + obj.port = "443"; + } + } + + obj.path = obj.path || "/"; + var ipv6 = obj.host.indexOf(":") !== -1; + var host = ipv6 ? "[" + obj.host + "]" : obj.host; // define unique id + + obj.id = obj.protocol + "://" + host + ":" + obj.port + path; // define href + + obj.href = obj.protocol + "://" + host + (loc && loc.port === obj.port ? "" : ":" + obj.port); + return obj; +} + +exports.url = url; + +/***/ }), + +/***/ "./node_modules/backo2/index.js": +/*!**************************************!*\ + !*** ./node_modules/backo2/index.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Expose `Backoff`. + */ +module.exports = Backoff; +/** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + +function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; +} +/** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + + +Backoff.prototype.duration = function () { + var ms = this.ms * Math.pow(this.factor, this.attempts++); + + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + + return Math.min(ms, this.max) | 0; +}; +/** + * Reset the number of attempts. + * + * @api public + */ + + +Backoff.prototype.reset = function () { + this.attempts = 0; +}; +/** + * Set the minimum duration + * + * @api public + */ + + +Backoff.prototype.setMin = function (min) { + this.ms = min; +}; +/** + * Set the maximum duration + * + * @api public + */ + + +Backoff.prototype.setMax = function (max) { + this.max = max; +}; +/** + * Set the jitter + * + * @api public + */ + + +Backoff.prototype.setJitter = function (jitter) { + this.jitter = jitter; +}; + +/***/ }), + +/***/ "./node_modules/component-emitter/index.js": +/*!*************************************************!*\ + !*** ./node_modules/component-emitter/index.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Expose `Emitter`. + */ +if (true) { + module.exports = Emitter; +} +/** + * Initialize a new `Emitter`. + * + * @api public + */ + + +function Emitter(obj) { + if (obj) return mixin(obj); +} + +; +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + + return obj; +} +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); + return this; +}; +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.once = function (event, fn) { + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + +Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; // all + + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } // specific event + + + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; // remove all handlers + + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } // remove specific handler + + + var cb; + + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } // Remove event specific arrays for event types that no + // one is subscribed for to avoid memory leak. + + + if (callbacks.length === 0) { + delete this._callbacks['$' + event]; + } + + return this; +}; +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + + +Emitter.prototype.emit = function (event) { + this._callbacks = this._callbacks || {}; + var args = new Array(arguments.length - 1), + callbacks = this._callbacks['$' + event]; + + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + + if (callbacks) { + callbacks = callbacks.slice(0); + + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + + +Emitter.prototype.listeners = function (event) { + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + +Emitter.prototype.hasListeners = function (event) { + return !!this.listeners(event).length; +}; + +/***/ }), + +/***/ "./node_modules/debug/src/browser.js": +/*!*******************************************!*\ + !*** ./node_modules/debug/src/browser.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); + +exports.destroy = function () { + var warned = false; + return function () { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +}(); +/** + * Colors. + */ + + +exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ +// eslint-disable-next-line complexity + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); +} +/** + * Colorize log arguments if enabled. + * + * @api public + */ + + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); +} +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + + +exports.log = console.debug || console.log || function () {}; +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + +function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = __webpack_require__(/*! ./common */ "./node_modules/debug/src/common.js")(exports); +var formatters = module.exports.formatters; +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; + +/***/ }), + +/***/ "./node_modules/debug/src/common.js": +/*!******************************************!*\ + !*** ./node_modules/debug/src/common.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ +function setup(env) { + createDebug.debug = createDebug; + createDebug["default"] = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/ms/index.js"); + createDebug.destroy = destroy; + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + var enableOverride = null; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: function get() { + return enableOverride === null ? createDebug.enabled(namespace) : enableOverride; + }, + set: function set(v) { + enableOverride = v; + } + }); // Env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { + return '-' + namespace; + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + + + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + return createDebug; +} + +module.exports = setup; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/globalThis.browser.js": +/*!*****************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/globalThis.browser.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = function () { + if (typeof self !== "undefined") { + return self; + } else if (typeof window !== "undefined") { + return window; + } else { + return Function("return this")(); + } +}(); + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/index.js": +/*!****************************************************!*\ + !*** ./node_modules/engine.io-client/lib/index.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Socket = __webpack_require__(/*! ./socket */ "./node_modules/engine.io-client/lib/socket.js"); + +module.exports = function (uri, opts) { + return new Socket(uri, opts); +}; +/** + * Expose deps for legacy compatibility + * and standalone browser access. + */ + + +module.exports.Socket = Socket; +module.exports.protocol = Socket.protocol; // this is an int + +module.exports.Transport = __webpack_require__(/*! ./transport */ "./node_modules/engine.io-client/lib/transport.js"); +module.exports.transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js"); +module.exports.parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/socket.js": +/*!*****************************************************!*\ + !*** ./node_modules/engine.io-client/lib/socket.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js"); + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); + +var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:socket"); + +var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js"); + +var parseqs = __webpack_require__(/*! parseqs */ "./node_modules/parseqs/index.js"); + +var Socket = /*#__PURE__*/function (_Emitter) { + _inherits(Socket, _Emitter); + + var _super = _createSuper(Socket); + + /** + * Socket constructor. + * + * @param {String|Object} uri or options + * @param {Object} options + * @api public + */ + function Socket(uri) { + var _this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + _classCallCheck(this, Socket); + + _this = _super.call(this); + + if (uri && "object" === _typeof(uri)) { + opts = uri; + uri = null; + } + + if (uri) { + uri = parseuri(uri); + opts.hostname = uri.host; + opts.secure = uri.protocol === "https" || uri.protocol === "wss"; + opts.port = uri.port; + if (uri.query) opts.query = uri.query; + } else if (opts.host) { + opts.hostname = parseuri(opts.host).host; + } + + _this.secure = null != opts.secure ? opts.secure : typeof location !== "undefined" && "https:" === location.protocol; + + if (opts.hostname && !opts.port) { + // if no port is specified manually, use the protocol default + opts.port = _this.secure ? "443" : "80"; + } + + _this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost"); + _this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : _this.secure ? 443 : 80); + _this.transports = opts.transports || ["polling", "websocket"]; + _this.readyState = ""; + _this.writeBuffer = []; + _this.prevBufferLen = 0; + _this.opts = _extends({ + path: "/engine.io", + agent: false, + withCredentials: false, + upgrade: true, + jsonp: true, + timestampParam: "t", + rememberUpgrade: false, + rejectUnauthorized: true, + perMessageDeflate: { + threshold: 1024 + }, + transportOptions: {} + }, opts); + _this.opts.path = _this.opts.path.replace(/\/$/, "") + "/"; + + if (typeof _this.opts.query === "string") { + _this.opts.query = parseqs.decode(_this.opts.query); + } // set on handshake + + + _this.id = null; + _this.upgrades = null; + _this.pingInterval = null; + _this.pingTimeout = null; // set on heartbeat + + _this.pingTimeoutTimer = null; + + if (typeof addEventListener === "function") { + addEventListener("beforeunload", function () { + if (_this.transport) { + // silently close the transport + _this.transport.removeAllListeners(); + + _this.transport.close(); + } + }, false); + + if (_this.hostname !== "localhost") { + _this.offlineEventListener = function () { + _this.onClose("transport close"); + }; + + addEventListener("offline", _this.offlineEventListener, false); + } + } + + _this.open(); + + return _this; + } + /** + * Creates transport of the given type. + * + * @param {String} transport name + * @return {Transport} + * @api private + */ + + + _createClass(Socket, [{ + key: "createTransport", + value: function createTransport(name) { + debug('creating transport "%s"', name); + var query = clone(this.opts.query); // append engine.io protocol identifier + + query.EIO = parser.protocol; // transport name + + query.transport = name; // session id if we already have one + + if (this.id) query.sid = this.id; + + var opts = _extends({}, this.opts.transportOptions[name], this.opts, { + query: query, + socket: this, + hostname: this.hostname, + secure: this.secure, + port: this.port + }); + + debug("options: %j", opts); + return new transports[name](opts); + } + /** + * Initializes transport to use and starts probe. + * + * @api private + */ + + }, { + key: "open", + value: function open() { + var transport; + + if (this.opts.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1) { + transport = "websocket"; + } else if (0 === this.transports.length) { + // Emit error on next tick so it can be listened to + var self = this; + setTimeout(function () { + self.emit("error", "No transports available"); + }, 0); + return; + } else { + transport = this.transports[0]; + } + + this.readyState = "opening"; // Retry with the next transport if the transport is disabled (jsonp: false) + + try { + transport = this.createTransport(transport); + } catch (e) { + debug("error while creating transport: %s", e); + this.transports.shift(); + this.open(); + return; + } + + transport.open(); + this.setTransport(transport); + } + /** + * Sets the current transport. Disables the existing one (if any). + * + * @api private + */ + + }, { + key: "setTransport", + value: function setTransport(transport) { + debug("setting transport %s", transport.name); + var self = this; + + if (this.transport) { + debug("clearing existing transport %s", this.transport.name); + this.transport.removeAllListeners(); + } // set up transport + + + this.transport = transport; // set up transport listeners + + transport.on("drain", function () { + self.onDrain(); + }).on("packet", function (packet) { + self.onPacket(packet); + }).on("error", function (e) { + self.onError(e); + }).on("close", function () { + self.onClose("transport close"); + }); + } + /** + * Probes a transport. + * + * @param {String} transport name + * @api private + */ + + }, { + key: "probe", + value: function probe(name) { + debug('probing transport "%s"', name); + var transport = this.createTransport(name, { + probe: 1 + }); + var failed = false; + var self = this; + Socket.priorWebsocketSuccess = false; + + function onTransportOpen() { + if (self.onlyBinaryUpgrades) { + var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary; + failed = failed || upgradeLosesBinary; + } + + if (failed) return; + debug('probe transport "%s" opened', name); + transport.send([{ + type: "ping", + data: "probe" + }]); + transport.once("packet", function (msg) { + if (failed) return; + + if ("pong" === msg.type && "probe" === msg.data) { + debug('probe transport "%s" pong', name); + self.upgrading = true; + self.emit("upgrading", transport); + if (!transport) return; + Socket.priorWebsocketSuccess = "websocket" === transport.name; + debug('pausing current transport "%s"', self.transport.name); + self.transport.pause(function () { + if (failed) return; + if ("closed" === self.readyState) return; + debug("changing transport and sending upgrade packet"); + cleanup(); + self.setTransport(transport); + transport.send([{ + type: "upgrade" + }]); + self.emit("upgrade", transport); + transport = null; + self.upgrading = false; + self.flush(); + }); + } else { + debug('probe transport "%s" failed', name); + var err = new Error("probe error"); + err.transport = transport.name; + self.emit("upgradeError", err); + } + }); + } + + function freezeTransport() { + if (failed) return; // Any callback called by transport should be ignored since now + + failed = true; + cleanup(); + transport.close(); + transport = null; + } // Handle any error that happens while probing + + + function onerror(err) { + var error = new Error("probe error: " + err); + error.transport = transport.name; + freezeTransport(); + debug('probe transport "%s" failed because of error: %s', name, err); + self.emit("upgradeError", error); + } + + function onTransportClose() { + onerror("transport closed"); + } // When the socket is closed while we're probing + + + function onclose() { + onerror("socket closed"); + } // When the socket is upgraded while we're probing + + + function onupgrade(to) { + if (transport && to.name !== transport.name) { + debug('"%s" works - aborting "%s"', to.name, transport.name); + freezeTransport(); + } + } // Remove all listeners on the transport and on self + + + function cleanup() { + transport.removeListener("open", onTransportOpen); + transport.removeListener("error", onerror); + transport.removeListener("close", onTransportClose); + self.removeListener("close", onclose); + self.removeListener("upgrading", onupgrade); + } + + transport.once("open", onTransportOpen); + transport.once("error", onerror); + transport.once("close", onTransportClose); + this.once("close", onclose); + this.once("upgrading", onupgrade); + transport.open(); + } + /** + * Called when connection is deemed open. + * + * @api public + */ + + }, { + key: "onOpen", + value: function onOpen() { + debug("socket open"); + this.readyState = "open"; + Socket.priorWebsocketSuccess = "websocket" === this.transport.name; + this.emit("open"); + this.flush(); // we check for `readyState` in case an `open` + // listener already closed the socket + + if ("open" === this.readyState && this.opts.upgrade && this.transport.pause) { + debug("starting upgrade probes"); + var i = 0; + var l = this.upgrades.length; + + for (; i < l; i++) { + this.probe(this.upgrades[i]); + } + } + } + /** + * Handles a packet. + * + * @api private + */ + + }, { + key: "onPacket", + value: function onPacket(packet) { + if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { + debug('socket receive: type "%s", data "%s"', packet.type, packet.data); + this.emit("packet", packet); // Socket is live - any packet counts + + this.emit("heartbeat"); + + switch (packet.type) { + case "open": + this.onHandshake(JSON.parse(packet.data)); + break; + + case "ping": + this.resetPingTimeout(); + this.sendPacket("pong"); + this.emit("pong"); + break; + + case "error": + var err = new Error("server error"); + err.code = packet.data; + this.onError(err); + break; + + case "message": + this.emit("data", packet.data); + this.emit("message", packet.data); + break; + } + } else { + debug('packet received with socket readyState "%s"', this.readyState); + } + } + /** + * Called upon handshake completion. + * + * @param {Object} handshake obj + * @api private + */ + + }, { + key: "onHandshake", + value: function onHandshake(data) { + this.emit("handshake", data); + this.id = data.sid; + this.transport.query.sid = data.sid; + this.upgrades = this.filterUpgrades(data.upgrades); + this.pingInterval = data.pingInterval; + this.pingTimeout = data.pingTimeout; + this.onOpen(); // In case open handler closes socket + + if ("closed" === this.readyState) return; + this.resetPingTimeout(); + } + /** + * Sets and resets ping timeout timer based on server pings. + * + * @api private + */ + + }, { + key: "resetPingTimeout", + value: function resetPingTimeout() { + var _this2 = this; + + clearTimeout(this.pingTimeoutTimer); + this.pingTimeoutTimer = setTimeout(function () { + _this2.onClose("ping timeout"); + }, this.pingInterval + this.pingTimeout); + + if (this.opts.autoUnref) { + this.pingTimeoutTimer.unref(); + } + } + /** + * Called on `drain` event + * + * @api private + */ + + }, { + key: "onDrain", + value: function onDrain() { + this.writeBuffer.splice(0, this.prevBufferLen); // setting prevBufferLen = 0 is very important + // for example, when upgrading, upgrade packet is sent over, + // and a nonzero prevBufferLen could cause problems on `drain` + + this.prevBufferLen = 0; + + if (0 === this.writeBuffer.length) { + this.emit("drain"); + } else { + this.flush(); + } + } + /** + * Flush write buffers. + * + * @api private + */ + + }, { + key: "flush", + value: function flush() { + if ("closed" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) { + debug("flushing %d packets in socket", this.writeBuffer.length); + this.transport.send(this.writeBuffer); // keep track of current length of writeBuffer + // splice writeBuffer and callbackBuffer on `drain` + + this.prevBufferLen = this.writeBuffer.length; + this.emit("flush"); + } + } + /** + * Sends a message. + * + * @param {String} message. + * @param {Function} callback function. + * @param {Object} options. + * @return {Socket} for chaining. + * @api public + */ + + }, { + key: "write", + value: function write(msg, options, fn) { + this.sendPacket("message", msg, options, fn); + return this; + } + }, { + key: "send", + value: function send(msg, options, fn) { + this.sendPacket("message", msg, options, fn); + return this; + } + /** + * Sends a packet. + * + * @param {String} packet type. + * @param {String} data. + * @param {Object} options. + * @param {Function} callback function. + * @api private + */ + + }, { + key: "sendPacket", + value: function sendPacket(type, data, options, fn) { + if ("function" === typeof data) { + fn = data; + data = undefined; + } + + if ("function" === typeof options) { + fn = options; + options = null; + } + + if ("closing" === this.readyState || "closed" === this.readyState) { + return; + } + + options = options || {}; + options.compress = false !== options.compress; + var packet = { + type: type, + data: data, + options: options + }; + this.emit("packetCreate", packet); + this.writeBuffer.push(packet); + if (fn) this.once("flush", fn); + this.flush(); + } + /** + * Closes the connection. + * + * @api private + */ + + }, { + key: "close", + value: function close() { + var self = this; + + if ("opening" === this.readyState || "open" === this.readyState) { + this.readyState = "closing"; + + if (this.writeBuffer.length) { + this.once("drain", function () { + if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + }); + } else if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + } + + function close() { + self.onClose("forced close"); + debug("socket closing - telling transport to close"); + self.transport.close(); + } + + function cleanupAndClose() { + self.removeListener("upgrade", cleanupAndClose); + self.removeListener("upgradeError", cleanupAndClose); + close(); + } + + function waitForUpgrade() { + // wait for upgrade to finish since we can't send packets while pausing a transport + self.once("upgrade", cleanupAndClose); + self.once("upgradeError", cleanupAndClose); + } + + return this; + } + /** + * Called upon transport error + * + * @api private + */ + + }, { + key: "onError", + value: function onError(err) { + debug("socket error %j", err); + Socket.priorWebsocketSuccess = false; + this.emit("error", err); + this.onClose("transport error", err); + } + /** + * Called upon transport close. + * + * @api private + */ + + }, { + key: "onClose", + value: function onClose(reason, desc) { + if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { + debug('socket close with reason: "%s"', reason); + var self = this; // clear timers + + clearTimeout(this.pingIntervalTimer); + clearTimeout(this.pingTimeoutTimer); // stop event from firing again for transport + + this.transport.removeAllListeners("close"); // ensure transport won't stay open + + this.transport.close(); // ignore further transport communication + + this.transport.removeAllListeners(); + + if (typeof removeEventListener === "function") { + removeEventListener("offline", this.offlineEventListener, false); + } // set ready state + + + this.readyState = "closed"; // clear session id + + this.id = null; // emit close event + + this.emit("close", reason, desc); // clean buffers after, so users can still + // grab the buffers on `close` event + + self.writeBuffer = []; + self.prevBufferLen = 0; + } + } + /** + * Filters upgrades, returning only those matching client transports. + * + * @param {Array} server upgrades + * @api private + * + */ + + }, { + key: "filterUpgrades", + value: function filterUpgrades(upgrades) { + var filteredUpgrades = []; + var i = 0; + var j = upgrades.length; + + for (; i < j; i++) { + if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]); + } + + return filteredUpgrades; + } + }]); + + return Socket; +}(Emitter); + +Socket.priorWebsocketSuccess = false; +/** + * Protocol version. + * + * @api public + */ + +Socket.protocol = parser.protocol; // this is an int + +function clone(obj) { + var o = {}; + + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + o[i] = obj[i]; + } + } + + return o; +} + +module.exports = Socket; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transport.js": +/*!********************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transport.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js"); + +var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js"); + +var Transport = /*#__PURE__*/function (_Emitter) { + _inherits(Transport, _Emitter); + + var _super = _createSuper(Transport); + + /** + * Transport abstract constructor. + * + * @param {Object} options. + * @api private + */ + function Transport(opts) { + var _this; + + _classCallCheck(this, Transport); + + _this = _super.call(this); + _this.opts = opts; + _this.query = opts.query; + _this.readyState = ""; + _this.socket = opts.socket; + return _this; + } + /** + * Emits an error. + * + * @param {String} str + * @return {Transport} for chaining + * @api public + */ + + + _createClass(Transport, [{ + key: "onError", + value: function onError(msg, desc) { + var err = new Error(msg); + err.type = "TransportError"; + err.description = desc; + this.emit("error", err); + return this; + } + /** + * Opens the transport. + * + * @api public + */ + + }, { + key: "open", + value: function open() { + if ("closed" === this.readyState || "" === this.readyState) { + this.readyState = "opening"; + this.doOpen(); + } + + return this; + } + /** + * Closes the transport. + * + * @api private + */ + + }, { + key: "close", + value: function close() { + if ("opening" === this.readyState || "open" === this.readyState) { + this.doClose(); + this.onClose(); + } + + return this; + } + /** + * Sends multiple packets. + * + * @param {Array} packets + * @api private + */ + + }, { + key: "send", + value: function send(packets) { + if ("open" === this.readyState) { + this.write(packets); + } else { + throw new Error("Transport not open"); + } + } + /** + * Called upon open + * + * @api private + */ + + }, { + key: "onOpen", + value: function onOpen() { + this.readyState = "open"; + this.writable = true; + this.emit("open"); + } + /** + * Called with data. + * + * @param {String} data + * @api private + */ + + }, { + key: "onData", + value: function onData(data) { + var packet = parser.decodePacket(data, this.socket.binaryType); + this.onPacket(packet); + } + /** + * Called with a decoded packet. + */ + + }, { + key: "onPacket", + value: function onPacket(packet) { + this.emit("packet", packet); + } + /** + * Called upon close. + * + * @api private + */ + + }, { + key: "onClose", + value: function onClose() { + this.readyState = "closed"; + this.emit("close"); + } + }]); + + return Transport; +}(Emitter); + +module.exports = Transport; + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transports/index.js": +/*!***************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transports/index.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var XMLHttpRequest = __webpack_require__(/*! ../../contrib/xmlhttprequest-ssl/XMLHttpRequest */ "./node_modules/engine.io-client/lib/xmlhttprequest.js"); + +var XHR = __webpack_require__(/*! ./polling-xhr */ "./node_modules/engine.io-client/lib/transports/polling-xhr.js"); + +var JSONP = __webpack_require__(/*! ./polling-jsonp */ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js"); + +var websocket = __webpack_require__(/*! ./websocket */ "./node_modules/engine.io-client/lib/transports/websocket.js"); + +exports.polling = polling; +exports.websocket = websocket; +/** + * Polling transport polymorphic constructor. + * Decides on xhr vs jsonp based on feature detection. + * + * @api private + */ + +function polling(opts) { + var xhr; + var xd = false; + var xs = false; + var jsonp = false !== opts.jsonp; + + if (typeof location !== "undefined") { + var isSSL = "https:" === location.protocol; + var port = location.port; // some user agents have empty `location.port` + + if (!port) { + port = isSSL ? 443 : 80; + } + + xd = opts.hostname !== location.hostname || port !== opts.port; + xs = opts.secure !== isSSL; + } + + opts.xdomain = xd; + opts.xscheme = xs; + xhr = new XMLHttpRequest(opts); + + if ("open" in xhr && !opts.forceJSONP) { + return new XHR(opts); + } else { + if (!jsonp) throw new Error("JSONP disabled"); + return new JSONP(opts); + } +} + +/***/ }), + +/***/ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js": +/*!***********************************************************************!*\ + !*** ./node_modules/engine.io-client/lib/transports/polling-jsonp.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +var Polling = __webpack_require__(/*! ./polling */ "./node_modules/engine.io-client/lib/transports/polling.js"); + +var globalThis = __webpack_require__(/*! ../globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js"); + +var rNewline = /\n/g; +var rEscapedNewline = /\\n/g; +/** + * Global JSONP callbacks. + */ + +var callbacks; + +var JSONPPolling = /*#__PURE__*/function (_Polling) { + _inherits(JSONPPolling, _Polling); + + var _super = _createSuper(JSONPPolling); + + /** + * JSONP Polling constructor. + * + * @param {Object} opts. + * @api public + */ + function JSONPPolling(opts) { + var _this; + + _classCallCheck(this, JSONPPolling); + + _this = _super.call(this, opts); + _this.query = _this.query || {}; // define global callbacks array if not present + // we do this here (lazily) to avoid unneeded global pollution + + if (!callbacks) { + // we need to consider multiple engines in the same page + callbacks = globalThis.___eio = globalThis.___eio || []; + } // callback identifier + + + _this.index = callbacks.length; // add callback to jsonp global + + var self = _assertThisInitialized(_this); + + callbacks.push(function (msg) { + self.onData(msg); + }); // append to query string + + _this.query.j = _this.index; + return _this; + } + /** + * JSONP only supports binary as base64 encoded strings + */ + + + _createClass(JSONPPolling, [{ + key: "doClose", + + /** + * Closes the socket. + * + * @api private + */ + value: function doClose() { + if (this.script) { + // prevent spurious errors from being emitted when the window is unloaded + this.script.onerror = function () {}; + + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + if (this.form) { + this.form.parentNode.removeChild(this.form); + this.form = null; + this.iframe = null; + } + + _get(_getPrototypeOf(JSONPPolling.prototype), "doClose", this).call(this); + } + /** + * Starts a poll cycle. + * + * @api private + */ + + }, { + key: "doPoll", + value: function doPoll() { + var self = this; + var script = document.createElement("script"); + + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + script.async = true; + script.src = this.uri(); + + script.onerror = function (e) { + self.onError("jsonp poll error", e); + }; + + var insertAt = document.getElementsByTagName("script")[0]; + + if (insertAt) { + insertAt.parentNode.insertBefore(script, insertAt); + } else { + (document.head || document.body).appendChild(script); + } + + this.script = script; + var isUAgecko = "undefined" !== typeof navigator && /gecko/i.test(navigator.userAgent); + + if (isUAgecko) { + setTimeout(function () { + var iframe = document.createElement("iframe"); + document.body.appendChild(iframe); + document.body.removeChild(iframe); + }, 100); + } + } + /** + * Writes with a hidden iframe. + * + * @param {String} data to send + * @param {Function} called upon flush. + * @api private + */ + + }, { + key: "doWrite", + value: function doWrite(data, fn) { + var self = this; + var iframe; + + if (!this.form) { + var form = document.createElement("form"); + var area = document.createElement("textarea"); + var id = this.iframeId = "eio_iframe_" + this.index; + form.className = "socketio"; + form.style.position = "absolute"; + form.style.top = "-1000px"; + form.style.left = "-1000px"; + form.target = id; + form.method = "POST"; + form.setAttribute("accept-charset", "utf-8"); + area.name = "d"; + form.appendChild(area); + document.body.appendChild(form); + this.form = form; + this.area = area; + } + + this.form.action = this.uri(); + + function complete() { + initIframe(); + fn(); + } + + function initIframe() { + if (self.iframe) { + try { + self.form.removeChild(self.iframe); + } catch (e) { + self.onError("jsonp polling iframe removal error", e); + } + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + var html = ' + + + + + + \ No newline at end of file diff --git a/views/_old/view-renderwindow_program.handlebars b/views/_old/view-renderwindow_program.handlebars new file mode 100644 index 0000000..ecfb0a0 --- /dev/null +++ b/views/_old/view-renderwindow_program.handlebars @@ -0,0 +1,103 @@ + + + + + + + SPX - PROGRAM EMULATOR + + + + + + + + +
+
+ +
+ + + + + \ No newline at end of file diff --git a/views/layouts/__main.handlebars b/views/layouts/__main.handlebars new file mode 100644 index 0000000..d787f3c --- /dev/null +++ b/views/layouts/__main.handlebars @@ -0,0 +1,68 @@ + + + + + + Example App + + + + + + + + {{>navi}} + + + {{{body}}} + + + + \ No newline at end of file diff --git a/views/layouts/filelist.handlebars b/views/layouts/filelist.handlebars new file mode 100644 index 0000000..1c99487 --- /dev/null +++ b/views/layouts/filelist.handlebars @@ -0,0 +1,172 @@ + + + + + + + Choose a file + + + + + + +
+ +

+ + {{{body}}} + +
+ + + \ No newline at end of file diff --git a/views/layouts/main.handlebars b/views/layouts/main.handlebars new file mode 100644 index 0000000..e69de29 diff --git a/views/partials/copyright.handlebars b/views/partials/copyright.handlebars new file mode 100644 index 0000000..52cd996 --- /dev/null +++ b/views/partials/copyright.handlebars @@ -0,0 +1,15 @@ + diff --git a/views/partials/footer.handlebars b/views/partials/footer.handlebars new file mode 100644 index 0000000..de44426 --- /dev/null +++ b/views/partials/footer.handlebars @@ -0,0 +1,80 @@ + + + + + + \ No newline at end of file diff --git a/views/partials/header.handlebars b/views/partials/header.handlebars new file mode 100644 index 0000000..840186d --- /dev/null +++ b/views/partials/header.handlebars @@ -0,0 +1,153 @@ + +
+ +
+ +
+ {{#ifValue page "appconfig"}} + + SPX Solo - {{lang 'pagetitle.configapp'}} + {{/ifValue}} + + {{#ifValue page "shows"}} + + {{lang 'pagetitle.shows'}} + {{/ifValue}} + + {{#ifValue page "showconfig"}} + + {{lang 'pagetitle.shows'}} + + {{prettyfyBreadcrumb folder}} + + {{lang 'pagetitle.configshow'}} + {{/ifValue}} + + {{#ifValue page "episodes"}} + + {{lang 'pagetitle.shows'}} + + {{prettyfyBreadcrumb folder}} + +
+ +
+ {{/ifValue}} + + {{#ifValue page "controller"}} + + {{lang 'pagetitle.shows'}} + + {{prettyfyBreadcrumb folder}} +
+ +
+ + + {{prettyfyBreadcrumb filebasename}} +
+ +
+ {{/ifValue}} + + {{{DetectCustomContentPackages}}} + + + +
+
+ {{#ifValue page "controller"}} + {{{ServerStatus}}} + {{/ifValue}} +
+
\ No newline at end of file diff --git a/views/partials/partial-genericfilebrowsermodal.handlebars b/views/partials/partial-genericfilebrowsermodal.handlebars new file mode 100644 index 0000000..e757a73 --- /dev/null +++ b/views/partials/partial-genericfilebrowsermodal.handlebars @@ -0,0 +1,49 @@ + +
+ +
\ No newline at end of file diff --git a/views/partials/partial-showextrabrowsermodal.handlebars b/views/partials/partial-showextrabrowsermodal.handlebars new file mode 100644 index 0000000..e4f0b2f --- /dev/null +++ b/views/partials/partial-showextrabrowsermodal.handlebars @@ -0,0 +1,53 @@ + + + + + + +
+ +
\ No newline at end of file diff --git a/views/partials/partial-templatebrowsermodal.handlebars b/views/partials/partial-templatebrowsermodal.handlebars new file mode 100644 index 0000000..085ecb4 --- /dev/null +++ b/views/partials/partial-templatebrowsermodal.handlebars @@ -0,0 +1,201 @@ + + + + + + +
+ + + +
\ No newline at end of file diff --git a/views/partials/projectForm.handlebars b/views/partials/projectForm.handlebars new file mode 100644 index 0000000..2dd4aaa --- /dev/null +++ b/views/partials/projectForm.handlebars @@ -0,0 +1,145 @@ + + + + +
+ +
diff --git a/views/partials/rundownComment copy.handlebars b/views/partials/rundownComment copy.handlebars new file mode 100644 index 0000000..2aac6d3 --- /dev/null +++ b/views/partials/rundownComment copy.handlebars @@ -0,0 +1,70 @@ +
+ +
+ +
+ + +
+
Rundown comment
+
+ + + +
+
+
+ + diff --git a/views/partials/rundownForm.handlebars b/views/partials/rundownForm.handlebars new file mode 100644 index 0000000..9648a4f --- /dev/null +++ b/views/partials/rundownForm.handlebars @@ -0,0 +1,130 @@ + + + + +
+ +
\ No newline at end of file diff --git a/views/partials/rundownOptions.handlebars b/views/partials/rundownOptions.handlebars new file mode 100644 index 0000000..c2a5f46 --- /dev/null +++ b/views/partials/rundownOptions.handlebars @@ -0,0 +1,50 @@ +
+
+ + + + + + + + + + + +
+ Comment + + +
+ Light mode + + Light mode is an experimental, simplified version of the rundown, with less features + and it can be used for example on mobile devices or as a custom dock in OBS.
+ +
+ +
+
diff --git a/views/partials/socketserver.handlebars b/views/partials/socketserver.handlebars new file mode 100644 index 0000000..2b672b9 --- /dev/null +++ b/views/partials/socketserver.handlebars @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/views/view-admin.handlebars b/views/view-admin.handlebars new file mode 100644 index 0000000..5615db9 --- /dev/null +++ b/views/view-admin.handlebars @@ -0,0 +1,82 @@ + +{{>copyright }} + + + + + + + + SPX {{SPX.title}} | {{lang 'pagetitle.admin'}} + + + + + + + + + + + + +
+ +
+ + \ No newline at end of file diff --git a/views/view-api-v1.handlebars b/views/view-api-v1.handlebars new file mode 100644 index 0000000..4d9e711 --- /dev/null +++ b/views/view-api-v1.handlebars @@ -0,0 +1,340 @@ + + + + + + + SPX API v1 Documentation + + + + + + + + + + +
+
+

<SPX API v1

+

Explore the available API endpoints provided by this SPX Graphics instance. Use the expandable sections below to find the endpoints you need. See SPX Docs for an introduction to the Control API.

+ {{license.productName}} HOST-ID: {{{getHostID}}}
+
Use "localhost" addresses in examples
+
+ +
+ {{#each functionList.sections}} +
+

+ +

+
+
+ + {{#each commands}} +
+
+ {{method}} + {{vers}} +
+
+ +
+ {{#ifValue active false}} +
🔒
+ {{/ifValue}} + + http://{{{getServerAddress}}}{{../endpoint}}{{param}} + +
+
+

{{{info}}}

+ + {{#if code}} +
{{myStringify code}}
+ {{/if}} +
+ {{/each}} +
+
+
+ {{/each}} +
+ +
+

+ Need custom development or system integration?
+ Contact us.

+ © 2021- SPX Graphics +

+
+
+ + + \ No newline at end of file diff --git a/views/view-appconfig.handlebars b/views/view-appconfig.handlebars new file mode 100644 index 0000000..e307e95 --- /dev/null +++ b/views/view-appconfig.handlebars @@ -0,0 +1,651 @@ + +{{>copyright }} + + + + + + + + + + + + + SPX | {{lang 'pagetitle.configapp'}} + + + + + + + + + + + + + + + {{#ifValue config.general.disableConfigUI true}} +
Configuration locked by admin.
+ {{/ifValue}} + +
+
+ {{>header page="appconfig"}} +
+ {{#ifValue config.general.disableConfigUI true}} +
+ {{else}} +
+ {{/ifValue}} +
+
+ + {{#if message}} +
{{message}}
+ {{/if}} + + {{#if error}} +
{{error}}
+ {{/if}} + + +
+ + + + + + + + + + + + + + + +
+
+

SPX Solo

+

+ This SPX Solo v.{{{ShowVersion}}} is a limited version of SPX Graphics for personal use and light productions. For more advanced professional features and capabilities, consider SPX Production or SPX Broadcast. + Read more +

+
+
{{lang 'config.general'}}  
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Config file + + {{configfile}} +
+ {{lang 'config.language'}} + + +
+ +
+ {{lang 'config.loglevel'}} * + + +
+ {{lang 'config.logfolder'}} * + + +
+ {{lang 'config.serverport'}} *   + + +
+ {{lang 'config.dataroot'}} * + + +
+ {{lang 'config.preview'}} + + +

+
+ Local renderer autoplay + + +

+
+ {{lang 'config.resolution'}} + + +

+ + {{lang 'config.resolutioninfo'}} + +

+
+ + + + +

+ + + + + +
{{lang 'config.webplayout'}} 
+
+ + + + + + + + +
+ {{lang 'config.webplayurl'}} * + + +
+ +

+ + + + + +
API 
+
+ + + + + +
+ API endpoints + + +

+
+ + +

+ + + + + +
{{lang 'config.casparcg'}} * 
+
+ + + + + + {{#each config.casparcg.servers}} + + + + + + {{/each}} + + + + + + + + + +
+ + {{#ifValue @index 0}} + {{lang 'config.ccgservers'}} + {{else}} +   + {{/ifValue}} + + + {{@index}} + + + +
+   + + + + + + +
+   + +

+
{{lang 'config.restartinfo'}}
+

+
+ + + + + + + + + + + + + + + + + + + + + +
{{lang 'config.globalbuttons'}} * 
+
+ + + + + + + + + + +
+ {{lang 'config.functionlibrary'}} + + +
+ + + + + + +
+ {{lang 'config.globalbuttons'}} + + + + {{#each config.globalExtras.CustomControls}} + +
+ +
+ + + + + + + + + + + + + {{#ifValue ftype "button"}} + + + + + + + + + + + {{/ifValue}} + + {{#ifValue ftype "selectbutton"}} + + + + + + + + + + + {{/ifValue}} + + + {{#ifValue ftype "togglebutton"}} + + + + + + + + + + + {{/ifValue}} + + + + + + + + +
{{lang 'config.buttontype'}}{{ftype}}
{{lang 'config.buttoncolor'}} + +
{{lang 'config.buttontext'}} + +
{{lang 'config.functionhandler'}}
{{lang 'config.buttontext'}} + +
{{lang 'config.functionhandler'}}
{{lang 'config.buttontexts'}} + + +
{{lang 'config.functionhandler'}}
{{lang 'config.functiondescription'}}
+ + + + + + + +
+ +   + +
+ + +
+
+ + + + + {{/each}} + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ * {{lang 'config.restartinfo'}} +
+
+
+ + +
+ + +
+
+
+ + + {{>footer}} + + +
+ + + + + + + \ No newline at end of file diff --git a/views/view-authpolicy.handlebars b/views/view-authpolicy.handlebars new file mode 100644 index 0000000..e59a0d6 --- /dev/null +++ b/views/view-authpolicy.handlebars @@ -0,0 +1,130 @@ + +{{>copyright }} + + + + + + + + SPX {{SPX.title}} | {{lang 'pagetitle.authpolicy'}} + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/views/view-controller.handlebars b/views/view-controller.handlebars new file mode 100644 index 0000000..e78d13a --- /dev/null +++ b/views/view-controller.handlebars @@ -0,0 +1,1355 @@ + +{{>copyright }} + + + + + + + + + + + + + + + + + + + + + + + SPX | {{lang 'pagetitle.controller'}} + + + + + + + + + + + + + + + {{{ hookLoadControllerPlugins }}} + + + + + + + + + + + + + + + + + +
+ + +
+ + {{>partial-genericfilebrowsermodal}} + +
+ + +
+ + + +
+ +
+ {{lang 'warning.severalControllers'}}   + + + +
+ +
+ {{>header page="controller" }} +
+ + +
+ +
+ +
+ {{>rundownOptions comment=filedata.comment }} +
+ + +
+ + {{#if filedata.notification}} +
+
+ {{#if filedata.notification.head}} +
{{filedata.notification.head}}
+ {{/if}} +
{{filedata.notification.body}}
+ {{#if filedata.notification.link}} + + {{/if}} +
+ {{#if filedata.notification.pict}} +
+ {{/if}} +
+ {{/if}} + + {{#if filedata.templates}} + + {{else}} +
+

Empty rundown


+

+ Add templates to this rundown from + button below.
+ Press 'F1' to open a list of useful keyboard shortcuts. +

+
+ {{/if}} + + + + + {{#each filedata.templates}} + + {{#if DataFields}} + +
+ +
+ + + + + +
+ +
+ + + + + + +
+ + + +
+ + + + + +
+ {{{ nameFromTemplatePath relpath }}} + {{#if description}} + {{description}} + {{/if}} + +
+
+ + {{{ generateCollapsedHeadline DataFields }}} + +
+
+ + + + +
+
+
+ {{else}} + + {{/if}} + {{/each}} + + + +
+ +
+
+ +
+ + + {{!-- MASTER STOP / PLAY / UPDATE --}} +
+ + + + + +
+
+ +
+ + +
+ + + +
+
Local SPX Renderer
DISABLED
+ +
+
+
+ + + +
+ +
+
+ + + +
+ +
+ + + + + + + + + + + + + + +
{{lang 'config.autoplay'}} +
+ +
+
Disable local renderer +
+ +
+
+ Popup program renderer + +
+ +
+
+ +
+ + + + + + + +
+ Popup preview viewer + +
+ +
+
+ +
+ +
+
+
+
+ +
+ +
+ +
+ + + + {{{ GenerateCustomControls profiledataObj.showExtras.CustomControls }}} + + {{{ GenerateCustomControls globalExtras.CustomControls }}} + +
+
+ + {{#if easteregg}} +
+ {{/if}} + + {{>footer}} +
+ + + + + + \ No newline at end of file diff --git a/views/view-controllermini.handlebars b/views/view-controllermini.handlebars new file mode 100644 index 0000000..5545f68 --- /dev/null +++ b/views/view-controllermini.handlebars @@ -0,0 +1,822 @@ + +{{>copyright }} + + + + + + + + + + + + + + + + + + + SPX Light | {{lang 'pagetitle.controller'}} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + +
+ +
+
+
+ +
+
+ +
+
+ + {{#if filedata.templates}} + + {{else}} +
+

Empty rundown


+
+ {{/if}} + + + + {{#each filedata.templates}} + + {{#if DataFields}} + +
+ +
+ + + + + +
+ + +
+
+ + + +
+ + + + + +
+ {{{ nameFromTemplatePath relpath }}} + {{#if description}} + {{description}} + {{/if}} + + +   + +
+
+ + {{{ generateCollapsedHeadline DataFields }}} + +
+
+ + + + +
+
+
+ {{else}} + + {{/if}} + {{/each}} + + + + + +
+ +
+ + {{{ hookLoadControllerPlugins }}} + +
+ +
+ +
+ +
+ Light mode is an experimental feature. Please report any issues. +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/views/view-empty.handlebars b/views/view-empty.handlebars new file mode 100644 index 0000000..ca67bc1 --- /dev/null +++ b/views/view-empty.handlebars @@ -0,0 +1,48 @@ + + + + + + + Empty + + + + + + + + + + + + + + + + + + + + + diff --git a/views/view-episodes.handlebars b/views/view-episodes.handlebars new file mode 100644 index 0000000..98ebe16 --- /dev/null +++ b/views/view-episodes.handlebars @@ -0,0 +1,165 @@ + +{{>copyright }} + + + + + + + SPX{{SPX.title}} | {{lang 'pagetitle.select'}} + + + + + + + + + + + + + + + + +{{>rundownForm}} + + + + + +
+
+ {{>header page="episodes"}} +
+ + +
+
+ + +
+ + {{#if message}} +
{{message}}
+ {{/if}} + + {{#if error}} +
{{error}}
+ {{/if}} +
+
{{lang 'headline.selectfile'}}
+
+ {{#ifValue showconfig.projectFormat 'OGRAF'}} + + + + {{/ifValue}} +   +
+ +
+ + + {{!-- + + + + +
{{lang 'headline.selectfile'}} 
--}} +
+ + + + + +
+
+
+ +
+ + {{#if files}} + + {{else}} +
{{lang 'headline.createrundowntip'}}
+ {{/if}} + + + + + + + + +
+ + + + + + + +
+ + +
+
+
+ + + {{>footer}} +
+ + + + + + + + + + + \ No newline at end of file diff --git a/views/view-fileBrowser.handlebars b/views/view-fileBrowser.handlebars new file mode 100644 index 0000000..def3280 --- /dev/null +++ b/views/view-fileBrowser.handlebars @@ -0,0 +1,76 @@ + +{{>copyright }} + + + + + + Filebrowser + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
    +
  • ROOT
  • +
  • UP
  • +
+
+
+ +
+
+ +
+
+
+
+
+ + + + + diff --git a/views/view-home.handlebars b/views/view-home.handlebars new file mode 100644 index 0000000..ffd2351 --- /dev/null +++ b/views/view-home.handlebars @@ -0,0 +1,320 @@ + +{{>copyright }} + + + + + + + + SPX {{SPX.title}} | {{lang 'pagetitle.home'}} + + + + + + + + + + + + + + + + + + + + +
+
+ {{>header page="home"}} +
+ +
+
+
+ {{#if message}} +
{{message}}
+ {{/if}} + {{#if error}} +
{{error}}
+ {{/if}} + + + + + +
+ {{lang 'pagetitle.home'}} + {{#ifValue user "default"}} + + {{else}} + {{user}} + {{/ifValue}} +  
+
+ + + + +
+
+ +

SPX Graphics

+ + {{lang 'general.slogan'}}
+
+
+ +
 
+ + {{#if greeting}} +
{{greeting}}
+ {{/if}} + +
+ + + + +
+ + + + + + +
+ + +
+ + Splash screen promo + +
+
+ + + + +
+
+
+ + + {{>footer}} + +
Questions or comments?
+
+ + + + + \ No newline at end of file diff --git a/views/view-login.handlebars b/views/view-login.handlebars new file mode 100644 index 0000000..b9ec350 --- /dev/null +++ b/views/view-login.handlebars @@ -0,0 +1,107 @@ + + + + +{{>copyright }} + + + + + + + + SPX {{SPX.title}} | {{lang 'pagetitle.login'}} + + + + + + + + + + + + +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/views/view-registration.handlebars b/views/view-registration.handlebars new file mode 100644 index 0000000..db30677 --- /dev/null +++ b/views/view-registration.handlebars @@ -0,0 +1,513 @@ + +{{>copyright }} + + + + + + + + SPX {{SPX.title}} | Register + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/views/view-renderer.handlebars b/views/view-renderer.handlebars new file mode 100644 index 0000000..38fd146 --- /dev/null +++ b/views/view-renderer.handlebars @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + SPX Renderer + + + + + + + +
+ + {{#ifValue hideCursor "true"}} +
+ {{/ifValue}} + + + + + + +
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/views/view-rendererscalable.handlebars b/views/view-rendererscalable.handlebars new file mode 100644 index 0000000..2dd611a --- /dev/null +++ b/views/view-rendererscalable.handlebars @@ -0,0 +1,179 @@ + + + + + + + + + + SPX - scalable renderer view + + + + + + + + {{#ifValue mode 'preview'}} + + {{/ifValue}} + + {{#ifValue mode 'program'}} +
+ {{/ifValue}} + + +
+ + {{#ifValue mode 'preview'}} + + {{else}} + + {{/ifValue}} +
+ + +
+ THIS SCALABLE VIEW IS FOR SPX OPERATOR ONLY +
+ Use transparent /renderer for production. +
+ + + + + + \ No newline at end of file diff --git a/views/view-showconfig.handlebars b/views/view-showconfig.handlebars new file mode 100644 index 0000000..ead9b59 --- /dev/null +++ b/views/view-showconfig.handlebars @@ -0,0 +1,540 @@ + +{{>copyright }} + + + + + + + + + + + + + + SPX | {{lang 'pagetitle.configshow'}} + + + + + + + + + + + + + + + + + + +{{!--

format: {{showconfig.projectFormat}}

--}} + + +{{>partial-templatebrowsermodal}} +{{>partial-showextrabrowsermodal}} + + +
+ + +
+ {{>header page="showconfig"}} +
+ + +
+
+
+ + {{#if messageCode}} +
{{messageCode}}
+ {{/if}} + + {{#if errorCode}} +
{{errorCode}}

{{lang errorCode}}
+ {{/if}} +
+
{{lang 'config.templates'}}
+
+ {{#ifValue showconfig.projectFormat 'OGRAF'}} + + + + {{/ifValue}} +   +
+ +
+ + + + + + {{!-- + + + + + +
{{lang 'config.templates'}} 
--}} + + + +
+ + + + {{#each showconfig.templates}} + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{#if imported}} + + + + + {{/if}} + + +
{{lang 'config.templatefile'}}
{{lang 'config.description'}}
{{lang 'config.inputfields'}} + + {{DataFields.length}} {{lang 'general.pcs'}} + + +
{{lang 'config.ccgplayout'}} +
+ + + +
+
{{lang 'config.dataformat'}} + +
{{lang 'config.webplayout'}} + +
{{lang 'config.stopmode'}} + +
{{lang 'config.coloraccent'}} + {{{generateColorAccents uicolor @index}}} +
{{lang 'config.updated'}} + + {{{generateTimestamp imported}}} + +
+ + + + + + + + + + + + +
+ + + +   + +
+
+ +
+ +
+ {{/each}} + + + +
+ {{#if showconfig.templates}} + + {{else}} + + {{lang 'config.addfirsttemplate'}} +
+ {{/if}} + + +
+ +

+ + + + + +
{{lang 'config.general'}} 
+
+
+
+ + + + + + + + + +
{{lang 'config.backgroundImage'}} + + + +
+
+
+

+ + + + + + + + + + + + + +
{{lang 'config.showextras'}} 
+
+ + +
+ +
+
+ + + + + + + + + + +
{{lang 'config.javascriptfile'}} + +
 
+
+ +
+
+ + + + {{#each showconfig.showExtras.CustomControls}} + +
+ +
+
+ + + + + + + + + + + + + + + + + + + {{#ifValue ftype "button"}} + + + + + + + + + + {{/ifValue}} + + + {{#ifValue ftype "togglebutton"}} + + + + + + + + + + {{/ifValue}} + + + {{#ifValue ftype "selectbutton"}} + + + + + + + + + + + + + + + + + + + + + + {{/ifValue}} + +
{{lang 'config.buttontype'}}{{ftype}}
{{lang 'config.functiondescription'}}
{{lang 'config.buttoncolor'}} + +
{{lang 'config.buttontext'}} + +
{{lang 'config.functionhandler'}}
{{lang 'config.buttontexts'}} + + +
{{lang 'config.functionhandler'}}
{{lang 'config.buttontext'}}
{{lang 'config.functionhandler'}}
{{lang 'config.defaultvalue'}}
{{lang 'config.options'}} + {{#each items}} + +
+ + {{/each}} + +
+ {{lang 'config.addnewtip'}} +
+ + + + + + +
+ +   + +
+
+ +
+
+ + + + + {{/each}} +
+ {{#if showconfig.showExtras.CustomControls}} + + {{else}} + + {{lang 'config.addfirstextra'}} +
+ {{/if}} + +
+ +
+
+
+ + + {{>footer}} + + +
+ + + + + \ No newline at end of file diff --git a/views/view-shows.handlebars b/views/view-shows.handlebars new file mode 100644 index 0000000..c2daaec --- /dev/null +++ b/views/view-shows.handlebars @@ -0,0 +1,101 @@ + +{{>copyright }} + + + + + + SPX {{SPX.title}} | {{lang 'pagetitle.selectshow'}} + + + + + + + + + + + + + + {{>projectForm}} +
+
+ {{>header page="shows"}} +
+
+
+
+ {{#if message}} +
{{message}}
+ {{/if}} + {{#if error}} +
{{error}}
+ {{/if}} + + + + + +
{{lang 'headline.select'}} 
+
+ + + + + + + +
+ + {{#ifGreater folders.length 5}} + + + {{/ifGreater}} +
+
+
+
+
+ + + +
+
+
+
+ {{>footer}} +
+ + + \ No newline at end of file